netsurf: branch master updated. release/3.0-482-g9a59103
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/9a59103c6a83225b50e98...
...commit http://git.netsurf-browser.org/netsurf.git/commit/9a59103c6a83225b50e9865...
...tree http://git.netsurf-browser.org/netsurf.git/tree/9a59103c6a83225b50e98651c...
The branch, master has been updated
via 9a59103c6a83225b50e98651c1b377d535b808c8 (commit)
from 09f5b0e95ffa3d40d1e07c5ba8be218de6676d73 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=9a59103c6a83225b50e...
commit 9a59103c6a83225b50e98651c1b377d535b808c8
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Polish node deletion.
diff --git a/desktop/treeview.c b/desktop/treeview.c
index 20694bf..dd4efcd 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -1066,6 +1066,7 @@ static nserror treeview_delete_node_internal(treeview *tree, treeview_node *n,
/* Inform front end of change in dimensions */
if (tree->root != NULL && p != NULL && p->flags & TREE_NODE_EXPANDED &&
+ nd.h_reduction > 0 &&
!(flags & TREE_OPTION_SUPPRESS_RESIZE)) {
tree->cw_t->update_size(tree->cw_h, -1,
tree->root->height);
@@ -1183,7 +1184,6 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n,
nserror err;
struct rect r;
treeview_node *p;
- int h;
assert(tree != NULL);
assert(n != NULL);
@@ -1197,16 +1197,21 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n,
if (err != NSERROR_OK)
return err;
- h = tree->root->height;
if (tree->flags & TREEVIEW_DEL_EMPTY_DIRS) {
+ int h = tree->root->height;
/* Delete any empty nodes */
err = treeview_delete_empty_nodes(tree, false);
if (err != NSERROR_OK)
return err;
- }
- /* Inform front end of change in dimensions */
- if (tree->root->height != h && !(flags & TREE_OPTION_SUPPRESS_RESIZE)) {
- tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
+
+ /* Inform front end of change in dimensions */
+ if (tree->root->height != h) {
+ r.y0 = 0;
+ if (!(flags & TREE_OPTION_SUPPRESS_RESIZE)) {
+ tree->cw_t->update_size(tree->cw_h, -1,
+ tree->root->height);
+ }
+ }
}
/* Redraw */
@@ -2461,9 +2466,16 @@ bool treeview_keypress(treeview *tree, uint32_t key)
redraw = treeview_delete_selection(tree, &r);
if (tree->flags & TREEVIEW_DEL_EMPTY_DIRS) {
+ int h = tree->root->height;
/* Delete any empty nodes */
- err = treeview_delete_empty_nodes(tree, true);
- r.y0 = 0;
+ err = treeview_delete_empty_nodes(tree, false);
+
+ /* Inform front end of change in dimensions */
+ if (tree->root->height != h) {
+ r.y0 = 0;
+ tree->cw_t->update_size(tree->cw_h, -1,
+ tree->root->height);
+ }
}
break;
case KEY_CR:
diff --git a/desktop/treeview.h b/desktop/treeview.h
index 33c4c50..b4a028f 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -48,7 +48,7 @@ typedef enum {
TREE_OPTION_NONE = (0), /* No flags set */
TREE_OPTION_SUPPRESS_RESIZE = (1 << 0), /* Suppress callback */
TREE_OPTION_SUPPRESS_REDRAW = (1 << 1) /* Suppress callback */
-} treeview_node_options_flags; /**< Node creation settings */
+} treeview_node_options_flags; /**< Node change handling options */
typedef enum {
TREEVIEW_NO_FLAGS = (0), /**< No flags set */
-----------------------------------------------------------------------
Summary of changes:
desktop/treeview.c | 28 ++++++++++++++++++++--------
desktop/treeview.h | 2 +-
2 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/desktop/treeview.c b/desktop/treeview.c
index 20694bf..dd4efcd 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -1066,6 +1066,7 @@ static nserror treeview_delete_node_internal(treeview *tree, treeview_node *n,
/* Inform front end of change in dimensions */
if (tree->root != NULL && p != NULL && p->flags & TREE_NODE_EXPANDED &&
+ nd.h_reduction > 0 &&
!(flags & TREE_OPTION_SUPPRESS_RESIZE)) {
tree->cw_t->update_size(tree->cw_h, -1,
tree->root->height);
@@ -1183,7 +1184,6 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n,
nserror err;
struct rect r;
treeview_node *p;
- int h;
assert(tree != NULL);
assert(n != NULL);
@@ -1197,16 +1197,21 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n,
if (err != NSERROR_OK)
return err;
- h = tree->root->height;
if (tree->flags & TREEVIEW_DEL_EMPTY_DIRS) {
+ int h = tree->root->height;
/* Delete any empty nodes */
err = treeview_delete_empty_nodes(tree, false);
if (err != NSERROR_OK)
return err;
- }
- /* Inform front end of change in dimensions */
- if (tree->root->height != h && !(flags & TREE_OPTION_SUPPRESS_RESIZE)) {
- tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
+
+ /* Inform front end of change in dimensions */
+ if (tree->root->height != h) {
+ r.y0 = 0;
+ if (!(flags & TREE_OPTION_SUPPRESS_RESIZE)) {
+ tree->cw_t->update_size(tree->cw_h, -1,
+ tree->root->height);
+ }
+ }
}
/* Redraw */
@@ -2461,9 +2466,16 @@ bool treeview_keypress(treeview *tree, uint32_t key)
redraw = treeview_delete_selection(tree, &r);
if (tree->flags & TREEVIEW_DEL_EMPTY_DIRS) {
+ int h = tree->root->height;
/* Delete any empty nodes */
- err = treeview_delete_empty_nodes(tree, true);
- r.y0 = 0;
+ err = treeview_delete_empty_nodes(tree, false);
+
+ /* Inform front end of change in dimensions */
+ if (tree->root->height != h) {
+ r.y0 = 0;
+ tree->cw_t->update_size(tree->cw_h, -1,
+ tree->root->height);
+ }
}
break;
case KEY_CR:
diff --git a/desktop/treeview.h b/desktop/treeview.h
index 33c4c50..b4a028f 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -48,7 +48,7 @@ typedef enum {
TREE_OPTION_NONE = (0), /* No flags set */
TREE_OPTION_SUPPRESS_RESIZE = (1 << 0), /* Suppress callback */
TREE_OPTION_SUPPRESS_REDRAW = (1 << 1) /* Suppress callback */
-} treeview_node_options_flags; /**< Node creation settings */
+} treeview_node_options_flags; /**< Node change handling options */
typedef enum {
TREEVIEW_NO_FLAGS = (0), /**< No flags set */
--
NetSurf Browser
10 years
netsurf: branch master updated. release/3.0-481-g09f5b0e
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/09f5b0e95ffa3d40d1e07...
...commit http://git.netsurf-browser.org/netsurf.git/commit/09f5b0e95ffa3d40d1e07c5...
...tree http://git.netsurf-browser.org/netsurf.git/tree/09f5b0e95ffa3d40d1e07c5ba...
The branch, master has been updated
via 09f5b0e95ffa3d40d1e07c5ba8be218de6676d73 (commit)
via e2fbd3a266fcd33e7d380f45f891eee515b3fc90 (commit)
from b4a3c94cf0c7b775becc8cf2da1137b351a7accb (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=09f5b0e95ffa3d40d1e...
commit 09f5b0e95ffa3d40d1e07c5ba8be218de6676d73
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Improve callback suppression options. Reduce unnecessary callback usage.
diff --git a/desktop/cookie_manager.c b/desktop/cookie_manager.c
index e342a2b..5f7f038 100644
--- a/desktop/cookie_manager.c
+++ b/desktop/cookie_manager.c
@@ -331,9 +331,9 @@ static nserror cookie_manager_create_cookie_node(
err = treeview_create_node_entry(cm_ctx.tree, &(cookie->entry),
parent->folder, TREE_REL_FIRST_CHILD,
cookie->data, cookie,
- cm_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ cm_ctx.built ? TREE_OPTION_NONE :
+ TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
cookie_manager_free_treeview_field_data(cookie);
free(cookie);
@@ -412,9 +412,9 @@ static nserror cookie_manager_create_domain_folder(
err = treeview_create_node_folder(cm_ctx.tree, &(f->folder),
NULL, TREE_REL_FIRST_CHILD, &f->data, f,
- cm_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ cm_ctx.built ? TREE_OPTION_NONE :
+ TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
free((void *)f->data.value);
free(f);
@@ -499,7 +499,7 @@ void cookie_manager_remove(const struct cookie_data *data)
}
/* Delete the node */
- treeview_delete_node(cm_ctx.tree, cookie->entry);
+ treeview_delete_node(cm_ctx.tree, cookie->entry, TREE_OPTION_NONE);
}
diff --git a/desktop/global_history.c b/desktop/global_history.c
index 66bf37d..2b384b1 100644
--- a/desktop/global_history.c
+++ b/desktop/global_history.c
@@ -197,9 +197,9 @@ static nserror global_history_create_dir(enum global_history_folders f)
relation, rel,
&gh_ctx.folders[f].data,
&gh_ctx.folders[f],
- gh_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ gh_ctx.built ? TREE_OPTION_NONE :
+ TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
return err;
}
@@ -326,9 +326,9 @@ static nserror global_history_entry_insert(struct global_history_entry *e,
err = treeview_create_node_entry(gh_ctx.tree, &(e->entry),
parent, TREE_REL_FIRST_CHILD, e->data, e,
- gh_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ gh_ctx.built ? TREE_OPTION_NONE :
+ TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
return err;
}
@@ -500,7 +500,9 @@ static bool global_history_add_entry(nsurl *url,
/* Delete any existing entry for this URL */
e = global_history_find(url);
if (e != NULL) {
- treeview_delete_node(gh_ctx.tree, e->entry);
+ treeview_delete_node(gh_ctx.tree, e->entry,
+ TREE_OPTION_SUPPRESS_REDRAW |
+ TREE_OPTION_SUPPRESS_RESIZE);
}
}
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 6ef8385..683fdc4 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -141,8 +141,8 @@ static nserror hotlist_entry_insert(struct hotlist_entry *e,
err = treeview_create_node_entry(hl_ctx.tree, &(e->entry),
relation, rel, e->data, e, hl_ctx.built ?
- TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ TREE_OPTION_NONE : TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
return err;
}
@@ -314,8 +314,8 @@ static nserror hotlist_add_folder_internal(
err = treeview_create_node_folder(hl_ctx.tree,
&n, relation, rel, &f->data, f, hl_ctx.built ?
- TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ TREE_OPTION_NONE : TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
free((void *)title); /* Eww */
free(f);
@@ -1219,7 +1219,8 @@ static nserror hotlist_remove_url_walk_cb(void *ctx, void *node_data,
if (nsurl_compare(e->url, tw->url, NSURL_COMPLETE) == true) {
/* Found what we're looking for: delete it */
- treeview_delete_node(hl_ctx.tree, e->entry);
+ treeview_delete_node(hl_ctx.tree, e->entry,
+ TREE_OPTION_NONE);
}
}
diff --git a/desktop/sslcert_viewer.c b/desktop/sslcert_viewer.c
index d9dd5c7..7362371 100644
--- a/desktop/sslcert_viewer.c
+++ b/desktop/sslcert_viewer.c
@@ -189,7 +189,7 @@ static nserror sslcert_viewer_create_node(
/* Create the new treeview node */
err = treeview_create_node_entry(ssl_d->tree, &(e->entry),
NULL, TREE_REL_FIRST_CHILD,
- e->data, e, TREE_CREATE_NONE);
+ e->data, e, TREE_OPTION_NONE);
if (err != NSERROR_OK) {
sslcert_viewer_free_treeview_field_data(e);
free(e);
diff --git a/desktop/treeview.c b/desktop/treeview.c
index f4fa7e8..20694bf 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -524,7 +524,7 @@ nserror treeview_create_node_folder(treeview *tree,
treeview_node *relation,
enum treeview_relationship rel,
const struct treeview_field_data *field,
- void *data, treeview_node_create_flags flags)
+ void *data, treeview_node_options_flags flags)
{
treeview_node *n;
@@ -562,12 +562,12 @@ nserror treeview_create_node_folder(treeview *tree,
if (n->parent->flags & TREE_NODE_EXPANDED) {
/* Inform front end of change in dimensions */
- if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
+ if (!(flags & TREE_OPTION_SUPPRESS_RESIZE))
tree->cw_t->update_size(tree->cw_h, -1,
tree->root->height);
/* Redraw */
- if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
+ if (!(flags & TREE_OPTION_SUPPRESS_REDRAW)) {
struct rect r;
r.x0 = 0;
r.y0 = treeview_node_y(tree, n);
@@ -707,7 +707,7 @@ nserror treeview_create_node_entry(treeview *tree,
treeview_node *relation,
enum treeview_relationship rel,
const struct treeview_field_data fields[],
- void *data, treeview_node_create_flags flags)
+ void *data, treeview_node_options_flags flags)
{
bool match;
struct treeview_node_entry *e;
@@ -768,12 +768,12 @@ nserror treeview_create_node_entry(treeview *tree,
if (n->parent->flags & TREE_NODE_EXPANDED) {
/* Inform front end of change in dimensions */
- if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
+ if (!(flags & TREE_OPTION_SUPPRESS_RESIZE))
tree->cw_t->update_size(tree->cw_h, -1,
tree->root->height);
/* Redraw */
- if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
+ if (!(flags & TREE_OPTION_SUPPRESS_REDRAW)) {
struct rect r;
r.x0 = 0;
r.y0 = treeview_node_y(tree, n);
@@ -968,7 +968,7 @@ static void treeview_edit_done(treeview *tree)
struct treeview_node_delete {
treeview *tree;
- int height_reduction;
+ int h_reduction;
bool user_interaction;
};
/** Treewalk node callback deleting nodes. */
@@ -983,7 +983,7 @@ static nserror treeview_delete_node_walk_cb(treeview_node *n,
assert(n->children == NULL);
if (treeview_unlink_node(n))
- nd->height_reduction += (n->type == TREE_NODE_ENTRY) ?
+ nd->h_reduction += (n->type == TREE_NODE_ENTRY) ?
n->height : tree_g.line_height;
/* Handle any special treatment */
@@ -1016,6 +1016,7 @@ static nserror treeview_delete_node_walk_cb(treeview_node *n,
* \param tree Treeview object to delete node from
* \param n Node to delete
* \param interaction Delete is result of user interaction with treeview
+ * \param flags Treeview node options flags
* \return NSERROR_OK on success, appropriate error otherwise
*
* Will emit folder or entry deletion msg callback.
@@ -1027,13 +1028,13 @@ static nserror treeview_delete_node_walk_cb(treeview_node *n,
* set, caller must also call treeview_delete_empty.
*/
static nserror treeview_delete_node_internal(treeview *tree, treeview_node *n,
- bool interaction)
+ bool interaction, treeview_node_options_flags flags)
{
nserror err;
treeview_node *p = n->parent;
struct treeview_node_delete nd = {
.tree = tree,
- .height_reduction = 0,
+ .h_reduction = 0,
.user_interaction = interaction
};
@@ -1056,22 +1057,26 @@ static nserror treeview_delete_node_internal(treeview *tree, treeview_node *n,
return err;
}
+ n = p;
/* Reduce ancestor heights */
- while (p != NULL && p->flags & TREE_NODE_EXPANDED) {
- p->height -= nd.height_reduction;
- p = p->parent;
+ while (n != NULL && n->flags & TREE_NODE_EXPANDED) {
+ n->height -= nd.h_reduction;
+ n = n->parent;
}
/* Inform front end of change in dimensions */
- if (tree->root != NULL)
- tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
+ if (tree->root != NULL && p != NULL && p->flags & TREE_NODE_EXPANDED &&
+ !(flags & TREE_OPTION_SUPPRESS_RESIZE)) {
+ tree->cw_t->update_size(tree->cw_h, -1,
+ tree->root->height);
+ }
return NSERROR_OK;
}
/**
- * Delete a treeview node
+ * Delete any empty treeview folder nodes
*
* \param tree Treeview object to delete empty nodes from
* \param interaction Delete is result of user interaction with treeview
@@ -1083,13 +1088,13 @@ static nserror treeview_delete_node_internal(treeview *tree, treeview_node *n,
*/
static nserror treeview_delete_empty_nodes(treeview *tree, bool interaction)
{
- treeview_node *node, *child, *parent, *next_sibling;
+ treeview_node *node, *child, *parent, *next_sibling, *p;
treeview_node *root = tree->root;
bool abort = false;
nserror err;
struct treeview_node_delete nd = {
.tree = tree,
- .height_reduction = 0,
+ .h_reduction = 0,
.user_interaction = interaction
};
@@ -1113,11 +1118,21 @@ static nserror treeview_delete_empty_nodes(treeview *tree, bool interaction)
if (node->type == TREE_NODE_FOLDER &&
node->children == NULL) {
/* Delete node */
+ p = node->parent;
err = treeview_delete_node_walk_cb(
node, &nd, &abort);
if (err != NSERROR_OK) {
return err;
}
+
+ /* Reduce ancestor heights */
+ while (p != NULL &&
+ p->flags &
+ TREE_NODE_EXPANDED) {
+ p->height -= nd.h_reduction;
+ p = p->parent;
+ }
+ nd.h_reduction = 0;
}
node = parent;
parent = node->parent;
@@ -1130,11 +1145,20 @@ static nserror treeview_delete_empty_nodes(treeview *tree, bool interaction)
if (node->type == TREE_NODE_FOLDER &&
node->children == NULL) {
/* Delete node */
+ p = node->parent;
err = treeview_delete_node_walk_cb(
node, &nd, &abort);
if (err != NSERROR_OK) {
return err;
}
+
+ /* Reduce ancestor heights */
+ while (p != NULL &&
+ p->flags & TREE_NODE_EXPANDED) {
+ p->height -= nd.h_reduction;
+ p = p->parent;
+ }
+ nd.h_reduction = 0;
}
node = next_sibling;
}
@@ -1153,11 +1177,13 @@ static nserror treeview_delete_empty_nodes(treeview *tree, bool interaction)
/* Exported interface, documented in treeview.h */
-nserror treeview_delete_node(treeview *tree, treeview_node *n)
+nserror treeview_delete_node(treeview *tree, treeview_node *n,
+ treeview_node_options_flags flags)
{
nserror err;
struct rect r;
treeview_node *p;
+ int h;
assert(tree != NULL);
assert(n != NULL);
@@ -1167,19 +1193,25 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n)
r.y0 = treeview_node_y(tree, n);
r.y1 = tree->root->height;
- err = treeview_delete_node_internal(tree, n, false);
+ err = treeview_delete_node_internal(tree, n, false, flags);
if (err != NSERROR_OK)
return err;
+ h = tree->root->height;
if (tree->flags & TREEVIEW_DEL_EMPTY_DIRS) {
/* Delete any empty nodes */
err = treeview_delete_empty_nodes(tree, false);
if (err != NSERROR_OK)
return err;
}
-
/* Inform front end of change in dimensions */
- if (p->flags & TREE_NODE_EXPANDED) {
+ if (tree->root->height != h && !(flags & TREE_OPTION_SUPPRESS_RESIZE)) {
+ tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
+ }
+
+ /* Redraw */
+ if (p->flags & TREE_NODE_EXPANDED &&
+ !(flags & TREE_OPTION_SUPPRESS_REDRAW)) {
r.x0 = 0;
r.x1 = REDRAW_MAX;
tree->cw_t->redraw_request(tree->cw_h, &r);
@@ -1283,7 +1315,9 @@ nserror treeview_destroy(treeview *tree)
assert(tree != NULL);
/* Destroy nodes */
- treeview_delete_node_internal(tree, tree->root, false);
+ treeview_delete_node_internal(tree, tree->root, false,
+ TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
/* Destroy feilds */
for (f = 0; f <= tree->n_fields; f++) {
@@ -1388,7 +1422,7 @@ nserror treeview_node_expand(treeview *tree,
static nserror treeview_node_contract_cb(treeview_node *n, void *ctx,
bool *skip_children, bool *end)
{
- int height_reduction;
+ int h_reduction;
assert(n != NULL);
assert(n->type != TREE_NODE_ROOT);
@@ -1401,12 +1435,12 @@ static nserror treeview_node_contract_cb(treeview_node *n, void *ctx,
}
n->flags ^= TREE_NODE_EXPANDED;
- height_reduction = n->height - tree_g.line_height;
+ h_reduction = n->height - tree_g.line_height;
- assert(height_reduction >= 0);
+ assert(h_reduction >= 0);
do {
- n->height -= height_reduction;
+ n->height -= h_reduction;
n = n->parent;
} while (n != NULL);
@@ -1749,7 +1783,8 @@ static nserror treeview_node_selection_walk_cb(treeview_node *n,
case TREEVIEW_WALK_DELETE_SELECTION:
if (n->flags & TREE_NODE_SELECTED) {
- err = treeview_delete_node_internal(sw->tree, n, true);
+ err = treeview_delete_node_internal(sw->tree, n, true,
+ TREE_OPTION_NONE);
if (err != NSERROR_OK) {
return err;
}
diff --git a/desktop/treeview.h b/desktop/treeview.h
index 6f44321..33c4c50 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -45,10 +45,10 @@ enum treeview_relationship {
}; /**< Relationship between nodes */
typedef enum {
- TREE_CREATE_NONE = (0), /* No flags set */
- TREE_CREATE_SUPPRESS_RESIZE = (1 << 0), /* Suppress callback */
- TREE_CREATE_SUPPRESS_REDRAW = (1 << 1) /* Suppress callback */
-} treeview_node_create_flags; /**< Node creation settings */
+ TREE_OPTION_NONE = (0), /* No flags set */
+ TREE_OPTION_SUPPRESS_RESIZE = (1 << 0), /* Suppress callback */
+ TREE_OPTION_SUPPRESS_REDRAW = (1 << 1) /* Suppress callback */
+} treeview_node_options_flags; /**< Node creation settings */
typedef enum {
TREEVIEW_NO_FLAGS = (0), /**< No flags set */
@@ -181,7 +181,7 @@ nserror treeview_get_relation(treeview *tree, treeview_node **relation,
* \param rel Folder's relationship to relation
* \param field Field data
* \param data Client data for node event callbacks
- * \param flags Node creation flags
+ * \param flags Treeview node options flags
* \return NSERROR_OK on success, appropriate error otherwise
*
* Field name must match name past in treeview_create fields[N-1].
@@ -193,7 +193,7 @@ nserror treeview_create_node_folder(treeview *tree,
treeview_node *relation,
enum treeview_relationship rel,
const struct treeview_field_data *field,
- void *data, treeview_node_create_flags flags);
+ void *data, treeview_node_options_flags flags);
/**
* Create an entry node in given treeview
@@ -204,7 +204,7 @@ nserror treeview_create_node_folder(treeview *tree,
* \param rel Folder's relationship to relation
* \param fields Array of field data
* \param data Client data for node event callbacks
- * \param flags Node creation flags
+ * \param flags Treeview node options flags
* \return NSERROR_OK on success, appropriate error otherwise
*
* Fields array names must match names past in treeview_create fields[0...N-2].
@@ -216,7 +216,7 @@ nserror treeview_create_node_entry(treeview *tree,
treeview_node *relation,
enum treeview_relationship rel,
const struct treeview_field_data fields[],
- void *data, treeview_node_create_flags flags);
+ void *data, treeview_node_options_flags flags);
/**
* Update an folder node in given treeview
@@ -290,11 +290,13 @@ nserror treeview_walk(treeview *tree, treeview_node *root,
*
* \param tree Treeview object to delete node from
* \param n Node to delete
+ * \param flags Treeview node options flags
* \return NSERROR_OK on success, appropriate error otherwise
*
* Will emit folder or entry deletion msg callback.
*/
-nserror treeview_delete_node(treeview *tree, treeview_node *n);
+nserror treeview_delete_node(treeview *tree, treeview_node *n,
+ treeview_node_options_flags flags);
/**
* Expand a treeview node
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=e2fbd3a266fcd33e7d3...
commit e2fbd3a266fcd33e7d380f45f891eee515b3fc90
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Avoid copying rectangle for redraw_request calls.
diff --git a/desktop/core_window.h b/desktop/core_window.h
index 8af8937..3fe88f3 100644
--- a/desktop/core_window.h
+++ b/desktop/core_window.h
@@ -42,7 +42,7 @@ struct core_window_callback_table {
* \param cw the core window object
* \param r rectangle to redraw
*/
- void (*redraw_request)(struct core_window *cw, struct rect r);
+ void (*redraw_request)(struct core_window *cw, const struct rect *r);
/**
* Update the limits of the window
@@ -59,7 +59,7 @@ struct core_window_callback_table {
* \param cw the core window object
* \param r rectangle to make visible
*/
- void (*scroll_visible)(struct core_window *cw, struct rect r);
+ void (*scroll_visible)(struct core_window *cw, const struct rect *r);
/**
* Get window viewport dimensions
diff --git a/desktop/tree.c b/desktop/tree.c
index a60db57..8966be3 100644
--- a/desktop/tree.c
+++ b/desktop/tree.c
@@ -187,12 +187,13 @@ const char *tree_hotlist_path = NULL;
int treeview_inits;
-static void treeview_test_redraw_request(struct core_window *cw, struct rect r)
+static void treeview_test_redraw_request(struct core_window *cw,
+ const struct rect *r)
{
struct tree *tree = (struct tree *)cw;
- tree->callbacks->redraw_request(r.x0, r.y0,
- r.x1 - r.x0, r.y1 - r.y0,
+ tree->callbacks->redraw_request(r->x0, r->y0,
+ r->x1 - r->x0, r->y1 - r->y0,
tree->client_data);
}
@@ -204,7 +205,8 @@ static void treeview_test_update_size(struct core_window *cw,
tree->callbacks->resized(tree, width, height, tree->client_data);
}
-static void treeview_test_scroll_visible(struct core_window *cw, struct rect r)
+static void treeview_test_scroll_visible(struct core_window *cw,
+ const struct rect *r)
{
}
diff --git a/desktop/treeview.c b/desktop/treeview.c
index cb90bcc..f4fa7e8 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -573,7 +573,7 @@ nserror treeview_create_node_folder(treeview *tree,
r.y0 = treeview_node_y(tree, n);
r.x1 = REDRAW_MAX;
r.y1 = tree->root->height;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
}
@@ -623,7 +623,7 @@ nserror treeview_update_node_folder(treeview *tree,
r.y0 = treeview_node_y(tree, folder);
r.x1 = REDRAW_MAX;
r.y1 = r.y0 + tree_g.line_height;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
return NSERROR_OK;
@@ -694,7 +694,7 @@ nserror treeview_update_node_entry(treeview *tree,
r.y0 = treeview_node_y(tree, entry);
r.x1 = REDRAW_MAX;
r.y1 = r.y0 + entry->height;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
return NSERROR_OK;
@@ -779,7 +779,7 @@ nserror treeview_create_node_entry(treeview *tree,
r.y0 = treeview_node_y(tree, n);
r.x1 = REDRAW_MAX;
r.y1 = tree->root->height;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
}
@@ -900,7 +900,7 @@ static void treeview_edit_cancel(treeview *tree, bool redraw)
r.y0 = tree->edit.y;
r.x1 = tree->edit.x + tree->edit.w;
r.y1 = tree->edit.y + tree->edit.h;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
}
@@ -1182,7 +1182,7 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n)
if (p->flags & TREE_NODE_EXPANDED) {
r.x0 = 0;
r.x1 = REDRAW_MAX;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
return NSERROR_OK;
@@ -2450,7 +2450,7 @@ bool treeview_keypress(treeview *tree, uint32_t key)
}
if (redraw) {
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
return true;
@@ -2621,7 +2621,7 @@ static void treeview_textarea_callback(void *data, struct textarea_msg *msg)
r->y1 += tree->edit.y;
/* Redraw the textarea */
- tree->cw_t->redraw_request(tree->cw_h, *r);
+ tree->cw_t->redraw_request(tree->cw_h, r);
break;
default:
@@ -2794,7 +2794,7 @@ void treeview_edit_selection(treeview *tree)
rect.y0 = y;
rect.x1 = REDRAW_MAX;
rect.y1 = y + tree_g.line_height;
- tree->cw_t->redraw_request(tree->cw_h, rect);
+ tree->cw_t->redraw_request(tree->cw_h, &rect);
}
@@ -3054,7 +3054,7 @@ static nserror treeview_node_mouse_action_cb(treeview_node *node, void *ctx,
}
if (redraw) {
- ma->tree->cw_t->redraw_request(ma->tree->cw_h, r);
+ ma->tree->cw_t->redraw_request(ma->tree->cw_h, &r);
}
*end = true; /* Reached line with click; stop walking tree */
@@ -3116,7 +3116,7 @@ void treeview_mouse_action(treeview *tree,
tree->cw_t->drag_status(tree->cw_h,
CORE_WINDOW_DRAG_NONE);
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
return;
default:
/* No drag to end */
@@ -3191,7 +3191,7 @@ void treeview_mouse_action(treeview *tree,
}
if (redraw) {
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
} else {
-----------------------------------------------------------------------
Summary of changes:
desktop/cookie_manager.c | 14 +++---
desktop/core_window.h | 4 +-
desktop/global_history.c | 16 ++++---
desktop/hotlist.c | 11 ++--
desktop/sslcert_viewer.c | 2 +-
desktop/tree.c | 10 ++--
desktop/treeview.c | 115 ++++++++++++++++++++++++++++++----------------
desktop/treeview.h | 20 ++++----
8 files changed, 117 insertions(+), 75 deletions(-)
diff --git a/desktop/cookie_manager.c b/desktop/cookie_manager.c
index e342a2b..5f7f038 100644
--- a/desktop/cookie_manager.c
+++ b/desktop/cookie_manager.c
@@ -331,9 +331,9 @@ static nserror cookie_manager_create_cookie_node(
err = treeview_create_node_entry(cm_ctx.tree, &(cookie->entry),
parent->folder, TREE_REL_FIRST_CHILD,
cookie->data, cookie,
- cm_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ cm_ctx.built ? TREE_OPTION_NONE :
+ TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
cookie_manager_free_treeview_field_data(cookie);
free(cookie);
@@ -412,9 +412,9 @@ static nserror cookie_manager_create_domain_folder(
err = treeview_create_node_folder(cm_ctx.tree, &(f->folder),
NULL, TREE_REL_FIRST_CHILD, &f->data, f,
- cm_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ cm_ctx.built ? TREE_OPTION_NONE :
+ TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
free((void *)f->data.value);
free(f);
@@ -499,7 +499,7 @@ void cookie_manager_remove(const struct cookie_data *data)
}
/* Delete the node */
- treeview_delete_node(cm_ctx.tree, cookie->entry);
+ treeview_delete_node(cm_ctx.tree, cookie->entry, TREE_OPTION_NONE);
}
diff --git a/desktop/core_window.h b/desktop/core_window.h
index 8af8937..3fe88f3 100644
--- a/desktop/core_window.h
+++ b/desktop/core_window.h
@@ -42,7 +42,7 @@ struct core_window_callback_table {
* \param cw the core window object
* \param r rectangle to redraw
*/
- void (*redraw_request)(struct core_window *cw, struct rect r);
+ void (*redraw_request)(struct core_window *cw, const struct rect *r);
/**
* Update the limits of the window
@@ -59,7 +59,7 @@ struct core_window_callback_table {
* \param cw the core window object
* \param r rectangle to make visible
*/
- void (*scroll_visible)(struct core_window *cw, struct rect r);
+ void (*scroll_visible)(struct core_window *cw, const struct rect *r);
/**
* Get window viewport dimensions
diff --git a/desktop/global_history.c b/desktop/global_history.c
index 66bf37d..2b384b1 100644
--- a/desktop/global_history.c
+++ b/desktop/global_history.c
@@ -197,9 +197,9 @@ static nserror global_history_create_dir(enum global_history_folders f)
relation, rel,
&gh_ctx.folders[f].data,
&gh_ctx.folders[f],
- gh_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ gh_ctx.built ? TREE_OPTION_NONE :
+ TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
return err;
}
@@ -326,9 +326,9 @@ static nserror global_history_entry_insert(struct global_history_entry *e,
err = treeview_create_node_entry(gh_ctx.tree, &(e->entry),
parent, TREE_REL_FIRST_CHILD, e->data, e,
- gh_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ gh_ctx.built ? TREE_OPTION_NONE :
+ TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
return err;
}
@@ -500,7 +500,9 @@ static bool global_history_add_entry(nsurl *url,
/* Delete any existing entry for this URL */
e = global_history_find(url);
if (e != NULL) {
- treeview_delete_node(gh_ctx.tree, e->entry);
+ treeview_delete_node(gh_ctx.tree, e->entry,
+ TREE_OPTION_SUPPRESS_REDRAW |
+ TREE_OPTION_SUPPRESS_RESIZE);
}
}
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 6ef8385..683fdc4 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -141,8 +141,8 @@ static nserror hotlist_entry_insert(struct hotlist_entry *e,
err = treeview_create_node_entry(hl_ctx.tree, &(e->entry),
relation, rel, e->data, e, hl_ctx.built ?
- TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ TREE_OPTION_NONE : TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
return err;
}
@@ -314,8 +314,8 @@ static nserror hotlist_add_folder_internal(
err = treeview_create_node_folder(hl_ctx.tree,
&n, relation, rel, &f->data, f, hl_ctx.built ?
- TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE |
- TREE_CREATE_SUPPRESS_REDRAW);
+ TREE_OPTION_NONE : TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
free((void *)title); /* Eww */
free(f);
@@ -1219,7 +1219,8 @@ static nserror hotlist_remove_url_walk_cb(void *ctx, void *node_data,
if (nsurl_compare(e->url, tw->url, NSURL_COMPLETE) == true) {
/* Found what we're looking for: delete it */
- treeview_delete_node(hl_ctx.tree, e->entry);
+ treeview_delete_node(hl_ctx.tree, e->entry,
+ TREE_OPTION_NONE);
}
}
diff --git a/desktop/sslcert_viewer.c b/desktop/sslcert_viewer.c
index d9dd5c7..7362371 100644
--- a/desktop/sslcert_viewer.c
+++ b/desktop/sslcert_viewer.c
@@ -189,7 +189,7 @@ static nserror sslcert_viewer_create_node(
/* Create the new treeview node */
err = treeview_create_node_entry(ssl_d->tree, &(e->entry),
NULL, TREE_REL_FIRST_CHILD,
- e->data, e, TREE_CREATE_NONE);
+ e->data, e, TREE_OPTION_NONE);
if (err != NSERROR_OK) {
sslcert_viewer_free_treeview_field_data(e);
free(e);
diff --git a/desktop/tree.c b/desktop/tree.c
index a60db57..8966be3 100644
--- a/desktop/tree.c
+++ b/desktop/tree.c
@@ -187,12 +187,13 @@ const char *tree_hotlist_path = NULL;
int treeview_inits;
-static void treeview_test_redraw_request(struct core_window *cw, struct rect r)
+static void treeview_test_redraw_request(struct core_window *cw,
+ const struct rect *r)
{
struct tree *tree = (struct tree *)cw;
- tree->callbacks->redraw_request(r.x0, r.y0,
- r.x1 - r.x0, r.y1 - r.y0,
+ tree->callbacks->redraw_request(r->x0, r->y0,
+ r->x1 - r->x0, r->y1 - r->y0,
tree->client_data);
}
@@ -204,7 +205,8 @@ static void treeview_test_update_size(struct core_window *cw,
tree->callbacks->resized(tree, width, height, tree->client_data);
}
-static void treeview_test_scroll_visible(struct core_window *cw, struct rect r)
+static void treeview_test_scroll_visible(struct core_window *cw,
+ const struct rect *r)
{
}
diff --git a/desktop/treeview.c b/desktop/treeview.c
index cb90bcc..20694bf 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -524,7 +524,7 @@ nserror treeview_create_node_folder(treeview *tree,
treeview_node *relation,
enum treeview_relationship rel,
const struct treeview_field_data *field,
- void *data, treeview_node_create_flags flags)
+ void *data, treeview_node_options_flags flags)
{
treeview_node *n;
@@ -562,18 +562,18 @@ nserror treeview_create_node_folder(treeview *tree,
if (n->parent->flags & TREE_NODE_EXPANDED) {
/* Inform front end of change in dimensions */
- if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
+ if (!(flags & TREE_OPTION_SUPPRESS_RESIZE))
tree->cw_t->update_size(tree->cw_h, -1,
tree->root->height);
/* Redraw */
- if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
+ if (!(flags & TREE_OPTION_SUPPRESS_REDRAW)) {
struct rect r;
r.x0 = 0;
r.y0 = treeview_node_y(tree, n);
r.x1 = REDRAW_MAX;
r.y1 = tree->root->height;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
}
@@ -623,7 +623,7 @@ nserror treeview_update_node_folder(treeview *tree,
r.y0 = treeview_node_y(tree, folder);
r.x1 = REDRAW_MAX;
r.y1 = r.y0 + tree_g.line_height;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
return NSERROR_OK;
@@ -694,7 +694,7 @@ nserror treeview_update_node_entry(treeview *tree,
r.y0 = treeview_node_y(tree, entry);
r.x1 = REDRAW_MAX;
r.y1 = r.y0 + entry->height;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
return NSERROR_OK;
@@ -707,7 +707,7 @@ nserror treeview_create_node_entry(treeview *tree,
treeview_node *relation,
enum treeview_relationship rel,
const struct treeview_field_data fields[],
- void *data, treeview_node_create_flags flags)
+ void *data, treeview_node_options_flags flags)
{
bool match;
struct treeview_node_entry *e;
@@ -768,18 +768,18 @@ nserror treeview_create_node_entry(treeview *tree,
if (n->parent->flags & TREE_NODE_EXPANDED) {
/* Inform front end of change in dimensions */
- if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
+ if (!(flags & TREE_OPTION_SUPPRESS_RESIZE))
tree->cw_t->update_size(tree->cw_h, -1,
tree->root->height);
/* Redraw */
- if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
+ if (!(flags & TREE_OPTION_SUPPRESS_REDRAW)) {
struct rect r;
r.x0 = 0;
r.y0 = treeview_node_y(tree, n);
r.x1 = REDRAW_MAX;
r.y1 = tree->root->height;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
}
@@ -900,7 +900,7 @@ static void treeview_edit_cancel(treeview *tree, bool redraw)
r.y0 = tree->edit.y;
r.x1 = tree->edit.x + tree->edit.w;
r.y1 = tree->edit.y + tree->edit.h;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
}
@@ -968,7 +968,7 @@ static void treeview_edit_done(treeview *tree)
struct treeview_node_delete {
treeview *tree;
- int height_reduction;
+ int h_reduction;
bool user_interaction;
};
/** Treewalk node callback deleting nodes. */
@@ -983,7 +983,7 @@ static nserror treeview_delete_node_walk_cb(treeview_node *n,
assert(n->children == NULL);
if (treeview_unlink_node(n))
- nd->height_reduction += (n->type == TREE_NODE_ENTRY) ?
+ nd->h_reduction += (n->type == TREE_NODE_ENTRY) ?
n->height : tree_g.line_height;
/* Handle any special treatment */
@@ -1016,6 +1016,7 @@ static nserror treeview_delete_node_walk_cb(treeview_node *n,
* \param tree Treeview object to delete node from
* \param n Node to delete
* \param interaction Delete is result of user interaction with treeview
+ * \param flags Treeview node options flags
* \return NSERROR_OK on success, appropriate error otherwise
*
* Will emit folder or entry deletion msg callback.
@@ -1027,13 +1028,13 @@ static nserror treeview_delete_node_walk_cb(treeview_node *n,
* set, caller must also call treeview_delete_empty.
*/
static nserror treeview_delete_node_internal(treeview *tree, treeview_node *n,
- bool interaction)
+ bool interaction, treeview_node_options_flags flags)
{
nserror err;
treeview_node *p = n->parent;
struct treeview_node_delete nd = {
.tree = tree,
- .height_reduction = 0,
+ .h_reduction = 0,
.user_interaction = interaction
};
@@ -1056,22 +1057,26 @@ static nserror treeview_delete_node_internal(treeview *tree, treeview_node *n,
return err;
}
+ n = p;
/* Reduce ancestor heights */
- while (p != NULL && p->flags & TREE_NODE_EXPANDED) {
- p->height -= nd.height_reduction;
- p = p->parent;
+ while (n != NULL && n->flags & TREE_NODE_EXPANDED) {
+ n->height -= nd.h_reduction;
+ n = n->parent;
}
/* Inform front end of change in dimensions */
- if (tree->root != NULL)
- tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
+ if (tree->root != NULL && p != NULL && p->flags & TREE_NODE_EXPANDED &&
+ !(flags & TREE_OPTION_SUPPRESS_RESIZE)) {
+ tree->cw_t->update_size(tree->cw_h, -1,
+ tree->root->height);
+ }
return NSERROR_OK;
}
/**
- * Delete a treeview node
+ * Delete any empty treeview folder nodes
*
* \param tree Treeview object to delete empty nodes from
* \param interaction Delete is result of user interaction with treeview
@@ -1083,13 +1088,13 @@ static nserror treeview_delete_node_internal(treeview *tree, treeview_node *n,
*/
static nserror treeview_delete_empty_nodes(treeview *tree, bool interaction)
{
- treeview_node *node, *child, *parent, *next_sibling;
+ treeview_node *node, *child, *parent, *next_sibling, *p;
treeview_node *root = tree->root;
bool abort = false;
nserror err;
struct treeview_node_delete nd = {
.tree = tree,
- .height_reduction = 0,
+ .h_reduction = 0,
.user_interaction = interaction
};
@@ -1113,11 +1118,21 @@ static nserror treeview_delete_empty_nodes(treeview *tree, bool interaction)
if (node->type == TREE_NODE_FOLDER &&
node->children == NULL) {
/* Delete node */
+ p = node->parent;
err = treeview_delete_node_walk_cb(
node, &nd, &abort);
if (err != NSERROR_OK) {
return err;
}
+
+ /* Reduce ancestor heights */
+ while (p != NULL &&
+ p->flags &
+ TREE_NODE_EXPANDED) {
+ p->height -= nd.h_reduction;
+ p = p->parent;
+ }
+ nd.h_reduction = 0;
}
node = parent;
parent = node->parent;
@@ -1130,11 +1145,20 @@ static nserror treeview_delete_empty_nodes(treeview *tree, bool interaction)
if (node->type == TREE_NODE_FOLDER &&
node->children == NULL) {
/* Delete node */
+ p = node->parent;
err = treeview_delete_node_walk_cb(
node, &nd, &abort);
if (err != NSERROR_OK) {
return err;
}
+
+ /* Reduce ancestor heights */
+ while (p != NULL &&
+ p->flags & TREE_NODE_EXPANDED) {
+ p->height -= nd.h_reduction;
+ p = p->parent;
+ }
+ nd.h_reduction = 0;
}
node = next_sibling;
}
@@ -1153,11 +1177,13 @@ static nserror treeview_delete_empty_nodes(treeview *tree, bool interaction)
/* Exported interface, documented in treeview.h */
-nserror treeview_delete_node(treeview *tree, treeview_node *n)
+nserror treeview_delete_node(treeview *tree, treeview_node *n,
+ treeview_node_options_flags flags)
{
nserror err;
struct rect r;
treeview_node *p;
+ int h;
assert(tree != NULL);
assert(n != NULL);
@@ -1167,22 +1193,28 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n)
r.y0 = treeview_node_y(tree, n);
r.y1 = tree->root->height;
- err = treeview_delete_node_internal(tree, n, false);
+ err = treeview_delete_node_internal(tree, n, false, flags);
if (err != NSERROR_OK)
return err;
+ h = tree->root->height;
if (tree->flags & TREEVIEW_DEL_EMPTY_DIRS) {
/* Delete any empty nodes */
err = treeview_delete_empty_nodes(tree, false);
if (err != NSERROR_OK)
return err;
}
-
/* Inform front end of change in dimensions */
- if (p->flags & TREE_NODE_EXPANDED) {
+ if (tree->root->height != h && !(flags & TREE_OPTION_SUPPRESS_RESIZE)) {
+ tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
+ }
+
+ /* Redraw */
+ if (p->flags & TREE_NODE_EXPANDED &&
+ !(flags & TREE_OPTION_SUPPRESS_REDRAW)) {
r.x0 = 0;
r.x1 = REDRAW_MAX;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
return NSERROR_OK;
@@ -1283,7 +1315,9 @@ nserror treeview_destroy(treeview *tree)
assert(tree != NULL);
/* Destroy nodes */
- treeview_delete_node_internal(tree, tree->root, false);
+ treeview_delete_node_internal(tree, tree->root, false,
+ TREE_OPTION_SUPPRESS_RESIZE |
+ TREE_OPTION_SUPPRESS_REDRAW);
/* Destroy feilds */
for (f = 0; f <= tree->n_fields; f++) {
@@ -1388,7 +1422,7 @@ nserror treeview_node_expand(treeview *tree,
static nserror treeview_node_contract_cb(treeview_node *n, void *ctx,
bool *skip_children, bool *end)
{
- int height_reduction;
+ int h_reduction;
assert(n != NULL);
assert(n->type != TREE_NODE_ROOT);
@@ -1401,12 +1435,12 @@ static nserror treeview_node_contract_cb(treeview_node *n, void *ctx,
}
n->flags ^= TREE_NODE_EXPANDED;
- height_reduction = n->height - tree_g.line_height;
+ h_reduction = n->height - tree_g.line_height;
- assert(height_reduction >= 0);
+ assert(h_reduction >= 0);
do {
- n->height -= height_reduction;
+ n->height -= h_reduction;
n = n->parent;
} while (n != NULL);
@@ -1749,7 +1783,8 @@ static nserror treeview_node_selection_walk_cb(treeview_node *n,
case TREEVIEW_WALK_DELETE_SELECTION:
if (n->flags & TREE_NODE_SELECTED) {
- err = treeview_delete_node_internal(sw->tree, n, true);
+ err = treeview_delete_node_internal(sw->tree, n, true,
+ TREE_OPTION_NONE);
if (err != NSERROR_OK) {
return err;
}
@@ -2450,7 +2485,7 @@ bool treeview_keypress(treeview *tree, uint32_t key)
}
if (redraw) {
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
return true;
@@ -2621,7 +2656,7 @@ static void treeview_textarea_callback(void *data, struct textarea_msg *msg)
r->y1 += tree->edit.y;
/* Redraw the textarea */
- tree->cw_t->redraw_request(tree->cw_h, *r);
+ tree->cw_t->redraw_request(tree->cw_h, r);
break;
default:
@@ -2794,7 +2829,7 @@ void treeview_edit_selection(treeview *tree)
rect.y0 = y;
rect.x1 = REDRAW_MAX;
rect.y1 = y + tree_g.line_height;
- tree->cw_t->redraw_request(tree->cw_h, rect);
+ tree->cw_t->redraw_request(tree->cw_h, &rect);
}
@@ -3054,7 +3089,7 @@ static nserror treeview_node_mouse_action_cb(treeview_node *node, void *ctx,
}
if (redraw) {
- ma->tree->cw_t->redraw_request(ma->tree->cw_h, r);
+ ma->tree->cw_t->redraw_request(ma->tree->cw_h, &r);
}
*end = true; /* Reached line with click; stop walking tree */
@@ -3116,7 +3151,7 @@ void treeview_mouse_action(treeview *tree,
tree->cw_t->drag_status(tree->cw_h,
CORE_WINDOW_DRAG_NONE);
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
return;
default:
/* No drag to end */
@@ -3191,7 +3226,7 @@ void treeview_mouse_action(treeview *tree,
}
if (redraw) {
- tree->cw_t->redraw_request(tree->cw_h, r);
+ tree->cw_t->redraw_request(tree->cw_h, &r);
}
} else {
diff --git a/desktop/treeview.h b/desktop/treeview.h
index 6f44321..33c4c50 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -45,10 +45,10 @@ enum treeview_relationship {
}; /**< Relationship between nodes */
typedef enum {
- TREE_CREATE_NONE = (0), /* No flags set */
- TREE_CREATE_SUPPRESS_RESIZE = (1 << 0), /* Suppress callback */
- TREE_CREATE_SUPPRESS_REDRAW = (1 << 1) /* Suppress callback */
-} treeview_node_create_flags; /**< Node creation settings */
+ TREE_OPTION_NONE = (0), /* No flags set */
+ TREE_OPTION_SUPPRESS_RESIZE = (1 << 0), /* Suppress callback */
+ TREE_OPTION_SUPPRESS_REDRAW = (1 << 1) /* Suppress callback */
+} treeview_node_options_flags; /**< Node creation settings */
typedef enum {
TREEVIEW_NO_FLAGS = (0), /**< No flags set */
@@ -181,7 +181,7 @@ nserror treeview_get_relation(treeview *tree, treeview_node **relation,
* \param rel Folder's relationship to relation
* \param field Field data
* \param data Client data for node event callbacks
- * \param flags Node creation flags
+ * \param flags Treeview node options flags
* \return NSERROR_OK on success, appropriate error otherwise
*
* Field name must match name past in treeview_create fields[N-1].
@@ -193,7 +193,7 @@ nserror treeview_create_node_folder(treeview *tree,
treeview_node *relation,
enum treeview_relationship rel,
const struct treeview_field_data *field,
- void *data, treeview_node_create_flags flags);
+ void *data, treeview_node_options_flags flags);
/**
* Create an entry node in given treeview
@@ -204,7 +204,7 @@ nserror treeview_create_node_folder(treeview *tree,
* \param rel Folder's relationship to relation
* \param fields Array of field data
* \param data Client data for node event callbacks
- * \param flags Node creation flags
+ * \param flags Treeview node options flags
* \return NSERROR_OK on success, appropriate error otherwise
*
* Fields array names must match names past in treeview_create fields[0...N-2].
@@ -216,7 +216,7 @@ nserror treeview_create_node_entry(treeview *tree,
treeview_node *relation,
enum treeview_relationship rel,
const struct treeview_field_data fields[],
- void *data, treeview_node_create_flags flags);
+ void *data, treeview_node_options_flags flags);
/**
* Update an folder node in given treeview
@@ -290,11 +290,13 @@ nserror treeview_walk(treeview *tree, treeview_node *root,
*
* \param tree Treeview object to delete node from
* \param n Node to delete
+ * \param flags Treeview node options flags
* \return NSERROR_OK on success, appropriate error otherwise
*
* Will emit folder or entry deletion msg callback.
*/
-nserror treeview_delete_node(treeview *tree, treeview_node *n);
+nserror treeview_delete_node(treeview *tree, treeview_node *n,
+ treeview_node_options_flags flags);
/**
* Expand a treeview node
--
NetSurf Browser
10 years
netsurf: branch master updated. release/3.0-479-gb4a3c94
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/b4a3c94cf0c7b775becc8...
...commit http://git.netsurf-browser.org/netsurf.git/commit/b4a3c94cf0c7b775becc8cf...
...tree http://git.netsurf-browser.org/netsurf.git/tree/b4a3c94cf0c7b775becc8cf2d...
The branch, master has been updated
via b4a3c94cf0c7b775becc8cf2da1137b351a7accb (commit)
via 67cbc779bece6e105f1a980fa34fd3bcdd490959 (commit)
via db2f47ab2719aa9e6ac2bd3a0107743c6921622d (commit)
via 8cc6ac8980b8d4459a2272dfdeedd04d34e152f2 (commit)
via afaf24378ba8de2e781801b270f2d124fcd6836c (commit)
from 895954a1e1de4da43cbba6cbe431983d43dda8c6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=b4a3c94cf0c7b775bec...
commit b4a3c94cf0c7b775becc8cf2da1137b351a7accb
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Various redraw improvements.
diff --git a/desktop/treeview.c b/desktop/treeview.c
index fc72c2d..cb90bcc 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -287,8 +287,8 @@ static int treeview_node_y(treeview *tree, treeview_node *node)
n = treeview_node_next(tree->root, false);
while (n != NULL && n != node) {
- y += (node->type == TREE_NODE_ENTRY) ?
- node->height : tree_g.line_height;
+ y += (n->type == TREE_NODE_ENTRY) ?
+ n->height : tree_g.line_height;
n = treeview_node_next(n, false);
}
@@ -560,22 +560,25 @@ nserror treeview_create_node_folder(treeview *tree,
treeview_insert_node(n, relation, rel);
- *folder = n;
+ if (n->parent->flags & TREE_NODE_EXPANDED) {
+ /* Inform front end of change in dimensions */
+ if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
+ tree->cw_t->update_size(tree->cw_h, -1,
+ tree->root->height);
- /* Inform front end of change in dimensions */
- if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
- tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
-
- /* Inform front end of change in dimensions */
- if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
- struct rect r;
- r.x0 = 0;
- r.y0 = treeview_node_y(tree, n);
- r.x1 = REDRAW_MAX;
- r.y1 = tree->root->height;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ /* Redraw */
+ if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
+ struct rect r;
+ r.x0 = 0;
+ r.y0 = treeview_node_y(tree, n);
+ r.x1 = REDRAW_MAX;
+ r.y1 = tree->root->height;
+ tree->cw_t->redraw_request(tree->cw_h, r);
+ }
}
+ *folder = n;
+
return NSERROR_OK;
}
@@ -613,6 +616,16 @@ nserror treeview_update_node_folder(treeview *tree,
folder->text.width = 0;
}
+ /* Redraw */
+ if (folder->parent->flags & TREE_NODE_EXPANDED) {
+ struct rect r;
+ r.x0 = 0;
+ r.y0 = treeview_node_y(tree, folder);
+ r.x1 = REDRAW_MAX;
+ r.y1 = r.y0 + tree_g.line_height;
+ tree->cw_t->redraw_request(tree->cw_h, r);
+ }
+
return NSERROR_OK;
}
@@ -674,6 +687,16 @@ nserror treeview_update_node_entry(treeview *tree,
}
}
+ /* Redraw */
+ if (entry->parent->flags & TREE_NODE_EXPANDED) {
+ struct rect r;
+ r.x0 = 0;
+ r.y0 = treeview_node_y(tree, entry);
+ r.x1 = REDRAW_MAX;
+ r.y1 = r.y0 + entry->height;
+ tree->cw_t->redraw_request(tree->cw_h, r);
+ }
+
return NSERROR_OK;
}
@@ -743,22 +766,25 @@ nserror treeview_create_node_entry(treeview *tree,
treeview_insert_node(n, relation, rel);
- *entry = n;
-
- /* Inform front end of change in dimensions */
- if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
- tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
+ if (n->parent->flags & TREE_NODE_EXPANDED) {
+ /* Inform front end of change in dimensions */
+ if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
+ tree->cw_t->update_size(tree->cw_h, -1,
+ tree->root->height);
- /* Inform front end of change in dimensions */
- if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
- struct rect r;
- r.x0 = 0;
- r.y0 = treeview_node_y(tree, n);
- r.x1 = REDRAW_MAX;
- r.y1 = tree->root->height;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ /* Redraw */
+ if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
+ struct rect r;
+ r.x0 = 0;
+ r.y0 = treeview_node_y(tree, n);
+ r.x1 = REDRAW_MAX;
+ r.y1 = tree->root->height;
+ tree->cw_t->redraw_request(tree->cw_h, r);
+ }
}
+ *entry = n;
+
return NSERROR_OK;
}
@@ -1131,6 +1157,13 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n)
{
nserror err;
struct rect r;
+ treeview_node *p;
+
+ assert(tree != NULL);
+ assert(n != NULL);
+ assert(n->parent != NULL);
+
+ p = n->parent;
r.y0 = treeview_node_y(tree, n);
r.y1 = tree->root->height;
@@ -1146,9 +1179,11 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n)
}
/* Inform front end of change in dimensions */
- r.x0 = 0;
- r.x1 = REDRAW_MAX;
- tree->cw_t->redraw_request(tree->cw_h, r);
+ if (p->flags & TREE_NODE_EXPANDED) {
+ r.x0 = 0;
+ r.x1 = REDRAW_MAX;
+ tree->cw_t->redraw_request(tree->cw_h, r);
+ }
return NSERROR_OK;
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=67cbc779bece6e105f1...
commit 67cbc779bece6e105f1a980fa34fd3bcdd490959
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Make client-requested node deletions issue a redraw request.
diff --git a/desktop/treeview.c b/desktop/treeview.c
index eca9dcc..fc72c2d 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -1130,6 +1130,9 @@ static nserror treeview_delete_empty_nodes(treeview *tree, bool interaction)
nserror treeview_delete_node(treeview *tree, treeview_node *n)
{
nserror err;
+ struct rect r;
+ r.y0 = treeview_node_y(tree, n);
+ r.y1 = tree->root->height;
err = treeview_delete_node_internal(tree, n, false);
if (err != NSERROR_OK)
@@ -1142,6 +1145,11 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n)
return err;
}
+ /* Inform front end of change in dimensions */
+ r.x0 = 0;
+ r.x1 = REDRAW_MAX;
+ tree->cw_t->redraw_request(tree->cw_h, r);
+
return NSERROR_OK;
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=db2f47ab2719aa9e6ac...
commit db2f47ab2719aa9e6ac2bd3a0107743c6921622d
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Use treeview height instead of REDRAW_MAX for rectangle's y1.
diff --git a/desktop/treeview.c b/desktop/treeview.c
index 556737f..eca9dcc 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -2929,6 +2929,8 @@ static nserror treeview_node_mouse_action_cb(treeview_node *node, void *ctx,
if (((node->type == TREE_NODE_FOLDER) &&
(ma->mouse & BROWSER_MOUSE_DOUBLE_CLICK) && click) ||
(part == TV_NODE_PART_TOGGLE && click)) {
+ int h = ma->tree->root->height;
+
/* Clear any existing selection */
redraw |= treeview_clear_selection(ma->tree, &r);
@@ -2945,7 +2947,7 @@ static nserror treeview_node_mouse_action_cb(treeview_node *node, void *ctx,
/* Set up redraw */
if (!redraw || r.y0 > ma->current_y)
r.y0 = ma->current_y;
- r.y1 = REDRAW_MAX;
+ r.y1 = h > ma->tree->root->height ? h : ma->tree->root->height;
redraw = true;
} else if ((node->type == TREE_NODE_ENTRY) &&
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=8cc6ac8980b8d4459a2...
commit 8cc6ac8980b8d4459a2272dfdeedd04d34e152f2
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Redraw on node creation, unless suppressed.
diff --git a/desktop/treeview.c b/desktop/treeview.c
index a23ddc8..556737f 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -202,6 +202,101 @@ static struct treeview_text treeview_furn[TREE_FURN_LAST] = {
};
+/* Find the next node in depth first tree order
+ *
+ * \param node Start node
+ * \param full Iff true, visit children of collapsed nodes
+ * \param next Updated to next node, or NULL if 'node' is last node
+ * \return NSERROR_OK on success, or appropriate error otherwise
+ */
+static inline treeview_node * treeview_node_next(treeview_node *node, bool full)
+{
+ assert(node != NULL);
+
+ if ((full || (node->flags & TREE_NODE_EXPANDED)) &&
+ node->children != NULL) {
+ /* Next node is child */
+ node = node->children;
+ } else {
+ /* No children. As long as we're not at the root,
+ * go to next sibling if present, or nearest ancestor
+ * with a next sibling. */
+
+ while (node != NULL && node->type != TREE_NODE_ROOT &&
+ node->next_sib == NULL) {
+ node = node->parent;
+ }
+
+ if (node->type == TREE_NODE_ROOT) {
+ node = NULL;
+
+ } else if (node != NULL) {
+ node = node->next_sib;
+ }
+ }
+
+ return node;
+}
+
+
+/* Find node at given y-position
+ *
+ * \param tree Treeview object to delete node from
+ * \param target_y Target y-position
+ * \return node at y_target
+ */
+static treeview_node * treeview_y_node(treeview *tree, int target_y)
+{
+ treeview_node *n;
+ int y = 0;
+ int h;
+
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ n = treeview_node_next(tree->root, false);
+
+ while (n != NULL) {
+ h = (n->type == TREE_NODE_ENTRY) ?
+ n->height : tree_g.line_height;
+ if (target_y >= y && target_y < y + h)
+ return n;
+ y += h;
+
+ n = treeview_node_next(n, false);
+ }
+
+ return NULL;
+}
+
+
+/* Find y position of the top of a node
+ *
+ * \param tree Treeview object to delete node from
+ * \param node Node to get position of
+ * \return node's y position
+ */
+static int treeview_node_y(treeview *tree, treeview_node *node)
+{
+ treeview_node *n;
+ int y = 0;
+
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ n = treeview_node_next(tree->root, false);
+
+ while (n != NULL && n != node) {
+ y += (node->type == TREE_NODE_ENTRY) ?
+ node->height : tree_g.line_height;
+
+ n = treeview_node_next(n, false);
+ }
+
+ return y;
+}
+
+
/* Walk a treeview subtree, calling a callback at each node (depth first)
*
* \param root Root to walk tree from (doesn't get a callback call)
@@ -471,6 +566,16 @@ nserror treeview_create_node_folder(treeview *tree,
if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
+ /* Inform front end of change in dimensions */
+ if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
+ struct rect r;
+ r.x0 = 0;
+ r.y0 = treeview_node_y(tree, n);
+ r.x1 = REDRAW_MAX;
+ r.y1 = tree->root->height;
+ tree->cw_t->redraw_request(tree->cw_h, r);
+ }
+
return NSERROR_OK;
}
@@ -644,102 +749,17 @@ nserror treeview_create_node_entry(treeview *tree,
if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
- return NSERROR_OK;
-}
-
-
-/* Find the next node in depth first tree order
- *
- * \param node Start node
- * \param full Iff true, visit children of collapsed nodes
- * \param next Updated to next node, or NULL if 'node' is last node
- * \return NSERROR_OK on success, or appropriate error otherwise
- */
-static inline treeview_node * treeview_node_next(treeview_node *node, bool full)
-{
- assert(node != NULL);
-
- if ((full || (node->flags & TREE_NODE_EXPANDED)) &&
- node->children != NULL) {
- /* Next node is child */
- node = node->children;
- } else {
- /* No children. As long as we're not at the root,
- * go to next sibling if present, or nearest ancestor
- * with a next sibling. */
-
- while (node != NULL && node->type != TREE_NODE_ROOT &&
- node->next_sib == NULL) {
- node = node->parent;
- }
-
- if (node->type == TREE_NODE_ROOT) {
- node = NULL;
-
- } else if (node != NULL) {
- node = node->next_sib;
- }
- }
-
- return node;
-}
-
-
-/* Find node at given y-position
- *
- * \param tree Treeview object to delete node from
- * \param target_y Target y-position
- * \return node at y_target
- */
-static treeview_node * treeview_y_node(treeview *tree, int target_y)
-{
- treeview_node *n;
- int y = 0;
- int h;
-
- assert(tree != NULL);
- assert(tree->root != NULL);
-
- n = treeview_node_next(tree->root, false);
-
- while (n != NULL) {
- h = (n->type == TREE_NODE_ENTRY) ?
- n->height : tree_g.line_height;
- if (target_y >= y && target_y < y + h)
- return n;
- y += h;
-
- n = treeview_node_next(n, false);
- }
-
- return NULL;
-}
-
-
-/* Find y position of the top of a node
- *
- * \param tree Treeview object to delete node from
- * \param node Node to get position of
- * \return node's y position
- */
-static int treeview_node_y(treeview *tree, treeview_node *node)
-{
- treeview_node *n;
- int y = 0;
-
- assert(tree != NULL);
- assert(tree->root != NULL);
-
- n = treeview_node_next(tree->root, false);
-
- while (n != NULL && n != node) {
- y += (node->type == TREE_NODE_ENTRY) ?
- node->height : tree_g.line_height;
-
- n = treeview_node_next(n, false);
+ /* Inform front end of change in dimensions */
+ if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
+ struct rect r;
+ r.x0 = 0;
+ r.y0 = treeview_node_y(tree, n);
+ r.x1 = REDRAW_MAX;
+ r.y1 = tree->root->height;
+ tree->cw_t->redraw_request(tree->cw_h, r);
}
- return y;
+ return NSERROR_OK;
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=afaf24378ba8de2e781...
commit afaf24378ba8de2e781801b270f2d124fcd6836c
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Add flag to suppress redraw on node creation.
diff --git a/desktop/cookie_manager.c b/desktop/cookie_manager.c
index ed39cee..e342a2b 100644
--- a/desktop/cookie_manager.c
+++ b/desktop/cookie_manager.c
@@ -332,7 +332,8 @@ static nserror cookie_manager_create_cookie_node(
parent->folder, TREE_REL_FIRST_CHILD,
cookie->data, cookie,
cm_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
cookie_manager_free_treeview_field_data(cookie);
free(cookie);
@@ -412,7 +413,8 @@ static nserror cookie_manager_create_domain_folder(
err = treeview_create_node_folder(cm_ctx.tree, &(f->folder),
NULL, TREE_REL_FIRST_CHILD, &f->data, f,
cm_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
free((void *)f->data.value);
free(f);
diff --git a/desktop/global_history.c b/desktop/global_history.c
index 3861ee2..66bf37d 100644
--- a/desktop/global_history.c
+++ b/desktop/global_history.c
@@ -198,7 +198,8 @@ static nserror global_history_create_dir(enum global_history_folders f)
&gh_ctx.folders[f].data,
&gh_ctx.folders[f],
gh_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
return err;
}
@@ -326,7 +327,8 @@ static nserror global_history_entry_insert(struct global_history_entry *e,
err = treeview_create_node_entry(gh_ctx.tree, &(e->entry),
parent, TREE_REL_FIRST_CHILD, e->data, e,
gh_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
return err;
}
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 79e1061..6ef8385 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -141,7 +141,8 @@ static nserror hotlist_entry_insert(struct hotlist_entry *e,
err = treeview_create_node_entry(hl_ctx.tree, &(e->entry),
relation, rel, e->data, e, hl_ctx.built ?
- TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
return err;
}
@@ -313,7 +314,8 @@ static nserror hotlist_add_folder_internal(
err = treeview_create_node_folder(hl_ctx.tree,
&n, relation, rel, &f->data, f, hl_ctx.built ?
- TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
free((void *)title); /* Eww */
free(f);
diff --git a/desktop/treeview.h b/desktop/treeview.h
index 0ac999a..6f44321 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -46,8 +46,9 @@ enum treeview_relationship {
typedef enum {
TREE_CREATE_NONE = (0), /* No flags set */
- TREE_CREATE_SUPPRESS_RESIZE = (1 << 0) /* Suppress callback */
-} treeview_node_create_flags; /**< Relationship between nodes */
+ TREE_CREATE_SUPPRESS_RESIZE = (1 << 0), /* Suppress callback */
+ TREE_CREATE_SUPPRESS_REDRAW = (1 << 1) /* Suppress callback */
+} treeview_node_create_flags; /**< Node creation settings */
typedef enum {
TREEVIEW_NO_FLAGS = (0), /**< No flags set */
-----------------------------------------------------------------------
Summary of changes:
desktop/cookie_manager.c | 6 +-
desktop/global_history.c | 6 +-
desktop/hotlist.c | 6 +-
desktop/treeview.c | 269 ++++++++++++++++++++++++++++-----------------
desktop/treeview.h | 5 +-
5 files changed, 182 insertions(+), 110 deletions(-)
diff --git a/desktop/cookie_manager.c b/desktop/cookie_manager.c
index ed39cee..e342a2b 100644
--- a/desktop/cookie_manager.c
+++ b/desktop/cookie_manager.c
@@ -332,7 +332,8 @@ static nserror cookie_manager_create_cookie_node(
parent->folder, TREE_REL_FIRST_CHILD,
cookie->data, cookie,
cm_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
cookie_manager_free_treeview_field_data(cookie);
free(cookie);
@@ -412,7 +413,8 @@ static nserror cookie_manager_create_domain_folder(
err = treeview_create_node_folder(cm_ctx.tree, &(f->folder),
NULL, TREE_REL_FIRST_CHILD, &f->data, f,
cm_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
free((void *)f->data.value);
free(f);
diff --git a/desktop/global_history.c b/desktop/global_history.c
index 3861ee2..66bf37d 100644
--- a/desktop/global_history.c
+++ b/desktop/global_history.c
@@ -198,7 +198,8 @@ static nserror global_history_create_dir(enum global_history_folders f)
&gh_ctx.folders[f].data,
&gh_ctx.folders[f],
gh_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
return err;
}
@@ -326,7 +327,8 @@ static nserror global_history_entry_insert(struct global_history_entry *e,
err = treeview_create_node_entry(gh_ctx.tree, &(e->entry),
parent, TREE_REL_FIRST_CHILD, e->data, e,
gh_ctx.built ? TREE_CREATE_NONE :
- TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
return err;
}
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 79e1061..6ef8385 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -141,7 +141,8 @@ static nserror hotlist_entry_insert(struct hotlist_entry *e,
err = treeview_create_node_entry(hl_ctx.tree, &(e->entry),
relation, rel, e->data, e, hl_ctx.built ?
- TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
return err;
}
@@ -313,7 +314,8 @@ static nserror hotlist_add_folder_internal(
err = treeview_create_node_folder(hl_ctx.tree,
&n, relation, rel, &f->data, f, hl_ctx.built ?
- TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE);
+ TREE_CREATE_NONE : TREE_CREATE_SUPPRESS_RESIZE |
+ TREE_CREATE_SUPPRESS_REDRAW);
if (err != NSERROR_OK) {
free((void *)title); /* Eww */
free(f);
diff --git a/desktop/treeview.c b/desktop/treeview.c
index a23ddc8..cb90bcc 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -202,6 +202,101 @@ static struct treeview_text treeview_furn[TREE_FURN_LAST] = {
};
+/* Find the next node in depth first tree order
+ *
+ * \param node Start node
+ * \param full Iff true, visit children of collapsed nodes
+ * \param next Updated to next node, or NULL if 'node' is last node
+ * \return NSERROR_OK on success, or appropriate error otherwise
+ */
+static inline treeview_node * treeview_node_next(treeview_node *node, bool full)
+{
+ assert(node != NULL);
+
+ if ((full || (node->flags & TREE_NODE_EXPANDED)) &&
+ node->children != NULL) {
+ /* Next node is child */
+ node = node->children;
+ } else {
+ /* No children. As long as we're not at the root,
+ * go to next sibling if present, or nearest ancestor
+ * with a next sibling. */
+
+ while (node != NULL && node->type != TREE_NODE_ROOT &&
+ node->next_sib == NULL) {
+ node = node->parent;
+ }
+
+ if (node->type == TREE_NODE_ROOT) {
+ node = NULL;
+
+ } else if (node != NULL) {
+ node = node->next_sib;
+ }
+ }
+
+ return node;
+}
+
+
+/* Find node at given y-position
+ *
+ * \param tree Treeview object to delete node from
+ * \param target_y Target y-position
+ * \return node at y_target
+ */
+static treeview_node * treeview_y_node(treeview *tree, int target_y)
+{
+ treeview_node *n;
+ int y = 0;
+ int h;
+
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ n = treeview_node_next(tree->root, false);
+
+ while (n != NULL) {
+ h = (n->type == TREE_NODE_ENTRY) ?
+ n->height : tree_g.line_height;
+ if (target_y >= y && target_y < y + h)
+ return n;
+ y += h;
+
+ n = treeview_node_next(n, false);
+ }
+
+ return NULL;
+}
+
+
+/* Find y position of the top of a node
+ *
+ * \param tree Treeview object to delete node from
+ * \param node Node to get position of
+ * \return node's y position
+ */
+static int treeview_node_y(treeview *tree, treeview_node *node)
+{
+ treeview_node *n;
+ int y = 0;
+
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ n = treeview_node_next(tree->root, false);
+
+ while (n != NULL && n != node) {
+ y += (n->type == TREE_NODE_ENTRY) ?
+ n->height : tree_g.line_height;
+
+ n = treeview_node_next(n, false);
+ }
+
+ return y;
+}
+
+
/* Walk a treeview subtree, calling a callback at each node (depth first)
*
* \param root Root to walk tree from (doesn't get a callback call)
@@ -465,11 +560,24 @@ nserror treeview_create_node_folder(treeview *tree,
treeview_insert_node(n, relation, rel);
- *folder = n;
+ if (n->parent->flags & TREE_NODE_EXPANDED) {
+ /* Inform front end of change in dimensions */
+ if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
+ tree->cw_t->update_size(tree->cw_h, -1,
+ tree->root->height);
- /* Inform front end of change in dimensions */
- if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
- tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
+ /* Redraw */
+ if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
+ struct rect r;
+ r.x0 = 0;
+ r.y0 = treeview_node_y(tree, n);
+ r.x1 = REDRAW_MAX;
+ r.y1 = tree->root->height;
+ tree->cw_t->redraw_request(tree->cw_h, r);
+ }
+ }
+
+ *folder = n;
return NSERROR_OK;
}
@@ -508,6 +616,16 @@ nserror treeview_update_node_folder(treeview *tree,
folder->text.width = 0;
}
+ /* Redraw */
+ if (folder->parent->flags & TREE_NODE_EXPANDED) {
+ struct rect r;
+ r.x0 = 0;
+ r.y0 = treeview_node_y(tree, folder);
+ r.x1 = REDRAW_MAX;
+ r.y1 = r.y0 + tree_g.line_height;
+ tree->cw_t->redraw_request(tree->cw_h, r);
+ }
+
return NSERROR_OK;
}
@@ -569,6 +687,16 @@ nserror treeview_update_node_entry(treeview *tree,
}
}
+ /* Redraw */
+ if (entry->parent->flags & TREE_NODE_EXPANDED) {
+ struct rect r;
+ r.x0 = 0;
+ r.y0 = treeview_node_y(tree, entry);
+ r.x1 = REDRAW_MAX;
+ r.y1 = r.y0 + entry->height;
+ tree->cw_t->redraw_request(tree->cw_h, r);
+ }
+
return NSERROR_OK;
}
@@ -638,108 +766,26 @@ nserror treeview_create_node_entry(treeview *tree,
treeview_insert_node(n, relation, rel);
- *entry = n;
-
- /* Inform front end of change in dimensions */
- if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
- tree->cw_t->update_size(tree->cw_h, -1, tree->root->height);
+ if (n->parent->flags & TREE_NODE_EXPANDED) {
+ /* Inform front end of change in dimensions */
+ if (!(flags & TREE_CREATE_SUPPRESS_RESIZE))
+ tree->cw_t->update_size(tree->cw_h, -1,
+ tree->root->height);
- return NSERROR_OK;
-}
-
-
-/* Find the next node in depth first tree order
- *
- * \param node Start node
- * \param full Iff true, visit children of collapsed nodes
- * \param next Updated to next node, or NULL if 'node' is last node
- * \return NSERROR_OK on success, or appropriate error otherwise
- */
-static inline treeview_node * treeview_node_next(treeview_node *node, bool full)
-{
- assert(node != NULL);
-
- if ((full || (node->flags & TREE_NODE_EXPANDED)) &&
- node->children != NULL) {
- /* Next node is child */
- node = node->children;
- } else {
- /* No children. As long as we're not at the root,
- * go to next sibling if present, or nearest ancestor
- * with a next sibling. */
-
- while (node != NULL && node->type != TREE_NODE_ROOT &&
- node->next_sib == NULL) {
- node = node->parent;
- }
-
- if (node->type == TREE_NODE_ROOT) {
- node = NULL;
-
- } else if (node != NULL) {
- node = node->next_sib;
+ /* Redraw */
+ if (!(flags & TREE_CREATE_SUPPRESS_REDRAW)) {
+ struct rect r;
+ r.x0 = 0;
+ r.y0 = treeview_node_y(tree, n);
+ r.x1 = REDRAW_MAX;
+ r.y1 = tree->root->height;
+ tree->cw_t->redraw_request(tree->cw_h, r);
}
}
- return node;
-}
-
-
-/* Find node at given y-position
- *
- * \param tree Treeview object to delete node from
- * \param target_y Target y-position
- * \return node at y_target
- */
-static treeview_node * treeview_y_node(treeview *tree, int target_y)
-{
- treeview_node *n;
- int y = 0;
- int h;
-
- assert(tree != NULL);
- assert(tree->root != NULL);
-
- n = treeview_node_next(tree->root, false);
-
- while (n != NULL) {
- h = (n->type == TREE_NODE_ENTRY) ?
- n->height : tree_g.line_height;
- if (target_y >= y && target_y < y + h)
- return n;
- y += h;
-
- n = treeview_node_next(n, false);
- }
-
- return NULL;
-}
-
-
-/* Find y position of the top of a node
- *
- * \param tree Treeview object to delete node from
- * \param node Node to get position of
- * \return node's y position
- */
-static int treeview_node_y(treeview *tree, treeview_node *node)
-{
- treeview_node *n;
- int y = 0;
-
- assert(tree != NULL);
- assert(tree->root != NULL);
-
- n = treeview_node_next(tree->root, false);
-
- while (n != NULL && n != node) {
- y += (node->type == TREE_NODE_ENTRY) ?
- node->height : tree_g.line_height;
-
- n = treeview_node_next(n, false);
- }
+ *entry = n;
- return y;
+ return NSERROR_OK;
}
@@ -1110,6 +1156,16 @@ static nserror treeview_delete_empty_nodes(treeview *tree, bool interaction)
nserror treeview_delete_node(treeview *tree, treeview_node *n)
{
nserror err;
+ struct rect r;
+ treeview_node *p;
+
+ assert(tree != NULL);
+ assert(n != NULL);
+ assert(n->parent != NULL);
+
+ p = n->parent;
+ r.y0 = treeview_node_y(tree, n);
+ r.y1 = tree->root->height;
err = treeview_delete_node_internal(tree, n, false);
if (err != NSERROR_OK)
@@ -1122,6 +1178,13 @@ nserror treeview_delete_node(treeview *tree, treeview_node *n)
return err;
}
+ /* Inform front end of change in dimensions */
+ if (p->flags & TREE_NODE_EXPANDED) {
+ r.x0 = 0;
+ r.x1 = REDRAW_MAX;
+ tree->cw_t->redraw_request(tree->cw_h, r);
+ }
+
return NSERROR_OK;
}
@@ -2909,6 +2972,8 @@ static nserror treeview_node_mouse_action_cb(treeview_node *node, void *ctx,
if (((node->type == TREE_NODE_FOLDER) &&
(ma->mouse & BROWSER_MOUSE_DOUBLE_CLICK) && click) ||
(part == TV_NODE_PART_TOGGLE && click)) {
+ int h = ma->tree->root->height;
+
/* Clear any existing selection */
redraw |= treeview_clear_selection(ma->tree, &r);
@@ -2925,7 +2990,7 @@ static nserror treeview_node_mouse_action_cb(treeview_node *node, void *ctx,
/* Set up redraw */
if (!redraw || r.y0 > ma->current_y)
r.y0 = ma->current_y;
- r.y1 = REDRAW_MAX;
+ r.y1 = h > ma->tree->root->height ? h : ma->tree->root->height;
redraw = true;
} else if ((node->type == TREE_NODE_ENTRY) &&
diff --git a/desktop/treeview.h b/desktop/treeview.h
index 0ac999a..6f44321 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -46,8 +46,9 @@ enum treeview_relationship {
typedef enum {
TREE_CREATE_NONE = (0), /* No flags set */
- TREE_CREATE_SUPPRESS_RESIZE = (1 << 0) /* Suppress callback */
-} treeview_node_create_flags; /**< Relationship between nodes */
+ TREE_CREATE_SUPPRESS_RESIZE = (1 << 0), /* Suppress callback */
+ TREE_CREATE_SUPPRESS_REDRAW = (1 << 1) /* Suppress callback */
+} treeview_node_create_flags; /**< Node creation settings */
typedef enum {
TREEVIEW_NO_FLAGS = (0), /**< No flags set */
--
NetSurf Browser
10 years
netsurf: branch master updated. release/3.0-474-g895954a
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/895954a1e1de4da43cbba...
...commit http://git.netsurf-browser.org/netsurf.git/commit/895954a1e1de4da43cbba6c...
...tree http://git.netsurf-browser.org/netsurf.git/tree/895954a1e1de4da43cbba6cbe...
The branch, master has been updated
via 895954a1e1de4da43cbba6cbe431983d43dda8c6 (commit)
via 7d0f0b08e2c7b6ca6d5f420ed34e37ed2f0934cb (commit)
via 38e4bbe74dfc687bba5b134ecdc980005fb05474 (commit)
via bc0571b9dc2719ac8218f9523627d55ff1016b04 (commit)
from c56560c2ac0e4a7ce61bb987b941f7ac60e666a7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=895954a1e1de4da43cb...
commit 895954a1e1de4da43cbba6cbe431983d43dda8c6
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Don't bother trying to keep old hotlist in sync -- the old one isn't saved when new one is used anyway.
diff --git a/desktop/hotlist_old.c b/desktop/hotlist_old.c
index d04704d..7be9499 100644
--- a/desktop/hotlist_old.c
+++ b/desktop/hotlist_old.c
@@ -403,6 +403,7 @@ void hotlist_old_add_folder(bool selected)
/* Update new hotlist */
if (nsoption_bool(temp_treeview_test) != false) {
hotlist_add_folder(NULL, false, 0);
+ return;
}
creating_node = true;
@@ -460,13 +461,15 @@ void hotlist_old_add_entry(bool selected)
if (nsurl_create("http://netsurf-browser.org/", &url) != NSERROR_OK)
return;
- node = tree_create_URL_node(hotlist_old_tree, parent, url, "Untitled",
- hotlist_old_node_callback, NULL);
/* Update new hotlist */
if (nsoption_bool(temp_treeview_test) != false) {
hotlist_add_entry(url, "New untitled entry", false, 0);
+ nsurl_unref(url);
+ return;
}
+ node = tree_create_URL_node(hotlist_old_tree, parent, url, "Untitled",
+ hotlist_old_node_callback, NULL);
nsurl_unref(url);
@@ -491,6 +494,13 @@ void hotlist_old_add_page(const char *url)
if (nsurl_create(url, &nsurl) != NSERROR_OK)
return;
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_add_url(nsurl);
+ nsurl_unref(nsurl);
+ return;
+ }
+
data = urldb_get_url_data(nsurl);
if (data == NULL)
return;
@@ -500,10 +510,6 @@ void hotlist_old_add_page(const char *url)
hotlist_old_node_callback, NULL);
tree_update_URL_node(hotlist_old_tree, node, nsurl, data);
- /* Update new hotlist */
- if (nsoption_bool(temp_treeview_test) != false)
- hotlist_add_url(nsurl);
-
nsurl_unref(nsurl);
}
@@ -529,6 +535,8 @@ void hotlist_old_add_page_xy(const char *url, int x, int y)
/* Update new hotlist */
if (nsoption_bool(temp_treeview_test) != false) {
hotlist_add_entry(nsurl, NULL, true, y);
+ nsurl_unref(nsurl);
+ return;
}
data = urldb_get_url_data(nsurl);
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=7d0f0b08e2c7b6ca6d5...
commit 7d0f0b08e2c7b6ca6d5f420ed34e37ed2f0934cb
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Redirect most interaction with the old hotlist to the new one, when the new one is enabled.
diff --git a/desktop/hotlist_old.c b/desktop/hotlist_old.c
index d48f6f6..d04704d 100644
--- a/desktop/hotlist_old.c
+++ b/desktop/hotlist_old.c
@@ -28,6 +28,7 @@
#include "desktop/hotlist.h"
#include "desktop/hotlist_old.h"
#include "desktop/plotters.h"
+#include "desktop/textinput.h"
#include "desktop/tree.h"
#include "desktop/tree_url_node.h"
@@ -266,6 +267,11 @@ void hotlist_old_visited(hlcache_handle *content)
*/
bool hotlist_old_export(const char *path)
{
+ if (nsoption_bool(temp_treeview_test) != false) {
+ nserror err;
+ err = hotlist_export(path, NULL);
+ return (err == NSERROR_OK);
+ }
return tree_urlfile_save(hotlist_old_tree, path, "NetSurf hotlist");
}
@@ -278,6 +284,12 @@ void hotlist_old_edit_selected(void)
struct node *node;
struct node_element *element;
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_edit_selection();
+ return;
+ }
+
node = tree_get_selected_node(hotlist_old_tree_root);
if (node != NULL) {
@@ -292,6 +304,10 @@ void hotlist_old_edit_selected(void)
*/
void hotlist_old_delete_selected(void)
{
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_keypress(KEY_DELETE_LEFT);
+ return;
+ }
tree_delete_selected_nodes(hotlist_old_tree, hotlist_old_tree_root);
}
@@ -300,6 +316,10 @@ void hotlist_old_delete_selected(void)
*/
void hotlist_old_select_all(void)
{
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_keypress(KEY_SELECT_ALL);
+ return;
+ }
tree_set_node_selected(hotlist_old_tree, hotlist_old_tree_root,
true, true);
}
@@ -309,6 +329,10 @@ void hotlist_old_select_all(void)
*/
void hotlist_old_clear_selection(void)
{
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_keypress(KEY_CLEAR_SELECTION);
+ return;
+ }
tree_set_node_selected(hotlist_old_tree, hotlist_old_tree_root,
true, false);
}
@@ -376,6 +400,11 @@ void hotlist_old_add_folder(bool selected)
{
struct node *node, *parent = NULL;
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_add_folder(NULL, false, 0);
+ }
+
creating_node = true;
if (selected == true) {
@@ -434,6 +463,11 @@ void hotlist_old_add_entry(bool selected)
node = tree_create_URL_node(hotlist_old_tree, parent, url, "Untitled",
hotlist_old_node_callback, NULL);
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_add_entry(url, "New untitled entry", false, 0);
+ }
+
nsurl_unref(url);
if (node == NULL)
@@ -492,6 +526,11 @@ void hotlist_old_add_page_xy(const char *url, int x, int y)
if (nsurl_create(url, &nsurl) != NSERROR_OK)
return;
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_add_entry(nsurl, NULL, true, y);
+ }
+
data = urldb_get_url_data(nsurl);
if (data == NULL) {
urldb_add_url(nsurl);
@@ -514,6 +553,10 @@ void hotlist_old_add_page_xy(const char *url, int x, int y)
*/
void hotlist_old_launch_selected(bool tabs)
{
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_keypress(KEY_CR);
+ return;
+ }
tree_launch_selected(hotlist_old_tree, tabs);
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=38e4bbe74dfc687bba5...
commit 38e4bbe74dfc687bba5b134ecdc980005fb05474
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Make clear that title is copied.
diff --git a/desktop/hotlist.h b/desktop/hotlist.h
index df34054..171fdd7 100644
--- a/desktop/hotlist.h
+++ b/desktop/hotlist.h
@@ -87,7 +87,7 @@ void hotlist_update_url(nsurl *url);
* Add an entry to the hotlist for given Title/URL.
*
* \param url URL for entry to be added, or NULL
- * \param title Title for entry being added, or NULL
+ * \param title Title for entry being added (copied), or NULL
* \param at_y Iff true, insert at y-offest
* \param y Y-offset in px from top of hotlist. Ignored if (!at_y).
* \return NSERROR_OK on success, appropriate error otherwise
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=bc0571b9dc2719ac821...
commit bc0571b9dc2719ac8218f9523627d55ff1016b04
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Better handling of added entry titles.
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 2eb7235..79e1061 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -296,9 +296,9 @@ static nserror hotlist_add_folder_internal(
if (title == NULL) {
/* TODO: use messages */
title = strdup("New folder");
- }
- if (title == NULL) {
- return NSERROR_NOMEM;
+ if (title == NULL) {
+ return NSERROR_NOMEM;
+ }
}
/* Create the title field */
@@ -1330,13 +1330,21 @@ nserror hotlist_add_entry(nsurl *url, const char *title, bool at_y, int y)
nsurl_ref(url);
}
+ if (title != NULL) {
+ title = strdup(title);
+ if (title == NULL) {
+ nsurl_ref(url);
+ return NSERROR_NOMEM;
+ }
+ }
+
err = treeview_get_relation(hl_ctx.tree, &relation, &rel, at_y, y);
if (err != NSERROR_OK) {
nsurl_unref(url);
return err;
}
- err = hotlist_add_entry_internal(url, NULL, NULL,
+ err = hotlist_add_entry_internal(url, title, NULL,
relation, rel, &entry);
if (err != NSERROR_OK) {
nsurl_unref(url);
-----------------------------------------------------------------------
Summary of changes:
desktop/hotlist.c | 16 ++++++++++---
desktop/hotlist.h | 2 +-
desktop/hotlist_old.c | 59 +++++++++++++++++++++++++++++++++++++++++++++---
3 files changed, 68 insertions(+), 9 deletions(-)
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 2eb7235..79e1061 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -296,9 +296,9 @@ static nserror hotlist_add_folder_internal(
if (title == NULL) {
/* TODO: use messages */
title = strdup("New folder");
- }
- if (title == NULL) {
- return NSERROR_NOMEM;
+ if (title == NULL) {
+ return NSERROR_NOMEM;
+ }
}
/* Create the title field */
@@ -1330,13 +1330,21 @@ nserror hotlist_add_entry(nsurl *url, const char *title, bool at_y, int y)
nsurl_ref(url);
}
+ if (title != NULL) {
+ title = strdup(title);
+ if (title == NULL) {
+ nsurl_ref(url);
+ return NSERROR_NOMEM;
+ }
+ }
+
err = treeview_get_relation(hl_ctx.tree, &relation, &rel, at_y, y);
if (err != NSERROR_OK) {
nsurl_unref(url);
return err;
}
- err = hotlist_add_entry_internal(url, NULL, NULL,
+ err = hotlist_add_entry_internal(url, title, NULL,
relation, rel, &entry);
if (err != NSERROR_OK) {
nsurl_unref(url);
diff --git a/desktop/hotlist.h b/desktop/hotlist.h
index df34054..171fdd7 100644
--- a/desktop/hotlist.h
+++ b/desktop/hotlist.h
@@ -87,7 +87,7 @@ void hotlist_update_url(nsurl *url);
* Add an entry to the hotlist for given Title/URL.
*
* \param url URL for entry to be added, or NULL
- * \param title Title for entry being added, or NULL
+ * \param title Title for entry being added (copied), or NULL
* \param at_y Iff true, insert at y-offest
* \param y Y-offset in px from top of hotlist. Ignored if (!at_y).
* \return NSERROR_OK on success, appropriate error otherwise
diff --git a/desktop/hotlist_old.c b/desktop/hotlist_old.c
index d48f6f6..7be9499 100644
--- a/desktop/hotlist_old.c
+++ b/desktop/hotlist_old.c
@@ -28,6 +28,7 @@
#include "desktop/hotlist.h"
#include "desktop/hotlist_old.h"
#include "desktop/plotters.h"
+#include "desktop/textinput.h"
#include "desktop/tree.h"
#include "desktop/tree_url_node.h"
@@ -266,6 +267,11 @@ void hotlist_old_visited(hlcache_handle *content)
*/
bool hotlist_old_export(const char *path)
{
+ if (nsoption_bool(temp_treeview_test) != false) {
+ nserror err;
+ err = hotlist_export(path, NULL);
+ return (err == NSERROR_OK);
+ }
return tree_urlfile_save(hotlist_old_tree, path, "NetSurf hotlist");
}
@@ -278,6 +284,12 @@ void hotlist_old_edit_selected(void)
struct node *node;
struct node_element *element;
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_edit_selection();
+ return;
+ }
+
node = tree_get_selected_node(hotlist_old_tree_root);
if (node != NULL) {
@@ -292,6 +304,10 @@ void hotlist_old_edit_selected(void)
*/
void hotlist_old_delete_selected(void)
{
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_keypress(KEY_DELETE_LEFT);
+ return;
+ }
tree_delete_selected_nodes(hotlist_old_tree, hotlist_old_tree_root);
}
@@ -300,6 +316,10 @@ void hotlist_old_delete_selected(void)
*/
void hotlist_old_select_all(void)
{
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_keypress(KEY_SELECT_ALL);
+ return;
+ }
tree_set_node_selected(hotlist_old_tree, hotlist_old_tree_root,
true, true);
}
@@ -309,6 +329,10 @@ void hotlist_old_select_all(void)
*/
void hotlist_old_clear_selection(void)
{
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_keypress(KEY_CLEAR_SELECTION);
+ return;
+ }
tree_set_node_selected(hotlist_old_tree, hotlist_old_tree_root,
true, false);
}
@@ -376,6 +400,12 @@ void hotlist_old_add_folder(bool selected)
{
struct node *node, *parent = NULL;
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_add_folder(NULL, false, 0);
+ return;
+ }
+
creating_node = true;
if (selected == true) {
@@ -431,6 +461,13 @@ void hotlist_old_add_entry(bool selected)
if (nsurl_create("http://netsurf-browser.org/", &url) != NSERROR_OK)
return;
+
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_add_entry(url, "New untitled entry", false, 0);
+ nsurl_unref(url);
+ return;
+ }
node = tree_create_URL_node(hotlist_old_tree, parent, url, "Untitled",
hotlist_old_node_callback, NULL);
@@ -457,6 +494,13 @@ void hotlist_old_add_page(const char *url)
if (nsurl_create(url, &nsurl) != NSERROR_OK)
return;
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_add_url(nsurl);
+ nsurl_unref(nsurl);
+ return;
+ }
+
data = urldb_get_url_data(nsurl);
if (data == NULL)
return;
@@ -466,10 +510,6 @@ void hotlist_old_add_page(const char *url)
hotlist_old_node_callback, NULL);
tree_update_URL_node(hotlist_old_tree, node, nsurl, data);
- /* Update new hotlist */
- if (nsoption_bool(temp_treeview_test) != false)
- hotlist_add_url(nsurl);
-
nsurl_unref(nsurl);
}
@@ -492,6 +532,13 @@ void hotlist_old_add_page_xy(const char *url, int x, int y)
if (nsurl_create(url, &nsurl) != NSERROR_OK)
return;
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_add_entry(nsurl, NULL, true, y);
+ nsurl_unref(nsurl);
+ return;
+ }
+
data = urldb_get_url_data(nsurl);
if (data == NULL) {
urldb_add_url(nsurl);
@@ -514,6 +561,10 @@ void hotlist_old_add_page_xy(const char *url, int x, int y)
*/
void hotlist_old_launch_selected(bool tabs)
{
+ if (nsoption_bool(temp_treeview_test) != false) {
+ hotlist_keypress(KEY_CR);
+ return;
+ }
tree_launch_selected(hotlist_old_tree, tabs);
}
--
NetSurf Browser
10 years
netsurf: branch master updated. release/3.0-470-gc56560c
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/c56560c2ac0e4a7ce61bb...
...commit http://git.netsurf-browser.org/netsurf.git/commit/c56560c2ac0e4a7ce61bb98...
...tree http://git.netsurf-browser.org/netsurf.git/tree/c56560c2ac0e4a7ce61bb987b...
The branch, master has been updated
via c56560c2ac0e4a7ce61bb987b941f7ac60e666a7 (commit)
via a1eb1dec7341a22b04317b60f8ef82b95d742bb1 (commit)
via 5ca6862a87ae3ee313c453331d35711e53f98e2e (commit)
from 7a25b6aaee1a3793a3e04f7ef0ce0ef18aabd3ed (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=c56560c2ac0e4a7ce61...
commit c56560c2ac0e4a7ce61bb987b941f7ac60e666a7
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Suppress most fbtk logging when FBTK_LOGGING is unset.
diff --git a/framebuffer/fbtk/fbtk.c b/framebuffer/fbtk/fbtk.c
index 817d6f5..1ee3b4d 100644
--- a/framebuffer/fbtk/fbtk.c
+++ b/framebuffer/fbtk/fbtk.c
@@ -100,12 +100,14 @@ fbtk_request_redraw(fbtk_widget_t *widget)
widget->redraw.width = widget->width;
widget->redraw.height = widget->height;
+#ifdef FBTK_LOGGING
LOG(("redrawing %p %d,%d %d,%d",
widget,
widget->redraw.x,
widget->redraw.y,
widget->redraw.width,
widget->redraw.height));
+#endif
cwidget = widget->last_child;
while (cwidget != NULL) {
@@ -534,7 +536,9 @@ fbtk_widget_new(fbtk_widget_t *parent,
if (neww == NULL)
return NULL;
+#ifdef FBTK_LOGGING
LOG(("creating %p %d,%d %d,%d", neww, x, y, width, height));
+#endif
/* make new window fit inside parent */
if (width == 0) {
@@ -555,8 +559,9 @@ fbtk_widget_new(fbtk_widget_t *parent,
height = parent->height - y;
}
-
+#ifdef FBTK_LOGGING
LOG(("using %p %d,%d %d,%d", neww, x, y, width, height));
+#endif
/* set values */
neww->type = type;
neww->x = x;
@@ -614,9 +619,11 @@ do_redraw(nsfb_t *nsfb, fbtk_widget_t *widget)
plot_ctx.x1 = plot_ctx.x0 + widget->redraw.width;
plot_ctx.y1 = plot_ctx.y0 + widget->redraw.height;
+#ifdef FBTK_LOGGING
LOG(("clipping %p %d,%d %d,%d",
widget, plot_ctx.x0, plot_ctx.y0,
plot_ctx.x1, plot_ctx.y1));
+#endif
if (nsfb_plot_set_clip(nsfb, &plot_ctx) == true) {
fbtk_post_callback(widget, FBTK_CBT_REDRAW);
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=a1eb1dec7341a22b043...
commit a1eb1dec7341a22b04317b60f8ef82b95d742bb1
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
LOG macro terminates line itself.
diff --git a/framebuffer/font_freetype.c b/framebuffer/font_freetype.c
index 87751a3..150d203 100644
--- a/framebuffer/font_freetype.c
+++ b/framebuffer/font_freetype.c
@@ -107,12 +107,12 @@ static FT_Error ft_face_requester(FTC_FaceID face_id, FT_Library library, FT_Po
error = FT_New_Face(library, fb_face->fontfile, fb_face->index, face);
if (error) {
- LOG(("Could not find font (code %d)\n", error));
+ LOG(("Could not find font (code %d)", error));
} else {
error = FT_Select_Charmap(*face, FT_ENCODING_UNICODE);
if (error) {
- LOG(("Could not select charmap (code %d)\n", error));
+ LOG(("Could not select charmap (code %d)", error));
} else {
for (cidx = 0; cidx < (*face)->num_charmaps; cidx++) {
if ((*face)->charmap == (*face)->charmaps[cidx]) {
@@ -122,7 +122,7 @@ static FT_Error ft_face_requester(FTC_FaceID face_id, FT_Library library, FT_Po
}
}
}
- LOG(("Loaded face from %s\n", fb_face->fontfile));
+ LOG(("Loaded face from %s", fb_face->fontfile));
return error;
}
@@ -147,7 +147,7 @@ fb_new_face(const char *option, const char *resname, const char *fontname)
error = FTC_Manager_LookupFace(ft_cmanager, (FTC_FaceID)newf, &aface);
if (error) {
- LOG(("Could not find font face %s (code %d)\n", fontname, error));
+ LOG(("Could not find font face %s (code %d)", fontname, error));
free(newf);
newf = NULL;
}
@@ -166,7 +166,7 @@ bool fb_font_init(void)
/* freetype library initialise */
error = FT_Init_FreeType( &library );
if (error) {
- LOG(("Freetype could not initialised (code %d)\n", error));
+ LOG(("Freetype could not initialised (code %d)", error));
return false;
}
@@ -186,7 +186,7 @@ bool fb_font_init(void)
NULL,
&ft_cmanager);
if (error) {
- LOG(("Freetype could not initialise cache manager (code %d)\n", error));
+ LOG(("Freetype could not initialise cache manager (code %d)", error));
FT_Done_FreeType(library);
return false;
}
@@ -203,7 +203,7 @@ bool fb_font_init(void)
NETSURF_FB_FONT_SANS_SERIF);
if (fb_face == NULL) {
/* The sans serif font is the default and must be found. */
- LOG(("Could not find the default font\n"));
+ LOG(("Could not find the default font"));
FTC_Manager_Done(ft_cmanager);
FT_Done_FreeType(library);
return false;
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=5ca6862a87ae3ee313c...
commit 5ca6862a87ae3ee313c453331d35711e53f98e2e
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
FONT_SIZE_SCALE is for preserving fractional parts, so use it properly.
diff --git a/framebuffer/fbtk/text.c b/framebuffer/fbtk/text.c
index 4749991..f3c88ba 100644
--- a/framebuffer/fbtk/text.c
+++ b/framebuffer/fbtk/text.c
@@ -71,7 +71,7 @@ fb_text_font_style(fbtk_widget_t *widget, int *font_height, int *padding,
#endif
font_style->family = PLOT_FONT_FAMILY_SANS_SERIF;
- font_style->size = px_to_pt(*font_height) * FONT_SIZE_SCALE;
+ font_style->size = px_to_pt(*font_height * FONT_SIZE_SCALE);
font_style->weight = 400;
font_style->flags = FONTF_NONE;
font_style->background = widget->bg;
-----------------------------------------------------------------------
Summary of changes:
framebuffer/fbtk/fbtk.c | 9 ++++++++-
framebuffer/fbtk/text.c | 2 +-
framebuffer/font_freetype.c | 14 +++++++-------
3 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/framebuffer/fbtk/fbtk.c b/framebuffer/fbtk/fbtk.c
index 817d6f5..1ee3b4d 100644
--- a/framebuffer/fbtk/fbtk.c
+++ b/framebuffer/fbtk/fbtk.c
@@ -100,12 +100,14 @@ fbtk_request_redraw(fbtk_widget_t *widget)
widget->redraw.width = widget->width;
widget->redraw.height = widget->height;
+#ifdef FBTK_LOGGING
LOG(("redrawing %p %d,%d %d,%d",
widget,
widget->redraw.x,
widget->redraw.y,
widget->redraw.width,
widget->redraw.height));
+#endif
cwidget = widget->last_child;
while (cwidget != NULL) {
@@ -534,7 +536,9 @@ fbtk_widget_new(fbtk_widget_t *parent,
if (neww == NULL)
return NULL;
+#ifdef FBTK_LOGGING
LOG(("creating %p %d,%d %d,%d", neww, x, y, width, height));
+#endif
/* make new window fit inside parent */
if (width == 0) {
@@ -555,8 +559,9 @@ fbtk_widget_new(fbtk_widget_t *parent,
height = parent->height - y;
}
-
+#ifdef FBTK_LOGGING
LOG(("using %p %d,%d %d,%d", neww, x, y, width, height));
+#endif
/* set values */
neww->type = type;
neww->x = x;
@@ -614,9 +619,11 @@ do_redraw(nsfb_t *nsfb, fbtk_widget_t *widget)
plot_ctx.x1 = plot_ctx.x0 + widget->redraw.width;
plot_ctx.y1 = plot_ctx.y0 + widget->redraw.height;
+#ifdef FBTK_LOGGING
LOG(("clipping %p %d,%d %d,%d",
widget, plot_ctx.x0, plot_ctx.y0,
plot_ctx.x1, plot_ctx.y1));
+#endif
if (nsfb_plot_set_clip(nsfb, &plot_ctx) == true) {
fbtk_post_callback(widget, FBTK_CBT_REDRAW);
}
diff --git a/framebuffer/fbtk/text.c b/framebuffer/fbtk/text.c
index 4749991..f3c88ba 100644
--- a/framebuffer/fbtk/text.c
+++ b/framebuffer/fbtk/text.c
@@ -71,7 +71,7 @@ fb_text_font_style(fbtk_widget_t *widget, int *font_height, int *padding,
#endif
font_style->family = PLOT_FONT_FAMILY_SANS_SERIF;
- font_style->size = px_to_pt(*font_height) * FONT_SIZE_SCALE;
+ font_style->size = px_to_pt(*font_height * FONT_SIZE_SCALE);
font_style->weight = 400;
font_style->flags = FONTF_NONE;
font_style->background = widget->bg;
diff --git a/framebuffer/font_freetype.c b/framebuffer/font_freetype.c
index 87751a3..150d203 100644
--- a/framebuffer/font_freetype.c
+++ b/framebuffer/font_freetype.c
@@ -107,12 +107,12 @@ static FT_Error ft_face_requester(FTC_FaceID face_id, FT_Library library, FT_Po
error = FT_New_Face(library, fb_face->fontfile, fb_face->index, face);
if (error) {
- LOG(("Could not find font (code %d)\n", error));
+ LOG(("Could not find font (code %d)", error));
} else {
error = FT_Select_Charmap(*face, FT_ENCODING_UNICODE);
if (error) {
- LOG(("Could not select charmap (code %d)\n", error));
+ LOG(("Could not select charmap (code %d)", error));
} else {
for (cidx = 0; cidx < (*face)->num_charmaps; cidx++) {
if ((*face)->charmap == (*face)->charmaps[cidx]) {
@@ -122,7 +122,7 @@ static FT_Error ft_face_requester(FTC_FaceID face_id, FT_Library library, FT_Po
}
}
}
- LOG(("Loaded face from %s\n", fb_face->fontfile));
+ LOG(("Loaded face from %s", fb_face->fontfile));
return error;
}
@@ -147,7 +147,7 @@ fb_new_face(const char *option, const char *resname, const char *fontname)
error = FTC_Manager_LookupFace(ft_cmanager, (FTC_FaceID)newf, &aface);
if (error) {
- LOG(("Could not find font face %s (code %d)\n", fontname, error));
+ LOG(("Could not find font face %s (code %d)", fontname, error));
free(newf);
newf = NULL;
}
@@ -166,7 +166,7 @@ bool fb_font_init(void)
/* freetype library initialise */
error = FT_Init_FreeType( &library );
if (error) {
- LOG(("Freetype could not initialised (code %d)\n", error));
+ LOG(("Freetype could not initialised (code %d)", error));
return false;
}
@@ -186,7 +186,7 @@ bool fb_font_init(void)
NULL,
&ft_cmanager);
if (error) {
- LOG(("Freetype could not initialise cache manager (code %d)\n", error));
+ LOG(("Freetype could not initialise cache manager (code %d)", error));
FT_Done_FreeType(library);
return false;
}
@@ -203,7 +203,7 @@ bool fb_font_init(void)
NETSURF_FB_FONT_SANS_SERIF);
if (fb_face == NULL) {
/* The sans serif font is the default and must be found. */
- LOG(("Could not find the default font\n"));
+ LOG(("Could not find the default font"));
FTC_Manager_Done(ft_cmanager);
FT_Done_FreeType(library);
return false;
--
NetSurf Browser
10 years
netsurf: branch master updated. release/3.0-467-g7a25b6a
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/7a25b6aaee1a3793a3e04...
...commit http://git.netsurf-browser.org/netsurf.git/commit/7a25b6aaee1a3793a3e04f7...
...tree http://git.netsurf-browser.org/netsurf.git/tree/7a25b6aaee1a3793a3e04f7ef...
The branch, master has been updated
via 7a25b6aaee1a3793a3e04f7ef0ce0ef18aabd3ed (commit)
from eaa04e3208fe9983e340326d174ed88d7fd762df (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=7a25b6aaee1a3793a3e...
commit 7a25b6aaee1a3793a3e04f7ef0ce0ef18aabd3ed
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Fix one px missmatch between click and drag handling of node selection.
diff --git a/desktop/treeview.c b/desktop/treeview.c
index 4fd02d6..a23ddc8 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -1478,7 +1478,7 @@ void treeview_redraw(treeview *tree, int x, int y, struct rect *clip,
style = (count & 0x1) ? &plot_style_odd : &plot_style_even;
if (tree->drag.type == TV_DRAG_SELECTION &&
- (render_y + height > sel_min &&
+ (render_y + height >= sel_min &&
render_y < sel_max)) {
invert_selection = true;
} else {
@@ -1719,7 +1719,7 @@ static nserror treeview_node_selection_walk_cb(treeview_node *n,
break;
case TREEVIEW_WALK_COMMIT_SELECT_DRAG:
- if (sw->current_y > sw->data.drag.sel_min &&
+ if (sw->current_y >= sw->data.drag.sel_min &&
sw->current_y - height <
sw->data.drag.sel_max) {
n->flags ^= TREE_NODE_SELECTED;
-----------------------------------------------------------------------
Summary of changes:
desktop/treeview.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/desktop/treeview.c b/desktop/treeview.c
index 4fd02d6..a23ddc8 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -1478,7 +1478,7 @@ void treeview_redraw(treeview *tree, int x, int y, struct rect *clip,
style = (count & 0x1) ? &plot_style_odd : &plot_style_even;
if (tree->drag.type == TV_DRAG_SELECTION &&
- (render_y + height > sel_min &&
+ (render_y + height >= sel_min &&
render_y < sel_max)) {
invert_selection = true;
} else {
@@ -1719,7 +1719,7 @@ static nserror treeview_node_selection_walk_cb(treeview_node *n,
break;
case TREEVIEW_WALK_COMMIT_SELECT_DRAG:
- if (sw->current_y > sw->data.drag.sel_min &&
+ if (sw->current_y >= sw->data.drag.sel_min &&
sw->current_y - height <
sw->data.drag.sel_max) {
n->flags ^= TREE_NODE_SELECTED;
--
NetSurf Browser
10 years
netsurf: branch master updated. release/3.0-466-geaa04e3
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/eaa04e3208fe9983e3403...
...commit http://git.netsurf-browser.org/netsurf.git/commit/eaa04e3208fe9983e340326...
...tree http://git.netsurf-browser.org/netsurf.git/tree/eaa04e3208fe9983e340326d1...
The branch, master has been updated
via eaa04e3208fe9983e340326d174ed88d7fd762df (commit)
via cb92b7d341c8529d50cd255ea674bbf543a781ea (commit)
from bd39d108db34ccc78199c088c430870d4038b71f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=eaa04e3208fe9983e34...
commit eaa04e3208fe9983e340326d174ed88d7fd762df
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Fix pass-through for drag end.
diff --git a/desktop/tree.c b/desktop/tree.c
index ec5f09f..a60db57 100644
--- a/desktop/tree.c
+++ b/desktop/tree.c
@@ -3108,11 +3108,8 @@ void tree_drag_end(struct tree *tree, browser_mouse_state mouse, int x0, int y0,
struct node *node;
int x, y;
- if (tree->flags & TREE_MOVABLE) {
- if (treeview_test_mouse_action(tree, BROWSER_MOUSE_HOVER,
- x1, y1)) {
- return;
- }
+ if (treeview_test_mouse_action(tree, BROWSER_MOUSE_HOVER, x1, y1)) {
+ return;
}
switch (tree->drag) {
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=cb92b7d341c8529d50c...
commit cb92b7d341c8529d50cd255ea674bbf543a781ea
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Cleanup mouse handling a bit.
diff --git a/gtk/treeview.c b/gtk/treeview.c
index 1a98798..d836eb6 100644
--- a/gtk/treeview.c
+++ b/gtk/treeview.c
@@ -296,12 +296,19 @@ gboolean nsgtk_tree_window_button_release_event(GtkWidget *widget,
BROWSER_MOUSE_CLICK_2 |
BROWSER_MOUSE_DOUBLE_CLICK);
- } else if (tw->mouse_state & BROWSER_MOUSE_PRESS_1)
- tw->mouse_state ^=
- (BROWSER_MOUSE_PRESS_1 | BROWSER_MOUSE_CLICK_1);
- else if (tw->mouse_state & BROWSER_MOUSE_PRESS_2)
+ } else if (tw->mouse_state & BROWSER_MOUSE_PRESS_1) {
+ tw->mouse_state ^= (BROWSER_MOUSE_PRESS_1 |
+ BROWSER_MOUSE_CLICK_1);
+ } else if (tw->mouse_state & BROWSER_MOUSE_PRESS_2) {
tw->mouse_state ^= (BROWSER_MOUSE_PRESS_2 |
- BROWSER_MOUSE_CLICK_2);
+ BROWSER_MOUSE_CLICK_2);
+ } else if (tw->mouse_state & BROWSER_MOUSE_HOLDING_1) {
+ tw->mouse_state ^= (BROWSER_MOUSE_HOLDING_1 |
+ BROWSER_MOUSE_DRAG_ON);
+ } else if (tw->mouse_state & BROWSER_MOUSE_HOLDING_2) {
+ tw->mouse_state ^= (BROWSER_MOUSE_HOLDING_2 |
+ BROWSER_MOUSE_DRAG_ON);
+ }
/* Handle modifiers being removed */
if (tw->mouse_state & BROWSER_MOUSE_MOD_1 && !shift)
@@ -311,19 +318,20 @@ gboolean nsgtk_tree_window_button_release_event(GtkWidget *widget,
if (tw->mouse_state & BROWSER_MOUSE_MOD_3 && !alt)
tw->mouse_state ^= BROWSER_MOUSE_MOD_3;
-
+
if (tw->mouse_state &
- (BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_CLICK_2
- | BROWSER_MOUSE_DOUBLE_CLICK))
+ ~(BROWSER_MOUSE_MOD_1 |
+ BROWSER_MOUSE_MOD_2 |
+ BROWSER_MOUSE_MOD_3)) {
tree_mouse_action(tree, tw->mouse_state,
event->x, event->y);
- else
+ } else {
tree_drag_end(tree, tw->mouse_state,
tw->mouse_pressed_x,
tw->mouse_pressed_y,
event->x, event->y);
-
-
+ }
+
tw->mouse_state = 0;
tw->mouse_pressed = false;
@@ -353,14 +361,6 @@ gboolean nsgtk_tree_window_motion_notify_event(GtkWidget *widget,
tw->last_x = INT_MIN;
tw->last_y = INT_MIN;
}
-
- /* Handle modifiers being removed */
- if (tw->mouse_state & BROWSER_MOUSE_MOD_1 && !shift)
- tw->mouse_state ^= BROWSER_MOUSE_MOD_1;
- if (tw->mouse_state & BROWSER_MOUSE_MOD_2 && !ctrl)
- tw->mouse_state ^= BROWSER_MOUSE_MOD_2;
- if (tw->mouse_state & BROWSER_MOUSE_MOD_3 && !alt)
- tw->mouse_state ^= BROWSER_MOUSE_MOD_3;
if (tw->mouse_state & BROWSER_MOUSE_PRESS_1) {
/* Start button 1 drag */
@@ -382,6 +382,14 @@ gboolean nsgtk_tree_window_motion_notify_event(GtkWidget *widget,
tw->mouse_state |= BROWSER_MOUSE_DRAG_ON;
return TRUE;
}
+
+ /* Handle modifiers being removed */
+ if (tw->mouse_state & BROWSER_MOUSE_MOD_1 && !shift)
+ tw->mouse_state ^= BROWSER_MOUSE_MOD_1;
+ if (tw->mouse_state & BROWSER_MOUSE_MOD_2 && !ctrl)
+ tw->mouse_state ^= BROWSER_MOUSE_MOD_2;
+ if (tw->mouse_state & BROWSER_MOUSE_MOD_3 && !alt)
+ tw->mouse_state ^= BROWSER_MOUSE_MOD_3;
if (tw->mouse_state & (BROWSER_MOUSE_HOLDING_1 |
BROWSER_MOUSE_HOLDING_2))
-----------------------------------------------------------------------
Summary of changes:
desktop/tree.c | 7 ++-----
gtk/treeview.c | 46 +++++++++++++++++++++++++++-------------------
2 files changed, 29 insertions(+), 24 deletions(-)
diff --git a/desktop/tree.c b/desktop/tree.c
index ec5f09f..a60db57 100644
--- a/desktop/tree.c
+++ b/desktop/tree.c
@@ -3108,11 +3108,8 @@ void tree_drag_end(struct tree *tree, browser_mouse_state mouse, int x0, int y0,
struct node *node;
int x, y;
- if (tree->flags & TREE_MOVABLE) {
- if (treeview_test_mouse_action(tree, BROWSER_MOUSE_HOVER,
- x1, y1)) {
- return;
- }
+ if (treeview_test_mouse_action(tree, BROWSER_MOUSE_HOVER, x1, y1)) {
+ return;
}
switch (tree->drag) {
diff --git a/gtk/treeview.c b/gtk/treeview.c
index 1a98798..d836eb6 100644
--- a/gtk/treeview.c
+++ b/gtk/treeview.c
@@ -296,12 +296,19 @@ gboolean nsgtk_tree_window_button_release_event(GtkWidget *widget,
BROWSER_MOUSE_CLICK_2 |
BROWSER_MOUSE_DOUBLE_CLICK);
- } else if (tw->mouse_state & BROWSER_MOUSE_PRESS_1)
- tw->mouse_state ^=
- (BROWSER_MOUSE_PRESS_1 | BROWSER_MOUSE_CLICK_1);
- else if (tw->mouse_state & BROWSER_MOUSE_PRESS_2)
+ } else if (tw->mouse_state & BROWSER_MOUSE_PRESS_1) {
+ tw->mouse_state ^= (BROWSER_MOUSE_PRESS_1 |
+ BROWSER_MOUSE_CLICK_1);
+ } else if (tw->mouse_state & BROWSER_MOUSE_PRESS_2) {
tw->mouse_state ^= (BROWSER_MOUSE_PRESS_2 |
- BROWSER_MOUSE_CLICK_2);
+ BROWSER_MOUSE_CLICK_2);
+ } else if (tw->mouse_state & BROWSER_MOUSE_HOLDING_1) {
+ tw->mouse_state ^= (BROWSER_MOUSE_HOLDING_1 |
+ BROWSER_MOUSE_DRAG_ON);
+ } else if (tw->mouse_state & BROWSER_MOUSE_HOLDING_2) {
+ tw->mouse_state ^= (BROWSER_MOUSE_HOLDING_2 |
+ BROWSER_MOUSE_DRAG_ON);
+ }
/* Handle modifiers being removed */
if (tw->mouse_state & BROWSER_MOUSE_MOD_1 && !shift)
@@ -311,19 +318,20 @@ gboolean nsgtk_tree_window_button_release_event(GtkWidget *widget,
if (tw->mouse_state & BROWSER_MOUSE_MOD_3 && !alt)
tw->mouse_state ^= BROWSER_MOUSE_MOD_3;
-
+
if (tw->mouse_state &
- (BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_CLICK_2
- | BROWSER_MOUSE_DOUBLE_CLICK))
+ ~(BROWSER_MOUSE_MOD_1 |
+ BROWSER_MOUSE_MOD_2 |
+ BROWSER_MOUSE_MOD_3)) {
tree_mouse_action(tree, tw->mouse_state,
event->x, event->y);
- else
+ } else {
tree_drag_end(tree, tw->mouse_state,
tw->mouse_pressed_x,
tw->mouse_pressed_y,
event->x, event->y);
-
-
+ }
+
tw->mouse_state = 0;
tw->mouse_pressed = false;
@@ -353,14 +361,6 @@ gboolean nsgtk_tree_window_motion_notify_event(GtkWidget *widget,
tw->last_x = INT_MIN;
tw->last_y = INT_MIN;
}
-
- /* Handle modifiers being removed */
- if (tw->mouse_state & BROWSER_MOUSE_MOD_1 && !shift)
- tw->mouse_state ^= BROWSER_MOUSE_MOD_1;
- if (tw->mouse_state & BROWSER_MOUSE_MOD_2 && !ctrl)
- tw->mouse_state ^= BROWSER_MOUSE_MOD_2;
- if (tw->mouse_state & BROWSER_MOUSE_MOD_3 && !alt)
- tw->mouse_state ^= BROWSER_MOUSE_MOD_3;
if (tw->mouse_state & BROWSER_MOUSE_PRESS_1) {
/* Start button 1 drag */
@@ -382,6 +382,14 @@ gboolean nsgtk_tree_window_motion_notify_event(GtkWidget *widget,
tw->mouse_state |= BROWSER_MOUSE_DRAG_ON;
return TRUE;
}
+
+ /* Handle modifiers being removed */
+ if (tw->mouse_state & BROWSER_MOUSE_MOD_1 && !shift)
+ tw->mouse_state ^= BROWSER_MOUSE_MOD_1;
+ if (tw->mouse_state & BROWSER_MOUSE_MOD_2 && !ctrl)
+ tw->mouse_state ^= BROWSER_MOUSE_MOD_2;
+ if (tw->mouse_state & BROWSER_MOUSE_MOD_3 && !alt)
+ tw->mouse_state ^= BROWSER_MOUSE_MOD_3;
if (tw->mouse_state & (BROWSER_MOUSE_HOLDING_1 |
BROWSER_MOUSE_HOLDING_2))
--
NetSurf Browser
10 years
netsurf: branch master updated. release/3.0-464-gbd39d10
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/bd39d108db34ccc78199c...
...commit http://git.netsurf-browser.org/netsurf.git/commit/bd39d108db34ccc78199c08...
...tree http://git.netsurf-browser.org/netsurf.git/tree/bd39d108db34ccc78199c088c...
The branch, master has been updated
via bd39d108db34ccc78199c088c430870d4038b71f (commit)
via 91018643db6bdd3ff4d78ff3a502ed4dbfd74a1b (commit)
via bc14d492d21c37d02dbd5a621d87adf41c0c153f (commit)
via 28dec67c646c398fb6527413068d0d2509e59ff2 (commit)
via 826b392b576d9e2bb0b3d5ea3e4537428e21e55d (commit)
via fbfe5ab17ba41187bcbba5e759dd8e2e98a1b3e7 (commit)
via 45d3b9162c82f61b80d8257523d6530f8ddba5c3 (commit)
via a61e74714d99e7693f41a2148868563abca05659 (commit)
via eec80c561c8deb5b8b49bf6820fc171cccd5e82b (commit)
from 39b68d0b8309c55dfe00f3d91682149118dae411 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=bd39d108db34ccc7819...
commit bd39d108db34ccc78199c088c430870d4038b71f
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Add a few functions for front ends to use.
diff --git a/desktop/cookie_manager.c b/desktop/cookie_manager.c
index f369eb0..ed39cee 100644
--- a/desktop/cookie_manager.c
+++ b/desktop/cookie_manager.c
@@ -844,3 +844,17 @@ void cookie_manager_keypress(uint32_t key)
treeview_keypress(cm_ctx.tree, key);
}
+
+/* Exported interface, documented in cookie_manager.h */
+bool cookie_manager_has_selection(void)
+{
+ return treeview_has_selection(cm_ctx.tree);
+}
+
+
+/* Exported interface, documented in cookie_manager.h */
+int cookie_manager_get_height(void)
+{
+ return treeview_get_height(cm_ctx.tree);
+}
+
diff --git a/desktop/cookie_manager.h b/desktop/cookie_manager.h
index 7249236..b844907 100644
--- a/desktop/cookie_manager.h
+++ b/desktop/cookie_manager.h
@@ -90,7 +90,6 @@ void cookie_manager_redraw(int x, int y, struct rect *clip,
*/
void cookie_manager_mouse_action(browser_mouse_state mouse, int x, int y);
-
/**
* Key press handling.
*
@@ -99,4 +98,18 @@ void cookie_manager_mouse_action(browser_mouse_state mouse, int x, int y);
*/
void cookie_manager_keypress(uint32_t key);
+/**
+ * Determine whether there is a selection
+ *
+ * \return true iff there is a selection
+ */
+bool cookie_manager_has_selection(void);
+
+/**
+ * Find current height
+ *
+ * \return height in px
+ */
+int cookie_manager_get_height(void);
+
#endif
diff --git a/desktop/global_history.c b/desktop/global_history.c
index 6713fca..3861ee2 100644
--- a/desktop/global_history.c
+++ b/desktop/global_history.c
@@ -949,3 +949,17 @@ void global_history_keypress(uint32_t key)
treeview_keypress(gh_ctx.tree, key);
}
+
+/* Exported interface, documented in global_history.h */
+bool global_history_has_selection(void)
+{
+ return treeview_has_selection(gh_ctx.tree);
+}
+
+
+/* Exported interface, documented in global_history.h */
+int global_history_get_height(void)
+{
+ return treeview_get_height(gh_ctx.tree);
+}
+
diff --git a/desktop/global_history.h b/desktop/global_history.h
index 9d1dc45..6e5ff1e 100644
--- a/desktop/global_history.h
+++ b/desktop/global_history.h
@@ -90,7 +90,6 @@ void global_history_redraw(int x, int y, struct rect *clip,
*/
void global_history_mouse_action(browser_mouse_state mouse, int x, int y);
-
/**
* Key press handling.
*
@@ -99,4 +98,18 @@ void global_history_mouse_action(browser_mouse_state mouse, int x, int y);
*/
void global_history_keypress(uint32_t key);
+/**
+ * Determine whether there is a selection
+ *
+ * \return true iff there is a selection
+ */
+bool global_history_has_selection(void);
+
+/**
+ * Find current height
+ *
+ * \return height in px
+ */
+int global_history_get_height(void);
+
#endif
diff --git a/desktop/sslcert_viewer.c b/desktop/sslcert_viewer.c
index 0f30f3f..d9dd5c7 100644
--- a/desktop/sslcert_viewer.c
+++ b/desktop/sslcert_viewer.c
@@ -505,3 +505,10 @@ void sslcert_viewer_keypress(struct sslcert_session_data *ssl_d,
{
treeview_keypress(ssl_d->tree, key);
}
+
+
+/* Exported interface, documented in sslcert_viewer.h */
+int sslcert_viewer_get_height(struct sslcert_session_data *ssl_d)
+{
+ return treeview_get_height(ssl_d->tree);
+}
diff --git a/desktop/sslcert_viewer.h b/desktop/sslcert_viewer.h
index 4d06461..c5bb5c0 100644
--- a/desktop/sslcert_viewer.h
+++ b/desktop/sslcert_viewer.h
@@ -111,7 +111,6 @@ void sslcert_viewer_redraw(struct sslcert_session_data *ssl_d,
void sslcert_viewer_mouse_action(struct sslcert_session_data *ssl_d,
browser_mouse_state mouse, int x, int y);
-
/**
* Key press handling.
*
@@ -122,4 +121,11 @@ void sslcert_viewer_mouse_action(struct sslcert_session_data *ssl_d,
void sslcert_viewer_keypress(struct sslcert_session_data *ssl_d,
uint32_t key);
+/**
+ * Find current height
+ *
+ * \return height in px
+ */
+int sslcert_viewer_get_height(struct sslcert_session_data *ssl_d);
+
#endif
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=91018643db6bdd3ff4d...
commit 91018643db6bdd3ff4d78ff3a502ed4dbfd74a1b
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Expose a bit more core treeview functionality for hotlist clients.
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index e96678d..2eb7235 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -1392,3 +1392,24 @@ void hotlist_keypress(uint32_t key)
treeview_keypress(hl_ctx.tree, key);
}
+
+/* Exported interface, documented in hotlist.h */
+bool hotlist_has_selection(void)
+{
+ return treeview_has_selection(hl_ctx.tree);
+}
+
+
+/* Exported interface, documented in hotlist.h */
+void hotlist_edit_selection(void)
+{
+ treeview_edit_selection(hl_ctx.tree);
+}
+
+
+/* Exported interface, documented in hotlist.h */
+int hotlist_get_height(void)
+{
+ return treeview_get_height(hl_ctx.tree);
+}
+
diff --git a/desktop/hotlist.h b/desktop/hotlist.h
index 743eb61..df34054 100644
--- a/desktop/hotlist.h
+++ b/desktop/hotlist.h
@@ -133,7 +133,6 @@ void hotlist_redraw(int x, int y, struct rect *clip,
*/
void hotlist_mouse_action(browser_mouse_state mouse, int x, int y);
-
/**
* Key press handling.
*
@@ -142,4 +141,23 @@ void hotlist_mouse_action(browser_mouse_state mouse, int x, int y);
*/
void hotlist_keypress(uint32_t key);
+/**
+ * Determine whether there is a selection
+ *
+ * \return true iff there is a selection
+ */
+bool hotlist_has_selection(void);
+
+/**
+ * Edit the first selected node
+ */
+void hotlist_edit_selection(void);
+
+/**
+ * Find current height
+ *
+ * \return height in px
+ */
+int hotlist_get_height(void);
+
#endif
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=bc14d492d21c37d02db...
commit bc14d492d21c37d02dbd5a621d87adf41c0c153f
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Add height getter.
diff --git a/desktop/treeview.c b/desktop/treeview.c
index 3318dc9..4fd02d6 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -3145,6 +3145,16 @@ void treeview_mouse_action(treeview *tree,
}
+/* Exported interface, documented in treeview.h */
+int treeview_get_height(treeview *tree)
+{
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ return tree->root->height;
+}
+
+
/**
* Initialise the plot styles from CSS system colour values.
*/
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=28dec67c646c398fb65...
commit 28dec67c646c398fb6527413068d0d2509e59ff2
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Remove select all and clear selection functions from public API. Clients can send KEY_SELECT_ALL and KEY_CLEAR_SELECTION to the keypress handler.
diff --git a/desktop/treeview.c b/desktop/treeview.c
index 227b860..3318dc9 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -1807,8 +1807,14 @@ static treeview_node * treeview_get_first_selected(treeview *tree)
}
-/* Exported interface, documented in treeview.h */
-bool treeview_clear_selection(treeview *tree, struct rect *rect)
+/**
+ * Clear any selection in a treeview
+ *
+ * \param tree Treeview object to clear selection in
+ * \param rect Redraw rectangle (if redraw required)
+ * \return true iff redraw required
+ */
+static bool treeview_clear_selection(treeview *tree, struct rect *rect)
{
struct treeview_selection_walk_data sw;
@@ -1829,8 +1835,14 @@ bool treeview_clear_selection(treeview *tree, struct rect *rect)
}
-/* Exported interface, documented in treeview.h */
-bool treeview_select_all(treeview *tree, struct rect *rect)
+/**
+ * Select all in a treeview
+ *
+ * \param tree Treeview object to select all in
+ * \param rect Redraw rectangle (if redraw required)
+ * \return true iff redraw required
+ */
+static bool treeview_select_all(treeview *tree, struct rect *rect)
{
struct treeview_selection_walk_data sw;
diff --git a/desktop/treeview.h b/desktop/treeview.h
index 872a8c2..0ac999a 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -354,24 +354,6 @@ void treeview_mouse_action(treeview *tree,
bool treeview_has_selection(treeview *tree);
/**
- * Clear any selection in a treeview
- *
- * \param tree Treeview object to clear selection in
- * \param rect Redraw rectangle (if redraw required)
- * \return true iff redraw required
- */
-bool treeview_clear_selection(treeview *tree, struct rect *rect);
-
-/**
- * Select all in a treeview
- *
- * \param tree Treeview object to select all in
- * \param rect Redraw rectangle (if redraw required)
- * \return true iff redraw required
- */
-bool treeview_select_all(treeview *tree, struct rect *rect);
-
-/**
* Edit the first selected node
*
* \param tree Treeview object to edit selected node in
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=826b392b576d9e2bb0b...
commit 826b392b576d9e2bb0b3d5ea3e4537428e21e55d
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Simple treeview_edit_selection implementation.
diff --git a/desktop/treeview.c b/desktop/treeview.c
index a0fbe92..227b860 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -2687,6 +2687,42 @@ static bool treeview_edit_node_at_point(treeview *tree, treeview_node *n,
}
+/* Exported interface, documented in treeview.h */
+void treeview_edit_selection(treeview *tree)
+{
+ struct rect rect;
+ treeview_node *n;
+ bool redraw;
+ int y;
+
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ /* Get first selected node */
+ n = treeview_get_first_selected(tree);
+
+ if (n == NULL)
+ return;
+
+ /* Get node's y-position */
+ y = treeview_node_y(tree, n);
+
+ /* Edit node at y */
+ redraw = treeview_edit_node_at_point(tree, n, y,
+ 0, y + tree_g.line_height / 2, &rect);
+
+ if (redraw == false)
+ return;
+
+ /* Redraw */
+ rect.x0 = 0;
+ rect.y0 = y;
+ rect.x1 = REDRAW_MAX;
+ rect.y1 = y + tree_g.line_height;
+ tree->cw_t->redraw_request(tree->cw_h, rect);
+}
+
+
struct treeview_mouse_action {
treeview *tree;
browser_mouse_state mouse;
diff --git a/desktop/treeview.h b/desktop/treeview.h
index ee2e82b..872a8c2 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -372,6 +372,13 @@ bool treeview_clear_selection(treeview *tree, struct rect *rect);
bool treeview_select_all(treeview *tree, struct rect *rect);
/**
+ * Edit the first selected node
+ *
+ * \param tree Treeview object to edit selected node in
+ */
+void treeview_edit_selection(treeview *tree);
+
+/**
* Find current height of a treeview
*
* \param tree Treeview object to find height of
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=fbfe5ab17ba41187bcb...
commit fbfe5ab17ba41187bcbba5e759dd8e2e98a1b3e7
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Function for global history export.
diff --git a/desktop/global_history.c b/desktop/global_history.c
index 7432be2..6713fca 100644
--- a/desktop/global_history.c
+++ b/desktop/global_history.c
@@ -25,6 +25,8 @@
#include "desktop/treeview.h"
#include "utils/messages.h"
#include "utils/utils.h"
+#include "utils/utf8.h"
+#include "utils/libdom.h"
#include "utils/log.h"
#define N_DAYS 28
@@ -825,6 +827,107 @@ nserror global_history_add(nsurl *url)
}
+struct treeview_export_walk_ctx {
+ FILE *fp;
+};
+/** Callback for treeview_walk node entering */
+static nserror global_history_export_enter_cb(void *ctx, void *node_data,
+ enum treeview_node_type type, bool *abort)
+{
+ struct treeview_export_walk_ctx *tw = ctx;
+
+ if (type == TREE_NODE_ENTRY) {
+ struct global_history_entry *e = node_data;
+ utf8_convert_ret ret;
+ char *t_text;
+ char *u_text;
+
+ ret = utf8_to_html(e->data[GH_TITLE].value, "iso-8859-1",
+ e->data[GH_TITLE].value_len, &t_text);
+ if (ret != UTF8_CONVERT_OK)
+ return NSERROR_SAVE_FAILED;
+
+ ret = utf8_to_html(e->data[GH_URL].value, "iso-8859-1",
+ e->data[GH_URL].value_len, &u_text);
+ if (ret != UTF8_CONVERT_OK) {
+ free(t_text);
+ return NSERROR_SAVE_FAILED;
+ }
+
+ fprintf(tw->fp, "<li><a href=\"%s\">%s</a></li>\n",
+ u_text, t_text);
+
+ free(t_text);
+ free(u_text);
+
+ } else if (type == TREE_NODE_FOLDER) {
+ struct global_history_folder *f = node_data;
+ utf8_convert_ret ret;
+ char *f_text;
+
+ ret = utf8_to_html(f->data.value, "iso-8859-1",
+ f->data.value_len, &f_text);
+ if (ret != UTF8_CONVERT_OK)
+ return NSERROR_SAVE_FAILED;
+
+ fprintf(tw->fp, "<li><h4>%s</h4>\n<ul>\n", f_text);
+
+ free(f_text);
+ }
+
+ return NSERROR_OK;
+}
+/** Callback for treeview_walk node leaving */
+static nserror global_history_export_leave_cb(void *ctx, void *node_data,
+ enum treeview_node_type type, bool *abort)
+{
+ struct treeview_export_walk_ctx *tw = ctx;
+
+ if (type == TREE_NODE_FOLDER) {
+ fputs("</ul></li>\n", tw->fp);
+ }
+
+ return NSERROR_OK;
+}
+/* Exported interface, documented in global_history.h */
+nserror global_history_export(const char *path, const char *title)
+{
+ struct treeview_export_walk_ctx tw;
+ nserror err;
+ FILE *fp;
+
+ fp = fopen(path, "w");
+ if (fp == NULL)
+ return NSERROR_SAVE_FAILED;
+
+ if (title == NULL)
+ title = "NetSurf Browsing History";
+
+ fputs("<!DOCTYPE html "
+ "PUBLIC \"//W3C/DTD HTML 4.01//EN\" "
+ "\"http://www.w3.org/TR/html4/strict.dtd\">\n", fp);
+ fputs("<html>\n<head>\n", fp);
+ fputs("<meta http-equiv=\"Content-Type\" "
+ "content=\"text/html; charset=iso-8859-1\">\n", fp);
+ fprintf(fp, "<title>%s</title>\n", title);
+ fputs("</head>\n<body>\n<ul>\n", fp);
+
+ tw.fp = fp;
+ err = treeview_walk(gh_ctx.tree, NULL,
+ global_history_export_enter_cb,
+ global_history_export_leave_cb,
+ &tw, TREE_NODE_ENTRY | TREE_NODE_FOLDER);
+ if (err != NSERROR_OK)
+ return err;
+
+ fputs("</ul>\n</body>\n</html>\n", fp);
+
+ fclose(fp);
+
+ return NSERROR_OK;
+}
+
+
/* Exported interface, documented in global_history.h */
void global_history_redraw(int x, int y, struct rect *clip,
const struct redraw_context *ctx)
diff --git a/desktop/global_history.h b/desktop/global_history.h
index 3863e81..9d1dc45 100644
--- a/desktop/global_history.h
+++ b/desktop/global_history.h
@@ -61,6 +61,15 @@ nserror global_history_fini(void);
*/
nserror global_history_add(nsurl *url);
+/*
+ * Save global history to file (html)
+ *
+ * \param path The path to save history to
+ * \param title The title to give the document, or NULL for default
+ * \return NSERROR_OK on success, or appropriate error otherwise
+ */
+nserror global_history_export(const char *path, const char *title);
+
/**
* Redraw the global history.
*
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=45d3b9162c82f61b80d...
commit 45d3b9162c82f61b80d8257523d6530f8ddba5c3
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Move default title generation from _fini to _export.
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index ae25e3f..e96678d 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -916,6 +916,9 @@ nserror hotlist_export(const char *path, const char *title)
if (fp == NULL)
return NSERROR_SAVE_FAILED;
+ if (title == NULL)
+ title = "NetSurf hotlist";
+
/* The Acorn Browse Hotlist format, which we mimic[*], is invalid HTML
* claming to be valid.
* [*] Why? */
@@ -1100,7 +1103,7 @@ nserror hotlist_fini(const char *path)
LOG(("Finalising hotlist"));
/* Save the hotlist */
- err = hotlist_export(path, "NetSurf hotlist");
+ err = hotlist_export(path, NULL);
if (err != NSERROR_OK) {
warn_user("Couldn't save the hotlist.", 0);
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=a61e74714d99e7693f4...
commit a61e74714d99e7693f41a2148868563abca05659
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Give export walk ctx clearer name.
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 581075c..ae25e3f 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -838,14 +838,14 @@ static nserror hotlist_generate(void)
}
-struct treeview_walk_ctx {
+struct treeview_export_walk_ctx {
FILE *fp;
};
/** Callback for treeview_walk node entering */
static nserror hotlist_export_enter_cb(void *ctx, void *node_data,
enum treeview_node_type type, bool *abort)
{
- struct treeview_walk_ctx *tw = ctx;
+ struct treeview_export_walk_ctx *tw = ctx;
if (type == TREE_NODE_ENTRY) {
struct hotlist_entry *e = node_data;
@@ -897,7 +897,7 @@ static nserror hotlist_export_enter_cb(void *ctx, void *node_data,
static nserror hotlist_export_leave_cb(void *ctx, void *node_data,
enum treeview_node_type type, bool *abort)
{
- struct treeview_walk_ctx *tw = ctx;
+ struct treeview_export_walk_ctx *tw = ctx;
if (type == TREE_NODE_FOLDER) {
fputs("</ul>\n", tw->fp);
@@ -908,7 +908,7 @@ static nserror hotlist_export_leave_cb(void *ctx, void *node_data,
/* Exported interface, documented in hotlist.h */
nserror hotlist_export(const char *path, const char *title)
{
- struct treeview_walk_ctx tw;
+ struct treeview_export_walk_ctx tw;
nserror err;
FILE *fp;
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=eec80c561c8deb5b8b4...
commit eec80c561c8deb5b8b49bf6820fc171cccd5e82b
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Expose hotlist_export.
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 9a42926..581075c 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -905,12 +905,8 @@ static nserror hotlist_export_leave_cb(void *ctx, void *node_data,
return NSERROR_OK;
}
-/*
- * Save hotlist to file
- *
- * \return NSERROR_OK on success, or appropriate error otherwise
- */
-static nserror hotlist_export(const char *path, const char *title)
+/* Exported interface, documented in hotlist.h */
+nserror hotlist_export(const char *path, const char *title)
{
struct treeview_walk_ctx tw;
nserror err;
diff --git a/desktop/hotlist.h b/desktop/hotlist.h
index 4a7ef2f..743eb61 100644
--- a/desktop/hotlist.h
+++ b/desktop/hotlist.h
@@ -104,6 +104,15 @@ nserror hotlist_add_entry(nsurl *url, const char *title, bool at_y, int y);
*/
nserror hotlist_add_folder(const char *title, bool at_y, int y);
+/*
+ * Save hotlist to file
+ *
+ * \param path The path to save hotlist to
+ * \param title The title to give the hotlist, or NULL for default
+ * \return NSERROR_OK on success, or appropriate error otherwise
+ */
+nserror hotlist_export(const char *path, const char *title);
+
/**
* Redraw the hotlist.
*
-----------------------------------------------------------------------
Summary of changes:
desktop/cookie_manager.c | 14 ++++++
desktop/cookie_manager.h | 15 ++++++-
desktop/global_history.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++
desktop/global_history.h | 24 +++++++++-
desktop/hotlist.c | 42 ++++++++++++----
desktop/hotlist.h | 29 +++++++++++-
desktop/sslcert_viewer.c | 7 +++
desktop/sslcert_viewer.h | 8 +++-
desktop/treeview.c | 66 ++++++++++++++++++++++++--
desktop/treeview.h | 17 +------
10 files changed, 306 insertions(+), 33 deletions(-)
diff --git a/desktop/cookie_manager.c b/desktop/cookie_manager.c
index f369eb0..ed39cee 100644
--- a/desktop/cookie_manager.c
+++ b/desktop/cookie_manager.c
@@ -844,3 +844,17 @@ void cookie_manager_keypress(uint32_t key)
treeview_keypress(cm_ctx.tree, key);
}
+
+/* Exported interface, documented in cookie_manager.h */
+bool cookie_manager_has_selection(void)
+{
+ return treeview_has_selection(cm_ctx.tree);
+}
+
+
+/* Exported interface, documented in cookie_manager.h */
+int cookie_manager_get_height(void)
+{
+ return treeview_get_height(cm_ctx.tree);
+}
+
diff --git a/desktop/cookie_manager.h b/desktop/cookie_manager.h
index 7249236..b844907 100644
--- a/desktop/cookie_manager.h
+++ b/desktop/cookie_manager.h
@@ -90,7 +90,6 @@ void cookie_manager_redraw(int x, int y, struct rect *clip,
*/
void cookie_manager_mouse_action(browser_mouse_state mouse, int x, int y);
-
/**
* Key press handling.
*
@@ -99,4 +98,18 @@ void cookie_manager_mouse_action(browser_mouse_state mouse, int x, int y);
*/
void cookie_manager_keypress(uint32_t key);
+/**
+ * Determine whether there is a selection
+ *
+ * \return true iff there is a selection
+ */
+bool cookie_manager_has_selection(void);
+
+/**
+ * Find current height
+ *
+ * \return height in px
+ */
+int cookie_manager_get_height(void);
+
#endif
diff --git a/desktop/global_history.c b/desktop/global_history.c
index 7432be2..3861ee2 100644
--- a/desktop/global_history.c
+++ b/desktop/global_history.c
@@ -25,6 +25,8 @@
#include "desktop/treeview.h"
#include "utils/messages.h"
#include "utils/utils.h"
+#include "utils/utf8.h"
+#include "utils/libdom.h"
#include "utils/log.h"
#define N_DAYS 28
@@ -825,6 +827,107 @@ nserror global_history_add(nsurl *url)
}
+struct treeview_export_walk_ctx {
+ FILE *fp;
+};
+/** Callback for treeview_walk node entering */
+static nserror global_history_export_enter_cb(void *ctx, void *node_data,
+ enum treeview_node_type type, bool *abort)
+{
+ struct treeview_export_walk_ctx *tw = ctx;
+
+ if (type == TREE_NODE_ENTRY) {
+ struct global_history_entry *e = node_data;
+ utf8_convert_ret ret;
+ char *t_text;
+ char *u_text;
+
+ ret = utf8_to_html(e->data[GH_TITLE].value, "iso-8859-1",
+ e->data[GH_TITLE].value_len, &t_text);
+ if (ret != UTF8_CONVERT_OK)
+ return NSERROR_SAVE_FAILED;
+
+ ret = utf8_to_html(e->data[GH_URL].value, "iso-8859-1",
+ e->data[GH_URL].value_len, &u_text);
+ if (ret != UTF8_CONVERT_OK) {
+ free(t_text);
+ return NSERROR_SAVE_FAILED;
+ }
+
+ fprintf(tw->fp, "<li><a href=\"%s\">%s</a></li>\n",
+ u_text, t_text);
+
+ free(t_text);
+ free(u_text);
+
+ } else if (type == TREE_NODE_FOLDER) {
+ struct global_history_folder *f = node_data;
+ utf8_convert_ret ret;
+ char *f_text;
+
+ ret = utf8_to_html(f->data.value, "iso-8859-1",
+ f->data.value_len, &f_text);
+ if (ret != UTF8_CONVERT_OK)
+ return NSERROR_SAVE_FAILED;
+
+ fprintf(tw->fp, "<li><h4>%s</h4>\n<ul>\n", f_text);
+
+ free(f_text);
+ }
+
+ return NSERROR_OK;
+}
+/** Callback for treeview_walk node leaving */
+static nserror global_history_export_leave_cb(void *ctx, void *node_data,
+ enum treeview_node_type type, bool *abort)
+{
+ struct treeview_export_walk_ctx *tw = ctx;
+
+ if (type == TREE_NODE_FOLDER) {
+ fputs("</ul></li>\n", tw->fp);
+ }
+
+ return NSERROR_OK;
+}
+/* Exported interface, documented in global_history.h */
+nserror global_history_export(const char *path, const char *title)
+{
+ struct treeview_export_walk_ctx tw;
+ nserror err;
+ FILE *fp;
+
+ fp = fopen(path, "w");
+ if (fp == NULL)
+ return NSERROR_SAVE_FAILED;
+
+ if (title == NULL)
+ title = "NetSurf Browsing History";
+
+ fputs("<!DOCTYPE html "
+ "PUBLIC \"//W3C/DTD HTML 4.01//EN\" "
+ "\"http://www.w3.org/TR/html4/strict.dtd\">\n", fp);
+ fputs("<html>\n<head>\n", fp);
+ fputs("<meta http-equiv=\"Content-Type\" "
+ "content=\"text/html; charset=iso-8859-1\">\n", fp);
+ fprintf(fp, "<title>%s</title>\n", title);
+ fputs("</head>\n<body>\n<ul>\n", fp);
+
+ tw.fp = fp;
+ err = treeview_walk(gh_ctx.tree, NULL,
+ global_history_export_enter_cb,
+ global_history_export_leave_cb,
+ &tw, TREE_NODE_ENTRY | TREE_NODE_FOLDER);
+ if (err != NSERROR_OK)
+ return err;
+
+ fputs("</ul>\n</body>\n</html>\n", fp);
+
+ fclose(fp);
+
+ return NSERROR_OK;
+}
+
+
/* Exported interface, documented in global_history.h */
void global_history_redraw(int x, int y, struct rect *clip,
const struct redraw_context *ctx)
@@ -846,3 +949,17 @@ void global_history_keypress(uint32_t key)
treeview_keypress(gh_ctx.tree, key);
}
+
+/* Exported interface, documented in global_history.h */
+bool global_history_has_selection(void)
+{
+ return treeview_has_selection(gh_ctx.tree);
+}
+
+
+/* Exported interface, documented in global_history.h */
+int global_history_get_height(void)
+{
+ return treeview_get_height(gh_ctx.tree);
+}
+
diff --git a/desktop/global_history.h b/desktop/global_history.h
index 3863e81..6e5ff1e 100644
--- a/desktop/global_history.h
+++ b/desktop/global_history.h
@@ -61,6 +61,15 @@ nserror global_history_fini(void);
*/
nserror global_history_add(nsurl *url);
+/*
+ * Save global history to file (html)
+ *
+ * \param path The path to save history to
+ * \param title The title to give the document, or NULL for default
+ * \return NSERROR_OK on success, or appropriate error otherwise
+ */
+nserror global_history_export(const char *path, const char *title);
+
/**
* Redraw the global history.
*
@@ -81,7 +90,6 @@ void global_history_redraw(int x, int y, struct rect *clip,
*/
void global_history_mouse_action(browser_mouse_state mouse, int x, int y);
-
/**
* Key press handling.
*
@@ -90,4 +98,18 @@ void global_history_mouse_action(browser_mouse_state mouse, int x, int y);
*/
void global_history_keypress(uint32_t key);
+/**
+ * Determine whether there is a selection
+ *
+ * \return true iff there is a selection
+ */
+bool global_history_has_selection(void);
+
+/**
+ * Find current height
+ *
+ * \return height in px
+ */
+int global_history_get_height(void);
+
#endif
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 9a42926..2eb7235 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -838,14 +838,14 @@ static nserror hotlist_generate(void)
}
-struct treeview_walk_ctx {
+struct treeview_export_walk_ctx {
FILE *fp;
};
/** Callback for treeview_walk node entering */
static nserror hotlist_export_enter_cb(void *ctx, void *node_data,
enum treeview_node_type type, bool *abort)
{
- struct treeview_walk_ctx *tw = ctx;
+ struct treeview_export_walk_ctx *tw = ctx;
if (type == TREE_NODE_ENTRY) {
struct hotlist_entry *e = node_data;
@@ -897,7 +897,7 @@ static nserror hotlist_export_enter_cb(void *ctx, void *node_data,
static nserror hotlist_export_leave_cb(void *ctx, void *node_data,
enum treeview_node_type type, bool *abort)
{
- struct treeview_walk_ctx *tw = ctx;
+ struct treeview_export_walk_ctx *tw = ctx;
if (type == TREE_NODE_FOLDER) {
fputs("</ul>\n", tw->fp);
@@ -905,14 +905,10 @@ static nserror hotlist_export_leave_cb(void *ctx, void *node_data,
return NSERROR_OK;
}
-/*
- * Save hotlist to file
- *
- * \return NSERROR_OK on success, or appropriate error otherwise
- */
-static nserror hotlist_export(const char *path, const char *title)
+/* Exported interface, documented in hotlist.h */
+nserror hotlist_export(const char *path, const char *title)
{
- struct treeview_walk_ctx tw;
+ struct treeview_export_walk_ctx tw;
nserror err;
FILE *fp;
@@ -920,6 +916,9 @@ static nserror hotlist_export(const char *path, const char *title)
if (fp == NULL)
return NSERROR_SAVE_FAILED;
+ if (title == NULL)
+ title = "NetSurf hotlist";
+
/* The Acorn Browse Hotlist format, which we mimic[*], is invalid HTML
* claming to be valid.
* [*] Why? */
@@ -1104,7 +1103,7 @@ nserror hotlist_fini(const char *path)
LOG(("Finalising hotlist"));
/* Save the hotlist */
- err = hotlist_export(path, "NetSurf hotlist");
+ err = hotlist_export(path, NULL);
if (err != NSERROR_OK) {
warn_user("Couldn't save the hotlist.", 0);
}
@@ -1393,3 +1392,24 @@ void hotlist_keypress(uint32_t key)
treeview_keypress(hl_ctx.tree, key);
}
+
+/* Exported interface, documented in hotlist.h */
+bool hotlist_has_selection(void)
+{
+ return treeview_has_selection(hl_ctx.tree);
+}
+
+
+/* Exported interface, documented in hotlist.h */
+void hotlist_edit_selection(void)
+{
+ treeview_edit_selection(hl_ctx.tree);
+}
+
+
+/* Exported interface, documented in hotlist.h */
+int hotlist_get_height(void)
+{
+ return treeview_get_height(hl_ctx.tree);
+}
+
diff --git a/desktop/hotlist.h b/desktop/hotlist.h
index 4a7ef2f..df34054 100644
--- a/desktop/hotlist.h
+++ b/desktop/hotlist.h
@@ -104,6 +104,15 @@ nserror hotlist_add_entry(nsurl *url, const char *title, bool at_y, int y);
*/
nserror hotlist_add_folder(const char *title, bool at_y, int y);
+/*
+ * Save hotlist to file
+ *
+ * \param path The path to save hotlist to
+ * \param title The title to give the hotlist, or NULL for default
+ * \return NSERROR_OK on success, or appropriate error otherwise
+ */
+nserror hotlist_export(const char *path, const char *title);
+
/**
* Redraw the hotlist.
*
@@ -124,7 +133,6 @@ void hotlist_redraw(int x, int y, struct rect *clip,
*/
void hotlist_mouse_action(browser_mouse_state mouse, int x, int y);
-
/**
* Key press handling.
*
@@ -133,4 +141,23 @@ void hotlist_mouse_action(browser_mouse_state mouse, int x, int y);
*/
void hotlist_keypress(uint32_t key);
+/**
+ * Determine whether there is a selection
+ *
+ * \return true iff there is a selection
+ */
+bool hotlist_has_selection(void);
+
+/**
+ * Edit the first selected node
+ */
+void hotlist_edit_selection(void);
+
+/**
+ * Find current height
+ *
+ * \return height in px
+ */
+int hotlist_get_height(void);
+
#endif
diff --git a/desktop/sslcert_viewer.c b/desktop/sslcert_viewer.c
index 0f30f3f..d9dd5c7 100644
--- a/desktop/sslcert_viewer.c
+++ b/desktop/sslcert_viewer.c
@@ -505,3 +505,10 @@ void sslcert_viewer_keypress(struct sslcert_session_data *ssl_d,
{
treeview_keypress(ssl_d->tree, key);
}
+
+
+/* Exported interface, documented in sslcert_viewer.h */
+int sslcert_viewer_get_height(struct sslcert_session_data *ssl_d)
+{
+ return treeview_get_height(ssl_d->tree);
+}
diff --git a/desktop/sslcert_viewer.h b/desktop/sslcert_viewer.h
index 4d06461..c5bb5c0 100644
--- a/desktop/sslcert_viewer.h
+++ b/desktop/sslcert_viewer.h
@@ -111,7 +111,6 @@ void sslcert_viewer_redraw(struct sslcert_session_data *ssl_d,
void sslcert_viewer_mouse_action(struct sslcert_session_data *ssl_d,
browser_mouse_state mouse, int x, int y);
-
/**
* Key press handling.
*
@@ -122,4 +121,11 @@ void sslcert_viewer_mouse_action(struct sslcert_session_data *ssl_d,
void sslcert_viewer_keypress(struct sslcert_session_data *ssl_d,
uint32_t key);
+/**
+ * Find current height
+ *
+ * \return height in px
+ */
+int sslcert_viewer_get_height(struct sslcert_session_data *ssl_d);
+
#endif
diff --git a/desktop/treeview.c b/desktop/treeview.c
index a0fbe92..4fd02d6 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -1807,8 +1807,14 @@ static treeview_node * treeview_get_first_selected(treeview *tree)
}
-/* Exported interface, documented in treeview.h */
-bool treeview_clear_selection(treeview *tree, struct rect *rect)
+/**
+ * Clear any selection in a treeview
+ *
+ * \param tree Treeview object to clear selection in
+ * \param rect Redraw rectangle (if redraw required)
+ * \return true iff redraw required
+ */
+static bool treeview_clear_selection(treeview *tree, struct rect *rect)
{
struct treeview_selection_walk_data sw;
@@ -1829,8 +1835,14 @@ bool treeview_clear_selection(treeview *tree, struct rect *rect)
}
-/* Exported interface, documented in treeview.h */
-bool treeview_select_all(treeview *tree, struct rect *rect)
+/**
+ * Select all in a treeview
+ *
+ * \param tree Treeview object to select all in
+ * \param rect Redraw rectangle (if redraw required)
+ * \return true iff redraw required
+ */
+static bool treeview_select_all(treeview *tree, struct rect *rect)
{
struct treeview_selection_walk_data sw;
@@ -2687,6 +2699,42 @@ static bool treeview_edit_node_at_point(treeview *tree, treeview_node *n,
}
+/* Exported interface, documented in treeview.h */
+void treeview_edit_selection(treeview *tree)
+{
+ struct rect rect;
+ treeview_node *n;
+ bool redraw;
+ int y;
+
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ /* Get first selected node */
+ n = treeview_get_first_selected(tree);
+
+ if (n == NULL)
+ return;
+
+ /* Get node's y-position */
+ y = treeview_node_y(tree, n);
+
+ /* Edit node at y */
+ redraw = treeview_edit_node_at_point(tree, n, y,
+ 0, y + tree_g.line_height / 2, &rect);
+
+ if (redraw == false)
+ return;
+
+ /* Redraw */
+ rect.x0 = 0;
+ rect.y0 = y;
+ rect.x1 = REDRAW_MAX;
+ rect.y1 = y + tree_g.line_height;
+ tree->cw_t->redraw_request(tree->cw_h, rect);
+}
+
+
struct treeview_mouse_action {
treeview *tree;
browser_mouse_state mouse;
@@ -3097,6 +3145,16 @@ void treeview_mouse_action(treeview *tree,
}
+/* Exported interface, documented in treeview.h */
+int treeview_get_height(treeview *tree)
+{
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ return tree->root->height;
+}
+
+
/**
* Initialise the plot styles from CSS system colour values.
*/
diff --git a/desktop/treeview.h b/desktop/treeview.h
index ee2e82b..0ac999a 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -354,22 +354,11 @@ void treeview_mouse_action(treeview *tree,
bool treeview_has_selection(treeview *tree);
/**
- * Clear any selection in a treeview
+ * Edit the first selected node
*
- * \param tree Treeview object to clear selection in
- * \param rect Redraw rectangle (if redraw required)
- * \return true iff redraw required
+ * \param tree Treeview object to edit selected node in
*/
-bool treeview_clear_selection(treeview *tree, struct rect *rect);
-
-/**
- * Select all in a treeview
- *
- * \param tree Treeview object to select all in
- * \param rect Redraw rectangle (if redraw required)
- * \return true iff redraw required
- */
-bool treeview_select_all(treeview *tree, struct rect *rect);
+void treeview_edit_selection(treeview *tree);
/**
* Find current height of a treeview
--
NetSurf Browser
10 years
netsurf: branch master updated. release/3.0-455-g39b68d0
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/39b68d0b8309c55dfe00f...
...commit http://git.netsurf-browser.org/netsurf.git/commit/39b68d0b8309c55dfe00f3d...
...tree http://git.netsurf-browser.org/netsurf.git/tree/39b68d0b8309c55dfe00f3d91...
The branch, master has been updated
via 39b68d0b8309c55dfe00f3d91682149118dae411 (commit)
from 77a090e9d0619c6e3c23e453d4ec8884de594901 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=39b68d0b8309c55dfe0...
commit 39b68d0b8309c55dfe00f3d91682149118dae411
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Ensure url is unreffed.
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index b1d4165..9a42926 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -1344,6 +1344,8 @@ nserror hotlist_add_entry(nsurl *url, const char *title, bool at_y, int y)
return err;
}
+ nsurl_unref(url);
+
return NSERROR_OK;
}
-----------------------------------------------------------------------
Summary of changes:
desktop/hotlist.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index b1d4165..9a42926 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -1344,6 +1344,8 @@ nserror hotlist_add_entry(nsurl *url, const char *title, bool at_y, int y)
return err;
}
+ nsurl_unref(url);
+
return NSERROR_OK;
}
--
NetSurf Browser
10 years
netsurf: branch master updated. release/3.0-454-g77a090e
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/77a090e9d0619c6e3c23e...
...commit http://git.netsurf-browser.org/netsurf.git/commit/77a090e9d0619c6e3c23e45...
...tree http://git.netsurf-browser.org/netsurf.git/tree/77a090e9d0619c6e3c23e453d...
The branch, master has been updated
via 77a090e9d0619c6e3c23e453d4ec8884de594901 (commit)
via 43d1e777df24d2a843a88c021acfeb82f9d31a40 (commit)
via 52937b97633c92526efa9546d377a484ea91d7ab (commit)
via fd1a94a751cb4225f93528a5c8b32e0a2bd11aa5 (commit)
via 4bf5ec0dada6fd2d64087fb6ca644838a3bbf3ac (commit)
via fb9353f2208eb8cf3dc6055399d2efd6ac609d94 (commit)
via 00f108f4a24d623d63168fcbe7251db4dd9c1436 (commit)
via b7bc3deb7f813d070889dafc0037c41c901f06cd (commit)
from 2c3d2e5f8e3a862dee1e0101e40abb9430736ef3 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=77a090e9d0619c6e3c2...
commit 77a090e9d0619c6e3c23e453d4ec8884de594901
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Functions to add entry/folder at y-coord or at selection.
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 07cf2e4..b1d4165 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -175,7 +175,7 @@ static void hotlist_delete_entry_internal(struct hotlist_entry *e)
/**
- * Add an entry to the hotlist (creates the entry).
+ * Create hotlist entry data for URL.
*
* If set, 'title' must be allocated on the heap, ownership is yeilded to
* this function.
@@ -183,18 +183,19 @@ static void hotlist_delete_entry_internal(struct hotlist_entry *e)
* \param url URL for entry to add to hotlist.
* \param title Title for entry, or NULL if using title from data
* \param data URL data for the entry, or NULL
- * \param relation Existing node to insert as relation of, or NULL
- * \param rel Entry's relationship to relation
- * \param entry Updated to new treeview entry node
+ * \param entry Updated to new hotlist entry data
* \return NSERROR_OK on success, or appropriate error otherwise
*/
-static nserror hotlist_add_entry_internal(nsurl *url, const char *title,
- const struct url_data *data, treeview_node *relation,
- enum treeview_relationship rel, treeview_node **entry)
+static nserror hotlist_create_entry(nsurl *url, const char *title,
+ const struct url_data *data, struct hotlist_entry **entry)
{
nserror err;
struct hotlist_entry *e;
+ assert(url != NULL);
+
+ *entry = NULL;
+
if (data == NULL) {
/* Get the URL data */
data = urldb_get_url_data(url);
@@ -225,6 +226,38 @@ static nserror hotlist_add_entry_internal(nsurl *url, const char *title,
return err;
}
+ *entry = e;
+
+ return NSERROR_OK;
+}
+
+
+/**
+ * Add an entry to the hotlist (creates the entry).
+ *
+ * If set, 'title' must be allocated on the heap, ownership is yeilded to
+ * this function.
+ *
+ * \param url URL for entry to add to hotlist.
+ * \param title Title for entry, or NULL if using title from data
+ * \param data URL data for the entry, or NULL
+ * \param relation Existing node to insert as relation of, or NULL
+ * \param rel Entry's relationship to relation
+ * \param entry Updated to new treeview entry node
+ * \return NSERROR_OK on success, or appropriate error otherwise
+ */
+static nserror hotlist_add_entry_internal(nsurl *url, const char *title,
+ const struct url_data *data, treeview_node *relation,
+ enum treeview_relationship rel, treeview_node **entry)
+{
+ nserror err;
+ struct hotlist_entry *e;
+
+ err = hotlist_create_entry(url, title, data, &e);
+ if (err != NSERROR_OK) {
+ return err;
+ }
+
err = hotlist_entry_insert(e, relation, rel);
if (err != NSERROR_OK) {
hotlist_delete_entry_internal(e);
@@ -262,7 +295,7 @@ static nserror hotlist_add_folder_internal(
if (title == NULL) {
/* TODO: use messages */
- title = strdup("Folder");
+ title = strdup("New folder");
}
if (title == NULL) {
return NSERROR_NOMEM;
@@ -1281,6 +1314,63 @@ void hotlist_update_url(nsurl *url)
/* Exported interface, documented in hotlist.h */
+nserror hotlist_add_entry(nsurl *url, const char *title, bool at_y, int y)
+{
+ nserror err;
+ treeview_node *entry;
+ treeview_node *relation;
+ enum treeview_relationship rel;
+
+ if (url == NULL) {
+ err = nsurl_create("http://netsurf-browser.org/", &url);
+ if (err != NSERROR_OK) {
+ return err;
+ }
+ assert(url != NULL);
+ } else {
+ nsurl_ref(url);
+ }
+
+ err = treeview_get_relation(hl_ctx.tree, &relation, &rel, at_y, y);
+ if (err != NSERROR_OK) {
+ nsurl_unref(url);
+ return err;
+ }
+
+ err = hotlist_add_entry_internal(url, NULL, NULL,
+ relation, rel, &entry);
+ if (err != NSERROR_OK) {
+ nsurl_unref(url);
+ return err;
+ }
+
+ return NSERROR_OK;
+}
+
+
+/* Exported interface, documented in hotlist.h */
+nserror hotlist_add_folder(const char *title, bool at_y, int y)
+{
+ nserror err;
+ struct hotlist_folder *f;
+ treeview_node *relation;
+ enum treeview_relationship rel;
+
+ err = treeview_get_relation(hl_ctx.tree, &relation, &rel, at_y, y);
+ if (err != NSERROR_OK) {
+ return err;
+ }
+
+ err = hotlist_add_folder_internal(title, relation, rel, &f);
+ if (err != NSERROR_OK) {
+ return err;
+ }
+
+ return NSERROR_OK;
+}
+
+
+/* Exported interface, documented in hotlist.h */
void hotlist_redraw(int x, int y, struct rect *clip,
const struct redraw_context *ctx)
{
diff --git a/desktop/hotlist.h b/desktop/hotlist.h
index 92fc577..4a7ef2f 100644
--- a/desktop/hotlist.h
+++ b/desktop/hotlist.h
@@ -84,6 +84,27 @@ void hotlist_remove_url(nsurl *url);
void hotlist_update_url(nsurl *url);
/**
+ * Add an entry to the hotlist for given Title/URL.
+ *
+ * \param url URL for entry to be added, or NULL
+ * \param title Title for entry being added, or NULL
+ * \param at_y Iff true, insert at y-offest
+ * \param y Y-offset in px from top of hotlist. Ignored if (!at_y).
+ * \return NSERROR_OK on success, appropriate error otherwise
+ */
+nserror hotlist_add_entry(nsurl *url, const char *title, bool at_y, int y);
+
+/**
+ * Add a folder to the hotlist.
+ *
+ * \param url Title for folder being added, or NULL
+ * \param at_y Iff true, insert at y-offest
+ * \param y Y-offset in px from top of hotlist. Ignored if (!at_y).
+ * \return NSERROR_OK on success, appropriate error otherwise
+ */
+nserror hotlist_add_folder(const char *title, bool at_y, int y);
+
+/**
* Redraw the hotlist.
*
* \param x X coordinate to render treeview at
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=43d1e777df24d2a843a...
commit 43d1e777df24d2a843a88c021acfeb82f9d31a40
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Function to get releations for node entry.
diff --git a/desktop/treeview.c b/desktop/treeview.c
index bf2d0ef..a0fbe92 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -685,6 +685,37 @@ static inline treeview_node * treeview_node_next(treeview_node *node, bool full)
}
+/* Find node at given y-position
+ *
+ * \param tree Treeview object to delete node from
+ * \param target_y Target y-position
+ * \return node at y_target
+ */
+static treeview_node * treeview_y_node(treeview *tree, int target_y)
+{
+ treeview_node *n;
+ int y = 0;
+ int h;
+
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ n = treeview_node_next(tree->root, false);
+
+ while (n != NULL) {
+ h = (n->type == TREE_NODE_ENTRY) ?
+ n->height : tree_g.line_height;
+ if (target_y >= y && target_y < y + h)
+ return n;
+ y += h;
+
+ n = treeview_node_next(n, false);
+ }
+
+ return NULL;
+}
+
+
/* Find y position of the top of a node
*
* \param tree Treeview object to delete node from
@@ -1596,6 +1627,7 @@ void treeview_redraw(treeview *tree, int x, int y, struct rect *clip,
struct treeview_selection_walk_data {
enum {
TREEVIEW_WALK_HAS_SELECTION,
+ TREEVIEW_WALK_GET_FIRST_SELECTED,
TREEVIEW_WALK_CLEAR_SELECTION,
TREEVIEW_WALK_SELECT_ALL,
TREEVIEW_WALK_COMMIT_SELECT_DRAG,
@@ -1616,6 +1648,9 @@ struct treeview_selection_walk_data {
struct {
treeview_node *prev;
} yank;
+ struct {
+ treeview_node *n;
+ } first;
} data;
int current_y;
treeview *tree;
@@ -1641,6 +1676,14 @@ static nserror treeview_node_selection_walk_cb(treeview_node *n,
}
break;
+ case TREEVIEW_WALK_GET_FIRST_SELECTED:
+ if (n->flags & TREE_NODE_SELECTED) {
+ sw->data.first.n = n;
+ *end = true; /* Can abort tree walk */
+ return NSERROR_OK;
+ }
+ break;
+
case TREEVIEW_WALK_DELETE_SELECTION:
if (n->flags & TREE_NODE_SELECTED) {
err = treeview_delete_node_internal(sw->tree, n, true);
@@ -1744,6 +1787,26 @@ bool treeview_has_selection(treeview *tree)
}
+/**
+ * Get first selected node (in any)
+ *
+ * \param tree Treeview object in which to create folder
+ * \return the first selected treeview node, or NULL
+ */
+static treeview_node * treeview_get_first_selected(treeview *tree)
+{
+ struct treeview_selection_walk_data sw;
+
+ sw.purpose = TREEVIEW_WALK_GET_FIRST_SELECTED;
+ sw.data.first.n = NULL;
+
+ treeview_walk_internal(tree->root, false, NULL,
+ treeview_node_selection_walk_cb, &sw);
+
+ return sw.data.first.n;
+}
+
+
/* Exported interface, documented in treeview.h */
bool treeview_clear_selection(treeview *tree, struct rect *rect)
{
@@ -2060,6 +2123,50 @@ static nserror treeview_launch_selection(treeview *tree)
}
+/* Exported interface, documented in treeview.h */
+nserror treeview_get_relation(treeview *tree, treeview_node **relation,
+ enum treeview_relationship *rel, bool at_y, int y)
+{
+ treeview_node *n;
+
+ assert(tree != NULL);
+
+ if (at_y) {
+ n = treeview_y_node(tree, y);
+
+ } else {
+ n = treeview_get_first_selected(tree);
+ }
+
+ if (n != NULL && n->parent != NULL) {
+ if (n == n->parent->children) {
+ /* First child */
+ *relation = n->parent;
+ *rel = TREE_REL_FIRST_CHILD;
+ } else {
+ /* Not first child */
+ *relation = n->prev_sib;
+ *rel = TREE_REL_NEXT_SIBLING;
+ }
+ } else {
+ if (tree->root->children == NULL) {
+ /* First child of root */
+ *relation = tree->root;
+ *rel = TREE_REL_FIRST_CHILD;
+ } else {
+ /* Last child of root */
+ n = tree->root->children;
+ while (n->next_sib != NULL)
+ n = n->next_sib;
+ *relation = n;
+ *rel = TREE_REL_NEXT_SIBLING;
+ }
+ }
+
+ return NSERROR_OK;
+}
+
+
struct treeview_nav_state {
treeview *tree;
treeview_node *prev;
diff --git a/desktop/treeview.h b/desktop/treeview.h
index 42dd4ca..ee2e82b 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -153,6 +153,25 @@ nserror treeview_create(treeview **tree,
nserror treeview_destroy(treeview *tree);
/**
+ * Find a releation for node creation.
+ *
+ * \param tree Treeview object in which to create folder
+ * \param relation Existing node to insert as relation of, or NULL
+ * \param rel Folder's relationship to relation
+ * \param at_y Iff true, insert at y-offest
+ * \param y Y-offset in px from top of hotlist. Ignored if (!at_y).
+ * \return NSERROR_OK on success, appropriate error otherwise
+ *
+ * If at_y is set, we find a relation that will put the created node at that
+ * position.
+ *
+ * If at_y is unset, we find a relation that would put the node below the first
+ * selected node, or at the end of the treeview if no nodes selected.
+ */
+nserror treeview_get_relation(treeview *tree, treeview_node **relation,
+ enum treeview_relationship *rel, bool at_y, int y);
+
+/**
* Create a folder node in given treeview
*
* \param tree Treeview object in which to create folder
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=52937b97633c92526ef...
commit 52937b97633c92526efa9546d377a484ea91d7ab
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Update new hotlist
diff --git a/desktop/hotlist_old.c b/desktop/hotlist_old.c
index bee38d3..d48f6f6 100644
--- a/desktop/hotlist_old.c
+++ b/desktop/hotlist_old.c
@@ -20,10 +20,12 @@
#include <ctype.h>
#include <stdlib.h>
+#include "utils/nsoption.h"
#include "content/content.h"
#include "content/hlcache.h"
#include "content/urldb.h"
#include "desktop/browser.h"
+#include "desktop/hotlist.h"
#include "desktop/hotlist_old.h"
#include "desktop/plotters.h"
#include "desktop/tree.h"
@@ -463,6 +465,11 @@ void hotlist_old_add_page(const char *url)
node = tree_create_URL_node(hotlist_old_tree, parent, nsurl, NULL,
hotlist_old_node_callback, NULL);
tree_update_URL_node(hotlist_old_tree, node, nsurl, data);
+
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false)
+ hotlist_add_url(nsurl);
+
nsurl_unref(nsurl);
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=fd1a94a751cb4225f93...
commit fd1a94a751cb4225f93528a5c8b32e0a2bd11aa5
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Update the new hotlist on visits.
diff --git a/desktop/browser.c b/desktop/browser.c
index e890d96..42738db 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -48,6 +48,7 @@
#include "desktop/global_history.h"
#include "desktop/gui.h"
#include "desktop/history_global_core.h"
+#include "desktop/hotlist.h"
#include "desktop/hotlist_old.h"
#include "desktop/knockout.h"
#include "desktop/local_history.h"
@@ -1286,7 +1287,10 @@ static nserror browser_window_callback(hlcache_handle *c,
browser_window_update_favicon(c, bw, NULL);
history_update(bw->history, c);
- hotlist_old_visited(c);
+ if (nsoption_bool(temp_treeview_test) == false)
+ hotlist_old_visited(c);
+ else
+ hotlist_update_url(hlcache_handle_get_url(c));
if (bw->refresh_interval != -1)
schedule(bw->refresh_interval,
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=4bf5ec0dada6fd2d640...
commit 4bf5ec0dada6fd2d64087fb6ca644838a3bbf3ac
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Unset default folder when it gets deleted.
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index cde038a..07cf2e4 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -303,6 +303,8 @@ static nserror hotlist_tree_node_folder_cb(
switch (msg.msg) {
case TREE_MSG_NODE_DELETE:
+ if (f == hl_ctx.default_folder)
+ hl_ctx.default_folder = NULL;
free((void*)f->data.value); /* Eww */
free(f);
break;
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=fb9353f2208eb8cf3dc...
commit fb9353f2208eb8cf3dc6055399d2efd6ac609d94
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Use Messages for default folder name.
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 9679cd2..cde038a 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -1101,8 +1101,9 @@ nserror hotlist_add_url(nsurl *url)
/* Make the default folder, if we don't have one */
if (hl_ctx.default_folder == NULL) {
+ const char *temp = messages_get("HotlistDefaultFolderName");
struct hotlist_folder *f;
- err = hotlist_add_folder_internal(strdup("Unsorted entries"),
+ err = hotlist_add_folder_internal(strdup(temp),
NULL, TREE_REL_FIRST_CHILD, &f);
if (err != NSERROR_OK)
return err;
diff --git a/resources/FatMessages b/resources/FatMessages
index 47eaf7d..b27df8d 100644
--- a/resources/FatMessages
+++ b/resources/FatMessages
@@ -1275,6 +1275,15 @@ it.all.CookieManagerHTTP:HTTP connections only
nl.all.CookieManagerHTTP:HTTP connections only
+# Hotlist default folder's default name
+#
+en.all.HotlistDefaultFolderName:Unsorted entries
+de.all.HotlistDefaultFolderName:Unsorted entries
+fr.all.HotlistDefaultFolderName:Unsorted entries
+it.all.HotlistDefaultFolderName:Unsorted entries
+nl.all.HotlistDefaultFolderName:Unsorted entries
+
+
# Tree export
#
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=00f108f4a24d623d631...
commit 00f108f4a24d623d63168fcbe7251db4dd9c1436
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Add new entries to default folder.
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 5d19253..9679cd2 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -246,9 +246,9 @@ static nserror hotlist_add_entry_internal(nsurl *url, const char *title,
* If set, 'title' must be allocated on the heap, ownership is yeilded to
* this function.
*
- * \param title Title for entry, or NULL if using title from data
+ * \param title Title for folder, or NULL if using title from data
* \param relation Existing node to insert as relation of, or NULL
- * \param rel Entry's relationship to relation
+ * \param rel Folder's relationship to relation
* \param folder Updated to new hotlist folder data
* \return NSERROR_OK on success, or appropriate error otherwise
*/
@@ -1099,11 +1099,28 @@ nserror hotlist_add_url(nsurl *url)
if (hl_ctx.tree == NULL)
return NSERROR_OK;
- /* TODO: Don't just dump it at the top of the root node.
- * Make an "Unsorted" folder for new additions. */
- err = hotlist_add_entry_internal(url, NULL, NULL, NULL,
+ /* Make the default folder, if we don't have one */
+ if (hl_ctx.default_folder == NULL) {
+ struct hotlist_folder *f;
+ err = hotlist_add_folder_internal(strdup("Unsorted entries"),
+ NULL, TREE_REL_FIRST_CHILD, &f);
+ if (err != NSERROR_OK)
+ return err;
+
+ if (f == NULL)
+ return NSERROR_NOMEM;
+
+ hl_ctx.default_folder = f;
+ }
+
+ /* Add new entry to default folder */
+ err = hotlist_add_entry_internal(url, NULL, NULL,
+ hl_ctx.default_folder->folder,
TREE_REL_FIRST_CHILD, &entry);
+ /* Ensure default folder is expanded */
+ err = treeview_node_expand(hl_ctx.tree, hl_ctx.default_folder->folder);
+
return NSERROR_OK;
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=b7bc3deb7f813d07088...
commit b7bc3deb7f813d070889dafc0037c41c901f06cd
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Load and save default folder ID.
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 645c770..5d19253 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -55,6 +55,7 @@ struct hotlist_ctx {
treeview *tree;
struct treeview_field_desc fields[HL_N_FIELDS];
bool built;
+ struct hotlist_folder *default_folder;
};
struct hotlist_ctx hl_ctx;
@@ -248,12 +249,12 @@ static nserror hotlist_add_entry_internal(nsurl *url, const char *title,
* \param title Title for entry, or NULL if using title from data
* \param relation Existing node to insert as relation of, or NULL
* \param rel Entry's relationship to relation
- * \param folder Updated to new treeview entry node
+ * \param folder Updated to new hotlist folder data
* \return NSERROR_OK on success, or appropriate error otherwise
*/
static nserror hotlist_add_folder_internal(
const char *title, treeview_node *relation,
- enum treeview_relationship rel, treeview_node **folder)
+ enum treeview_relationship rel, struct hotlist_folder **folder)
{
struct hotlist_folder *f;
treeview_node *n;
@@ -287,7 +288,7 @@ static nserror hotlist_add_folder_internal(
}
f->folder = n;
- *folder = n;
+ *folder = f;
return NSERROR_OK;
}
@@ -588,6 +589,8 @@ nserror hotlist_load_directory_cb(dom_node *node, void *ctx)
corestring_lwc_ul)) {
/* Directory handling, part 2: Make node, and handle children */
char *title;
+ dom_string *id;
+ struct hotlist_folder *f;
hotlist_load_ctx new_ctx;
treeview_node *rel;
@@ -600,8 +603,22 @@ nserror hotlist_load_directory_cb(dom_node *node, void *ctx)
/* Add folder node */
err = hotlist_add_folder_internal(title, current_ctx->rel,
- current_ctx->relshp, &rel);
+ current_ctx->relshp, &f);
+ /* Check if folder should be default folder */
+ error = dom_element_get_attribute(node, corestring_dom_id, &id);
+ if (error != DOM_NO_ERR) {
+ dom_string_unref(name);
+ return NSERROR_NOMEM;
+ }
+ if (id != NULL) {
+ if (dom_string_lwc_isequal(id, corestring_lwc_default))
+ hl_ctx.default_folder = f;
+
+ dom_string_unref(id);
+ }
+
+ rel = f->folder;
current_ctx->rel = rel;
current_ctx->relshp = TREE_REL_NEXT_SIBLING;
@@ -733,7 +750,7 @@ static nserror hotlist_load(const char *path, bool *loaded)
static nserror hotlist_generate(void)
{
int i;
- treeview_node *f;
+ struct hotlist_folder *f;
treeview_node *e;
char *title;
nserror err;
@@ -774,7 +791,7 @@ static nserror hotlist_generate(void)
/* Build the node */
err = hotlist_add_entry_internal(url, title,
- NULL, f, TREE_REL_FIRST_CHILD, &e);
+ NULL, f->folder, TREE_REL_FIRST_CHILD, &e);
nsurl_unref(url);
if (err != NSERROR_OK) {
@@ -829,7 +846,12 @@ static nserror hotlist_export_enter_cb(void *ctx, void *node_data,
if (ret != UTF8_CONVERT_OK)
return NSERROR_SAVE_FAILED;
- fprintf(tw->fp, "<h4>%s</h4>\n<ul>\n", f_text);
+ if (f == hl_ctx.default_folder) {
+ fprintf(tw->fp, "<h4>%s</h4>\n<ul id=\"default\">\n",
+ f_text);
+ } else {
+ fprintf(tw->fp, "<h4>%s</h4>\n<ul>\n", f_text);
+ }
free(f_text);
}
@@ -1000,6 +1022,10 @@ nserror hotlist_init(struct core_window_callback_table *cw_t,
LOG(("Loading hotlist"));
+ hl_ctx.tree = NULL;
+ hl_ctx.built = false;
+ hl_ctx.default_folder = NULL;
+
/* Init. hotlist treeview entry fields */
err = hotlist_initialise_entry_fields();
if (err != NSERROR_OK) {
-----------------------------------------------------------------------
Summary of changes:
desktop/browser.c | 6 ++-
desktop/hotlist.c | 176 +++++++++++++++++++++++++++++++++++++++++++------
desktop/hotlist.h | 21 ++++++
desktop/hotlist_old.c | 7 ++
desktop/treeview.c | 107 ++++++++++++++++++++++++++++++
desktop/treeview.h | 19 +++++
resources/FatMessages | 9 +++
7 files changed, 324 insertions(+), 21 deletions(-)
diff --git a/desktop/browser.c b/desktop/browser.c
index e890d96..42738db 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -48,6 +48,7 @@
#include "desktop/global_history.h"
#include "desktop/gui.h"
#include "desktop/history_global_core.h"
+#include "desktop/hotlist.h"
#include "desktop/hotlist_old.h"
#include "desktop/knockout.h"
#include "desktop/local_history.h"
@@ -1286,7 +1287,10 @@ static nserror browser_window_callback(hlcache_handle *c,
browser_window_update_favicon(c, bw, NULL);
history_update(bw->history, c);
- hotlist_old_visited(c);
+ if (nsoption_bool(temp_treeview_test) == false)
+ hotlist_old_visited(c);
+ else
+ hotlist_update_url(hlcache_handle_get_url(c));
if (bw->refresh_interval != -1)
schedule(bw->refresh_interval,
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index 645c770..b1d4165 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -55,6 +55,7 @@ struct hotlist_ctx {
treeview *tree;
struct treeview_field_desc fields[HL_N_FIELDS];
bool built;
+ struct hotlist_folder *default_folder;
};
struct hotlist_ctx hl_ctx;
@@ -174,7 +175,7 @@ static void hotlist_delete_entry_internal(struct hotlist_entry *e)
/**
- * Add an entry to the hotlist (creates the entry).
+ * Create hotlist entry data for URL.
*
* If set, 'title' must be allocated on the heap, ownership is yeilded to
* this function.
@@ -182,18 +183,19 @@ static void hotlist_delete_entry_internal(struct hotlist_entry *e)
* \param url URL for entry to add to hotlist.
* \param title Title for entry, or NULL if using title from data
* \param data URL data for the entry, or NULL
- * \param relation Existing node to insert as relation of, or NULL
- * \param rel Entry's relationship to relation
- * \param entry Updated to new treeview entry node
+ * \param entry Updated to new hotlist entry data
* \return NSERROR_OK on success, or appropriate error otherwise
*/
-static nserror hotlist_add_entry_internal(nsurl *url, const char *title,
- const struct url_data *data, treeview_node *relation,
- enum treeview_relationship rel, treeview_node **entry)
+static nserror hotlist_create_entry(nsurl *url, const char *title,
+ const struct url_data *data, struct hotlist_entry **entry)
{
nserror err;
struct hotlist_entry *e;
+ assert(url != NULL);
+
+ *entry = NULL;
+
if (data == NULL) {
/* Get the URL data */
data = urldb_get_url_data(url);
@@ -224,6 +226,38 @@ static nserror hotlist_add_entry_internal(nsurl *url, const char *title,
return err;
}
+ *entry = e;
+
+ return NSERROR_OK;
+}
+
+
+/**
+ * Add an entry to the hotlist (creates the entry).
+ *
+ * If set, 'title' must be allocated on the heap, ownership is yeilded to
+ * this function.
+ *
+ * \param url URL for entry to add to hotlist.
+ * \param title Title for entry, or NULL if using title from data
+ * \param data URL data for the entry, or NULL
+ * \param relation Existing node to insert as relation of, or NULL
+ * \param rel Entry's relationship to relation
+ * \param entry Updated to new treeview entry node
+ * \return NSERROR_OK on success, or appropriate error otherwise
+ */
+static nserror hotlist_add_entry_internal(nsurl *url, const char *title,
+ const struct url_data *data, treeview_node *relation,
+ enum treeview_relationship rel, treeview_node **entry)
+{
+ nserror err;
+ struct hotlist_entry *e;
+
+ err = hotlist_create_entry(url, title, data, &e);
+ if (err != NSERROR_OK) {
+ return err;
+ }
+
err = hotlist_entry_insert(e, relation, rel);
if (err != NSERROR_OK) {
hotlist_delete_entry_internal(e);
@@ -245,15 +279,15 @@ static nserror hotlist_add_entry_internal(nsurl *url, const char *title,
* If set, 'title' must be allocated on the heap, ownership is yeilded to
* this function.
*
- * \param title Title for entry, or NULL if using title from data
+ * \param title Title for folder, or NULL if using title from data
* \param relation Existing node to insert as relation of, or NULL
- * \param rel Entry's relationship to relation
- * \param folder Updated to new treeview entry node
+ * \param rel Folder's relationship to relation
+ * \param folder Updated to new hotlist folder data
* \return NSERROR_OK on success, or appropriate error otherwise
*/
static nserror hotlist_add_folder_internal(
const char *title, treeview_node *relation,
- enum treeview_relationship rel, treeview_node **folder)
+ enum treeview_relationship rel, struct hotlist_folder **folder)
{
struct hotlist_folder *f;
treeview_node *n;
@@ -261,7 +295,7 @@ static nserror hotlist_add_folder_internal(
if (title == NULL) {
/* TODO: use messages */
- title = strdup("Folder");
+ title = strdup("New folder");
}
if (title == NULL) {
return NSERROR_NOMEM;
@@ -287,7 +321,7 @@ static nserror hotlist_add_folder_internal(
}
f->folder = n;
- *folder = n;
+ *folder = f;
return NSERROR_OK;
}
@@ -302,6 +336,8 @@ static nserror hotlist_tree_node_folder_cb(
switch (msg.msg) {
case TREE_MSG_NODE_DELETE:
+ if (f == hl_ctx.default_folder)
+ hl_ctx.default_folder = NULL;
free((void*)f->data.value); /* Eww */
free(f);
break;
@@ -588,6 +624,8 @@ nserror hotlist_load_directory_cb(dom_node *node, void *ctx)
corestring_lwc_ul)) {
/* Directory handling, part 2: Make node, and handle children */
char *title;
+ dom_string *id;
+ struct hotlist_folder *f;
hotlist_load_ctx new_ctx;
treeview_node *rel;
@@ -600,8 +638,22 @@ nserror hotlist_load_directory_cb(dom_node *node, void *ctx)
/* Add folder node */
err = hotlist_add_folder_internal(title, current_ctx->rel,
- current_ctx->relshp, &rel);
+ current_ctx->relshp, &f);
+
+ /* Check if folder should be default folder */
+ error = dom_element_get_attribute(node, corestring_dom_id, &id);
+ if (error != DOM_NO_ERR) {
+ dom_string_unref(name);
+ return NSERROR_NOMEM;
+ }
+ if (id != NULL) {
+ if (dom_string_lwc_isequal(id, corestring_lwc_default))
+ hl_ctx.default_folder = f;
+
+ dom_string_unref(id);
+ }
+ rel = f->folder;
current_ctx->rel = rel;
current_ctx->relshp = TREE_REL_NEXT_SIBLING;
@@ -733,7 +785,7 @@ static nserror hotlist_load(const char *path, bool *loaded)
static nserror hotlist_generate(void)
{
int i;
- treeview_node *f;
+ struct hotlist_folder *f;
treeview_node *e;
char *title;
nserror err;
@@ -774,7 +826,7 @@ static nserror hotlist_generate(void)
/* Build the node */
err = hotlist_add_entry_internal(url, title,
- NULL, f, TREE_REL_FIRST_CHILD, &e);
+ NULL, f->folder, TREE_REL_FIRST_CHILD, &e);
nsurl_unref(url);
if (err != NSERROR_OK) {
@@ -829,7 +881,12 @@ static nserror hotlist_export_enter_cb(void *ctx, void *node_data,
if (ret != UTF8_CONVERT_OK)
return NSERROR_SAVE_FAILED;
- fprintf(tw->fp, "<h4>%s</h4>\n<ul>\n", f_text);
+ if (f == hl_ctx.default_folder) {
+ fprintf(tw->fp, "<h4>%s</h4>\n<ul id=\"default\">\n",
+ f_text);
+ } else {
+ fprintf(tw->fp, "<h4>%s</h4>\n<ul>\n", f_text);
+ }
free(f_text);
}
@@ -1000,6 +1057,10 @@ nserror hotlist_init(struct core_window_callback_table *cw_t,
LOG(("Loading hotlist"));
+ hl_ctx.tree = NULL;
+ hl_ctx.built = false;
+ hl_ctx.default_folder = NULL;
+
/* Init. hotlist treeview entry fields */
err = hotlist_initialise_entry_fields();
if (err != NSERROR_OK) {
@@ -1073,11 +1134,29 @@ nserror hotlist_add_url(nsurl *url)
if (hl_ctx.tree == NULL)
return NSERROR_OK;
- /* TODO: Don't just dump it at the top of the root node.
- * Make an "Unsorted" folder for new additions. */
- err = hotlist_add_entry_internal(url, NULL, NULL, NULL,
+ /* Make the default folder, if we don't have one */
+ if (hl_ctx.default_folder == NULL) {
+ const char *temp = messages_get("HotlistDefaultFolderName");
+ struct hotlist_folder *f;
+ err = hotlist_add_folder_internal(strdup(temp),
+ NULL, TREE_REL_FIRST_CHILD, &f);
+ if (err != NSERROR_OK)
+ return err;
+
+ if (f == NULL)
+ return NSERROR_NOMEM;
+
+ hl_ctx.default_folder = f;
+ }
+
+ /* Add new entry to default folder */
+ err = hotlist_add_entry_internal(url, NULL, NULL,
+ hl_ctx.default_folder->folder,
TREE_REL_FIRST_CHILD, &entry);
+ /* Ensure default folder is expanded */
+ err = treeview_node_expand(hl_ctx.tree, hl_ctx.default_folder->folder);
+
return NSERROR_OK;
}
@@ -1235,6 +1314,63 @@ void hotlist_update_url(nsurl *url)
/* Exported interface, documented in hotlist.h */
+nserror hotlist_add_entry(nsurl *url, const char *title, bool at_y, int y)
+{
+ nserror err;
+ treeview_node *entry;
+ treeview_node *relation;
+ enum treeview_relationship rel;
+
+ if (url == NULL) {
+ err = nsurl_create("http://netsurf-browser.org/", &url);
+ if (err != NSERROR_OK) {
+ return err;
+ }
+ assert(url != NULL);
+ } else {
+ nsurl_ref(url);
+ }
+
+ err = treeview_get_relation(hl_ctx.tree, &relation, &rel, at_y, y);
+ if (err != NSERROR_OK) {
+ nsurl_unref(url);
+ return err;
+ }
+
+ err = hotlist_add_entry_internal(url, NULL, NULL,
+ relation, rel, &entry);
+ if (err != NSERROR_OK) {
+ nsurl_unref(url);
+ return err;
+ }
+
+ return NSERROR_OK;
+}
+
+
+/* Exported interface, documented in hotlist.h */
+nserror hotlist_add_folder(const char *title, bool at_y, int y)
+{
+ nserror err;
+ struct hotlist_folder *f;
+ treeview_node *relation;
+ enum treeview_relationship rel;
+
+ err = treeview_get_relation(hl_ctx.tree, &relation, &rel, at_y, y);
+ if (err != NSERROR_OK) {
+ return err;
+ }
+
+ err = hotlist_add_folder_internal(title, relation, rel, &f);
+ if (err != NSERROR_OK) {
+ return err;
+ }
+
+ return NSERROR_OK;
+}
+
+
+/* Exported interface, documented in hotlist.h */
void hotlist_redraw(int x, int y, struct rect *clip,
const struct redraw_context *ctx)
{
diff --git a/desktop/hotlist.h b/desktop/hotlist.h
index 92fc577..4a7ef2f 100644
--- a/desktop/hotlist.h
+++ b/desktop/hotlist.h
@@ -84,6 +84,27 @@ void hotlist_remove_url(nsurl *url);
void hotlist_update_url(nsurl *url);
/**
+ * Add an entry to the hotlist for given Title/URL.
+ *
+ * \param url URL for entry to be added, or NULL
+ * \param title Title for entry being added, or NULL
+ * \param at_y Iff true, insert at y-offest
+ * \param y Y-offset in px from top of hotlist. Ignored if (!at_y).
+ * \return NSERROR_OK on success, appropriate error otherwise
+ */
+nserror hotlist_add_entry(nsurl *url, const char *title, bool at_y, int y);
+
+/**
+ * Add a folder to the hotlist.
+ *
+ * \param url Title for folder being added, or NULL
+ * \param at_y Iff true, insert at y-offest
+ * \param y Y-offset in px from top of hotlist. Ignored if (!at_y).
+ * \return NSERROR_OK on success, appropriate error otherwise
+ */
+nserror hotlist_add_folder(const char *title, bool at_y, int y);
+
+/**
* Redraw the hotlist.
*
* \param x X coordinate to render treeview at
diff --git a/desktop/hotlist_old.c b/desktop/hotlist_old.c
index bee38d3..d48f6f6 100644
--- a/desktop/hotlist_old.c
+++ b/desktop/hotlist_old.c
@@ -20,10 +20,12 @@
#include <ctype.h>
#include <stdlib.h>
+#include "utils/nsoption.h"
#include "content/content.h"
#include "content/hlcache.h"
#include "content/urldb.h"
#include "desktop/browser.h"
+#include "desktop/hotlist.h"
#include "desktop/hotlist_old.h"
#include "desktop/plotters.h"
#include "desktop/tree.h"
@@ -463,6 +465,11 @@ void hotlist_old_add_page(const char *url)
node = tree_create_URL_node(hotlist_old_tree, parent, nsurl, NULL,
hotlist_old_node_callback, NULL);
tree_update_URL_node(hotlist_old_tree, node, nsurl, data);
+
+ /* Update new hotlist */
+ if (nsoption_bool(temp_treeview_test) != false)
+ hotlist_add_url(nsurl);
+
nsurl_unref(nsurl);
}
diff --git a/desktop/treeview.c b/desktop/treeview.c
index bf2d0ef..a0fbe92 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -685,6 +685,37 @@ static inline treeview_node * treeview_node_next(treeview_node *node, bool full)
}
+/* Find node at given y-position
+ *
+ * \param tree Treeview object to delete node from
+ * \param target_y Target y-position
+ * \return node at y_target
+ */
+static treeview_node * treeview_y_node(treeview *tree, int target_y)
+{
+ treeview_node *n;
+ int y = 0;
+ int h;
+
+ assert(tree != NULL);
+ assert(tree->root != NULL);
+
+ n = treeview_node_next(tree->root, false);
+
+ while (n != NULL) {
+ h = (n->type == TREE_NODE_ENTRY) ?
+ n->height : tree_g.line_height;
+ if (target_y >= y && target_y < y + h)
+ return n;
+ y += h;
+
+ n = treeview_node_next(n, false);
+ }
+
+ return NULL;
+}
+
+
/* Find y position of the top of a node
*
* \param tree Treeview object to delete node from
@@ -1596,6 +1627,7 @@ void treeview_redraw(treeview *tree, int x, int y, struct rect *clip,
struct treeview_selection_walk_data {
enum {
TREEVIEW_WALK_HAS_SELECTION,
+ TREEVIEW_WALK_GET_FIRST_SELECTED,
TREEVIEW_WALK_CLEAR_SELECTION,
TREEVIEW_WALK_SELECT_ALL,
TREEVIEW_WALK_COMMIT_SELECT_DRAG,
@@ -1616,6 +1648,9 @@ struct treeview_selection_walk_data {
struct {
treeview_node *prev;
} yank;
+ struct {
+ treeview_node *n;
+ } first;
} data;
int current_y;
treeview *tree;
@@ -1641,6 +1676,14 @@ static nserror treeview_node_selection_walk_cb(treeview_node *n,
}
break;
+ case TREEVIEW_WALK_GET_FIRST_SELECTED:
+ if (n->flags & TREE_NODE_SELECTED) {
+ sw->data.first.n = n;
+ *end = true; /* Can abort tree walk */
+ return NSERROR_OK;
+ }
+ break;
+
case TREEVIEW_WALK_DELETE_SELECTION:
if (n->flags & TREE_NODE_SELECTED) {
err = treeview_delete_node_internal(sw->tree, n, true);
@@ -1744,6 +1787,26 @@ bool treeview_has_selection(treeview *tree)
}
+/**
+ * Get first selected node (in any)
+ *
+ * \param tree Treeview object in which to create folder
+ * \return the first selected treeview node, or NULL
+ */
+static treeview_node * treeview_get_first_selected(treeview *tree)
+{
+ struct treeview_selection_walk_data sw;
+
+ sw.purpose = TREEVIEW_WALK_GET_FIRST_SELECTED;
+ sw.data.first.n = NULL;
+
+ treeview_walk_internal(tree->root, false, NULL,
+ treeview_node_selection_walk_cb, &sw);
+
+ return sw.data.first.n;
+}
+
+
/* Exported interface, documented in treeview.h */
bool treeview_clear_selection(treeview *tree, struct rect *rect)
{
@@ -2060,6 +2123,50 @@ static nserror treeview_launch_selection(treeview *tree)
}
+/* Exported interface, documented in treeview.h */
+nserror treeview_get_relation(treeview *tree, treeview_node **relation,
+ enum treeview_relationship *rel, bool at_y, int y)
+{
+ treeview_node *n;
+
+ assert(tree != NULL);
+
+ if (at_y) {
+ n = treeview_y_node(tree, y);
+
+ } else {
+ n = treeview_get_first_selected(tree);
+ }
+
+ if (n != NULL && n->parent != NULL) {
+ if (n == n->parent->children) {
+ /* First child */
+ *relation = n->parent;
+ *rel = TREE_REL_FIRST_CHILD;
+ } else {
+ /* Not first child */
+ *relation = n->prev_sib;
+ *rel = TREE_REL_NEXT_SIBLING;
+ }
+ } else {
+ if (tree->root->children == NULL) {
+ /* First child of root */
+ *relation = tree->root;
+ *rel = TREE_REL_FIRST_CHILD;
+ } else {
+ /* Last child of root */
+ n = tree->root->children;
+ while (n->next_sib != NULL)
+ n = n->next_sib;
+ *relation = n;
+ *rel = TREE_REL_NEXT_SIBLING;
+ }
+ }
+
+ return NSERROR_OK;
+}
+
+
struct treeview_nav_state {
treeview *tree;
treeview_node *prev;
diff --git a/desktop/treeview.h b/desktop/treeview.h
index 42dd4ca..ee2e82b 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -153,6 +153,25 @@ nserror treeview_create(treeview **tree,
nserror treeview_destroy(treeview *tree);
/**
+ * Find a releation for node creation.
+ *
+ * \param tree Treeview object in which to create folder
+ * \param relation Existing node to insert as relation of, or NULL
+ * \param rel Folder's relationship to relation
+ * \param at_y Iff true, insert at y-offest
+ * \param y Y-offset in px from top of hotlist. Ignored if (!at_y).
+ * \return NSERROR_OK on success, appropriate error otherwise
+ *
+ * If at_y is set, we find a relation that will put the created node at that
+ * position.
+ *
+ * If at_y is unset, we find a relation that would put the node below the first
+ * selected node, or at the end of the treeview if no nodes selected.
+ */
+nserror treeview_get_relation(treeview *tree, treeview_node **relation,
+ enum treeview_relationship *rel, bool at_y, int y);
+
+/**
* Create a folder node in given treeview
*
* \param tree Treeview object in which to create folder
diff --git a/resources/FatMessages b/resources/FatMessages
index 47eaf7d..b27df8d 100644
--- a/resources/FatMessages
+++ b/resources/FatMessages
@@ -1275,6 +1275,15 @@ it.all.CookieManagerHTTP:HTTP connections only
nl.all.CookieManagerHTTP:HTTP connections only
+# Hotlist default folder's default name
+#
+en.all.HotlistDefaultFolderName:Unsorted entries
+de.all.HotlistDefaultFolderName:Unsorted entries
+fr.all.HotlistDefaultFolderName:Unsorted entries
+it.all.HotlistDefaultFolderName:Unsorted entries
+nl.all.HotlistDefaultFolderName:Unsorted entries
+
+
# Tree export
#
--
NetSurf Browser
10 years