summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-06-04 15:03:07 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2013-06-04 15:03:07 +0100
commit23a0520b40a35e46aabcce5743603c3e26a74cd6 (patch)
treea1f8cf2b100217a6473d3d27401494a112b2ff77
parent8692bb687697a2a5bcbeab84bae7b5d69a64f7f6 (diff)
downloadnetsurf-23a0520b40a35e46aabcce5743603c3e26a74cd6.tar.gz
netsurf-23a0520b40a35e46aabcce5743603c3e26a74cd6.tar.bz2
Enable double click to launch from treeview.
-rw-r--r--desktop/treeview.c10
-rw-r--r--desktop/treeview.h14
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. */
};