summaryrefslogtreecommitdiff
path: root/desktop/tree.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2011-11-10 13:07:47 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2011-11-10 13:07:47 +0000
commitdd6d1ce527ec4c8c1999f7fc646cea755ac00ca7 (patch)
tree3333e0c431665ecb19049b14b958bb05a9af9030 /desktop/tree.c
parent10237e0bde004c5a6db6674d7f521b67dbfde9b9 (diff)
downloadnetsurf-dd6d1ce527ec4c8c1999f7fc646cea755ac00ca7.tar.gz
netsurf-dd6d1ce527ec4c8c1999f7fc646cea755ac00ca7.tar.bz2
Make default hotlist folder persistent across sessions
svn path=/trunk/netsurf/; revision=13141
Diffstat (limited to 'desktop/tree.c')
-rw-r--r--desktop/tree.c31
1 files changed, 28 insertions, 3 deletions
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
@@ -1397,6 +1398,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.
*
* \param element The node element to update.
@@ -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;
+ }
}