diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2013-08-30 13:29:19 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2013-08-30 13:29:19 +0100 |
commit | 9a59103c6a83225b50e98651c1b377d535b808c8 (patch) | |
tree | d09fc5bcaed567677d541cb54b7025e75228c661 | |
parent | 09f5b0e95ffa3d40d1e07c5ba8be218de6676d73 (diff) | |
download | netsurf-9a59103c6a83225b50e98651c1b377d535b808c8.tar.gz netsurf-9a59103c6a83225b50e98651c1b377d535b808c8.tar.bz2 |
Polish node deletion.
-rw-r--r-- | desktop/treeview.c | 28 | ||||
-rw-r--r-- | desktop/treeview.h | 2 |
2 files changed, 21 insertions, 9 deletions
diff --git a/desktop/treeview.c b/desktop/treeview.c index 20694bf68..dd4efcd3c 100644 --- a/desktop/treeview.c +++ b/desktop/treeview.c @@ -1066,6 +1066,7 @@ static nserror treeview_delete_node_internal(treeview *tree, treeview_node *n, /* Inform front end of change in dimensions */ if (tree->root != NULL && p != NULL && p->flags & TREE_NODE_EXPANDED && + nd.h_reduction > 0 && !(flags & TREE_OPTION_SUPPRESS_RESIZE)) { tree->cw_t->update_size(tree->cw_h, -1, tree->root->height); @@ -1183,7 +1184,6 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n, nserror err; struct rect r; treeview_node *p; - int h; assert(tree != NULL); assert(n != NULL); @@ -1197,16 +1197,21 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n, if (err != NSERROR_OK) return err; - h = tree->root->height; if (tree->flags & TREEVIEW_DEL_EMPTY_DIRS) { + int h = tree->root->height; /* Delete any empty nodes */ err = treeview_delete_empty_nodes(tree, false); if (err != NSERROR_OK) return err; - } - /* Inform front end of change in dimensions */ - if (tree->root->height != h && !(flags & TREE_OPTION_SUPPRESS_RESIZE)) { - tree->cw_t->update_size(tree->cw_h, -1, tree->root->height); + + /* Inform front end of change in dimensions */ + if (tree->root->height != h) { + r.y0 = 0; + if (!(flags & TREE_OPTION_SUPPRESS_RESIZE)) { + tree->cw_t->update_size(tree->cw_h, -1, + tree->root->height); + } + } } /* Redraw */ @@ -2461,9 +2466,16 @@ bool treeview_keypress(treeview *tree, uint32_t key) redraw = treeview_delete_selection(tree, &r); if (tree->flags & TREEVIEW_DEL_EMPTY_DIRS) { + int h = tree->root->height; /* Delete any empty nodes */ - err = treeview_delete_empty_nodes(tree, true); - r.y0 = 0; + err = treeview_delete_empty_nodes(tree, false); + + /* Inform front end of change in dimensions */ + if (tree->root->height != h) { + r.y0 = 0; + tree->cw_t->update_size(tree->cw_h, -1, + tree->root->height); + } } break; case KEY_CR: diff --git a/desktop/treeview.h b/desktop/treeview.h index 33c4c5018..b4a028fa4 100644 --- a/desktop/treeview.h +++ b/desktop/treeview.h @@ -48,7 +48,7 @@ typedef enum { TREE_OPTION_NONE = (0), /* No flags set */ TREE_OPTION_SUPPRESS_RESIZE = (1 << 0), /* Suppress callback */ TREE_OPTION_SUPPRESS_REDRAW = (1 << 1) /* Suppress callback */ -} treeview_node_options_flags; /**< Node creation settings */ +} treeview_node_options_flags; /**< Node change handling options */ typedef enum { TREEVIEW_NO_FLAGS = (0), /**< No flags set */ |