summaryrefslogtreecommitdiff
path: root/riscos/theme_install.c
diff options
context:
space:
mode:
Diffstat (limited to 'riscos/theme_install.c')
-rw-r--r--riscos/theme_install.c119
1 files changed, 28 insertions, 91 deletions
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 "<Choices$Write>."
-#define THEME_PATH_R "Choices:"
-#else
-#define THEME_LEAFNAME "NetSurf.Choices.Themes"
-#define THEME_PATH_W "<User$Path>.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;
@@ -165,40 +151,16 @@ 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);
}