summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--resources/FatMessages5
-rw-r--r--riscos/gui/url_bar.c59
2 files changed, 55 insertions, 9 deletions
diff --git a/resources/FatMessages b/resources/FatMessages
index 50b39dd57..ff5a761d8 100644
--- a/resources/FatMessages
+++ b/resources/FatMessages
@@ -2916,6 +2916,11 @@ de.all.NoMemory:Zu wenig Speicher. Bitte mehr Speicher zur Verfügung stellen un
fr.all.NoMemory:NetSurf a besoin de plus de mémoire. Veuillez libérer de la mémoire et réessayer.
it.all.NoMemory:Memoria insufficiente per l'esecuzione di NetSurf. Per favore liberane un pò e riprova nuovamente.
nl.all.NoMemory:NetSurf krijgt gebrek aan geheugen. Maak wat geheugen vrij en probeer het dan nog eens.
+en.ro.LongURL:The URL for this page is too long for NetSurf to display.
+de.ro.LongURL:The URL for this page is too long for NetSurf to display.
+fr.ro.LongURL:The URL for this page is too long for NetSurf to display.
+it.ro.LongURL:The URL for this page is too long for NetSurf to display.
+nl.ro.LongURL:The URL for this page is too long for NetSurf to display.
en.ro.FontBadInst:An error occurred when initialising fonts due to the presence of obsolete copies of the ROM fonts on disc. NetSurf will exit and launch a program which will attempt to fix this.
de.ro.FontBadInst:Font-Initialisierung fehlerhaft. Obsolete Kopien von ROM Fonts auf dem lokalem Speichermedium. Fehlerbehebung startet.
fr.ro.FontBadInst:Une erreur s'est produite lors de l'initialisation des fontes à cause de la présence de copies obsolètes de fontes ROM sur disque. NetSurf va sortir et lancer un programme qui va tenter de réparer cela.
diff --git a/riscos/gui/url_bar.c b/riscos/gui/url_bar.c
index 49930934f..0b6bd1c99 100644
--- a/riscos/gui/url_bar.c
+++ b/riscos/gui/url_bar.c
@@ -39,6 +39,7 @@
#include "riscos/window.h"
#include "utils/log.h"
#include "utils/messages.h"
+#include "utils/utf8.h"
#include "utils/utils.h"
#define URLBAR_HEIGHT 52
@@ -50,7 +51,6 @@
#define URLBAR_GRIGHT_GUTTER 8
#define URLBAR_FAVICON_NAME_LENGTH 12
#define URLBAR_INITIAL_LENGTH 256
-#define URLBAR_EXTEND_LENGTH 128
struct url_bar {
/** The applied theme (or NULL to use the default) */
@@ -942,24 +942,65 @@ void ro_gui_url_bar_set_url(struct url_bar *url_bar, const char *url,
{
wimp_caret caret;
os_error *error;
- const char *set_url;
+ char *local_text = NULL;
+ const char *set_url, *local_url;
nsurl *n;
- if (url_bar == NULL || url_bar->text_buffer == NULL)
+ if (url_bar == NULL || url_bar->text_buffer == NULL || url == NULL)
return;
- if (nsurl_create(url, &n) == NSERROR_OK) {
+ /* Before we do anything with the URL, get it into local encoding so
+ * that behaviour is consistant with the rest of the URL Bar module
+ * (which will act on the icon's text buffer, which is always in local
+ * encoding).
+ */
+
+ if (is_utf8) {
+ utf8_convert_ret err;
+
+ err = utf8_to_local_encoding(url, 0, &local_text);
+ if (err != UTF8_CONVERT_OK) {
+ /* A bad encoding should never happen, so assert this */
+ assert(err != UTF8_CONVERT_BADENC);
+ LOG(("utf8_to_enc failed"));
+ /* Paranoia */
+ local_text = NULL;
+ }
+ local_url = (local_text != NULL) ? local_text : url;
+ } else {
+ local_url = url;
+ }
+
+ /* Copy the text into the icon buffer. If the text is too long, blank
+ * the buffer and warn the user.
+ */
+
+ if (strlen(local_url) >= url_bar->text_size) {
+ strncpy(url_bar->text_buffer, "", url_bar->text_size);
+ warn_user("LongURL", NULL);
+ LOG(("Long URL (%d chars): %s", strlen(url), url));
+ } else {
+ strncpy(url_bar->text_buffer, local_url, url_bar->text_size);
+ }
+
+ if (local_text != NULL)
+ free(local_text);
+
+ /* Set the hotlist flag. */
+
+ if (nsurl_create(url_bar->text_buffer, &n) == NSERROR_OK) {
ro_gui_url_bar_set_hotlist(url_bar, ro_gui_hotlist_has_page(n));
nsurl_unref(n);
}
- if (url_bar->text_icon == -1) {
- strncpy(url_bar->text_buffer, url, url_bar->text_size);
+ /* If there's no icon, then there's nothing else to do... */
+
+ if (url_bar->text_icon == -1)
return;
- }
- ro_gui_set_icon_string(url_bar->window, url_bar->text_icon,
- url, is_utf8);
+ /* ...if there is, redraw the icon and fix the caret's position. */
+
+ ro_gui_redraw_icon(url_bar->window, url_bar->text_icon);
error = xwimp_get_caret_position(&caret);
if (error) {