summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Fryatt <stevef@netsurf-browser.org>2014-01-26 14:35:57 +0000
committerSteve Fryatt <stevef@netsurf-browser.org>2014-01-26 14:35:57 +0000
commitdef97156d3c0cbeacf2996859f16f727d44eb4e8 (patch)
tree0a8f663aa182b7815307afde33c55a0d4d1a17df
parent89992958d251cbb1cbd634a0dd89d1161de35041 (diff)
downloadnetsurf-def97156d3c0cbeacf2996859f16f727d44eb4e8.tar.gz
netsurf-def97156d3c0cbeacf2996859f16f727d44eb4e8.tar.bz2
Make Open URL dialogue allocate memory for the URL field.
Add global constant for URL length, to manage both URL Bar and Open URL.
-rw-r--r--riscos/dialog.c75
-rw-r--r--riscos/gui.h4
-rw-r--r--riscos/gui/url_bar.c4
-rw-r--r--riscos/templates/de2
-rw-r--r--riscos/templates/en2
-rw-r--r--riscos/templates/fr2
-rw-r--r--riscos/templates/nl2
7 files changed, 76 insertions, 15 deletions
diff --git a/riscos/dialog.c b/riscos/dialog.c
index 147dce9f8..5fe1d27d6 100644
--- a/riscos/dialog.c
+++ b/riscos/dialog.c
@@ -85,6 +85,7 @@ static struct {
} persistent_dialog[MAX_PERSISTENT];
+static bool ro_gui_dialog_open_url_init(void);
static bool ro_gui_dialog_openurl_apply(wimp_w w);
static bool ro_gui_dialog_open_url_menu_prepare(wimp_w w, wimp_i i,
wimp_menu *menu, wimp_pointer *pointer);
@@ -161,15 +162,7 @@ void ro_gui_dialog_init(void)
ro_gui_wimp_event_set_help_prefix(dialog_url_complete, "HelpAutoURL");
/* open URL */
- dialog_openurl = ro_gui_dialog_create("open_url");
- ro_gui_wimp_event_register_menu_gright(dialog_openurl, ICON_OPENURL_URL,
- ICON_OPENURL_MENU, ro_gui_url_suggest_menu);
- ro_gui_wimp_event_register_cancel(dialog_openurl, ICON_OPENURL_CANCEL);
- ro_gui_wimp_event_register_ok(dialog_openurl, ICON_OPENURL_OPEN,
- ro_gui_dialog_openurl_apply);
- ro_gui_wimp_event_register_menu_prepare(dialog_openurl,
- ro_gui_dialog_open_url_menu_prepare);
- ro_gui_wimp_event_set_help_prefix(dialog_openurl, "HelpOpenURL");
+ ro_gui_dialog_open_url_init();
/* scale view */
dialog_zoom = ro_gui_dialog_create("zoom");
@@ -702,6 +695,70 @@ void ro_gui_dialog_update_zoom(struct gui_window *g) {
}
+/**
+ * Create the Open URL dialogue, allocating storage for the URL field icon
+ * as we go.
+ *
+ * \return true on success; false on failure (although errors with
+ * the templates or memory allocation will exit via die()).
+ */
+
+static bool ro_gui_dialog_open_url_init(void)
+{
+ wimp_window *definition;
+ char *buffer;
+ os_error *error;
+
+ definition = ro_gui_dialog_load_template("open_url");
+
+ /* _load_template() should die on any error, so we trust its data. */
+
+ assert(definition != NULL);
+
+ /* Create the dialogue, with modifications. */
+
+ if ((definition->icons[ICON_OPENURL_URL].flags & wimp_ICON_INDIRECTED)
+ == 0) {
+ LOG(("open_url URL icon not indirected"));
+ xwimp_close_template();
+ die("Template");
+ }
+
+ buffer = malloc(RO_GUI_MAX_URL_SIZE);
+ if (buffer == NULL) {
+ xwimp_close_template();
+ die("NoMemory");
+ }
+
+ definition->icons[ICON_OPENURL_URL].data.indirected_text.text = buffer;
+ definition->icons[ICON_OPENURL_URL].data.indirected_text.size =
+ RO_GUI_MAX_URL_SIZE;
+ definition->sprite_area = gui_sprites;
+
+ error = xwimp_create_window(definition, &dialog_openurl);
+ if (error != NULL) {
+ LOG(("xwimp_create_window: 0x%x: %s",
+ error->errnum, error->errmess));
+ xwimp_close_template();
+ die(error->errmess);
+ }
+
+ free(definition);
+
+ ro_gui_wimp_event_register_menu_gright(dialog_openurl, ICON_OPENURL_URL,
+ ICON_OPENURL_MENU, ro_gui_url_suggest_menu);
+ ro_gui_wimp_event_register_cancel(dialog_openurl, ICON_OPENURL_CANCEL);
+ ro_gui_wimp_event_register_ok(dialog_openurl, ICON_OPENURL_OPEN,
+ ro_gui_dialog_openurl_apply);
+ ro_gui_wimp_event_register_menu_prepare(dialog_openurl,
+ ro_gui_dialog_open_url_menu_prepare);
+ ro_gui_wimp_event_set_help_prefix(dialog_openurl, "HelpOpenURL");
+
+ return true;
+}
+
+
+
bool ro_gui_dialog_openurl_apply(wimp_w w) {
const char *urltxt;
char *url2;
diff --git a/riscos/gui.h b/riscos/gui.h
index 32710b442..051834a09 100644
--- a/riscos/gui.h
+++ b/riscos/gui.h
@@ -35,6 +35,10 @@
#define THUMBNAIL_WIDTH 100
#define THUMBNAIL_HEIGHT 86
+/* The maximum size for user-editable URLs in the RISC OS GUI. */
+
+#define RO_GUI_MAX_URL_SIZE 2048
+
extern int os_version;
extern const char * NETSURF_DIR;
diff --git a/riscos/gui/url_bar.c b/riscos/gui/url_bar.c
index b66b2afc3..829419db3 100644
--- a/riscos/gui/url_bar.c
+++ b/riscos/gui/url_bar.c
@@ -30,6 +30,7 @@
#include "oslib/os.h"
#include "oslib/osspriteop.h"
#include "oslib/wimp.h"
+#include "riscos/gui.h"
#include "riscos/hotlist.h"
#include "riscos/gui/url_bar.h"
#include "riscos/theme.h"
@@ -50,7 +51,6 @@
#define URLBAR_MIN_WIDTH 52
#define URLBAR_GRIGHT_GUTTER 8
#define URLBAR_FAVICON_NAME_LENGTH 12
-#define URLBAR_URL_LENGTH 2048
struct url_bar {
/** The applied theme (or NULL to use the default) */
@@ -167,7 +167,7 @@ struct url_bar *ro_gui_url_bar_create(struct theme_descriptor *theme)
url_bar->hotlist.extent.x1 = 0;
url_bar->hotlist.extent.y1 = 0;
- url_bar->text_size = URLBAR_URL_LENGTH;
+ url_bar->text_size = RO_GUI_MAX_URL_SIZE;
url_bar->text_buffer = malloc(url_bar->text_size);
strncpy(url_bar->text_buffer, "", url_bar->text_size);
diff --git a/riscos/templates/de b/riscos/templates/de
index 905d57ec0..190d38a48 100644
--- a/riscos/templates/de
+++ b/riscos/templates/de
@@ -1683,7 +1683,7 @@ wimp_window {
icon_fg:wimp_COLOUR_BLACK
icon_bg:wimp_COLOUR_WHITE
text.text:""
- text.size:128
+ text.size:1
text.validation:"Pptr_write;Kta"
}
wimp_icon {
diff --git a/riscos/templates/en b/riscos/templates/en
index a943b1e91..fed72b3ee 100644
--- a/riscos/templates/en
+++ b/riscos/templates/en
@@ -1891,7 +1891,7 @@ wimp_window {
icon_fg:wimp_COLOUR_BLACK
icon_bg:wimp_COLOUR_WHITE
text.text:""
- text.size:128
+ text.size:1
text.validation:"Pptr_write;Kta"
}
wimp_icon {
diff --git a/riscos/templates/fr b/riscos/templates/fr
index 30bcbfaf5..2acc5780e 100644
--- a/riscos/templates/fr
+++ b/riscos/templates/fr
@@ -1695,7 +1695,7 @@ wimp_window {
icon_fg:wimp_COLOUR_BLACK
icon_bg:wimp_COLOUR_WHITE
text.text:""
- text.size:128
+ text.size:1
text.validation:"Pptr_write;Kta"
}
wimp_icon {
diff --git a/riscos/templates/nl b/riscos/templates/nl
index dcc8af5f4..8e7725f9e 100644
--- a/riscos/templates/nl
+++ b/riscos/templates/nl
@@ -1895,7 +1895,7 @@ wimp_window {
icon_fg:wimp_COLOUR_BLACK
icon_bg:wimp_COLOUR_WHITE
text.text:""
- text.size:128
+ text.size:1
text.validation:"Pptr_write;Kta"
}
wimp_icon {