From dd6d1ce527ec4c8c1999f7fc646cea755ac00ca7 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 10 Nov 2011 13:07:47 +0000 Subject: Make default hotlist folder persistent across sessions svn path=/trunk/netsurf/; revision=13141 --- desktop/hotlist.c | 2 +- desktop/tree.c | 31 ++++++++++++++++++++++++++++--- desktop/tree.h | 3 ++- desktop/tree_url_node.c | 21 +++++++++++++++------ 4 files changed, 46 insertions(+), 11 deletions(-) (limited to 'desktop') diff --git a/desktop/hotlist.c b/desktop/hotlist.c index 681456517..dadf49bb6 100644 --- a/desktop/hotlist.c +++ b/desktop/hotlist.c @@ -479,6 +479,6 @@ bool hotlist_set_default_folder(bool clear) tree_clear_default_folder_node(hotlist_tree); return true; } else { - return tree_set_default_folder_node(hotlist_tree); + return tree_set_default_folder_node(hotlist_tree, NULL); } } diff --git a/desktop/tree.c b/desktop/tree.c index 1da1f7248..1b37b21a8 100644 --- a/desktop/tree.c +++ b/desktop/tree.c @@ -118,6 +118,7 @@ struct node { bool selected; /**< Whether the node is selected */ bool expanded; /**< Whether the node is expanded */ bool folder; /**< Whether the node is a folder */ + bool def_folder; /**< Whether the node is the default folder */ bool retain_in_memory; /**< Whether the node remains in memory after deletion */ bool deleted; /**< Whether the node is currently @@ -1396,6 +1397,18 @@ bool tree_node_is_folder(struct node *node) } +/** + * Returns true if the node is the default folder for a tree + * + * \param node the node to be checked + * \return true if the node is a default folder, false otherwise + */ +bool tree_node_is_default(struct node *node) +{ + return node->def_folder; +} + + /** * Update the text of a node element if it has changed. * @@ -1567,13 +1580,18 @@ struct node *tree_get_default_folder_node(struct tree *tree) * Set the default node of a tree to the selected node * * \param tree the tree to set the default node of + * \param node the node to set as default (NULL for selected node) * \return success */ -bool tree_set_default_folder_node(struct tree *tree) +bool tree_set_default_folder_node(struct tree *tree, struct node *node) { struct node *sel_node; - sel_node = tree_get_selected_node(tree->root); + if (node == NULL) { + sel_node = tree_get_selected_node(tree->root); + } else { + sel_node = node; + } if((sel_node == NULL) || (tree_node_is_folder(sel_node) == false)) { @@ -1581,6 +1599,7 @@ bool tree_set_default_folder_node(struct tree *tree) } tree->def_folder = sel_node; + sel_node->def_folder = true; return true; } @@ -1592,7 +1611,13 @@ bool tree_set_default_folder_node(struct tree *tree) */ void tree_clear_default_folder_node(struct tree *tree) { - tree->def_folder = NULL; + struct node *def_node = NULL; + def_node = tree_get_default_folder_node(tree); + + if (def_node != NULL) { + tree->def_folder = NULL; + def_node->def_folder = false; + } } diff --git a/desktop/tree.h b/desktop/tree.h index dc54e5e54..ed71f911e 100644 --- a/desktop/tree.h +++ b/desktop/tree.h @@ -166,6 +166,7 @@ bool tree_get_redraw(struct tree *tree); bool tree_node_has_selection(struct node *node); bool tree_node_is_deleted(struct node *node); bool tree_node_is_folder(struct node *node); +bool tree_node_is_default(struct node *node); void tree_update_node_element(struct tree *tree, struct node_element *element, const char *text, void *bitmap); bool tree_update_element_text(struct tree *tree, struct node_element *element, char *text); @@ -175,7 +176,7 @@ bool tree_is_edited(struct tree *tree); tree_drag_type tree_drag_status(struct tree *tree); struct node *tree_get_default_folder_node(struct tree *tree); -bool tree_set_default_folder_node(struct tree *tree); +bool tree_set_default_folder_node(struct tree *tree, struct node *node); void tree_clear_default_folder_node(struct tree *tree); /* functions for traversing the tree */ diff --git a/desktop/tree_url_node.c b/desktop/tree_url_node.c index c1e72bfc4..fee361b85 100644 --- a/desktop/tree_url_node.c +++ b/desktop/tree_url_node.c @@ -576,6 +576,7 @@ static void tree_url_load_directory(xmlNode *ul, struct tree *tree, char *title; struct node *dir; xmlNode *xmlnode; + xmlChar *id; assert(ul != NULL); assert(directory != NULL); @@ -595,6 +596,7 @@ static void tree_url_load_directory(xmlNode *ul, struct tree *tree, } else if (strcmp((const char *)xmlnode->name, "h4") == 0) { /* directory */ + bool dir_is_default = false; title = (char *) xmlNodeGetContent(xmlnode ); if (!title) { warn_user("TreeLoadError", "(Empty

" @@ -613,6 +615,13 @@ static void tree_url_load_directory(xmlNode *ul, struct tree *tree, warn_user("TreeLoadError", "(Expected " "