summaryrefslogtreecommitdiff
path: root/desktop/tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/tree.c')
-rw-r--r--desktop/tree.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/desktop/tree.c b/desktop/tree.c
index cc25405f4..df3cb92ca 100644
--- a/desktop/tree.c
+++ b/desktop/tree.c
@@ -99,10 +99,8 @@ void tree_handle_node_changed(struct tree *tree, struct node *node,
width = node->box.width;
height = node->box.height;
- if (recalculate_sizes)
+ if ((recalculate_sizes) || (expansion))
tree_recalculate_node(node, true);
- else if (expansion)
- tree_recalculate_node(node, false);
if ((node->box.height != height) || (expansion)) {
tree_recalculate_node_positions(tree->root);
tree_redraw_area(tree, 0, node->box.y, 16384, 16384);
@@ -172,6 +170,9 @@ void tree_recalculate_node(struct node *node, bool recalculate_sizes) {
}
} else {
if (recalculate_sizes)
+ for (element = &node->data; element; element = element->next)
+ tree_recalculate_node_element(element);
+ else
tree_recalculate_node_element(&node->data);
node->box.width = node->data.box.width;
node->box.height = node->data.box.height;
@@ -332,7 +333,10 @@ bool tree_handle_expansion(struct tree *tree, struct node *node, bool expanded,
node->expanded = expanded;
if (node->child)
tree_set_node_expanded(node->child, false);
- tree_recalculate_node(node, false);
+ if ((node->data.next) && (node->data.next->box.height == 0))
+ tree_recalculate_node(node, true);
+ else
+ tree_recalculate_node(node, false);
redraw = true;
}
if ((node->child) && (node->expanded))
@@ -993,7 +997,7 @@ struct node *tree_create_URL_node(struct node *parent, const char *title,
if (element) {
element->user_data = filetype;
element->type = NODE_ELEMENT_TEXT;
- element->text = squash_whitespace(url);
+ element->text = strdup(url);
}
element = tree_create_node_element(node, TREE_ELEMENT_ADDED);
if (element) {
@@ -1010,12 +1014,12 @@ struct node *tree_create_URL_node(struct node *parent, const char *title,
element->type = NODE_ELEMENT_TEXT;
element->user_data = visits;
}
+ element = tree_create_node_element(node, TREE_ELEMENT_THUMBNAIL);
+ if (element)
+ element->type = NODE_ELEMENT_THUMBNAIL;
tree_update_URL_node(node);
-
- node->expanded = true;
- tree_recalculate_node(node, true);
- node->expanded = false;
+ tree_recalculate_node(node, false);
return node;
}
@@ -1056,12 +1060,13 @@ struct node *tree_create_URL_node_brief(struct node *parent, const char *title,
element->type = NODE_ELEMENT_TEXT;
element->user_data = visit_date;
}
+ element = tree_create_node_element(node, TREE_ELEMENT_THUMBNAIL);
+ if (element) {
+ element->type = NODE_ELEMENT_THUMBNAIL;
+ }
tree_update_URL_node(node);
-
- node->expanded = true;
- tree_recalculate_node(node, true);
- node->expanded = false;
+ tree_recalculate_node(node, false);
return node;
}