diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2013-08-17 13:22:40 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2013-08-17 13:22:40 +0100 |
commit | e17e56b0cc56ab3de5b0734a2e5d6c5b90241ab4 (patch) | |
tree | d0fb0773114f6baaaea6c2bba8a71e1ece51ac80 /desktop/treeview.c | |
parent | 59ea55ef3d573decd77b281797e6c0a3add6f2e9 (diff) | |
download | netsurf-e17e56b0cc56ab3de5b0734a2e5d6c5b90241ab4.tar.gz netsurf-e17e56b0cc56ab3de5b0734a2e5d6c5b90241ab4.tar.bz2 |
Move drops over selection target top of selected run.
Diffstat (limited to 'desktop/treeview.c')
-rw-r--r-- | desktop/treeview.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/desktop/treeview.c b/desktop/treeview.c index b52c98a1a..bfef1cc86 100644 --- a/desktop/treeview.c +++ b/desktop/treeview.c @@ -1850,7 +1850,21 @@ static bool treeview_set_move_indicator(treeview *tree, bool need_redraw, node_y += (tree_g.line_height - treeview_res[TREE_RES_ARROW].height + 1) / 2; - switch (target->type) { + if (target->flags & TREE_NODE_SELECTED) { + /* Find top selected ancestor */ + while (target->parent && + target->parent->flags & TREE_NODE_SELECTED) { + target = target->parent; + } + + /* Find top ajdacent selected sibling */ + while (target->sibling_prev && + target->sibling_prev->flags & TREE_NODE_SELECTED) { + target = target->sibling_prev; + } + target_pos = TV_TARGET_ABOVE; + + } else switch (target->type) { case TREE_NODE_FOLDER: if (mouse_pos <= node_height / 4) { target_pos = TV_TARGET_ABOVE; |