From 350247a0f250bddef17c3bf7087af7034769bae2 Mon Sep 17 00:00:00 2001 From: Richard Wilson Date: Mon, 7 Feb 2005 23:00:09 +0000 Subject: [project @ 2005-02-07 23:00:09 by rjw] Stop toolbar scrolling by 1px, make theme saving use leafnames, improve error handling svn path=/import/netsurf/; revision=1499 --- riscos/dialog.c | 2 +- riscos/gui.c | 42 +++++++++++++++++++++++++++++++++++------- riscos/theme.c | 29 +++++++++++------------------ riscos/theme.h | 7 ++++--- 4 files changed, 51 insertions(+), 29 deletions(-) (limited to 'riscos') diff --git a/riscos/dialog.c b/riscos/dialog.c index 8c8aa4350..f10987f77 100644 --- a/riscos/dialog.c +++ b/riscos/dialog.c @@ -678,7 +678,7 @@ void ro_gui_dialog_config_set(void) { option_theme = NULL; } if (theme_choice) { - option_theme = strdup(theme_choice->filename); + option_theme = strdup(theme_choice->leafname); ro_gui_theme_apply(theme_choice); } diff --git a/riscos/gui.c b/riscos/gui.c index 3f423e5cc..b135f824d 100644 --- a/riscos/gui.c +++ b/riscos/gui.c @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -40,6 +41,7 @@ #include "netsurf/desktop/tree.h" #include "netsurf/render/font.h" #include "netsurf/render/html.h" +#include "netsurf/riscos/buffer.h" #include "netsurf/riscos/global_history.h" #include "netsurf/riscos/gui.h" #include "netsurf/riscos/help.h" @@ -145,7 +147,8 @@ struct ro_gui_poll_block { }; struct ro_gui_poll_block *ro_gui_poll_queued_blocks = 0; - +static void gui_signal(int sig); +static void ro_gui_cleanup(void); static void ro_gui_choose_language(void); static void ro_gui_check_fonts(void); static void ro_gui_sprites_init(void); @@ -180,7 +183,6 @@ static char *ro_path_to_url(const char *path); void gui_init(int argc, char** argv) { - char theme_path[256]; char path[40]; os_error *error; int length; @@ -188,6 +190,14 @@ void gui_init(int argc, char** argv) xhourglass_start(1); + atexit(ro_gui_cleanup); + signal(SIGABRT, gui_signal); + signal(SIGFPE, gui_signal); + signal(SIGILL, gui_signal); + signal(SIGINT, gui_signal); + signal(SIGSEGV, gui_signal); + signal(SIGTERM, gui_signal); + /* create our choices directories */ #ifndef NCOS xosfile_create_dir(".WWW", 0); @@ -209,6 +219,9 @@ void gui_init(int argc, char** argv) #else options_read(".Choices.NetSurf.Choices"); #endif + if (!option_theme) + option_theme = strdup("Aletheia"); /* default for no options */ + ro_gui_choose_language(); url_store_load("Choices:WWW.NetSurf.URL"); @@ -280,11 +293,8 @@ void gui_init(int argc, char** argv) */ ro_gui_theme_initialise(); descriptor = ro_gui_theme_find(option_theme); - if (!descriptor) { - snprintf(theme_path, 256, "%s.Resources.Theme", NETSURF_DIR); - theme_path[255] = '\0'; - descriptor = ro_gui_theme_find(theme_path); - } + if (!descriptor) + descriptor = ro_gui_theme_find("Aletheia"); ro_gui_theme_apply(descriptor); /* We don't create an Iconbar icon on NCOS */ @@ -558,6 +568,24 @@ void gui_quit(void) } +/** + * Handles a signal + */ +static void gui_signal(int sig) { + ro_gui_cleanup(); + raise(sig); +} + + +/** + * Ensures the gui exits cleanly. + */ +void ro_gui_cleanup(void) { + ro_gui_buffer_close(); + xhourglass_off(); +} + + /** * Poll the OS for events (RISC OS). * diff --git a/riscos/theme.c b/riscos/theme.c index a78c96790..a6615d3c3 100644 --- a/riscos/theme.c +++ b/riscos/theme.c @@ -87,8 +87,6 @@ static char theme_separator_name[] = "separator\0"; * Initialise the theme handler */ void ro_gui_theme_initialise(void) { - /* Get an initial theme list - */ theme_descriptors = ro_gui_theme_get_available(); } @@ -97,8 +95,6 @@ void ro_gui_theme_initialise(void) { * Finalise the theme handler */ void ro_gui_theme_finalise(void) { - /* Free all closed descriptors - */ ro_gui_theme_close(theme_current, false); ro_gui_theme_free(theme_descriptors, true); } @@ -111,23 +107,19 @@ void ro_gui_theme_finalise(void) { * to ro_gui_theme_get_available() unless it has been opened using * ro_gui_theme_open(). * - * \param filename the filename of the theme_descriptor to return + * \param leafname the filename of the theme_descriptor to return * \return the requested theme_descriptor, or NULL if not found */ -struct theme_descriptor *ro_gui_theme_find(const char *filename) { +struct theme_descriptor *ro_gui_theme_find(const char *leafname) { struct theme_descriptor *descriptor; - /* Check for bad filename - */ - if (!filename) return NULL; + if (!leafname) + return NULL; - /* Work through until we find our required filename - */ - descriptor = theme_descriptors; - while (descriptor) { - if (!strcmp(filename, descriptor->filename)) return descriptor; - descriptor = descriptor->next; - } + for (descriptor = theme_descriptors; descriptor; descriptor = descriptor->next) + if ((!strcmp(leafname, descriptor->leafname)) || + (!strcmp(leafname, descriptor->filename))) /* legacy (preserve options) */ + return descriptor; return NULL; } @@ -231,7 +223,7 @@ static void ro_gui_theme_get_available_in_dir(const char *directory) { /* Only process files */ - if ((info.obj_type == fileswitch_IS_FILE) && (!ro_gui_theme_find(pathname))) { + if ((info.obj_type == fileswitch_IS_FILE) && (!ro_gui_theme_find(info.name))) { /* Get the header */ @@ -280,6 +272,7 @@ static void ro_gui_theme_get_available_in_dir(const char *directory) { return; } strcpy(current->filename, pathname); + current->leafname = current->filename + strlen(directory) + 1; /* Link in our new descriptor */ @@ -1326,7 +1319,7 @@ bool ro_gui_theme_process_toolbar(struct toolbar *toolbar, int width) { if (toolbar->reformat_buttons) { extent.x1 = 16384; extent.y0 = 0; - extent.y1 = toolbar->height; + extent.y1 = toolbar->height - 2; xwimp_set_extent(toolbar->toolbar_handle, &extent); if ((parent) && (old_height != toolbar->height)) { ro_gui_theme_attach_toolbar(toolbar, parent); diff --git a/riscos/theme.h b/riscos/theme.h index 0c6f369db..3a86c05ac 100644 --- a/riscos/theme.h +++ b/riscos/theme.h @@ -2,7 +2,7 @@ * This file is part of NetSurf, http://netsurf.sourceforge.net/ * Licensed under the GNU General Public License, * http://www.opensource.org/licenses/gpl-license - * Copyright 2004 Richard Wilson + * Copyright 2005 Richard Wilson */ /** \file @@ -81,7 +81,8 @@ struct toolbar { }; struct theme_descriptor { - char *filename; /**< theme filename (leaf only) */ + char *leafname; /**< theme leafname */ + char *filename; /**< theme filename */ char name[32]; /**< theme name */ char author[64]; /**< theme author */ int browser_background; /**< background colour of browser toolbar */ @@ -99,7 +100,7 @@ struct theme_descriptor { void ro_gui_theme_initialise(void); void ro_gui_theme_finalise(void); -struct theme_descriptor *ro_gui_theme_find(const char *filename); +struct theme_descriptor *ro_gui_theme_find(const char *leafname); struct theme_descriptor *ro_gui_theme_get_available(void); bool ro_gui_theme_read_file_header(struct theme_descriptor *descriptor, struct theme_file_header *file_header); -- cgit v1.2.3