summaryrefslogtreecommitdiff
path: root/desktop/treeview.c
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-08-17 13:22:40 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2013-08-17 13:22:40 +0100
commite17e56b0cc56ab3de5b0734a2e5d6c5b90241ab4 (patch)
treed0fb0773114f6baaaea6c2bba8a71e1ece51ac80 /desktop/treeview.c
parent59ea55ef3d573decd77b281797e6c0a3add6f2e9 (diff)
downloadnetsurf-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.c16
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;