Gitweb links:
...log
http://git.netsurf-browser.org/netsurf.git/shortlog/7bd01a0e7504e0b44fdad...
...commit
http://git.netsurf-browser.org/netsurf.git/commit/7bd01a0e7504e0b44fdade4...
...tree
http://git.netsurf-browser.org/netsurf.git/tree/7bd01a0e7504e0b44fdade458...
The branch, master has been updated
via 7bd01a0e7504e0b44fdade4581e57cb00151566d (commit)
from 67066ce47c1f65ea6ba071068a78c29a7e3b63e5 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=7bd01a0e7504e0b44fd...
commit 7bd01a0e7504e0b44fdade4581e57cb00151566d
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Return key launches current selection.
diff --git a/desktop/treeview.c b/desktop/treeview.c
index 5b2d327..0e3880b 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -1454,6 +1454,59 @@ static bool treeview_delete_selection(treeview *tree, struct rect
*rect)
}
+struct treeview_launch_walk_data {
+ int selected_depth;
+ treeview *tree;
+};
+static nserror treeview_node_launch_walk_bwd_cb(treeview_node *n, void *ctx,
+ bool *end)
+{
+ struct treeview_launch_walk_data *lw = ctx;
+
+ if (n->type == TREE_NODE_FOLDER && n->flags == TREE_NODE_SELECTED) {
+ lw->selected_depth--;
+ }
+
+ return NSERROR_OK;
+}
+static nserror treeview_node_launch_walk_fwd_cb(treeview_node *n, void *ctx,
+ bool *skip_children, bool *end)
+{
+ struct treeview_launch_walk_data *lw = ctx;
+
+ if (n->type == TREE_NODE_FOLDER && n->flags & TREE_NODE_SELECTED) {
+ lw->selected_depth++;
+
+ } else if (n->type == TREE_NODE_ENTRY &&
+ (n->flags & TREE_NODE_SELECTED ||
+ lw->selected_depth > 0)) {
+ struct treeview_node_msg msg;
+ msg.msg = TREE_MSG_NODE_LAUNCH;
+ msg.data.node_launch.mouse = BROWSER_MOUSE_HOVER;
+ lw->tree->callbacks->entry(msg, n->client_data);
+ }
+
+ return NSERROR_OK;
+}
+/**
+ * Launch a selection.
+ */
+static nserror treeview_launch_selection(treeview *tree)
+{
+ struct treeview_launch_walk_data lw;
+
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ lw.selected_depth = 0;
+ lw.tree = tree;
+
+ return treeview_walk_internal(tree->root, false,
+ treeview_node_launch_walk_bwd_cb,
+ treeview_node_launch_walk_fwd_cb, &lw);
+}
+
+
/* Exported interface, documented in treeview.h */
bool treeview_keypress(treeview *tree, uint32_t key)
{
@@ -1482,7 +1535,7 @@ bool treeview_keypress(treeview *tree, uint32_t key)
break;
case KEY_CR:
case KEY_NL:
- /* TODO: Launch selection */
+ err = treeview_launch_selection(tree);
break;
case KEY_ESCAPE:
case KEY_CLEAR_SELECTION:
-----------------------------------------------------------------------
Summary of changes:
desktop/treeview.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 54 insertions(+), 1 deletions(-)
diff --git a/desktop/treeview.c b/desktop/treeview.c
index 5b2d327..0e3880b 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -1454,6 +1454,59 @@ static bool treeview_delete_selection(treeview *tree, struct rect
*rect)
}
+struct treeview_launch_walk_data {
+ int selected_depth;
+ treeview *tree;
+};
+static nserror treeview_node_launch_walk_bwd_cb(treeview_node *n, void *ctx,
+ bool *end)
+{
+ struct treeview_launch_walk_data *lw = ctx;
+
+ if (n->type == TREE_NODE_FOLDER && n->flags == TREE_NODE_SELECTED) {
+ lw->selected_depth--;
+ }
+
+ return NSERROR_OK;
+}
+static nserror treeview_node_launch_walk_fwd_cb(treeview_node *n, void *ctx,
+ bool *skip_children, bool *end)
+{
+ struct treeview_launch_walk_data *lw = ctx;
+
+ if (n->type == TREE_NODE_FOLDER && n->flags & TREE_NODE_SELECTED) {
+ lw->selected_depth++;
+
+ } else if (n->type == TREE_NODE_ENTRY &&
+ (n->flags & TREE_NODE_SELECTED ||
+ lw->selected_depth > 0)) {
+ struct treeview_node_msg msg;
+ msg.msg = TREE_MSG_NODE_LAUNCH;
+ msg.data.node_launch.mouse = BROWSER_MOUSE_HOVER;
+ lw->tree->callbacks->entry(msg, n->client_data);
+ }
+
+ return NSERROR_OK;
+}
+/**
+ * Launch a selection.
+ */
+static nserror treeview_launch_selection(treeview *tree)
+{
+ struct treeview_launch_walk_data lw;
+
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ lw.selected_depth = 0;
+ lw.tree = tree;
+
+ return treeview_walk_internal(tree->root, false,
+ treeview_node_launch_walk_bwd_cb,
+ treeview_node_launch_walk_fwd_cb, &lw);
+}
+
+
/* Exported interface, documented in treeview.h */
bool treeview_keypress(treeview *tree, uint32_t key)
{
@@ -1482,7 +1535,7 @@ bool treeview_keypress(treeview *tree, uint32_t key)
break;
case KEY_CR:
case KEY_NL:
- /* TODO: Launch selection */
+ err = treeview_launch_selection(tree);
break;
case KEY_ESCAPE:
case KEY_CLEAR_SELECTION:
--
NetSurf Browser