diff --git a/!NetSurf/Resources/nl/welcome.html,faf b/!NetSurf/Resources/nl/welcome.html,faf index 31b24ad67..f35260b73 100644 --- a/!NetSurf/Resources/nl/welcome.html,faf +++ b/!NetSurf/Resources/nl/welcome.html,faf @@ -3,7 +3,7 @@ Welkom bij NetSurf - + diff --git a/gtk/fetch.c b/gtk/fetch.c index 10b26bd48..13ffceb86 100644 --- a/gtk/fetch.c +++ b/gtk/fetch.c @@ -238,11 +238,11 @@ static nsurl *nsgtk_get_resource_url(const char *path) /* favicon.ico -> favicon.png */ if (strcmp(path, "favicon.ico") == 0) { - path = "favicon.png"; + nsurl_create("resource:favicon.png", &url); + } else { + netsurf_path_to_nsurl(filepath_sfind(respaths, buf, path), &url); } - netsurf_path_to_nsurl(filepath_sfind(respaths, buf, path), &url); - return url; } diff --git a/gtk/gui.c b/gtk/gui.c index 3a41b605e..28e5c3c90 100644 --- a/gtk/gui.c +++ b/gtk/gui.c @@ -74,7 +74,6 @@ bool nsgtk_complete = false; char *toolbar_indices_file_location; char *res_dir_location; -char *languages_file_location; char *themelist_file_location; char *nsgtk_config_home; /* exported global defined in gtk/gui.h */ @@ -237,12 +236,6 @@ static nserror nsgtk_init(int argc, char** argv, char **respath) nsurl *url; nserror error; - /* find the languages file */ - languages_file_location = filepath_find(respath, "languages"); - if ((languages_file_location == NULL) || - (strlen(languages_file_location) < 10)) { - die("Unable to find resources.\n"); - } /* find the theme list file */ themelist_file_location = filepath_find(respath, "themelist"); @@ -252,20 +245,21 @@ static nserror nsgtk_init(int argc, char** argv, char **respath) themelist_file_location = NULL; } if (themelist_file_location == NULL) { - LOG("Unable to find themelist - disabling"); + LOG("Unable to find themelist - disabling themes"); + res_dir_location = NULL; + } else { + /* Obtain resources path location. + * + * Uses the directory the theme file was found in, + * @todo find and slaughter all references to this! + */ + res_dir_location = calloc(1, strlen(themelist_file_location) - 8); + memcpy(res_dir_location, + themelist_file_location, + strlen(themelist_file_location) - 9); + LOG("Using '%s' for resource path", res_dir_location); } - /* Obtain resources path location. - * - * Uses the directory the languages file was found in, - * @todo find and slaughter all references to this! - */ - res_dir_location = calloc(1, strlen(languages_file_location) - 8); - memcpy(res_dir_location, - languages_file_location, - strlen(languages_file_location) - 9); - LOG("Using '%s' for resource path", res_dir_location); - error = nsgtk_builder_new_from_resname("warning", &warning_builder); if (error != NSERROR_OK) { LOG("Unable to initialise warning dialog"); @@ -1046,7 +1040,7 @@ static struct gui_browser_table nsgtk_browser_table = { static nserror nsgtk_messages_init(char **respaths) { - char *messages; + const char *messages; nserror ret; const uint8_t *data; size_t data_size; @@ -1056,12 +1050,9 @@ static nserror nsgtk_messages_init(char **respaths) ret = messages_add_from_inline(data, data_size); } else { /* Obtain path to messages */ - messages = filepath_find(respaths, "Messages"); - if (messages != NULL) { + ret = nsgtk_path_from_resname("Messages", &messages); + if (ret == NSERROR_OK) { ret = messages_add_from_file(messages); - free(messages); - } else { - ret = NSERROR_NOT_FOUND; } } return ret; diff --git a/gtk/gui.h b/gtk/gui.h index ce234c4a0..a804261de 100644 --- a/gtk/gui.h +++ b/gtk/gui.h @@ -21,9 +21,6 @@ struct nsurl; -/** language list file path. */ -extern char *languages_file_location; - /** toolbar arrangement file path. */ extern char *toolbar_indices_file_location; diff --git a/gtk/preferences.c b/gtk/preferences.c index ba58bc905..5b6e332f1 100644 --- a/gtk/preferences.c +++ b/gtk/preferences.c @@ -548,19 +548,25 @@ nsgtk_preferences_comboboxLanguage_changed(GtkComboBox *combo, } } +/** + * Fill content language list store. + */ G_MODULE_EXPORT void nsgtk_preferences_comboboxLanguage_realize(GtkWidget *widget, struct ppref *priv) { - /* Fill content language list store */ int active_language = 0; GtkTreeIter iter; FILE *fp; char buf[50]; const char *default_accept_language = "en"; + const char *languages_file_location; + nserror ret; + + ret = nsgtk_path_from_resname("languages", &languages_file_location); if ((priv->content_language != NULL) && - (languages_file_location != NULL) && + (ret == NSERROR_OK) && ((fp = fopen(languages_file_location, "r")) != NULL)) { int combo_row_count = 0; diff --git a/gtk/resources.c b/gtk/resources.c index f5b13f1df..0c8c192f3 100644 --- a/gtk/resources.c +++ b/gtk/resources.c @@ -45,12 +45,12 @@ #ifdef WITH_BUILTIN_PIXBUF #ifdef __GNUC__ extern const guint8 menu_cursor_pixdata[] __attribute__ ((__aligned__ (4))); -const guint8 favicon_pixdata[] __attribute__ ((__aligned__ (4))); -const guint8 netsurf_pixdata[] __attribute__ ((__aligned__ (4))); +extern const guint8 favicon_pixdata[] __attribute__ ((__aligned__ (4))); +extern const guint8 netsurf_pixdata[] __attribute__ ((__aligned__ (4))); #else extern const guint8 menu_cursor_pixdata[]; -const guint8 favicon_pixdata[]; -const guint8 netsurf_pixdata[]; +extern const guint8 favicon_pixdata[]; +extern const guint8 netsurf_pixdata[]; #endif #endif @@ -126,6 +126,7 @@ static struct nsgtk_resource_s direct_resource[] = { RES_ENTRY("icons/hotlist-add.png"), RES_ENTRY("icons/hotlist-rmv.png"), RES_ENTRY("icons/search.png"), + RES_ENTRY("languages"), RES_ENTRY("Messages"), { NULL, 0, NSGTK_RESOURCE_FILE, NULL }, }; @@ -560,3 +561,20 @@ nsgtk_data_from_resname(const char *resname, return NSERROR_OK; } + +/* exported interface documented in gtk/resources.h */ +nserror +nsgtk_path_from_resname(const char *resname, const char **path_out) +{ + struct nsgtk_resource_s *resource; + + resource = find_resource_from_name(resname, &direct_resource[0]); + if ((resource->name == NULL) || + (resource->type != NSGTK_RESOURCE_FILE)) { + return NSERROR_NOT_FOUND; + } + + *path_out = (const char *)resource->path; + + return NSERROR_OK; +} diff --git a/gtk/resources.h b/gtk/resources.h index dd52f54f1..923031af4 100644 --- a/gtk/resources.h +++ b/gtk/resources.h @@ -94,4 +94,16 @@ nserror nsgdk_pixbuf_new_from_resname(const char *resname, GdkPixbuf **pixbuf_ou */ nserror nsgtk_data_from_resname(const char *resname, const uint8_t **data_out, size_t *data_size_out); +/** + * Get path to resource data. + * + * For a named resource this obtains the on-disc path to that resource. + * + * The path is read only and remains valid untill program exit. + * \param resname The resource name to obtain path for. + * \param path_out The resulting data. + * \return NSERROR_OK and path_out updated or appropriate error code. + */ +nserror nsgtk_path_from_resname(const char *resname, const char **path_out); + #endif diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c index c19624257..a45224c81 100644 --- a/gtk/scaffolding.c +++ b/gtk/scaffolding.c @@ -25,7 +25,6 @@ #include #include -#include "utils/filepath.h" #include "utils/messages.h" #include "utils/corestrings.h" #include "utils/log.h"