[project @ 2006-01-01 18:52:30 by jmb]

Dump user options to stderr on abort.
Dump box tree on failed assertion.
Display Red/Yellow hourglass whilst dumping box tree (as this can take some time)

svn path=/import/netsurf/; revision=1928
This commit is contained in:
John Mark Bell 2006-01-01 18:52:30 +00:00
parent e9601cb35a
commit cf657a2ffb
3 changed files with 45 additions and 6 deletions

View File

@ -221,6 +221,36 @@ void options_write(const char *path)
fclose(fp);
}
/**
* Dump user options to stderr
*/
void options_dump(void)
{
unsigned int i;
for (i = 0; i != option_table_entries; i++) {
fprintf(stderr, "%s:", option_table[i].key);
switch (option_table[i].type) {
case OPTION_BOOL:
fprintf(stderr, "%c",
*((bool *) option_table[i].p) ?
'1' : '0');
break;
case OPTION_INTEGER:
fprintf(stderr, "%i",
*((int *) option_table[i].p));
break;
case OPTION_STRING:
if (*((char **) option_table[i].p))
fprintf(stderr, "%s",
*((char **) option_table[i].p));
break;
}
fprintf(stderr, "\n");
}
}
/**
* Loads a hotlist as a tree from a specified file.
@ -238,7 +268,7 @@ struct tree *options_load_tree(const char *filename) {
warn_user("HotlistLoadError", messages_get("ParsingFail"));
return NULL;
}
html = options_find_tree_element((xmlNode *) doc, "html");
body = options_find_tree_element(html, "body");
ul = options_find_tree_element(body, "ul");
@ -277,7 +307,7 @@ void options_load_tree_directory(xmlNode *ul, struct node *directory) {
char *title;
struct node *dir;
xmlNode *n;
assert(ul);
assert(directory);
@ -350,7 +380,7 @@ void options_load_tree_entry(xmlNode *li, struct node *directory) {
"memory exhausted.)");
return;
}
data = url_store_find(url);
if (!data)
return;

View File

@ -48,6 +48,7 @@ extern int option_expire_url;
void options_read(const char *path);
void options_write(const char *path);
void options_dump(void);
struct tree *options_load_tree(const char *filename);
bool options_save_tree(struct tree *tree, const char *filename,

View File

@ -621,12 +621,20 @@ void gui_quit(void)
void ro_gui_signal(int sig)
{
struct content *c;
if (sig == SIGFPE) {
if (sig == SIGFPE || sig == SIGABRT) {
os_colour old_sand, old_glass;
xhourglass_on();
xhourglass_colours(0x0000ffff, 0x000000ff,
&old_sand, &old_glass);
for (c = content_list; c; c = c->next)
if (c->type == CONTENT_HTML && c->data.html.layout) {
LOG(("Dumping: '%s'", c->url));
box_dump(c->data.html.layout, 0);
}
options_dump();
xhourglass_colours(old_sand, old_glass, 0, 0);
xhourglass_off();
}
ro_gui_cleanup();
raise(sig);
@ -838,7 +846,7 @@ void ro_gui_redraw_window_request(wimp_draw *redraw)
if (ro_gui_wimp_event_redraw_window(redraw))
return;
g = ro_gui_window_lookup(redraw->w);
if (g)
ro_gui_window_redraw(g, redraw);
@ -1055,7 +1063,7 @@ void ro_gui_keypress(wimp_key *key)
bool handled = false;
struct gui_window *g;
os_error *error;
if (ro_gui_wimp_event_keypress(key))
handled = true;
else if ((g = ro_gui_window_lookup(key->w)) != NULL)