summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-05-07 14:56:42 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2013-05-07 14:56:42 +0100
commit8b6665fe0383fd565ac7d7cd6a2bf6243ebc9937 (patch)
treeffa2ae68c2f87f19cbbd13b7e79a632a682202ee /desktop
parent3afd9c97310d58c0c6588d18887244328590731e (diff)
parentf4af0d86e240948bb37a1d318d4e2559f04c6a79 (diff)
downloadnetsurf-8b6665fe0383fd565ac7d7cd6a2bf6243ebc9937.tar.gz
netsurf-8b6665fe0383fd565ac7d7cd6a2bf6243ebc9937.tar.bz2
Merge branch 'master' of git://git.netsurf-browser.org/netsurf into tlsa/selection-search-refactor
Diffstat (limited to 'desktop')
-rw-r--r--desktop/browser.c2
-rw-r--r--desktop/cookies.c48
-rw-r--r--desktop/history_global_core.c23
-rw-r--r--desktop/hotlist.c40
-rw-r--r--desktop/sslcert.c15
-rw-r--r--desktop/tree.c106
-rw-r--r--desktop/tree.h27
-rw-r--r--desktop/tree_url_node.c47
8 files changed, 147 insertions, 161 deletions
diff --git a/desktop/browser.c b/desktop/browser.c
index a02807eeb..12cc9c830 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -2889,6 +2889,8 @@ void browser_window_redraw_rect(struct browser_window *bw, int x, int y,
void browser_window_page_drag_start(struct browser_window *bw, int x, int y)
{
+ assert(bw != NULL);
+
browser_window_set_drag_type(bw, DRAGGING_PAGE_SCROLL, NULL);
bw->drag_start_x = x;
diff --git a/desktop/cookies.c b/desktop/cookies.c
index 581e1cc5b..197b3fbd1 100644
--- a/desktop/cookies.c
+++ b/desktop/cookies.c
@@ -264,19 +264,12 @@ static struct node *cookies_create_cookie_node(struct node *parent,
const struct cookie_data *data)
{
struct node *node;
- char *name;
- name = strdup(data->name);
- if (name == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- return NULL;
- }
-
- node = tree_create_leaf_node(cookies_tree, NULL, name,
+ node = tree_create_leaf_node(cookies_tree,
+ NULL,
+ data->name,
false, false, false);
if (node == NULL) {
- free(name);
return NULL;
}
@@ -329,44 +322,33 @@ static void cookies_schedule_callback(const void *scheduled_data)
const struct cookie_data *data = scheduled_data;
struct node *node = NULL;
struct node *cookie_node = NULL;
- char *domain_cp;
assert(data != NULL);
node = cookies_find(cookies_tree_root, data->domain);
if (node == NULL) {
- domain_cp = strdup(data->domain);
- if (domain_cp == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- return;
- }
- /* ownership of domain_cp passed to tree, if node creation
- * does not fail */
node = tree_create_folder_node(cookies_tree,
- cookies_tree_root, domain_cp,
+ cookies_tree_root,
+ data->domain,
false, false, false);
if (node != NULL) {
- tree_set_node_user_callback(node, cookies_node_callback,
+ tree_set_node_user_callback(node,
+ cookies_node_callback,
NULL);
tree_set_node_icon(cookies_tree, node, folder_icon);
-
- } else {
- free(domain_cp);
}
}
- if (node == NULL)
- return;
-
- cookie_node = cookies_find(node, data->name);
- if (cookie_node == NULL)
- cookies_create_cookie_node(node, data);
- else
- cookies_update_cookie_node(cookie_node, data);
+ if (node != NULL) {
+ cookie_node = cookies_find(node, data->name);
+ if (cookie_node == NULL) {
+ cookies_create_cookie_node(node, data);
+ } else {
+ cookies_update_cookie_node(cookie_node, data);
+ }
- return;
+ }
}
/**
diff --git a/desktop/history_global_core.c b/desktop/history_global_core.c
index 3222dc7b8..2a941e05d 100644
--- a/desktop/history_global_core.c
+++ b/desktop/history_global_core.c
@@ -175,33 +175,24 @@ static bool history_global_initialise_node(const char *title,
time_t base, int days_back)
{
struct tm *full_time;
- char *buffer;
struct node *node;
base += days_back * 60 * 60 * 24;
if (title == NULL) {
full_time = localtime(&base);
- buffer = strdup(messages_get(weekday_msg_name[full_time->tm_wday]));
- } else {
- buffer = strdup(title);
+ title = messages_get(weekday_msg_name[full_time->tm_wday]);
}
- if (buffer == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- return false;
- }
-
- node = tree_create_folder_node(NULL, NULL, buffer,
- false, true, true);
+ node = tree_create_folder_node(NULL, NULL, title, false, true, true);
if (node == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- free(buffer);
+ warn_user(messages_get_errorcode(NSERROR_NOMEM), 0);
return false;
}
- if (folder_icon != NULL)
+
+ if (folder_icon != NULL) {
tree_set_node_icon(global_history_tree, node, folder_icon);
+ }
+
tree_set_node_user_callback(node, history_global_node_callback, NULL);
global_history_base_node[global_history_base_node_count] = node;
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index e2386fc8e..20cc8ea26 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -121,7 +121,6 @@ bool hotlist_initialise(struct tree *tree, const char *hotlist_path,
{
struct node *node;
const struct url_data *url_data;
- char *name;
int hlst_loop;
/* Either load or create a hotlist */
@@ -143,18 +142,15 @@ bool hotlist_initialise(struct tree *tree, const char *hotlist_path,
return true;
}
-
/* failed to load hotlist file, use default list */
- name = strdup("NetSurf");
- if (name == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- return false;
- }
- node = tree_create_folder_node(hotlist_tree, hotlist_tree_root,
- name, true, false, false);
+ node = tree_create_folder_node(hotlist_tree,
+ hotlist_tree_root,
+ messages_get("NetSurf"),
+ true,
+ false,
+ false);
if (node == NULL) {
- free(name);
+ warn_user(messages_get_errorcode(NSERROR_NOMEM), 0);
return false;
}
@@ -373,14 +369,7 @@ void hotlist_collapse_addresses(void)
void hotlist_add_folder(bool selected)
{
struct node *node, *parent = NULL;
- struct node_element *element;
- char *title = strdup("Untitled");
- if (title == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- return;
- }
creating_node = true;
if (selected == true) {
@@ -394,16 +383,21 @@ void hotlist_add_folder(bool selected)
parent = tree_get_default_folder_node(hotlist_tree);
}
- node = tree_create_folder_node(hotlist_tree, parent, title,
- true, false, false);
+ node = tree_create_folder_node(hotlist_tree,
+ parent,
+ messages_get("Untitled"),
+ true,
+ false,
+ false);
if (node == NULL) {
- free(title);
+ warn_user(messages_get_errorcode(NSERROR_NOMEM), 0);
return;
}
+
tree_set_node_user_callback(node, hotlist_node_callback, NULL);
tree_set_node_icon(hotlist_tree, node, folder_icon);
- element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
- tree_start_edit(hotlist_tree, element);
+ tree_start_edit(hotlist_tree,
+ tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL));
}
/**
diff --git a/desktop/sslcert.c b/desktop/sslcert.c
index b7a424465..2b4d726e0 100644
--- a/desktop/sslcert.c
+++ b/desktop/sslcert.c
@@ -119,19 +119,22 @@ static node_callback_resp sslcert_node_callback(void *user_data,
static struct node *sslcert_create_node(const struct ssl_cert_info *cert)
{
- struct node *node;
+ struct node *node = NULL;
struct node_element *element;
char *text;
text = messages_get_buff("SSL_Certificate_Subject", cert->subject);
- if (text == NULL)
- return NULL;
-
- node = tree_create_leaf_node(NULL, NULL, text, false, false, false);
- if (node == NULL) {
+ if (text != NULL) {
+ node = tree_create_leaf_node(NULL,
+ NULL,
+ text,
+ false, false, false);
free(text);
+ }
+ if (node == NULL) {
return NULL;
}
+
tree_set_node_user_callback(node, sslcert_node_callback, NULL);
/* add issuer node */
diff --git a/desktop/tree.c b/desktop/tree.c
index af64be83b..c62793e02 100644
--- a/desktop/tree.c
+++ b/desktop/tree.c
@@ -117,7 +117,7 @@ struct node_element {
struct node *parent; /**< Parent node */
node_element_type type; /**< Element type */
struct node_element_box box; /**< Element bounding box */
- const char *text; /**< Text for the element */
+ char *text; /**< Text for the element */
void *bitmap; /**< Bitmap for the element */
struct node_element *next; /**< Next node element */
unsigned int flag; /**< Client specified flag for data
@@ -233,26 +233,19 @@ struct tree *tree_create(unsigned int flags,
const struct treeview_table *callbacks, void *client_data)
{
struct tree *tree;
- char *title;
tree = calloc(sizeof(struct tree), 1);
if (tree == NULL) {
LOG(("calloc failed"));
- warn_user("NoMemory", 0);
+ warn_user(messages_get_errorcode(NSERROR_NOMEM), 0);
return NULL;
}
- title = strdup("Root");
- if (title == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- free(tree);
- return NULL;
- }
- tree->root = tree_create_folder_node(NULL, NULL, title,
+ tree->root = tree_create_folder_node(NULL,
+ NULL,
+ messages_get("Root"),
false, false, false);
if (tree->root == NULL) {
- free(title);
free(tree);
return NULL;
}
@@ -553,18 +546,7 @@ static void tree_recalculate_node_sizes(struct tree *tree, struct node *node,
}
-/**
- * Creates a folder node with the specified title, and optionally links it into
- * the tree.
- *
- * \param tree the owner tree of 'parent', may be NULL
- * \param parent the parent node, or NULL not to link
- * \param title the node title (not copied, used directly)
- * \param editable if true, the node title will be editable
- * \param retain_in_memory if true, the node will stay in memory after deletion
- * \param deleted if true, the node is created with the deleted flag
- * \return the newly created node.
- */
+/* exported interface documented in desktop/tree.h */
struct node *tree_create_folder_node(struct tree *tree, struct node *parent,
const char *title, bool editable, bool retain_in_memory,
bool deleted)
@@ -575,16 +557,20 @@ struct node *tree_create_folder_node(struct tree *tree, struct node *parent,
node = calloc(sizeof(struct node), 1);
if (node == NULL) {
- LOG(("calloc failed"));
- warn_user("NoMemory", 0);
return NULL;
}
+
+ node->data.text = strdup(title);
+ if (node->data.text == NULL) {
+ free(node);
+ return NULL;
+ }
+
node->folder = true;
node->retain_in_memory = retain_in_memory;
node->deleted = deleted;
node->data.parent = node;
node->data.type = NODE_ELEMENT_TEXT;
- node->data.text = title;
node->data.flag = TREE_ELEMENT_TITLE;
node->data.editable = editable;
node->sort = NULL;
@@ -592,25 +578,14 @@ struct node *tree_create_folder_node(struct tree *tree, struct node *parent,
node->previous = NULL;
tree_recalculate_node_sizes(tree, node, true);
- if (parent != NULL)
+ if (parent != NULL) {
tree_link_node(tree, parent, node, false);
+ }
return node;
}
-
-/**
- * Creates a leaf node with the specified title, and optionally links it into
- * the tree.
- *
- * \param tree the owner tree of 'parent', may be NULL
- * \param parent the parent node, or NULL not to link
- * \param title the node title (not copied, used directly)
- * \param editable if true, the node title will be editable
- * \param retain_in_memory if true, the node will stay in memory after deletion
- * \param deleted if true, the node is created with the deleted flag
- * \return the newly created node.
- */
+/* exported interface documented in desktop/tree.h */
struct node *tree_create_leaf_node(struct tree *tree, struct node *parent,
const char *title, bool editable, bool retain_in_memory,
bool deleted)
@@ -621,8 +596,12 @@ struct node *tree_create_leaf_node(struct tree *tree, struct node *parent,
node = calloc(sizeof(struct node), 1);
if (node == NULL) {
- LOG(("calloc failed"));
- warn_user("NoMemory", 0);
+ return NULL;
+ }
+
+ node->data.text = strdup(title);
+ if (node->data.text == NULL) {
+ free(node);
return NULL;
}
@@ -631,7 +610,6 @@ struct node *tree_create_leaf_node(struct tree *tree, struct node *parent,
node->deleted = deleted;
node->data.parent = node;
node->data.type = NODE_ELEMENT_TEXT;
- node->data.text = title;
node->data.flag = TREE_ELEMENT_TITLE;
node->data.editable = editable;
node->sort = NULL;
@@ -639,8 +617,9 @@ struct node *tree_create_leaf_node(struct tree *tree, struct node *parent,
node->previous = NULL;
tree_recalculate_node_sizes(tree, node, true);
- if (parent != NULL)
+ if (parent != NULL) {
tree_link_node(tree, parent, node, false);
+ }
return node;
}
@@ -1502,18 +1481,20 @@ void tree_update_node_element(struct tree *tree, struct node_element *element,
assert(element != NULL);
- if (tree != NULL && element == tree->editing)
+ if ((tree != NULL) && (element == tree->editing)) {
tree_stop_edit(tree, false);
+ }
- if (text != NULL && (element->type == NODE_ELEMENT_TEXT ||
- element->type == NODE_ELEMENT_TEXT_PLUS_ICON)) {
+ if ((text != NULL) &&
+ (element->type == NODE_ELEMENT_TEXT ||
+ element->type == NODE_ELEMENT_TEXT_PLUS_ICON)) {
if (element->text != NULL) {
- if(strcmp(element->text, text) == 0) text_changed = true;
-
+ if (strcmp(element->text, text) == 0) {
+ text_changed = true;
+ }
response = NODE_CALLBACK_NOT_HANDLED;
- if (!element->editable &&
- element->parent->user_callback !=
- NULL) {
+ if ((!element->editable) &&
+ (element->parent->user_callback != NULL)) {
msg_data.msg = NODE_DELETE_ELEMENT_TXT;
msg_data.flag = element->flag;
msg_data.node = element->parent;
@@ -1522,14 +1503,16 @@ void tree_update_node_element(struct tree *tree, struct node_element *element,
element->parent->callback_data,
&msg_data);
}
- if (response != NODE_CALLBACK_HANDLED)
- free((void *)element->text);
+ if (response != NODE_CALLBACK_HANDLED) {
+ free(element->text);
+ }
}
- element->text = text;
+ element->text = (char *)text;
}
- if (bitmap != NULL && (element->type == NODE_ELEMENT_BITMAP ||
- element->type == NODE_ELEMENT_TEXT_PLUS_ICON)) {
+ if ((bitmap != NULL) &&
+ ((element->type == NODE_ELEMENT_BITMAP) ||
+ (element->type == NODE_ELEMENT_TEXT_PLUS_ICON))) {
if (element->bitmap != NULL) {
response = NODE_CALLBACK_NOT_HANDLED;
if (element->parent->user_callback != NULL) {
@@ -1541,10 +1524,11 @@ void tree_update_node_element(struct tree *tree, struct node_element *element,
element->parent->callback_data,
&msg_data);
}
- if (response != NODE_CALLBACK_HANDLED)
+
+ if (response != NODE_CALLBACK_HANDLED) {
free(element->bitmap);
- }
- else {
+ }
+ } else {
/* Increase the box width to accomodate the new icon */
element->box.width += NODE_INSTEP;
}
diff --git a/desktop/tree.h b/desktop/tree.h
index 8ac505783..00ac99984 100644
--- a/desktop/tree.h
+++ b/desktop/tree.h
@@ -137,12 +137,39 @@ void tree_setup_colours(void);
struct tree *tree_create(unsigned int flags,
const struct treeview_table *callbacks,
void *client_data);
+
+/**
+ * Creates a folder node with the specified title, and optionally links it into
+ * the tree.
+ *
+ * \param tree the owner tree of 'parent', may be NULL
+ * \param parent the parent node, or NULL not to link
+ * \param title the node title
+ * \param editable if true, the node title will be editable
+ * \param retain_in_memory if true, the node will stay in memory after deletion
+ * \param deleted if true, the node is created with the deleted flag
+ * \return the newly created node or NULL on error.
+ */
struct node *tree_create_folder_node(struct tree *tree, struct node *parent,
const char *title, bool editable, bool retain_in_memory,
bool deleted);
+
+/**
+ * Creates a leaf node with the specified title, and optionally links it into
+ * the tree.
+ *
+ * \param tree the owner tree of 'parent', may be NULL
+ * \param parent the parent node, or NULL not to link
+ * \param title the node title.
+ * \param editable if true, the node title will be editable
+ * \param retain_in_memory if true, the node will stay in memory after deletion
+ * \param deleted if true, the node is created with the deleted flag
+ * \return the newly created node or NULL on error.
+ */
struct node *tree_create_leaf_node(struct tree *tree, struct node *parent,
const char *title, bool editable, bool retain_in_memory,
bool deleted);
+
struct node_element *tree_create_node_element(struct node *parent,
node_element_type type, unsigned int flag, bool editable);
void tree_link_node(struct tree *tree, struct node *link, struct node *node,
diff --git a/desktop/tree_url_node.c b/desktop/tree_url_node.c
index 76bc8a47c..938cd1d69 100644
--- a/desktop/tree_url_node.c
+++ b/desktop/tree_url_node.c
@@ -126,35 +126,41 @@ void tree_url_node_cleanup()
* \param parent the node to link to
* \param url the URL (copied)
* \param data the URL data to use
- * \param title the custom title to use
+ * \param title custom title to use or NULL to use url
* \return the node created, or NULL for failure
*/
struct node *tree_create_URL_node(struct tree *tree, struct node *parent,
nsurl *url, const char *title,
tree_node_user_callback user_callback, void *callback_data)
{
- struct node *node;
+ struct node *node = NULL;
struct node_element *element;
- char *text_cp, *squashed;
- squashed = squash_whitespace(title ? title : nsurl_access(url));
- text_cp = strdup(squashed);
- if (text_cp == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- return NULL;
+ if (title == NULL) {
+ node = tree_create_leaf_node(tree,
+ parent,
+ nsurl_access(url),
+ true, false, false);
+ } else {
+ char *squashed;
+
+ squashed = squash_whitespace(title);
+ if (squashed != NULL) {
+ node = tree_create_leaf_node(tree,
+ parent,
+ squashed,
+ true, false, false);
+ free(squashed);
+ }
}
- free(squashed);
- node = tree_create_leaf_node(tree, parent, text_cp, true, false,
- false);
if (node == NULL) {
- free(text_cp);
return NULL;
}
- if (user_callback != NULL)
+ if (user_callback != NULL) {
tree_set_node_user_callback(node, user_callback,
callback_data);
+ }
tree_create_node_element(node, NODE_ELEMENT_BITMAP,
TREE_ELEMENT_THUMBNAIL, false);
@@ -165,7 +171,7 @@ struct node *tree_create_URL_node(struct tree *tree, struct node *parent,
element = tree_create_node_element(node, NODE_ELEMENT_TEXT,
TREE_ELEMENT_URL, true);
if (element != NULL) {
- text_cp = strdup(nsurl_access(url));
+ char *text_cp = strdup(nsurl_access(url));
if (text_cp == NULL) {
tree_delete_node(tree, node, false);
LOG(("malloc failed"));
@@ -194,22 +200,18 @@ struct node *tree_create_URL_node_readonly(struct tree *tree,
{
struct node *node;
struct node_element *element;
- char *title;
+ const char *title;
assert(url && data);
if (data->title != NULL) {
- title = strdup(data->title);
+ title = data->title;
} else {
- title = strdup(nsurl_access(url));
+ title = nsurl_access(url);
}
- if (title == NULL)
- return NULL;
-
node = tree_create_leaf_node(tree, parent, title, false, false, false);
if (node == NULL) {
- free(title);
return NULL;
}
@@ -683,6 +685,7 @@ static bool tree_url_load_directory_cb(dom_node *node, void *ctx)
dir = tree_create_folder_node(tctx->tree, tctx->directory,
title, true, false, false);
+ free(title);
if (dir == NULL) {
dom_string_unref(name);
return false;