From d169eefe5963b27a6e64fdfcfa34f59e22a27342 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Sun, 27 Nov 2011 20:07:26 +0000 Subject: [PATCH] Allow new (blank) hotlist entries to be created in the currently-selected folder (if there is one) as this gives the user more control where their additions are being created. Functionality can be enabled/disabled by passing true/false to hotlist_add_folder/hotlist_add_entry. svn path=/trunk/netsurf/; revision=13185 --- desktop/hotlist.c | 36 ++++++++++++++++++++++++++++++------ desktop/hotlist.h | 4 ++-- desktop/tree.c | 14 +++++++++++++- desktop/tree.h | 1 + 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/desktop/hotlist.c b/desktop/hotlist.c index dadf49bb6..643102243 100644 --- a/desktop/hotlist.c +++ b/desktop/hotlist.c @@ -367,10 +367,12 @@ void hotlist_collapse_addresses(void) /** * Add a folder node. + * + * \param selected create the folder in the currently-selected node */ -void hotlist_add_folder(void) +void hotlist_add_folder(bool selected) { - struct node *node, *parent; + struct node *node, *parent = NULL; struct node_element *element; char *title = strdup("Untitled"); @@ -381,7 +383,17 @@ void hotlist_add_folder(void) } creating_node = true; - parent = tree_get_default_folder_node(hotlist_tree); + if (selected == true) { + parent = tree_get_selected_node(tree_get_root(hotlist_tree)); + if (parent && (tree_node_is_folder == false)) { + parent = tree_node_get_parent(parent); + } + } + + if (parent == NULL) { + parent = tree_get_default_folder_node(hotlist_tree); + } + node = tree_create_folder_node(hotlist_tree, parent, title, true, false, false); if (node == NULL) { @@ -396,13 +408,25 @@ void hotlist_add_folder(void) /** * Add an entry node. + * + * \param selected add the entry in the currently-selected node */ -void hotlist_add_entry(void) +void hotlist_add_entry(bool selected) { struct node *node, *parent; creating_node = true; - parent = tree_get_default_folder_node(hotlist_tree); + if (selected == true) { + parent = tree_get_selected_node(tree_get_root(hotlist_tree)); + if (parent && (tree_node_is_folder == false)) { + parent = tree_node_get_parent(parent); + } + } + + if (parent == NULL) { + parent = tree_get_default_folder_node(hotlist_tree); + } + node = tree_create_URL_node(hotlist_tree, parent, "Address", "Untitled", hotlist_node_callback, NULL); @@ -433,7 +457,7 @@ void hotlist_add_page(const char *url) } /** - * Adds the currently viewed page to the hotlist at the given cooridinates + * Adds the currently viewed page to the hotlist at the given co-ordinates * \param url url of the page * \param x X cooridinate with respect to tree origin * \param y Y cooridinate with respect to tree origin diff --git a/desktop/hotlist.h b/desktop/hotlist.h index 544cd02d0..6092291db 100644 --- a/desktop/hotlist.h +++ b/desktop/hotlist.h @@ -53,8 +53,8 @@ void hotlist_expand_addresses(void); void hotlist_collapse_all(void); void hotlist_collapse_directories(void); void hotlist_collapse_addresses(void); -void hotlist_add_folder(void); -void hotlist_add_entry(void); +void hotlist_add_folder(bool selected); +void hotlist_add_entry(bool selected); void hotlist_add_page(const char *url); void hotlist_add_page_xy(const char *url, int x, int y); void hotlist_launch_selected(bool tabs); diff --git a/desktop/tree.c b/desktop/tree.c index 097408e87..7818b376d 100644 --- a/desktop/tree.c +++ b/desktop/tree.c @@ -132,7 +132,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 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 @@ -1653,6 +1653,18 @@ void tree_clear_default_folder_node(struct tree *tree) } +/** + * Returns the parent of a node + * + * \param node the node to get the parent of + * \return the node's parent + */ +struct node *tree_node_get_parent(struct node *node) +{ + return node->parent; +} + + /** * Returns the first child of a node * diff --git a/desktop/tree.h b/desktop/tree.h index 1f3ee0c74..b0b7d2cc1 100644 --- a/desktop/tree.h +++ b/desktop/tree.h @@ -181,6 +181,7 @@ 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 */ +struct node *tree_node_get_parent(struct node *node); struct node *tree_node_get_child(struct node *node); struct node *tree_node_get_next(struct node *node);