summaryrefslogtreecommitdiff
path: root/desktop/treeview.c
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-08-17 13:40:05 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2013-08-17 13:40:05 +0100
commitd1cd95032702aa4db940f26829db650bd8ac8946 (patch)
treebd8296fb761aabb6581033cd14a122315c7ba34b /desktop/treeview.c
parente1468a78df6bd0addc212961ef9c43d546155032 (diff)
downloadnetsurf-d1cd95032702aa4db940f26829db650bd8ac8946.tar.gz
netsurf-d1cd95032702aa4db940f26829db650bd8ac8946.tar.bz2
Improve keyboard nav slightly.
Diffstat (limited to 'desktop/treeview.c')
-rw-r--r--desktop/treeview.c111
1 files changed, 56 insertions, 55 deletions
diff --git a/desktop/treeview.c b/desktop/treeview.c
index f52068e82..49402ff8e 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -1740,10 +1740,9 @@ static bool treeview_keyboard_navigation(treeview *tree, uint32_t key,
.n_selected = 0,
.prev_n_selected = 0
};
+ int h = tree->root->height;
bool redraw = false;
- rect->y1 = tree->root->height;
-
/* Fill out the nav. state struct, by examining the current selection
* state */
treeview_walk_internal(tree->root, false, NULL,
@@ -1818,14 +1817,68 @@ static bool treeview_keyboard_navigation(treeview *tree, uint32_t key,
rect->x0 = 0;
rect->y0 = 0;
rect->x1 = REDRAW_MAX;
- if (rect->y1 < tree->root->height)
+ if (tree->root->height > h)
rect->y1 = tree->root->height;
+ else
+ rect->y1 = h;
redraw = true;
return redraw;
}
+/* Exported interface, documented in treeview.h */
+bool treeview_keypress(treeview *tree, uint32_t key)
+{
+ struct rect r; /**< Redraw rectangle */
+ bool redraw = false;
+ nserror err;
+
+ assert(tree != NULL);
+
+ switch (key) {
+ case KEY_SELECT_ALL:
+ redraw = treeview_select_all(tree, &r);
+ break;
+ case KEY_COPY_SELECTION:
+ /* TODO: Copy selection as text */
+ break;
+ case KEY_DELETE_LEFT:
+ case KEY_DELETE_RIGHT:
+ redraw = treeview_delete_selection(tree, &r);
+
+ if (tree->flags & TREEVIEW_DEL_EMPTY_DIRS) {
+ /* Delete any empty nodes */
+ err = treeview_delete_empty_nodes(tree, true);
+ r.y0 = 0;
+ }
+ break;
+ case KEY_CR:
+ case KEY_NL:
+ err = treeview_launch_selection(tree);
+ break;
+ case KEY_ESCAPE:
+ case KEY_CLEAR_SELECTION:
+ redraw = treeview_clear_selection(tree, &r);
+ break;
+ case KEY_LEFT:
+ case KEY_RIGHT:
+ case KEY_UP:
+ case KEY_DOWN:
+ redraw = treeview_keyboard_navigation(tree, key, &r);
+ break;
+ default:
+ return false;
+ }
+
+ if (redraw) {
+ tree->cw_t->redraw_request(tree->cw_h, r);
+ }
+
+ return true;
+}
+
+
/**
* Set the drag&drop drop indicator
*
@@ -1956,58 +2009,6 @@ static bool treeview_set_move_indicator(treeview *tree, bool need_redraw,
}
-/* Exported interface, documented in treeview.h */
-bool treeview_keypress(treeview *tree, uint32_t key)
-{
- struct rect r; /**< Redraw rectangle */
- bool redraw = false;
- nserror err;
-
- assert(tree != NULL);
-
- switch (key) {
- case KEY_SELECT_ALL:
- redraw = treeview_select_all(tree, &r);
- break;
- case KEY_COPY_SELECTION:
- /* TODO: Copy selection as text */
- break;
- case KEY_DELETE_LEFT:
- case KEY_DELETE_RIGHT:
- redraw = treeview_delete_selection(tree, &r);
-
- if (tree->flags & TREEVIEW_DEL_EMPTY_DIRS) {
- /* Delete any empty nodes */
- err = treeview_delete_empty_nodes(tree, true);
- r.y0 = 0;
- }
- break;
- case KEY_CR:
- case KEY_NL:
- err = treeview_launch_selection(tree);
- break;
- case KEY_ESCAPE:
- case KEY_CLEAR_SELECTION:
- redraw = treeview_clear_selection(tree, &r);
- break;
- case KEY_LEFT:
- case KEY_RIGHT:
- case KEY_UP:
- case KEY_DOWN:
- redraw = treeview_keyboard_navigation(tree, key, &r);
- break;
- default:
- return false;
- }
-
- if (redraw) {
- tree->cw_t->redraw_request(tree->cw_h, r);
- }
-
- return true;
-}
-
-
struct treeview_mouse_action {
treeview *tree;
browser_mouse_state mouse;