From d1094d12387238932ee49a6dc6091a8fef8ede66 Mon Sep 17 00:00:00 2001 From: Richard Wilson Date: Sat, 31 Dec 2005 04:40:49 +0000 Subject: [project @ 2005-12-31 04:40:48 by rjw] Use new wimp_event system. svn path=/import/netsurf/; revision=1916 --- riscos/theme_install.c | 119 ++++++++++++------------------------------------- 1 file changed, 28 insertions(+), 91 deletions(-) (limited to 'riscos/theme_install.c') diff --git a/riscos/theme_install.c b/riscos/theme_install.c index 9c483ba8b..37ad83ff7 100644 --- a/riscos/theme_install.c +++ b/riscos/theme_install.c @@ -14,38 +14,27 @@ #include "oslib/osfile.h" #include "netsurf/content/content.h" #include "netsurf/desktop/browser.h" +#include "netsurf/riscos/dialog.h" #include "netsurf/riscos/gui.h" #include "netsurf/riscos/options.h" #include "netsurf/riscos/theme.h" #include "netsurf/riscos/wimp.h" +#include "netsurf/riscos/wimp_event.h" #include "netsurf/utils/log.h" #include "netsurf/utils/messages.h" #include "netsurf/utils/url.h" #include "netsurf/utils/utils.h" -static bool theme_install_active; static struct content *theme_install_content = NULL; static struct theme_descriptor theme_install_descriptor; wimp_w dialog_theme_install; -static void theme_install_close(void); +static void theme_install_close(wimp_w w); static void theme_install_callback(content_msg msg, struct content *c, void *p1, void *p2, union content_msg_data data); static bool theme_install_read(char *source_data, unsigned long source_size); -static void theme_install_install(bool apply); - - -#ifndef NCOS -#define THEME_LEAFNAME "WWW.NetSurf.Themes" -#define THEME_PATH_W "." -#define THEME_PATH_R "Choices:" -#else -#define THEME_LEAFNAME "NetSurf.Choices.Themes" -#define THEME_PATH_W ".Choices." -#define THEME_PATH_R THEME_PATH_W -#endif /** @@ -57,27 +46,24 @@ void theme_install_start(struct content *c) assert(c); assert(c->type == CONTENT_THEME); - if (theme_install_active) { + if (ro_gui_dialog_open_top(dialog_theme_install, NULL, 0, 0)) { warn_user("ThemeInstActive", 0); - /* raise & centre dialog */ return; } /* stop theme sitting in memory cache */ c->fresh = false; - if (!content_add_user(c, theme_install_callback, 0, 0)) { warn_user("NoMemory", 0); return; } - theme_install_active = true; - ro_gui_set_icon_string(dialog_theme_install, ICON_THEME_INSTALL_MESSAGE, messages_get("ThemeInstDown")); ro_gui_set_icon_shaded_state(dialog_theme_install, ICON_THEME_INSTALL_INSTALL, true); - ro_gui_dialog_open(dialog_theme_install); + ro_gui_wimp_event_register_close_window(dialog_theme_install, + theme_install_close); } @@ -99,7 +85,7 @@ void theme_install_callback(content_msg msg, struct content *c, theme_install_content = c; if (!theme_install_read(c->source_data, c->source_size)) { warn_user("ThemeInvalid", 0); - theme_install_close(); + theme_install_close(dialog_theme_install); break; } @@ -120,7 +106,7 @@ void theme_install_callback(content_msg msg, struct content *c, break; case CONTENT_MSG_ERROR: - theme_install_close(); + theme_install_close(dialog_theme_install); warn_user(data.error, 0); break; @@ -164,41 +150,17 @@ bool theme_install_read(char *source_data, unsigned long source_size) } -/** - * Handle clicks in the theme install window. - */ - -void ro_gui_theme_install_click(wimp_pointer *pointer) -{ - switch (pointer->i) { - case ICON_THEME_INSTALL_INSTALL: - theme_install_install(pointer->buttons == wimp_CLICK_SELECT); - theme_install_close(); - break; - case ICON_THEME_INSTALL_CANCEL: - if (pointer->buttons == wimp_CLICK_ADJUST) - break; - theme_install_close(); - break; - } -} - - /** * Install the downloaded theme. * - * \param apply make the theme the current theme + * \param w the theme install window handle */ -void theme_install_install(bool apply) +bool ro_gui_theme_install_apply(wimp_w w) { char theme_save[256]; - char theme_leaf[256]; char *theme_file; - int theme_number = 1; - bool theme_found; struct theme_descriptor *theme_install; - fileswitch_object_type obj_type; os_error *error; assert(theme_install_content); @@ -206,37 +168,14 @@ void theme_install_install(bool apply) if (url_nice(theme_install_descriptor.name, &theme_file, true) != URL_FUNC_OK) { warn_user("ThemeInstallErr", 0); - theme_install_close(); - return; + return false; } - theme_found = false; - while (!theme_found) { - if (theme_number == 1) - snprintf(theme_leaf, sizeof theme_leaf, "%s.%s", - THEME_LEAFNAME, theme_file); - else - snprintf(theme_leaf, sizeof theme_leaf, "%s.%s%i", - THEME_LEAFNAME, theme_file, - theme_number); - theme_leaf[sizeof theme_leaf - 1] = '\0'; - theme_number++; - snprintf(theme_save, sizeof theme_save, "%s%s", - THEME_PATH_W, theme_leaf); - theme_save[sizeof theme_save - 1] = '\0'; - error = xosfile_read_stamped_no_path(theme_save, - &obj_type, 0, 0, 0, 0, 0); - if (error) { - LOG(("xosfile_read_stamped_no_path: 0x%x: %s", - error->errnum, error->errmess)); - warn_user("ThemeInstallErr", 0); - theme_install_close(); - free(theme_file); - return; - } - theme_found = (obj_type == osfile_NOT_FOUND); - } + /* simply overwrite previous theme versions */ + snprintf(theme_save, sizeof theme_save, "%s%s.%s", + THEME_PATH_W, THEME_LEAFNAME, theme_file); + theme_save[sizeof theme_save - 1] = '\0'; error = xosfile_save_stamped(theme_save, 0xffd, theme_install_content->source_data, theme_install_content->source_data + @@ -245,22 +184,22 @@ void theme_install_install(bool apply) LOG(("xosfile_save_stamped: 0x%x: %s", error->errnum, error->errmess)); warn_user("ThemeInstallErr", 0); - theme_install_close(); free(theme_file); - return; + return false; } - - if (apply) { - ro_gui_theme_get_available(); - theme_install = ro_gui_theme_find(theme_file); - if (!theme_install || !ro_gui_theme_apply(theme_install)) { - warn_user("ThemeApplyErr", 0); - } else { - free(option_theme); - option_theme = strdup(theme_install->leafname); - } + + /* apply the new theme */ + ro_gui_theme_get_available(); + theme_install = ro_gui_theme_find(theme_file); + if (!theme_install || !ro_gui_theme_apply(theme_install)) { + warn_user("ThemeApplyErr", 0); + } else { + free(option_theme); + option_theme = strdup(theme_install->leafname); } free(theme_file); + ro_gui_save_options(); + return true; } @@ -268,12 +207,10 @@ void theme_install_install(bool apply) * Close the theme installer and free resources. */ -void theme_install_close(void) +void theme_install_close(wimp_w w) { - theme_install_active = false; if (theme_install_content) content_remove_user(theme_install_content, theme_install_callback, 0, 0); theme_install_content = NULL; - ro_gui_dialog_close(dialog_theme_install); } -- cgit v1.2.3