summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2011-11-27 20:07:26 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2011-11-27 20:07:26 +0000
commitd169eefe5963b27a6e64fdfcfa34f59e22a27342 (patch)
tree246d60706506150d05be48644873a8771c801641 /desktop
parent714f07c48b31ddd5f87f0cef891fbba08164529d (diff)
downloadnetsurf-d169eefe5963b27a6e64fdfcfa34f59e22a27342.tar.gz
netsurf-d169eefe5963b27a6e64fdfcfa34f59e22a27342.tar.bz2
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
Diffstat (limited to 'desktop')
-rw-r--r--desktop/hotlist.c36
-rw-r--r--desktop/hotlist.h4
-rw-r--r--desktop/tree.c14
-rw-r--r--desktop/tree.h1
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
@@ -1654,6 +1654,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
*
* \param node the node to get the child of
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);