From bc37046c6c3ef8004ccb9fb11de4bfce1e672a40 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Mon, 1 Jul 2013 15:10:45 +0100 Subject: Pass drag state to core window user. --- desktop/core_window.h | 14 ++++++++++++++ desktop/tree.c | 23 +++++++++++++++++++++-- desktop/treeview.c | 7 +++++++ 3 files changed, 42 insertions(+), 2 deletions(-) (limited to 'desktop') diff --git a/desktop/core_window.h b/desktop/core_window.h index ad2319b32..b7f1ba32e 100644 --- a/desktop/core_window.h +++ b/desktop/core_window.h @@ -27,6 +27,11 @@ struct core_window; +typedef enum { + CORE_WINDOW_DRAG_NONE, + CORE_WINDOW_DRAG_SELECTION +} core_window_drag_status; + /** Callbacks to achieve various core window functionality. */ struct core_window_callback_table { /** Request a redraw of the window. */ @@ -47,6 +52,15 @@ struct core_window_callback_table { /** Get window viewport dimensions */ void (*get_window_dimensions)(struct core_window *cw, int *width, int *height); + + /** + * Inform corewindow owner of drag status + * + * \param cw the core window object + * \param ds the current drag status + */ + void (*drag_status)(struct core_window *cw, + core_window_drag_status ds); }; diff --git a/desktop/tree.c b/desktop/tree.c index a0640f6a5..46910e7de 100644 --- a/desktop/tree.c +++ b/desktop/tree.c @@ -201,15 +201,34 @@ static void treeview_test_scroll_visible(struct core_window *cw, struct rect r) } static void treeview_test_get_window_dimensions(struct core_window *cw, - int *width, int *height) + int *width, int *height) { } +static void treeview_test_drag_status(struct core_window *cw, + core_window_drag_status ds) +{ + struct tree *tree = (struct tree *)cw; + + switch (ds) { + case CORE_WINDOW_DRAG_NONE: + tree->drag = TREE_NO_DRAG; + break; + + case CORE_WINDOW_DRAG_SELECTION: + tree->drag = TREE_SELECT_DRAG; + break; + default: + break; + } +} + struct core_window_callback_table cw_t = { .redraw_request = treeview_test_redraw_request, .update_size = treeview_test_update_size, .scroll_visible = treeview_test_scroll_visible, - .get_window_dimensions = treeview_test_get_window_dimensions + .get_window_dimensions = treeview_test_get_window_dimensions, + .drag_status = treeview_test_drag_status }; static bool treeview_test_init(struct tree *tree) diff --git a/desktop/treeview.c b/desktop/treeview.c index 3035f9e76..1a3530c8a 100644 --- a/desktop/treeview.c +++ b/desktop/treeview.c @@ -1395,8 +1395,13 @@ static bool treeview_node_mouse_action_cb(struct treeview_node *node, void *ctx) ma->tree->drag.section == TV_NODE_SECTION_NONE) { ma->tree->drag.type = TV_DRAG_SELECTION; + ma->tree->cw_t->drag_status(ma->tree->cw_h, + CORE_WINDOW_DRAG_SELECTION); + } else if (ma->mouse & BROWSER_MOUSE_DRAG_2) { ma->tree->drag.type = TV_DRAG_SELECTION; + ma->tree->cw_t->drag_status(ma->tree->cw_h, + CORE_WINDOW_DRAG_SELECTION); } if (ma->tree->drag.start_node != NULL && @@ -1509,6 +1514,8 @@ void treeview_mouse_action(struct treeview *tree, treeview_commit_selection_drag(tree); tree->drag.type = TV_DRAG_NONE; tree->drag.start_node = NULL; + + tree->cw_t->drag_status(tree->cw_h, CORE_WINDOW_DRAG_NONE); return; } -- cgit v1.2.3