diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2013-06-04 15:03:07 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2013-06-04 15:03:07 +0100 |
commit | 23a0520b40a35e46aabcce5743603c3e26a74cd6 (patch) | |
tree | a1f8cf2b100217a6473d3d27401494a112b2ff77 | |
parent | 8692bb687697a2a5bcbeab84bae7b5d69a64f7f6 (diff) | |
download | netsurf-23a0520b40a35e46aabcce5743603c3e26a74cd6.tar.gz netsurf-23a0520b40a35e46aabcce5743603c3e26a74cd6.tar.bz2 |
Enable double click to launch from treeview.
-rw-r--r-- | desktop/treeview.c | 10 | ||||
-rw-r--r-- | desktop/treeview.h | 14 |
2 files changed, 15 insertions, 9 deletions
diff --git a/desktop/treeview.c b/desktop/treeview.c index 2fa65c84a..2e360e3b4 100644 --- a/desktop/treeview.c +++ b/desktop/treeview.c @@ -428,7 +428,6 @@ nserror treeview_delete_node(struct treeview *tree, struct treeview_node *n) { struct treeview_node_msg msg; msg.msg = TREE_MSG_NODE_DELETE; - msg.data.node_delete.node = n; /* Destroy children first */ while (n->children != NULL) { @@ -1116,11 +1115,14 @@ static bool treeview_node_mouse_action_cb(struct treeview_node *node, void *ctx) /* Clear any existing selection */ redraw |= treeview_clear_selection(ma->tree, &r); + /* Toggle node expansion */ if (node->flags & TREE_NODE_EXPANDED) { err = treeview_node_contract(ma->tree, node); } else { err = treeview_node_expand(ma->tree, node); } + + /* Set up redraw */ redraw = true; if (r.y0 > ma->current_y) r.y0 = ma->current_y; @@ -1128,11 +1130,15 @@ static bool treeview_node_mouse_action_cb(struct treeview_node *node, void *ctx) } else if ((node->type == TREE_NODE_ENTRY) && (ma->mouse & BROWSER_MOUSE_DOUBLE_CLICK) && click) { + struct treeview_node_msg msg; + msg.msg = TREE_MSG_NODE_LAUNCH; + msg.data.node_launch.mouse = ma->mouse; + /* Clear any existing selection */ redraw |= treeview_clear_selection(ma->tree, &r); /* Tell client an entry was launched */ - /* TODO */ + tree->callbacks->entry(msg, n->client_data); } else if (ma->mouse & BROWSER_MOUSE_PRESS_1 && !(node->flags & TREE_NODE_SELECTED) && diff --git a/desktop/treeview.h b/desktop/treeview.h index 38c22f2e3..d21a8a43b 100644 --- a/desktop/treeview.h +++ b/desktop/treeview.h @@ -39,19 +39,19 @@ enum treeview_relationship { enum treeview_msg { TREE_MSG_NODE_DELETE, - TREE_MSG_FIELD_EDIT + TREE_MSG_NODE_EDIT, + TREE_MSG_NODE_LAUNCH }; struct treeview_node_msg { enum treeview_msg msg; /**< The message type */ union { struct { - struct treeview_node *node; - } node_delete; + lwc_string *feild; /* The field being edited */ + const char *text; /* The proposed new value */ + } node_edit; /* Client may call treeview_update_node_* */ struct { - struct treeview_node *node; - lwc_string *feild; - const char *text; - } field_edit; + browser_mouse_state mouse; /* Button / modifier used */ + } node_launch; } data; /**< The message data. */ }; |