diff options
author | Richard Wilson <rjw@netsurf-browser.org> | 2006-07-16 16:10:43 +0000 |
---|---|---|
committer | Richard Wilson <rjw@netsurf-browser.org> | 2006-07-16 16:10:43 +0000 |
commit | 92949389760ddbc13d4f5b75ea77bba0003cf21a (patch) | |
tree | d56fcad0b4d3c172e3a9b80bfd9fc92f09827205 /riscos/cookies.c | |
parent | 7f75f866616443a9842a285b503253b253cda533 (diff) | |
download | netsurf-92949389760ddbc13d4f5b75ea77bba0003cf21a.tar.gz netsurf-92949389760ddbc13d4f5b75ea77bba0003cf21a.tar.bz2 |
Extent cookie_update API to allow notification of deleted domains. Fix nodes not being re-calculated.
svn path=/trunk/netsurf/; revision=2765
Diffstat (limited to 'riscos/cookies.c')
-rw-r--r-- | riscos/cookies.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/riscos/cookies.c b/riscos/cookies.c index 2830e1ec8..173f73d69 100644 --- a/riscos/cookies.c +++ b/riscos/cookies.c @@ -112,23 +112,25 @@ bool ro_gui_cookies_click(wimp_pointer *pointer) /** * Perform cookie addition * - * \param data Cookie data for a domain + * \param data Cookie data for a domain, or NULL * \return true (for urldb_iterate_entries) */ -bool cookies_update(const struct cookie_data *data) +bool cookies_update(const char *domain, const struct cookie_data *data) { struct node *parent; struct node *node = NULL; struct node *child; - const struct cookie_data *cookie; + struct node *add; + const struct cookie_data *cookie = NULL; - assert(data); + assert(domain); /* check if we're a domain, and add get the first cookie */ - for (cookie = data; cookie->prev; cookie = cookie->prev); + if (data) + for (cookie = data; cookie->prev; cookie = cookie->prev); if (!cookies_init) { - node = ro_gui_cookies_find(data->domain); + node = ro_gui_cookies_find(domain); if (node) { /* mark as deleted so we don't remove the cookies */ for (child = node->child; child; child = child->next) @@ -137,19 +139,27 @@ bool cookies_update(const struct cookie_data *data) tree_delete_node(cookies_tree, node->child, true); } + if (!data) { + if (!node) + return true; + tree_delete_node(cookies_tree, node, false); + tree_handle_node_changed(cookies_tree, + cookies_tree->root, true, false); + return true; + } } if (!node) { for (parent = cookies_tree->root->child; parent; parent = parent->next) { - if (strcmp(cookie->domain, parent->data.text) < 0) + if (strcmp(domain, parent->data.text) < 0) break; } if (!parent) { node = tree_create_folder_node(cookies_tree->root, - cookie->domain); + domain); } else { - node = tree_create_folder_node(NULL, data->domain); + node = tree_create_folder_node(NULL, domain); if (node) tree_link_node(parent, node, true); } @@ -158,8 +168,12 @@ bool cookies_update(const struct cookie_data *data) return true; node->editable = false; - for (; cookie; cookie = cookie->next) - tree_create_cookie_node(node, cookie); + for (; cookie; cookie = cookie->next) { + add = tree_create_cookie_node(node, cookie); + if (!cookies_init) + tree_handle_node_changed(cookies_tree, add, + true, false); + } if (!cookies_init) { tree_handle_node_changed(cookies_tree, node, true, false); |