summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-08-30 13:29:19 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2013-08-30 13:29:19 +0100
commit9a59103c6a83225b50e98651c1b377d535b808c8 (patch)
treed09fc5bcaed567677d541cb54b7025e75228c661 /desktop
parent09f5b0e95ffa3d40d1e07c5ba8be218de6676d73 (diff)
downloadnetsurf-9a59103c6a83225b50e98651c1b377d535b808c8.tar.gz
netsurf-9a59103c6a83225b50e98651c1b377d535b808c8.tar.bz2
Polish node deletion.
Diffstat (limited to 'desktop')
-rw-r--r--desktop/treeview.c28
-rw-r--r--desktop/treeview.h2
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 */