diff options
author | Ole Loots <ole@monochrom.net> | 2012-12-31 03:41:41 +0100 |
---|---|---|
committer | Ole Loots <ole@monochrom.net> | 2012-12-31 03:41:41 +0100 |
commit | cecccf09edf7e7296e4765f7e70e4c42c5ad8805 (patch) | |
tree | bf776943935c597e867a6bdba3710e5d4cb73115 | |
parent | 379313d8da957be5a39a6cab35f73ed6c247ccb4 (diff) | |
parent | ea3f09a72433be165cc4ec09052b3d636e64ac0c (diff) | |
download | netsurf-cecccf09edf7e7296e4765f7e70e4c42c5ad8805.tar.gz netsurf-cecccf09edf7e7296e4765f7e70e4c42c5ad8805.tar.bz2 |
Merge branch 'master' into mono/removing-windom-dependency
34 files changed, 2146 insertions, 1787 deletions
@@ -426,9 +426,14 @@ $(eval $(call feature_enabled,LIBICONV_PLUG,-DLIBICONV_PLUG,,glibc internal icon # common libraries without pkg-config support LDFLAGS += -lz +# add top level and build directory to include search path +CFLAGS += -I. -I$(OBJROOT) + +# export the user agent format CFLAGS += -DNETSURF_UA_FORMAT_STRING=\"$(NETSURF_UA_FORMAT_STRING)\" -CFLAGS += -DNETSURF_HOMEPAGE=\"$(NETSURF_HOMEPAGE)\" +# set the default homepage to use +CFLAGS += -DNETSURF_HOMEPAGE=\"$(NETSURF_HOMEPAGE)\" # ---------------------------------------------------------------------------- # General make rules diff --git a/Makefile.defaults b/Makefile.defaults index 812a5a950..7650b381f 100644 --- a/Makefile.defaults +++ b/Makefile.defaults @@ -93,7 +93,7 @@ NETSURF_HOMEPAGE := "about:welcome" NETSURF_USE_LIBICONV_PLUG := YES # Initial CFLAGS. Optimisation level etc. tend to be target specific. -CFLAGS := +CFLAGS := # Default installation/execution prefix PREFIX ?= /usr/local diff --git a/Makefile.sources.javascript b/Makefile.sources.javascript index 76a6ff145..4633e9d0d 100644 --- a/Makefile.sources.javascript +++ b/Makefile.sources.javascript @@ -23,9 +23,10 @@ JSAPI_BINDING_text := javascript/jsapi/text.bnd JSAPI_BINDING_node := javascript/jsapi/node.bnd JSAPI_BINDING_event := javascript/jsapi/event.bnd -# 1: input file -# 2: output file -# 3: binding name +# 1: input binding file +# 2: source output file +# 3: header output file +# 4: binding name define convert_jsapi_binding S_JSAPI_BINDING += $(2) @@ -33,7 +34,9 @@ D_JSAPI_BINDING += $(patsubst %.c,%.d,$(2)) $(2): $(1) $(OBJROOT)/created $$(VQ)echo " GENBIND: $(1)" - $(Q)nsgenbind -I javascript/WebIDL -d $(patsubst %.c,%.d,$(2)) -o $(2) $(1) + $(Q)nsgenbind -I javascript/WebIDL -d $(patsubst %.c,%.d,$(2)) -h $(3) -o $(2) $(1) + +$(3): $(2) endef @@ -52,7 +55,7 @@ S_JSAPI := S_JAVASCRIPT += content.c jsapi.c $(addprefix jsapi/,$(S_JSAPI)) -$(eval $(foreach V,$(filter JSAPI_BINDING_%,$(.VARIABLES)),$(call convert_jsapi_binding,$($(V)),$(OBJROOT)/$(patsubst JSAPI_BINDING_%,%,$(V)).c,$(patsubst JSAPI_BINDING_%,%,$(V))_jsapi))) +$(eval $(foreach V,$(filter JSAPI_BINDING_%,$(.VARIABLES)),$(call convert_jsapi_binding,$($(V)),$(OBJROOT)/$(patsubst JSAPI_BINDING_%,%,$(V)).c,$(OBJROOT)/$(patsubst JSAPI_BINDING_%,%,$(V)).h,$(patsubst JSAPI_BINDING_%,%,$(V))_jsapi))) else S_JAVASCRIPT += none.c diff --git a/amiga/Makefile.target b/amiga/Makefile.target index ec43fdd30..f2c429998 100644 --- a/amiga/Makefile.target +++ b/amiga/Makefile.target @@ -2,7 +2,7 @@ # Amiga target setup # ---------------------------------------------------------------------------- -CFLAGS += -std=c99 -I . -Dnsamiga +CFLAGS += -std=c99 -Dnsamiga ifneq ($(SUBTARGET),os3) CFLAGS += -U__STRICT_ANSI__ -D__USE_INLINE__ -D__USE_BASETYPE__ diff --git a/atari/Makefile.target b/atari/Makefile.target index 55eda01f7..6ed5b4478 100644 --- a/atari/Makefile.target +++ b/atari/Makefile.target @@ -58,7 +58,7 @@ endif $(eval $(call pkg_config_find_and_add_enabled,BMP,libnsbmp,BMP)) $(eval $(call pkg_config_find_and_add_enabled,GIF,libnsgif,GIF)) -CFLAGS += -U__STRICT_ANSI__ -std=c99 -I. -Dsmall $(WARNFLAGS) -Dnsatari \ +CFLAGS += -U__STRICT_ANSI__ -std=c99 -Dsmall $(WARNFLAGS) -Dnsatari \ -D_BSD_SOURCE \ -D_XOPEN_SOURCE=600 \ -D_POSIX_C_SOURCE=200112L \ diff --git a/beos/Makefile.target b/beos/Makefile.target index 4edde01a1..7b473dd2f 100644 --- a/beos/Makefile.target +++ b/beos/Makefile.target @@ -3,35 +3,34 @@ # ---------------------------------------------------------------------------- - $(eval $(call feature_enabled,PNG,-DWITH_PNG,-lpng,PNG (libpng) )) - - LDFLAGS += -L/boot/home/config/lib - # for Haiku - LDFLAGS += -L/boot/common/lib - # some people do *not* have libm... - LDFLAGS += -lssl -lcrypto -lcss - $(eval $(call feature_enabled,NSSVG,-DWITH_NS_SVG,-lsvgtiny,SVG (libsvgtiny))) - LDFLAGS += -ldom -lparserutils -lhubbub -lwapcaplet - LDFLAGS += -lexpat -lcurl -liconv - - CFLAGS += -I. -O $(WARNFLAGS) -Dnsbeos \ - -D_BSD_SOURCE -D_POSIX_C_SOURCE \ - -Drestrict="" -Wno-multichar - # DEBUG - CFLAGS += -g -O0 - # -DDEBUG=1 - - BEOS_BERES := beres - BEOS_RC := rc - BEOS_XRES := xres - BEOS_SETVER := setversion - BEOS_MIMESET := mimeset - VERSION_FULL := $(shell sed -n '/"/{s/.*"\(.*\)".*/\1/;p;}' desktop/version.c) - VERSION_MAJ := $(shell sed -n '/_major/{s/.* = \([0-9]*\).*/\1/;p;}' desktop/version.c) - VERSION_MIN := $(shell sed -n '/_minor/{s/.* = \([0-9]*\).*/\1/;p;}' desktop/version.c) - RSRC_BEOS = $(addprefix $(OBJROOT)/,$(subst /,_,$(patsubst %.rdef,%.rsrc,$(RDEF_BEOS)))) - RESOURCES = $(RSRC_BEOS) - ifeq ($(HOST),beos) +$(eval $(call feature_enabled,PNG,-DWITH_PNG,-lpng,PNG (libpng) )) + +LDFLAGS += -L/boot/home/config/lib +# for Haiku +LDFLAGS += -L/boot/common/lib +# some people do *not* have libm... +LDFLAGS += -lssl -lcrypto -lcss +$(eval $(call feature_enabled,NSSVG,-DWITH_NS_SVG,-lsvgtiny,SVG (libsvgtiny))) +LDFLAGS += -ldom -lparserutils -lhubbub -lwapcaplet +LDFLAGS += -lexpat -lcurl -liconv + +CFLAGS += -O $(WARNFLAGS) -Dnsbeos -D_BSD_SOURCE -D_POSIX_C_SOURCE \ + -Drestrict="" -Wno-multichar +# DEBUG +CFLAGS += -g -O0 +# -DDEBUG=1 + +BEOS_BERES := beres +BEOS_RC := rc +BEOS_XRES := xres +BEOS_SETVER := setversion +BEOS_MIMESET := mimeset +VERSION_FULL := $(shell sed -n '/"/{s/.*"\(.*\)".*/\1/;p;}' desktop/version.c) +VERSION_MAJ := $(shell sed -n '/_major/{s/.* = \([0-9]*\).*/\1/;p;}' desktop/version.c) +VERSION_MIN := $(shell sed -n '/_minor/{s/.* = \([0-9]*\).*/\1/;p;}' desktop/version.c) +RSRC_BEOS = $(addprefix $(OBJROOT)/,$(subst /,_,$(patsubst %.rdef,%.rsrc,$(RDEF_BEOS)))) +RESOURCES = $(RSRC_BEOS) +ifeq ($(HOST),beos) CFLAGS += -I/boot/home/config/include \ -I/boot/home/config/include/libmng \ -I/boot/home/config/include/hubbub \ @@ -66,22 +65,22 @@ LDFLAGS += -lstdc++.r4 else LDFLAGS += -lstdc++ -lsupc++ - endif +endif - ifeq ($(HOST),beos) - CFLAGS += -I$(PREFIX)/include - LDFLAGS += -L$(PREFIX)/lib - $(eval $(call feature_enabled,BMP,-DWITH_BMP,-lnsbmp,BMP (libnsbmp))) - $(eval $(call feature_enabled,GIF,-DWITH_GIF,-lnsgif,GIF (libnsgif))) - $(eval $(call feature_enabled,PNG,-DWITH_PNG,-lpng,PNG (libpng) )) - else - NETSURF_FEATURE_BMP_CFLAGS := -DWITH_BMP - NETSURF_FEATURE_GIF_CFLAGS := -DWITH_GIF - NETSURF_FEATURE_PNG_CFLAGS := -DWITH_PNG - $(eval $(call pkg_config_find_and_add_enabled,BMP,libnsbmp,BMP)) - $(eval $(call pkg_config_find_and_add_enabled,GIF,libnsgif,GIF)) - $(eval $(call pkg_config_find_and_add_enabled,PNG,libpng,PNG )) - endif +ifeq ($(HOST),beos) + CFLAGS += -I$(PREFIX)/include + LDFLAGS += -L$(PREFIX)/lib + $(eval $(call feature_enabled,BMP,-DWITH_BMP,-lnsbmp,BMP (libnsbmp))) + $(eval $(call feature_enabled,GIF,-DWITH_GIF,-lnsgif,GIF (libnsgif))) + $(eval $(call feature_enabled,PNG,-DWITH_PNG,-lpng,PNG (libpng) )) +else + NETSURF_FEATURE_BMP_CFLAGS := -DWITH_BMP + NETSURF_FEATURE_GIF_CFLAGS := -DWITH_GIF + NETSURF_FEATURE_PNG_CFLAGS := -DWITH_PNG + $(eval $(call pkg_config_find_and_add_enabled,BMP,libnsbmp,BMP)) + $(eval $(call pkg_config_find_and_add_enabled,GIF,libnsgif,GIF)) + $(eval $(call pkg_config_find_and_add_enabled,PNG,libpng,PNG )) +endif # ---------------------------------------------------------------------------- # Source file setup @@ -89,9 +88,9 @@ # S_BEOS are sources purely for the BeOS build S_BEOS := about.cpp bitmap.cpp download.cpp fetch_rsrc.cpp filetype.cpp \ - font.cpp gui.cpp login.cpp gui_options.cpp plotters.cpp scaffolding.cpp \ - search.cpp schedule.cpp thumbnail.cpp treeview.cpp throbber.cpp \ - window.cpp system_colour.cpp + font.cpp gui.cpp login.cpp gui_options.cpp plotters.cpp \ + scaffolding.cpp search.cpp schedule.cpp thumbnail.cpp treeview.cpp \ + throbber.cpp window.cpp system_colour.cpp S_BEOS := $(addprefix beos/,$(S_BEOS)) RDEF_BEOS := res.rdef diff --git a/cocoa/Makefile.target b/cocoa/Makefile.target index d975a0c8f..2da4c5bb4 100644 --- a/cocoa/Makefile.target +++ b/cocoa/Makefile.target @@ -10,11 +10,9 @@ LDFLAGS += -lm -lcurl -liconv LDFLAGS += -lssl -lcrypto - CFLAGS += -I. -O $(WARNFLAGS) -Dnscocoa \ + CFLAGS += -O $(WARNFLAGS) -Dnscocoa \ -D_BSD_SOURCE -D_POSIX_C_SOURCE \ - -std=c99 - - CFLAGS += -g -Os -Wno-uninitialized + -std=c99 -g -Os CFLAGS += $(shell $(PKG_CONFIG) --cflags libhubbub libcss libdom) diff --git a/desktop/save_complete.c b/desktop/save_complete.c index 7137f0ba9..d9bd507b8 100644 --- a/desktop/save_complete.c +++ b/desktop/save_complete.c @@ -39,8 +39,10 @@ #include "desktop/save_complete.h" #include "render/box.h" #include "render/html.h" +#include "utils/corestrings.h" #include "utils/log.h" #include "utils/nsurl.h" +#include "utils/utf8.h" #include "utils/utils.h" regex_t save_complete_import_re; @@ -551,7 +553,9 @@ static bool save_complete_rewrite_url_value(save_complete_ctx *ctx, { nsurl *url; hlcache_handle *content; + char *escaped; nserror error; + utf8_convert_ret ret; error = nsurl_join(ctx->base, value, &url); if (error == NSERROR_NOMEM) @@ -566,11 +570,25 @@ static bool save_complete_rewrite_url_value(save_complete_ctx *ctx, fprintf(ctx->fp, "\"%p\"", content); } else { /* no match found */ - fprintf(ctx->fp, "\"%s\"", nsurl_access(url)); + ret = utf8_to_html(nsurl_access(url), "UTF-8", + nsurl_length(url), &escaped); nsurl_unref(url); + + if (ret != UTF8_CONVERT_OK) + return false; + + fprintf(ctx->fp, "\"%s\"", escaped); + + free(escaped); } } else { - fprintf(ctx->fp, "\"%.*s\"", (int) value_len, value); + ret = utf8_to_html(value, "UTF-8", value_len, &escaped); + if (ret != UTF8_CONVERT_OK) + return false; + + fprintf(ctx->fp, "\"%s\"", escaped); + + free(escaped); } return true; @@ -579,7 +597,16 @@ static bool save_complete_rewrite_url_value(save_complete_ctx *ctx, static bool save_complete_write_value(save_complete_ctx *ctx, const char *value, size_t value_len) { - fprintf(ctx->fp, "\"%.*s\"", (int) value_len, value); + char *escaped; + utf8_convert_ret ret; + + ret = utf8_to_html(value, "UTF-8", value_len, &escaped); + if (ret != UTF8_CONVERT_OK) + return false; + + fprintf(ctx->fp, "\"%s\"", escaped); + + free(escaped); return true; } @@ -728,7 +755,7 @@ static bool save_complete_handle_attrs(save_complete_ctx *ctx, for (i = 0; i < length; i++) { dom_attr *attr; - error = dom_namednodemap_item(attrs, i, &attr); + error = dom_namednodemap_item(attrs, i, (void *) &attr); if (error != DOM_NO_ERR) return false; @@ -753,6 +780,7 @@ static bool save_complete_handle_element(save_complete_ctx *ctx, dom_namednodemap *attrs; const char *name_data; size_t name_len; + bool process = true; dom_exception error; ctx->iter_state = STATE_NORMAL; @@ -767,9 +795,56 @@ static bool save_complete_handle_element(save_complete_ctx *ctx, name_data = dom_string_data(name); name_len = dom_string_byte_length(name); - /* Elide BASE elements from the output */ if (name_len == SLEN("base") && strncasecmp(name_data, "base", name_len) == 0) { + /* Elide BASE elements from the output */ + process = false; + } else if (name_len == SLEN("meta") && + strncasecmp(name_data, "meta", name_len) == 0) { + /* Don't emit close tags for META elements */ + if (event_type == EVENT_LEAVE) { + process = false; + } else { + /* Elide meta charsets */ + dom_string *value; + error = dom_element_get_attribute(node, + corestring_dom_http_equiv, &value); + if (error != DOM_NO_ERR) { + dom_string_unref(name); + return false; + } + + if (value != NULL) { + if (dom_string_length(value) == + SLEN("Content-Type") && + strncasecmp(dom_string_data(value), + "Content-Type", + SLEN("Content-Type")) == 0) + process = false; + + dom_string_unref(value); + } else { + bool yes; + + error = dom_element_has_attribute(node, + corestring_dom_charset, &yes); + if (error != DOM_NO_ERR) { + dom_string_unref(name); + return false; + } + + if (yes) + process = false; + } + } + } else if (event_type == EVENT_LEAVE && + ((name_len == SLEN("link") && + strncasecmp(name_data, "link", name_len) == 0))) { + /* Don't emit close tags for void elements */ + process = false; + } + + if (process == false) { dom_string_unref(name); return true; } @@ -833,6 +908,12 @@ static bool save_complete_handle_element(save_complete_ctx *ctx, } ctx->iter_state = STATE_IN_STYLE; + } else if (event_type == EVENT_ENTER && name_len == SLEN("head") && + strncasecmp(name_data, "head", name_len) == 0) { + /* If this is a HEAD element, insert a meta charset */ + fputs("<META http-equiv=\"Content-Type\" " + "content=\"text/html; charset=utf-8\">", + ctx->fp); } dom_string_unref(name); @@ -846,6 +927,7 @@ static bool save_complete_node_handler(dom_node *node, save_complete_ctx *ctx = ctxin; dom_node_type type; dom_exception error; + utf8_convert_ret ret; error = dom_node_get_node_type(node, &type); if (error != DOM_NO_ERR) @@ -872,11 +954,20 @@ static bool save_complete_node_handler(dom_node *node, fwrite("<!--", 1, sizeof("<!--") - 1, ctx->fp); if (text != NULL) { + char *escaped; + text_data = dom_string_data(text); text_len = dom_string_byte_length(text); - fwrite(text_data, sizeof(*text_data), - text_len, ctx->fp); + ret = utf8_to_html(text_data, "UTF-8", + text_len, &escaped); + if (ret != UTF8_CONVERT_OK) + return false; + + fwrite(escaped, sizeof(*escaped), + strlen(escaped), ctx->fp); + + free(escaped); dom_string_unref(text); } @@ -917,8 +1008,9 @@ static bool save_complete_node_handler(dom_node *node, name_data = dom_string_data(name); name_len = dom_string_byte_length(name); - fprintf(ctx->fp, " PUBLIC \"%.*s\"", - (int) name_len, name_data); + if (name_len > 0) + fprintf(ctx->fp, " PUBLIC \"%.*s\"", + (int) name_len, name_data); dom_string_unref(name); } @@ -931,8 +1023,9 @@ static bool save_complete_node_handler(dom_node *node, name_data = dom_string_data(name); name_len = dom_string_byte_length(name); - fprintf(ctx->fp, " \"%.*s\"", - (int) name_len, name_data); + if (name_len > 0) + fprintf(ctx->fp, " \"%.*s\"", + (int) name_len, name_data); dom_string_unref(name); } diff --git a/desktop/tree_url_node.c b/desktop/tree_url_node.c index d2701e5b1..5305fa11d 100644 --- a/desktop/tree_url_node.c +++ b/desktop/tree_url_node.c @@ -817,11 +817,11 @@ static bool tree_url_save_entry(struct node *entry, FILE *fp) if (href == NULL) return false; - ret = utf8_to_enc(text, "iso-8859-1", strlen(text), &latin1_text); + ret = utf8_to_html(text, "iso-8859-1", strlen(text), &latin1_text); if (ret != UTF8_CONVERT_OK) return false; - ret = utf8_to_enc(href, "iso-8859-1", strlen(href), &latin1_href); + ret = utf8_to_html(href, "iso-8859-1", strlen(href), &latin1_href); if (ret != UTF8_CONVERT_OK) { free(latin1_text); return false; @@ -872,7 +872,7 @@ static bool tree_url_save_directory(struct node *directory, FILE *fp) if (text == NULL) return false; - ret = utf8_to_enc(text, "iso-8859-1", + ret = utf8_to_html(text, "iso-8859-1", strlen(text), &latin1_text); if (ret != UTF8_CONVERT_OK) return false; @@ -919,7 +919,7 @@ bool tree_urlfile_save(struct tree *tree, const char *filename, fputs("<meta http-equiv=\"Content-Type\" " "content=\"text/html; charset=iso-8859-1\">\n", fp); fprintf(fp, "<title>%s</title>\n", page_title); - fputs("<body>", fp); + fputs("</head>\n<body>", fp); if (tree_url_save_directory(tree_get_root(tree), fp) == false) { warn_user("HotlistSaveError", 0); diff --git a/framebuffer/Makefile.target b/framebuffer/Makefile.target index f3d91de0d..8ab8804b9 100644 --- a/framebuffer/Makefile.target +++ b/framebuffer/Makefile.target @@ -44,7 +44,7 @@ $(eval $(call pkg_config_find_and_add_enabled,GIF,libnsgif,GIF)) $(eval $(call pkg_config_find_and_add_enabled,MOZJS,mozjs185,JavaScript)) $(eval $(call pkg_config_find_and_add_enabled,JS,mozilla-js,JavaScript)) -CFLAGS += -std=c99 -g -I. -Dsmall $(WARNFLAGS) \ +CFLAGS += -std=c99 -g -Dsmall $(WARNFLAGS) \ -D_BSD_SOURCE \ -D_XOPEN_SOURCE=600 \ -D_POSIX_C_SOURCE=200112L \ diff --git a/gtk/Makefile.target b/gtk/Makefile.target index f9b5436af..2d1eebf50 100644 --- a/gtk/Makefile.target +++ b/gtk/Makefile.target @@ -51,7 +51,7 @@ GTKCFLAGS := -std=c99 -Dgtk -Dnsgtk \ -D_POSIX_C_SOURCE=200112L \ -D_NETBSD_SOURCE \ -DGTK_RESPATH=\"$(NETSURF_GTK_RESOURCES)\" \ - $(WARNFLAGS) -I. -g + $(WARNFLAGS) -g # non optional pkg-configed libs $(eval $(call pkg_config_find_and_add,libcss,CSS)) diff --git a/gtk/dialogs/options.c b/gtk/dialogs/options.c index a449e6fb9..8bd5665a3 100644 --- a/gtk/dialogs/options.c +++ b/gtk/dialogs/options.c @@ -46,8 +46,6 @@ static GtkBuilder *gladeFile; static struct browser_window *current_browser; -static int proxy_type; - static void dialog_response_handler (GtkDialog *dlg, gint res_id); static gboolean on_dialog_close (GtkDialog *dlg, gboolean stay_alive); static void nsgtk_options_theme_combo(void); @@ -66,30 +64,35 @@ DECLARE(checkDisablePlugins); DECLARE(spinHistoryAge); DECLARE(checkHoverURLs); DECLARE(checkDisplayRecentURLs); -DECLARE(comboLanguage); +//DECLARE(comboboxLanguage); +static GtkWidget *comboboxLanguage; +static gboolean on_comboboxLanguage_changed(GtkComboBox *combo, gpointer data); DECLARE(checkSendReferer); +DECLARE(checkSendDNT); DECLARE(comboProxyType); DECLARE(entryProxyHost); -DECLARE(entryProxyPort); +DECLARE(spinProxyPort); DECLARE(entryProxyUser); DECLARE(entryProxyPassword); DECLARE(spinMaxFetchers); DECLARE(spinFetchesPerHost); DECLARE(spinCachedConnections); +DECLARE(checkEnableJavascript); + DECLARE(checkResampleImages); DECLARE(spinAnimationSpeed); -DECLARE(checkDisableAnimations); +DECLARE(checkEnableAnimations); -DECLARE(fontSansSerif); -DECLARE(fontSerif); -DECLARE(fontMonospace); -DECLARE(fontCursive); -DECLARE(fontFantasy); +//DECLARE(fontSansSerif); +//DECLARE(fontSerif); +//DECLARE(fontMonospace); +//DECLARE(fontCursive); +//DECLARE(fontFantasy); DECLARE(comboDefault); DECLARE(spinDefaultSize); -DECLARE(spinMinimumSize); +//DECLARE(spinMinimumSize); DECLARE(fontPreview); DECLARE(comboButtonType); @@ -123,7 +126,7 @@ DECLARE(checkRemoveBackgrounds); DECLARE(checkFitPage); DECLARE(checkCompressPDF); DECLARE(checkPasswordPDF); -DECLARE(setDefaultExportOptions); +//DECLARE(setDefaultExportOptions); /* Used when the feature is not implemented yet */ #define FIND_WIDGET(wname) \ @@ -135,12 +138,22 @@ DECLARE(setDefaultExportOptions); /* Assigns widget and connects it to its callback function */ #define CONNECT(wname, event) \ + do { \ + if ((wname) == NULL) \ + LOG(("Unable to find widget '%s'!", #wname)); \ + else \ g_signal_connect(G_OBJECT(wname), event, \ - G_CALLBACK(on_##wname##_changed), NULL) + G_CALLBACK(on_##wname##_changed), NULL); \ + } while (0) -GtkDialog* nsgtk_options_init(struct browser_window *bw, GtkWindow *parent) +/* exported interface documented in gtk/dialogs/options.h */ +GtkDialog* +nsgtk_options_init(struct browser_window *bw, GtkWindow *parent) { - GError* error = NULL; + GError *error = NULL; + GObject *dlgobject; + //GSList *group; + gladeFile = gtk_builder_new(); if (!gtk_builder_add_from_file(gladeFile, glade_file_location->options, &error)) { g_warning("Couldn't load builder file: %s", error->message); @@ -148,18 +161,25 @@ GtkDialog* nsgtk_options_init(struct browser_window *bw, GtkWindow *parent) return NULL; } + + dlgobject = gtk_builder_get_object(gladeFile, "dialogPreferences"); + if (dlgobject == NULL) { + LOG(("Unable to get object for preferences dialog")); + return NULL; + } + current_browser = bw; - wndPreferences = GTK_DIALOG(gtk_builder_get_object(gladeFile, "dlgPreferences")); + wndPreferences = GTK_DIALOG(dlgobject); gtk_window_set_transient_for(GTK_WINDOW(wndPreferences), parent); + + /* set the widgets to reflect the current options */ + nsgtk_options_load(); FIND_WIDGET(sourceButtonTab); FIND_WIDGET(sourceButtonWindow); - GSList *group = gtk_radio_button_get_group(GTK_RADIO_BUTTON( - sourceButtonWindow)); - gtk_radio_button_set_group(GTK_RADIO_BUTTON(sourceButtonTab), group); + //group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(sourceButtonWindow)); + //gtk_radio_button_set_group(GTK_RADIO_BUTTON(sourceButtonTab), group); - /* set the widgets to reflect the current options */ - nsgtk_options_load(); /* Connect all widgets to their appropriate callbacks */ CONNECT(entryHomePageURL, "focus-out-event"); @@ -172,33 +192,37 @@ GtkDialog* nsgtk_options_init(struct browser_window *bw, GtkWindow *parent) CONNECT(spinHistoryAge, "focus-out-event"); CONNECT(checkHoverURLs, "toggled"); - CONNECT(comboLanguage, "changed"); + CONNECT(comboboxLanguage, "changed"); CONNECT(checkDisplayRecentURLs, "toggled"); CONNECT(checkSendReferer, "toggled"); + CONNECT(checkSendDNT, "toggled"); CONNECT(checkShowSingleTab, "toggled"); CONNECT(comboProxyType, "changed"); CONNECT(entryProxyHost, "focus-out-event"); - CONNECT(entryProxyPort, "focus-out-event"); + CONNECT(spinProxyPort, "focus-out-event"); CONNECT(entryProxyUser, "focus-out-event"); CONNECT(entryProxyPassword, "focus-out-event"); CONNECT(spinMaxFetchers, "value-changed"); CONNECT(spinFetchesPerHost, "value-changed"); CONNECT(spinCachedConnections, "value-changed"); + CONNECT(checkEnableJavascript, "toggled"); + CONNECT(checkResampleImages, "toggled"); CONNECT(spinAnimationSpeed, "value-changed"); - CONNECT(checkDisableAnimations, "toggled"); + CONNECT(checkEnableAnimations, "toggled"); - CONNECT(fontSansSerif, "font-set"); +/* CONNECT(fontSansSerif, "font-set"); CONNECT(fontSerif, "font-set"); CONNECT(fontMonospace, "font-set"); CONNECT(fontCursive, "font-set"); CONNECT(fontFantasy, "font-set"); + CONNECT(spinMinimumSize, "value-changed"); +*/ CONNECT(comboDefault, "changed"); CONNECT(spinDefaultSize, "value-changed"); - CONNECT(spinMinimumSize, "value-changed"); CONNECT(fontPreview, "clicked"); CONNECT(comboButtonType, "changed"); @@ -231,7 +255,7 @@ GtkDialog* nsgtk_options_init(struct browser_window *bw, GtkWindow *parent) CONNECT(checkFitPage, "toggled"); CONNECT(checkCompressPDF, "toggled"); CONNECT(checkPasswordPDF, "toggled"); - CONNECT(setDefaultExportOptions, "clicked"); +// CONNECT(setDefaultExportOptions, "clicked"); g_signal_connect(G_OBJECT(wndPreferences), "response", G_CALLBACK (dialog_response_handler), NULL); @@ -291,53 +315,122 @@ GtkDialog* nsgtk_options_init(struct browser_window *bw, GtkWindow *parent) (widget) = GTK_WIDGET(gtk_builder_get_object(gladeFile, #widget)); \ } while (0) +static void set_proxy_widgets_sensitivity(int proxyval) +{ + switch (proxyval) { + case 0: /* no proxy */ + gtk_widget_set_sensitive(entryProxyHost, FALSE); + gtk_widget_set_sensitive(spinProxyPort, FALSE); + gtk_widget_set_sensitive(entryProxyUser, FALSE); + gtk_widget_set_sensitive(entryProxyPassword, FALSE); + break; + + case 1: /* proxy with no auth */ + gtk_widget_set_sensitive(entryProxyHost, TRUE); + gtk_widget_set_sensitive(spinProxyPort, TRUE); + gtk_widget_set_sensitive(entryProxyUser, FALSE); + gtk_widget_set_sensitive(entryProxyPassword, FALSE); + break; + + case 2: /* proxy with basic auth */ + gtk_widget_set_sensitive(entryProxyHost, TRUE); + gtk_widget_set_sensitive(spinProxyPort, TRUE); + gtk_widget_set_sensitive(entryProxyUser, TRUE); + gtk_widget_set_sensitive(entryProxyPassword, TRUE); + break; + + case 3: /* proxy with ntlm auth */ + gtk_widget_set_sensitive(entryProxyHost, TRUE); + gtk_widget_set_sensitive(spinProxyPort, TRUE); + gtk_widget_set_sensitive(entryProxyUser, TRUE); + gtk_widget_set_sensitive(entryProxyPassword, TRUE); + break; + + case 4: /* system proxy */ + gtk_widget_set_sensitive(entryProxyHost, FALSE); + gtk_widget_set_sensitive(spinProxyPort, FALSE); + gtk_widget_set_sensitive(entryProxyUser, FALSE); + gtk_widget_set_sensitive(entryProxyPassword, FALSE); + break; + + } +} void nsgtk_options_load(void) { - GtkBox *box; const char *default_accept_language = "en"; const char *default_homepage_url = ""; - const char *default_http_proxy_host = ""; - const char *default_http_proxy_auth_user = ""; - const char *default_http_proxy_auth_pass = ""; - int combo_row_count = 0; + const char *default_http_proxy_host; + const char *default_http_proxy_auth_user; + const char *default_http_proxy_auth_pass; + int active_language = 0; + GtkListStore *liststore; + GtkTreeIter iter; + int proxytype = 0; FILE *fp; char buf[50]; - /* get widget text */ - if (nsoption_charp(accept_language) != NULL) { - default_accept_language = nsoption_charp(accept_language); - } + /* Network - HTTP Proxy */ + default_http_proxy_host = nsoption_charp(http_proxy_host); + default_http_proxy_auth_user = nsoption_charp(http_proxy_auth_user); + default_http_proxy_auth_pass = nsoption_charp(http_proxy_auth_pass); - if (nsoption_charp(homepage_url) != NULL) { - default_homepage_url = nsoption_charp(homepage_url); + if (nsoption_bool(http_proxy) == true) { + /* proxy type combo box starts with disabled, to allow + * for this the http_proxy option needs combining with + * the http_proxy_auth option + */ + proxytype = nsoption_int(http_proxy_auth) + 1; + if (default_http_proxy_host == NULL) { + /* set to use a proxy without a host, turn proxy off */ + proxytype = 0; + } else if (((proxytype == 2) || + (proxytype == 3)) && + ((default_http_proxy_auth_user == NULL) || + (default_http_proxy_auth_pass == NULL))) { + /* authentication selected with empty credentials, turn proxy off */ + proxytype = 0; + } } - if (nsoption_charp(http_proxy_host) != NULL) { - default_http_proxy_host = nsoption_charp(http_proxy_host); + if (default_http_proxy_host == NULL) { + default_http_proxy_host = ""; } - if (nsoption_charp(http_proxy_auth_user) != NULL) { - default_http_proxy_auth_user = nsoption_charp(http_proxy_auth_user); + if (default_http_proxy_auth_user == NULL) { + default_http_proxy_auth_user = ""; } - if (nsoption_charp(http_proxy_auth_pass) != NULL) { - default_http_proxy_auth_pass = nsoption_charp(http_proxy_auth_pass); + if (default_http_proxy_auth_pass == NULL) { + default_http_proxy_auth_pass = ""; } - if (nsoption_bool(http_proxy) == true) { - proxytype = nsoption_int(http_proxy_auth) + 1; - } + SET_COMBO(comboProxyType, proxytype); + SET_ENTRY(entryProxyHost, default_http_proxy_host); + SET_SPIN(spinProxyPort, nsoption_int(http_proxy_port)); + SET_ENTRY(entryProxyUser, default_http_proxy_auth_user); + SET_ENTRY(entryProxyPassword, default_http_proxy_auth_pass); - /* Create combobox */ - box = GTK_BOX(gtk_builder_get_object(gladeFile, "combolanguagevbox")); - comboLanguage = nsgtk_combo_box_text_new(); + set_proxy_widgets_sensitivity(proxytype); - /* Populate combobox from languages file */ - if ((languages_file_location != NULL) && + + /* accept language selection */ + if (nsoption_charp(accept_language) != NULL) { + default_accept_language = nsoption_charp(accept_language); + } + + /* Fill content language list store */ + liststore = GTK_LIST_STORE(gtk_builder_get_object(gladeFile, "liststore_content_language")); + if ((liststore != NULL) && + (languages_file_location != NULL) && ((fp = fopen(languages_file_location, "r")) != NULL)) { + int combo_row_count = 0; + + gtk_list_store_clear(liststore); + active_language = -1; + LOG(("Used %s for languages", languages_file_location)); while (fgets(buf, sizeof(buf), fp)) { /* Ignore blank lines */ @@ -347,34 +440,44 @@ void nsgtk_options_load(void) /* Remove trailing \n */ buf[strlen(buf) - 1] = '\0'; - nsgtk_combo_box_text_append_text(comboLanguage, buf); + gtk_list_store_append(liststore, &iter); + gtk_list_store_set(liststore, &iter, 0, buf, -1 ); - if (strcmp(buf, default_accept_language) == 0) + if (strcmp(buf, default_accept_language) == 0) { active_language = combo_row_count; + } combo_row_count++; } - fclose(fp); + if (active_language == -1) { + /* configured language was not in list, add it */ + gtk_list_store_append(liststore, &iter); + gtk_list_store_set(liststore, &iter, 0, default_accept_language, -1 ); + active_language = combo_row_count; + + } + + fclose(fp); } else { LOG(("Failed opening languages file")); - warn_user("FileError", languages_file_location); - nsgtk_combo_box_text_append_text(comboLanguage, "en"); } + SET_COMBO(comboboxLanguage, active_language); - gtk_combo_box_set_active(GTK_COMBO_BOX(comboLanguage), active_language); - /** \todo localisation */ - gtk_widget_set_tooltip_text(GTK_WIDGET(comboLanguage), - "set preferred language for web pages"); - gtk_box_pack_start(box, comboLanguage, FALSE, FALSE, 0); - gtk_widget_show(comboLanguage); - - nsgtk_options_theme_combo(); + + /* Startup */ + if (nsoption_charp(homepage_url) != NULL) { + default_homepage_url = nsoption_charp(homepage_url); + } SET_ENTRY(entryHomePageURL, default_homepage_url); SET_BUTTON(setCurrentPage); SET_BUTTON(setDefaultPage); + + /* Theme */ + nsgtk_options_theme_combo(); + SET_CHECK(checkHideAdverts, nsoption_bool(block_ads)); SET_CHECK(checkDisablePopups, nsoption_bool(disable_popups)); @@ -384,42 +487,28 @@ void nsgtk_options_load(void) SET_CHECK(checkDisplayRecentURLs, nsoption_bool(url_suggestion)); SET_CHECK(checkSendReferer, nsoption_bool(send_referer)); + SET_CHECK(checkSendDNT, nsoption_bool(do_not_track)); SET_CHECK(checkShowSingleTab, nsoption_bool(show_single_tab)); - SET_COMBO(comboProxyType, proxytype); - SET_ENTRY(entryProxyHost, default_http_proxy_host); - - gtk_widget_set_sensitive(entryProxyHost, proxytype != 0); - - snprintf(buf, sizeof(buf), "%d", nsoption_int(http_proxy_port)); - - SET_ENTRY(entryProxyPort, buf); - gtk_widget_set_sensitive(entryProxyPort, proxytype != 0); - - SET_ENTRY(entryProxyUser, default_http_proxy_auth_user); - - gtk_widget_set_sensitive(entryProxyUser, proxytype != 0); - - SET_ENTRY(entryProxyPassword, default_http_proxy_auth_pass); - - gtk_widget_set_sensitive(entryProxyPassword, proxytype != 0); - SET_SPIN(spinMaxFetchers, nsoption_int(max_fetchers)); SET_SPIN(spinFetchesPerHost, nsoption_int(max_fetchers_per_host)); SET_SPIN(spinCachedConnections, nsoption_int(max_cached_fetch_handles)); + SET_CHECK(checkEnableJavascript, nsoption_bool(enable_javascript)); + SET_CHECK(checkResampleImages, nsoption_bool(render_resample)); SET_SPIN(spinAnimationSpeed, nsoption_int(minimum_gif_delay) / 100.0); - SET_CHECK(checkDisableAnimations, !nsoption_bool(animate_images)); + SET_CHECK(checkEnableAnimations, nsoption_bool(animate_images)); - SET_FONT(fontSansSerif, nsoption_charp(font_sans)); +/* SET_FONT(fontSansSerif, nsoption_charp(font_sans)); SET_FONT(fontSerif, nsoption_charp(font_serif)); SET_FONT(fontMonospace, nsoption_charp(font_mono)); SET_FONT(fontCursive, nsoption_charp(font_cursive)); SET_FONT(fontFantasy, nsoption_charp(font_fantasy)); + SET_SPIN(spinMinimumSize, nsoption_bool(font_min_size) / 10); +*/ SET_COMBO(comboDefault, nsoption_int(font_default)); SET_SPIN(spinDefaultSize, nsoption_int(font_size) / 10); - SET_SPIN(spinMinimumSize, nsoption_bool(font_min_size) / 10); SET_BUTTON(fontPreview); SET_COMBO(comboButtonType, nsoption_int(button_type) -1); @@ -451,16 +540,12 @@ void nsgtk_options_load(void) SET_CHECK(checkFitPage, nsoption_bool(enable_loosening)); SET_CHECK(checkCompressPDF, nsoption_bool(enable_PDF_compression)); SET_CHECK(checkPasswordPDF, nsoption_bool(enable_PDF_password)); - SET_BUTTON(setDefaultExportOptions); +// SET_BUTTON(setDefaultExportOptions); } -static void dialog_response_handler (GtkDialog *dlg, gint res_id) +static void dialog_response_handler(GtkDialog *dlg, gint res_id) { switch (res_id) { - case GTK_RESPONSE_HELP: - /* Ready to implement Help */ - break; - case GTK_RESPONSE_CLOSE: on_dialog_close(dlg, TRUE); } @@ -572,18 +657,28 @@ static gboolean on_##widget##_changed(GtkWidget *widget, gpointer data) \ return FALSE; \ } -static gboolean on_comboLanguage_changed(GtkWidget *widget, gpointer data) +static gboolean on_comboboxLanguage_changed(GtkComboBox *combo, gpointer data) { - gchar *lang; - - lang = nsgtk_combo_box_text_get_active_text(comboLanguage); - if (lang == NULL) - return FALSE; + gchar *lang = NULL; + GtkTreeIter iter; + GtkTreeModel *model; + + /* Obtain currently selected item from combo box. + * If nothing is selected, do nothing. + */ + if (gtk_combo_box_get_active_iter(combo, &iter)) { + /* Obtain data model from combo box. */ + model = gtk_combo_box_get_model(combo); + + /* Obtain string from model. */ + gtk_tree_model_get(model, &iter, 0, &lang, -1); + } - nsoption_set_charp(accept_language, strdup(lang)); + if (lang != NULL) { + nsoption_set_charp(accept_language, strdup(lang)); + g_free(lang); + } - g_free(lang); - return FALSE; } @@ -621,6 +716,11 @@ CHECK_CHANGED(checkSendReferer, send_referer) { } END_HANDLER + +CHECK_CHANGED(checkSendDNT, do_not_track) +{ +} +END_HANDLER CHECK_CHANGED(checkShowSingleTab, show_single_tab) { @@ -628,54 +728,48 @@ CHECK_CHANGED(checkShowSingleTab, show_single_tab) } END_HANDLER + COMBO_CHANGED(comboProxyType, http_proxy_auth) { LOG(("proxy auth: %d", nsoption_int(http_proxy_auth))); + + set_proxy_widgets_sensitivity(nsoption_int(http_proxy_auth)); switch (nsoption_int(http_proxy_auth)) { - case 0: + case 0: /* no proxy */ nsoption_set_bool(http_proxy, false); nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_NONE); break; - case 1: + + case 1: /* proxy with no auth */ nsoption_set_bool(http_proxy, true); nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_NONE); break; - case 2: + + case 2: /* proxy with basic auth */ nsoption_set_bool(http_proxy, true); nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_BASIC); break; - case 3: + + case 3: /* proxy with ntlm auth */ nsoption_set_bool(http_proxy, true); nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_NTLM); break; + + case 4: /* system proxy */ + nsoption_set_bool(http_proxy, true); + nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_NONE); + break; + } - gboolean sensitive = (!proxy_type == 0); - gtk_widget_set_sensitive(entryProxyHost, sensitive); - gtk_widget_set_sensitive(entryProxyPort, sensitive); - gtk_widget_set_sensitive(entryProxyUser, sensitive); - gtk_widget_set_sensitive(entryProxyPassword, sensitive); } END_HANDLER ENTRY_CHANGED(entryProxyHost, http_proxy_host) -gboolean on_entryProxyPort_changed(GtkWidget *widget, gpointer data) +SPIN_CHANGED(spinProxyPort, http_proxy_port) { - long port; - - errno = 0; - port = strtol((char *)gtk_entry_get_text(GTK_ENTRY(entryProxyPort)), - NULL, 10) & 0xffff; - if ((port != 0) && (errno == 0)) { - nsoption_set_int(http_proxy_port, port); - } else { - char buf[32]; - snprintf(buf, sizeof(buf), "%d", nsoption_int(http_proxy_port)); - SET_ENTRY(entryProxyPort, buf); - } - - return FALSE; } +END_HANDLER ENTRY_CHANGED(entryProxyUser, http_proxy_auth_user) @@ -709,9 +803,13 @@ static gboolean on_spinAnimationSpeed_changed(GtkWidget *widget, gpointer data) return FALSE; } -CHECK_CHANGED(checkDisableAnimations, animate_images) +CHECK_CHANGED(checkEnableAnimations, animate_images) +{ +} +END_HANDLER + +CHECK_CHANGED(checkEnableJavascript, enable_javascript) { - nsoption_set_bool(animate_images, !nsoption_bool(animate_images)); } END_HANDLER @@ -734,7 +832,7 @@ CHECK_CHANGED(checkHoverURLs, hover_urls) { } END_HANDLER - +/* FONT_CHANGED(fontSansSerif, font_sans) { } @@ -759,7 +857,7 @@ FONT_CHANGED(fontFantasy, font_fantasy) { } END_HANDLER - +*/ COMBO_CHANGED(comboDefault, font_default) { } @@ -771,12 +869,12 @@ SPIN_CHANGED(spinDefaultSize, font_size) } END_HANDLER -SPIN_CHANGED(spinMinimumSize, font_min_size) +/*SPIN_CHANGED(spinMinimumSize, font_min_size) { nsoption_set_int(font_min_size, nsoption_int(font_min_size) * 10); } END_HANDLER - +*/ BUTTON_CLICKED(fontPreview) { nsgtk_reflow_all_windows(); @@ -1057,6 +1155,7 @@ CHECK_CHANGED(checkPasswordPDF, enable_PDF_password) } END_HANDLER +/* BUTTON_CLICKED(setDefaultExportOptions) { nsoption_set_int(margin_top, DEFAULT_MARGIN_TOP_MM); @@ -1082,3 +1181,4 @@ BUTTON_CLICKED(setDefaultExportOptions) SET_CHECK(checkFitPage, nsoption_bool(enable_loosening)); } END_HANDLER +*/ diff --git a/gtk/res/options.gtk2.ui b/gtk/res/options.gtk2.ui index 0f50ecce6..5dd793062 100644 --- a/gtk/res/options.gtk2.ui +++ b/gtk/res/options.gtk2.ui @@ -1,8 +1,8 @@ <?xml version="1.0"?> <interface> <!-- interface-requires gtk+ 2.12 --> - <!-- interface-naming-policy toplevel-contextual --> - <object class="GtkDialog" id="dlgPreferences"> + <!-- interface-naming-policy project-wide --> + <object class="GtkDialog" id="dialogPreferences"> <property name="border_width">5</property> <property name="title" translatable="yes">Netsurf Preferences</property> <property name="window_position">center-on-parent</property> @@ -10,42 +10,43 @@ <property name="type_hint">dialog</property> <property name="has_separator">False</property> <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox6"> + <object class="GtkVBox" id="vbox_dialog"> <property name="visible">True</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child> - <object class="GtkNotebook" id="notebook2"> + <object class="GtkNotebook" id="notebook1"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="border_width">4</property> <child> - <object class="GtkVBox" id="vbox_general"> + <object class="GtkVBox" id="vbox_main"> <property name="visible">True</property> <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkFrame" id="frame14"> + <object class="GtkFrame" id="frame_main_startup"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment18"> + <object class="GtkAlignment" id="alignment1"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkVBox" id="vbox1"> + <object class="GtkVBox" id="vbox2"> <property name="visible">True</property> <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkHBox" id="hbox16"> + <object class="GtkHBox" id="hbox1"> <property name="visible">True</property> - <property name="border_width">5</property> - <property name="spacing">5</property> + <property name="spacing">12</property> <child> - <object class="GtkLabel" id="label64"> + <object class="GtkLabel" id="label_startup_page"> <property name="visible">True</property> - <property name="label" translatable="yes">URL</property> + <property name="label" translatable="yes">Page:</property> </object> <packing> <property name="expand">False</property> @@ -60,6 +61,7 @@ <property name="invisible_char">●</property> </object> <packing> + <property name="pack_type">end</property> <property name="position">1</property> </packing> </child> @@ -69,38 +71,42 @@ </packing> </child> <child> - <object class="GtkHBox" id="hbox1"> + <object class="GtkHBox" id="hbox2"> <property name="visible">True</property> - <property name="spacing">5</property> + <property name="spacing">6</property> + <child> + <placeholder/> + </child> <child> <object class="GtkButton" id="setCurrentPage"> - <property name="label" translatable="yes">Current Page</property> + <property name="label" translatable="yes">Use Current Page</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> + <property name="receives_default">True</property> </object> <packing> - <property name="padding">5</property> - <property name="position">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> </packing> </child> <child> <object class="GtkButton" id="setDefaultPage"> - <property name="label" translatable="yes">Default Page</property> + <property name="label" translatable="yes">Use Default Page</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> + <property name="receives_default">True</property> </object> <packing> - <property name="padding">5</property> - <property name="pack_type">end</property> - <property name="position">1</property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> </packing> </child> </object> <packing> + <property name="fill">False</property> + <property name="pack_type">end</property> <property name="position">1</property> </packing> </child> @@ -109,44 +115,55 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label65"> + <object class="GtkLabel" id="label_main_startup"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Home page</b></property> + <property name="label" translatable="yes"><b>Startup</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> + <property name="padding">6</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkHBox" id="hbox6"> + <object class="GtkFrame" id="frame_main_search"> <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> <child> - <object class="GtkFrame" id="frame15"> + <object class="GtkAlignment" id="alignment2"> <property name="visible">True</property> - <property name="border_width">5</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="top_padding">6</property> + <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkAlignment" id="alignment19"> + <object class="GtkVBox" id="vbox3"> <property name="visible">True</property> - <property name="left_padding">12</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkCheckButton" id="checkUrlSearch"> + <property name="label" translatable="yes">Search from URL bar</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> <child> - <object class="GtkVBox" id="vbox17"> + <object class="GtkHBox" id="hbox3"> <property name="visible">True</property> - <property name="orientation">vertical</property> - <property name="homogeneous">True</property> + <property name="spacing">12</property> <child> - <object class="GtkCheckButton" id="checkHideAdverts"> - <property name="label" translatable="yes">Hide advertisements</property> + <object class="GtkLabel" id="label5"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="label" translatable="yes">Provider:</property> </object> <packing> <property name="expand">False</property> @@ -155,186 +172,112 @@ </packing> </child> <child> - <object class="GtkCheckButton" id="checkDisablePopups"> - <property name="label" translatable="yes">Disable pop-up windows</property> + <object class="GtkComboBox" id="comboSearch"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="model">liststore_search_provider</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext1"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> <property name="position">1</property> </packing> </child> - <child> - <object class="GtkCheckButton" id="checkDisablePlugins"> - <property name="label" translatable="yes">Disable plug-ins</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> </object> + <packing> + <property name="position">1</property> + </packing> </child> </object> </child> - <child type="label"> - <object class="GtkLabel" id="label66"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Content blocking</b></property> - <property name="use_markup">True</property> - </object> - </child> </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> </child> - <child> - <object class="GtkFrame" id="frame7"> + <child type="label"> + <object class="GtkLabel" id="label4"> <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> - <child> - <object class="GtkAlignment" id="alignment7"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <object class="GtkHBox" id="hbox8"> - <property name="visible">True</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - <child> - <object class="GtkVBox" id="combolanguagevbox"> - <property name="visible">True</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <placeholder/> - </child> - </object> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label20"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Content Language</b></property> - <property name="use_markup">True</property> - </object> - </child> + <property name="label" translatable="yes"><b>Search</b></property> + <property name="use_markup">True</property> </object> - <packing> - <property name="position">1</property> - </packing> </child> </object> <packing> <property name="expand">False</property> + <property name="padding">6</property> <property name="position">1</property> </packing> </child> <child> - <object class="GtkFrame" id="frame16"> + <object class="GtkFrame" id="frame_main_downloads"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment20"> + <object class="GtkAlignment" id="alignment3"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkVBox" id="vbox18"> + <object class="GtkVBox" id="vbox4"> <property name="visible">True</property> - <property name="border_width">1</property> <property name="orientation">vertical</property> - <property name="spacing">2</property> + <property name="spacing">6</property> <child> - <object class="GtkHBox" id="hbox17"> + <object class="GtkCheckButton" id="checkClearDownloads"> + <property name="label" translatable="yes">Remove download from list when complete</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="checkRequestOverwrite"> + <property name="label" translatable="yes">Confirm before overwriting files</property> <property name="visible">True</property> - <property name="border_width">4</property> - <property name="spacing">4</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox4"> + <property name="visible">True</property> + <property name="spacing">12</property> <child> - <object class="GtkLabel" id="label67"> + <object class="GtkLabel" id="label8"> <property name="visible">True</property> - <property name="label" translatable="yes">Keep history for</property> + <property name="label" translatable="yes">Location:</property> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkSpinButton" id="spinHistoryAge"> + <object class="GtkFileChooserButton" id="fileChooserDownloads"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> + <property name="action">select-folder</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> <property name="position">1</property> </packing> </child> - <child> - <object class="GtkLabel" id="label68"> - <property name="visible">True</property> - <property name="label" translatable="yes">days</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="checkHoverURLs"> - <property name="label" translatable="yes">Hover URLs by pointer in local history</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> + <property name="position">2</property> </packing> </child> </object> @@ -342,62 +285,63 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label69"> + <object class="GtkLabel" id="label7"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>History</b></property> + <property name="label" translatable="yes"><b>Downloads</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> + <property name="padding">6</property> <property name="position">2</property> </packing> </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="label" translatable="yes">Main</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox_appearance"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkFrame" id="frame17"> + <object class="GtkFrame" id="frame_appearance_theme"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment21"> + <object class="GtkAlignment" id="alignment4"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkVBox" id="vbox19"> + <object class="GtkHBox" id="themehbox"> <property name="visible">True</property> - <property name="orientation">vertical</property> - <property name="homogeneous">True</property> + <property name="spacing">12</property> <child> - <object class="GtkCheckButton" id="checkDisplayRecentURLs"> - <property name="label" translatable="yes">Display recently visited URLs as you type</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> + <placeholder/> </child> <child> - <object class="GtkCheckButton" id="checkSendReferer"> - <property name="label" translatable="yes">Send site referral information</property> + <object class="GtkButton" id="buttonaddtheme"> + <property name="label" translatable="yes">Add Theme...</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> + <property name="receives_default">True</property> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> + <property name="pack_type">end</property> <property name="position">1</property> </packing> </child> @@ -406,182 +350,104 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label70"> + <object class="GtkLabel" id="label3"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Misc</b></property> + <property name="label" translatable="yes"><b>Themes</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="position">3</property> + <property name="padding">6</property> + <property name="position">0</property> </packing> </child> - </object> - </child> - <child type="tab"> - <object class="GtkLabel" id="label71"> - <property name="visible">True</property> - <property name="label" translatable="yes">General</property> - </object> - <packing> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox_network"> - <property name="visible">True</property> - <property name="orientation">vertical</property> <child> - <object class="GtkFrame" id="frame18"> + <object class="GtkFrame" id="frame_appearance_tabs"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment22"> + <object class="GtkAlignment" id="alignment5"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkTable" id="table7"> + <object class="GtkVBox" id="vbox5"> <property name="visible">True</property> - <property name="n_rows">4</property> - <property name="n_columns">2</property> - <property name="column_spacing">3</property> - <property name="row_spacing">3</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkEntry" id="entryProxyUser"> + <object class="GtkCheckButton" id="checkShowSingleTab"> + <property name="label" translatable="yes">Always show tab bar</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="y_options"></property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkComboBox" id="comboProxyType"> + <object class="GtkCheckButton" id="checkFocusNew"> + <property name="label" translatable="yes">Switch to newly opened tabs immediately</property> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> + <property name="position">1</property> </packing> </child> <child> - <object class="GtkHBox" id="hbox18"> + <object class="GtkCheckButton" id="checkNewBlank"> + <property name="label" translatable="yes">Newly opened tabs are blank</property> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox5"> + <property name="visible">True</property> + <property name="spacing">12</property> <child> - <object class="GtkEntry" id="entryProxyHost"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="invisible_char">●</property> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label72"> + <object class="GtkLabel" id="label9"> <property name="visible">True</property> - <property name="label" translatable="yes">:</property> + <property name="label" translatable="yes">Position:</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="position">1</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkEntry" id="entryProxyPort"> - <property name="width_request">64</property> + <object class="GtkComboBox" id="comboTabPosition"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <property name="model">liststore_tab_position</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext2"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> </object> <packing> - <property name="expand">False</property> - <property name="position">2</property> + <property name="position">1</property> </packing> </child> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkEntry" id="entryProxyPassword"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="visibility">False</property> - <property name="invisible_char">●</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label75"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Host</property> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label76"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Proxy type</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label74"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Username</property> - </object> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label73"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Password</property> - </object> - <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="position">3</property> </packing> </child> </object> @@ -589,179 +455,121 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label77"> + <object class="GtkLabel" id="label6"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>HTTP Proxy</b></property> + <property name="label" translatable="yes"><b>Tabs</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="position">0</property> + <property name="padding">6</property> + <property name="position">1</property> </packing> </child> <child> - <object class="GtkFrame" id="frame19"> + <object class="GtkFrame" id="frame_appearance_source"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment23"> + <object class="GtkAlignment" id="alignment7"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkTable" id="table8"> + <object class="GtkVBox" id="vbox1"> <property name="visible">True</property> - <property name="border_width">3</property> - <property name="n_rows">3</property> - <property name="n_columns">3</property> - <property name="column_spacing">3</property> - <property name="row_spacing">3</property> - <child> - <object class="GtkSpinButton" id="spinMaxFetchers"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="spinFetchesPerHost"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="spinCachedConnections"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label78"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Maximum fetchers</property> - </object> - <packing> - <property name="y_options"></property> - </packing> - </child> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkLabel" id="label79"> + <object class="GtkLabel" id="label13"> <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Fetches per host</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Open source view in new:</property> </object> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkLabel" id="label80"> + <object class="GtkHBox" id="hbox6"> <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Cached connections</property> + <child> + <object class="GtkRadioButton" id="sourceButtonWindow"> + <property name="label" translatable="yes">window</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0.54000002145767212</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <property name="group">sourceButtonTab</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="sourceButtonTab"> + <property name="label" translatable="yes">tab</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> </object> <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="y_options"></property> + <property name="position">1</property> </packing> </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> </object> </child> </object> </child> <child type="label"> - <object class="GtkLabel" id="label81"> + <object class="GtkLabel" id="label12"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Fetching</b></property> + <property name="label" translatable="yes"><b>Source</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="position">1</property> + <property name="padding">6</property> + <property name="position">2</property> </packing> </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel" id="label82"> - <property name="visible">True</property> - <property name="label" translatable="yes">Network</property> - </object> - <packing> - <property name="position">1</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox_rendering"> - <property name="visible">True</property> - <property name="orientation">vertical</property> <child> - <object class="GtkFrame" id="frame20"> + <object class="GtkFrame" id="frame_appearance_url"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment24"> + <object class="GtkAlignment" id="alignment8"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkVBox" id="vbox2"> + <object class="GtkVBox" id="vbox7"> <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkCheckButton" id="checkResampleImages"> - <property name="label" translatable="yes">Resample images when not at natural size</property> + <object class="GtkCheckButton" id="checkDisplayRecentURLs"> + <property name="label" translatable="yes">Display recently visited URLs as you type</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> <property name="draw_indicator">True</property> </object> <packing> @@ -773,313 +581,306 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label83"> + <object class="GtkLabel" id="label14"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Quality</b></property> + <property name="label" translatable="yes"><b>URLbar</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="position">0</property> + <property name="padding">7</property> + <property name="position">3</property> </packing> </child> <child> - <object class="GtkFrame" id="frame21"> + <object class="GtkFrame" id="frame_appearance_toolbar"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment25"> + <object class="GtkAlignment" id="alignment9"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkVBox" id="vbox23"> + <object class="GtkVBox" id="vbox8"> <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkHBox" id="hbox19"> + <object class="GtkHBox" id="hbox7"> <property name="visible">True</property> + <property name="spacing">6</property> <child> - <object class="GtkLabel" id="label84"> + <object class="GtkLabel" id="label16"> <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Limit speed to</property> + <property name="label" translatable="yes">Buttons:</property> </object> <packing> + <property name="expand">False</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkSpinButton" id="spinAnimationSpeed"> + <object class="GtkComboBox" id="comboButtonType"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> - <property name="digits">1</property> - <property name="numeric">True</property> - <property name="update_policy">if-valid</property> + <property name="model">liststore_toolbar_buttontype</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext3"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> </object> <packing> - <property name="fill">False</property> <property name="position">1</property> </packing> </child> - <child> - <object class="GtkLabel" id="label85"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">seconds between frames</property> - </object> - <packing> - <property name="position">2</property> - </packing> - </child> </object> <packing> <property name="position">0</property> </packing> </child> - <child> - <object class="GtkCheckButton" id="checkDisableAnimations"> - <property name="label" translatable="yes">Disable animations</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> </object> </child> </object> </child> <child type="label"> - <object class="GtkLabel" id="label86"> + <object class="GtkLabel" id="label15"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Animations</b></property> + <property name="label" translatable="yes"><b>Toolbar</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> + <property name="padding">6</property> + <property name="position">4</property> </packing> </child> </object> <packing> - <property name="position">2</property> + <property name="position">1</property> </packing> </child> <child type="tab"> - <object class="GtkLabel" id="label87"> + <object class="GtkLabel" id="label2"> <property name="visible">True</property> - <property name="label" translatable="yes">Rendering</property> + <property name="label" translatable="yes">Appearance</property> </object> <packing> - <property name="position">2</property> + <property name="position">1</property> <property name="tab_fill">False</property> </packing> </child> <child> - <object class="GtkVBox" id="vbox_style"> + <object class="GtkVBox" id="vbox_content"> <property name="visible">True</property> <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkFrame" id="frame22"> + <object class="GtkFrame" id="frame_content_control"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment26"> + <object class="GtkAlignment" id="alignment6"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkTable" id="table9"> + <object class="GtkVBox" id="vbox6"> <property name="visible">True</property> - <property name="border_width">2</property> - <property name="n_rows">6</property> - <property name="n_columns">2</property> - <property name="column_spacing">3</property> - <property name="row_spacing">3</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkFontButton" id="fontSansSerif"> + <object class="GtkCheckButton" id="checkDisablePopups"> + <property name="label" translatable="yes">Prevent pop-up windows</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> - <property name="show_style">False</property> - <property name="show_size">False</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label88"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Sans-serif</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label89"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Serif</property> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label90"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Monospace</property> - </object> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label91"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Cursive</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkLabel" id="label92"> + <object class="GtkCheckButton" id="checkHideAdverts"> + <property name="label" translatable="yes">Hide Adverts</property> <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Fantasy</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> </packing> </child> <child> - <object class="GtkLabel" id="label93"> + <object class="GtkCheckButton" id="checkEnableJavascript"> + <property name="label" translatable="yes">Enable JavaScript</property> <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Default</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> </packing> </child> <child> - <object class="GtkFontButton" id="fontSerif"> + <object class="GtkCheckButton" id="checkDisablePlugins"> + <property name="label" translatable="yes">Disable plug-ins</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> - <property name="show_style">False</property> - <property name="show_size">False</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> </packing> </child> <child> - <object class="GtkFontButton" id="fontMonospace"> + <object class="GtkCheckButton" id="checkResampleImages"> + <property name="label" translatable="yes">High quality image scaling</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> - <property name="show_style">False</property> - <property name="show_size">False</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="position">4</property> </packing> </child> <child> - <object class="GtkFontButton" id="fontCursive"> + <object class="GtkHBox" id="hbox8"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="show_style">False</property> - <property name="show_size">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label17"> + <property name="visible">True</property> + <property name="label" translatable="yes">Load and display</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="comboboxLoadImages"> + <property name="visible">True</property> + <property name="model">liststore_image_loading</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext4"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="position">5</property> </packing> </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label11"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Control</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">6</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame_content_animation"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment" id="alignment10"> + <property name="visible">True</property> + <property name="top_padding">6</property> + <property name="left_padding">12</property> + <property name="right_padding">12</property> + <child> + <object class="GtkVBox" id="vbox9"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkFontButton" id="fontFantasy"> + <object class="GtkCheckButton" id="checkEnableAnimations"> + <property name="label" translatable="yes">Enable</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> - <property name="show_style">False</property> - <property name="show_size">False</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkComboBox" id="comboDefault"> + <object class="GtkHBox" id="hbox9"> <property name="visible">True</property> + <property name="spacing">12</property> + <child> + <object class="GtkLabel" id="label19"> + <property name="visible">True</property> + <property name="label" translatable="yes">Minimum time between frames:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spinAnimationSpeed"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Do not update animations any more often than this.</property> + <property name="invisible_char">●</property> + <property name="adjustment">adjustment_animation_time</property> + <property name="climb_rate">1</property> + <property name="digits">1</property> + <property name="numeric">True</property> + <property name="update_policy">if-valid</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="position">1</property> </packing> </child> </object> @@ -1087,153 +888,118 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label94"> + <object class="GtkLabel" id="label18"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Font faces</b></property> + <property name="label" translatable="yes"><b>Animation</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="position">0</property> + <property name="padding">6</property> + <property name="position">1</property> </packing> </child> <child> - <object class="GtkFrame" id="frame23"> + <object class="GtkFrame" id="frame_content_fonts"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment27"> + <object class="GtkAlignment" id="alignment14"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkTable" id="table10"> + <object class="GtkHBox" id="hbox11"> <property name="visible">True</property> - <property name="n_rows">2</property> - <property name="n_columns">4</property> - <property name="column_spacing">3</property> - <property name="row_spacing">3</property> + <property name="spacing">12</property> <child> - <object class="GtkButton" id="fontPreview"> + <object class="GtkHBox" id="hbox12"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="spacing">6</property> <child> - <object class="GtkHBox" id="hbox3"> + <object class="GtkLabel" id="label26"> <property name="visible">True</property> - <property name="border_width">2</property> - <child> - <object class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="stock">gtk-apply</property> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> + <property name="label" translatable="yes">Default</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="comboDefault"> + <property name="visible">True</property> + <property name="model">liststore_defaultfont</property> <child> - <object class="GtkLabel" id="label1"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Preview</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="position">1</property> - </packing> + <object class="GtkCellRendererText" id="cellrenderertext5"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> </child> </object> + <packing> + <property name="position">1</property> + </packing> </child> </object> <packing> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="bottom_attach">2</property> - <property name="x_options"></property> - <property name="y_options"></property> - <property name="x_padding">2</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkSpinButton" id="spinDefaultSize"> + <object class="GtkHBox" id="hbox13"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label27"> + <property name="visible">True</property> + <property name="label" translatable="yes">Size</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spinDefaultSize"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">The base-line font size to use.</property> + <property name="max_length">3</property> + <property name="invisible_char">●</property> + <property name="width_chars">3</property> + <property name="adjustment">adjustment_font_default_size</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options"></property> - <property name="y_options"></property> + <property name="expand">False</property> + <property name="position">1</property> </packing> </child> <child> - <object class="GtkSpinButton" id="spinMinimumSize"> + <object class="GtkButton" id="fontPreview"> + <property name="label" translatable="yes">_Preview</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options"></property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label97"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">pt</property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label98"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">pt</property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label96"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Minimum</property> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label95"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Default</property> + <property name="receives_default">True</property> + <property name="image">image1</property> + <property name="use_underline">True</property> </object> <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="expand">False</property> + <property name="position">2</property> </packing> </child> </object> @@ -1241,53 +1007,78 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label99"> + <object class="GtkLabel" id="label20"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Font size</b></property> + <property name="label" translatable="yes"><b>Fonts</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="position">1</property> + <property name="position">2</property> </packing> </child> <child> - <object class="GtkFrame" id="frame6"> + <object class="GtkFrame" id="frame_content_font"> <property name="visible">True</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment6"> + <object class="GtkAlignment" id="alignment11"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkTable" id="table3"> + <object class="GtkVBox" id="vbox10"> <property name="visible">True</property> - <property name="n_columns">2</property> - <property name="column_spacing">10</property> - <property name="row_spacing">3</property> - <child> - <object class="GtkComboBox" id="comboButtonType"> - <property name="visible">True</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options"></property> - <property name="y_options"></property> - </packing> - </child> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkLabel" id="label19"> + <object class="GtkHBox" id="hbox10"> <property name="visible">True</property> - <property name="label" translatable="yes">Toolbar buttons</property> - <property name="justify">right</property> + <property name="spacing">12</property> + <child> + <object class="GtkLabel" id="label21"> + <property name="visible">True</property> + <property name="label" translatable="yes">Preferred language:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="comboboxLanguage"> + <property name="visible">True</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">set preferred language for web pages</property> + <property name="model">liststore_content_language</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext7"> + <property name="xalign">0</property> + </object> + <attributes> + <attribute name="text">1</attribute> + </attributes> + </child> + <child> + <object class="GtkCellRendererText" id="cellrenderertext8"> + <property name="xalign">1</property> + </object> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> </object> <packing> - <property name="x_options"></property> - <property name="y_options">GTK_FILL</property> + <property name="position">0</property> </packing> </child> </object> @@ -1295,157 +1086,276 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label18"> + <object class="GtkLabel" id="label25"> <property name="visible">True</property> - <property name="xpad">5</property> - <property name="label" translatable="yes"><b>Icons</b></property> + <property name="label" translatable="yes"><b>Language</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> - <property name="position">2</property> + <property name="expand">False</property> + <property name="position">3</property> </packing> </child> </object> <packing> - <property name="position">3</property> + <property name="position">2</property> </packing> </child> <child type="tab"> - <object class="GtkLabel" id="label100"> + <object class="GtkLabel" id="label10"> <property name="visible">True</property> - <property name="label" translatable="yes">Style</property> + <property name="label" translatable="yes">Content</property> </object> <packing> - <property name="position">3</property> + <property name="position">2</property> <property name="tab_fill">False</property> </packing> </child> <child> - <object class="GtkVBox" id="vbox_cache"> + <object class="GtkVBox" id="vbox_privacy"> <property name="visible">True</property> <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkFrame" id="frame24"> + <object class="GtkFrame" id="frame_privacy_history"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment28"> + <object class="GtkAlignment" id="alignment12"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkHBox" id="hbox20"> + <object class="GtkVBox" id="vbox11"> <property name="visible">True</property> - <property name="border_width">2</property> + <property name="orientation">vertical</property> <property name="spacing">6</property> <child> - <object class="GtkLabel" id="label101"> + <object class="GtkCheckButton" id="checkHoverURLs"> + <property name="label" translatable="yes">Local history shows URL in tooltip</property> <property name="visible">True</property> - <property name="label" translatable="yes">Size</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkSpinButton" id="spinMemoryCacheSize"> + <object class="GtkHBox" id="hbox14"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label28"> + <property name="visible">True</property> + <property name="label" translatable="yes">Remember browsing history for up to</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spinHistoryAge"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">4</property> + <property name="invisible_char">●</property> + <property name="width_chars">4</property> + <property name="adjustment">adjustment_history_age</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label29"> + <property name="visible">True</property> + <property name="label" translatable="yes">days</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> <property name="position">1</property> </packing> </child> - <child> - <object class="GtkLabel" id="label102"> - <property name="visible">True</property> - <property name="label" translatable="yes">MB</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> </object> </child> </object> </child> <child type="label"> - <object class="GtkLabel" id="label103"> + <object class="GtkLabel" id="label23"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Memory cache</b></property> + <property name="label" translatable="yes"><b>History</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> + <property name="padding">6</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkFrame" id="frame25"> + <object class="GtkFrame" id="frame_privacy_cache"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment29"> + <object class="GtkAlignment" id="alignment13"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkVBox" id="vbox26"> + <object class="GtkVBox" id="vbox12"> <property name="visible">True</property> <property name="orientation">vertical</property> - <property name="spacing">5</property> + <property name="spacing">6</property> <child> - <object class="GtkHBox" id="hbox21"> + <object class="GtkTable" id="table3"> <property name="visible">True</property> - <property name="spacing">3</property> + <property name="n_rows">3</property> + <property name="n_columns">3</property> + <property name="column_spacing">6</property> + <property name="row_spacing">6</property> <child> - <object class="GtkLabel" id="label104"> + <object class="GtkLabel" id="label30"> <property name="visible">True</property> - <property name="label" translatable="yes">Duration</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Memory cache size</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label31"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Disc cache size</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label34"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Expire cache entries after</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spinMemoryCacheSize"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="width_chars">5</property> + <property name="adjustment">adjustment_cache_memory_size</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spinDiscCacheSize"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="width_chars">5</property> + <property name="adjustment">adjustment_cache_disc_size</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> <object class="GtkSpinButton" id="spinDiscCacheAge"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="adjustment"></property> + <property name="invisible_char">●</property> + <property name="width_chars">3</property> + <property name="adjustment">adjustment_disc_cache_age</property> <property name="climb_rate">1</property> + <property name="numeric">True</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label32"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">MB</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkLabel" id="label105"> + <object class="GtkLabel" id="label33"> <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">MB</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label35"> + <property name="visible">True</property> + <property name="xalign">0</property> <property name="label" translatable="yes">days</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> </packing> </child> </object> @@ -1454,69 +1364,25 @@ </packing> </child> <child> - <object class="GtkHBox" id="hbox22"> + <object class="GtkHBox" id="hbox17"> <property name="visible">True</property> - <property name="border_width">4</property> - <property name="spacing">4</property> <child> <placeholder/> </child> <child> - <object class="GtkButton" id="button4"> + <object class="GtkButton" id="buttonCacheMaintinance"> + <property name="label" translatable="yes">Maintinance</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">False</property> - <child> - <object class="GtkAlignment" id="alignment30"> - <property name="visible">True</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <child> - <object class="GtkHBox" id="hbox23"> - <property name="visible">True</property> - <property name="spacing">2</property> - <child> - <object class="GtkImage" id="image399"> - <property name="visible">True</property> - <property name="stock">gtk-delete</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label106"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="label" translatable="yes">Perform maintainance</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - </child> - </object> - </child> + <property name="receives_default">True</property> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> <property name="position">1</property> </packing> </child> - <child> - <placeholder/> - </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> <property name="position">1</property> </packing> </child> @@ -1525,59 +1391,41 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label107"> + <object class="GtkLabel" id="label24"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Disc cache</b></property> + <property name="label" translatable="yes"><b>Cache</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> + <property name="padding">6</property> <property name="position">1</property> </packing> </child> - </object> - <packing> - <property name="position">4</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel" id="label108"> - <property name="visible">True</property> - <property name="label" translatable="yes">Cache</property> - </object> - <packing> - <property name="position">4</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox_advanced"> - <property name="visible">True</property> - <property name="orientation">vertical</property> <child> - <object class="GtkFrame" id="frame_downloads"> + <object class="GtkFrame" id="frame_privacy_general"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment1"> + <object class="GtkAlignment" id="alignment20"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkVBox" id="vbox4"> + <object class="GtkVBox" id="vbox15"> <property name="visible">True</property> <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkCheckButton" id="checkClearDownloads"> - <property name="label" translatable="yes">Automatically clear downloads when completed</property> + <object class="GtkCheckButton" id="checkSendReferer"> + <property name="label" translatable="yes">Enable referral submission</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> <property name="draw_indicator">True</property> </object> <packing> @@ -1585,211 +1433,217 @@ </packing> </child> <child> - <object class="GtkCheckButton" id="checkRequestOverwrite"> - <property name="label" translatable="yes">Request confirmation before overwriting files</property> + <object class="GtkCheckButton" id="checkSendDNT"> + <property name="label" translatable="yes">Enable sending "Do Not Track" request</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> - <property name="use_underline">True</property> <property name="draw_indicator">True</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> <property name="position">1</property> </packing> </child> - <child> - <object class="GtkHBox" id="hbox2"> - <property name="visible">True</property> - <child> - <object class="GtkLabel" id="label4"> - <property name="visible">True</property> - <property name="xpad">2</property> - <property name="label" translatable="yes">Download directory</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="padding">2</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkFileChooserButton" id="fileChooserDownloads"> - <property name="visible">True</property> - <property name="action">select-folder</property> - <property name="show_hidden">True</property> - <property name="width_chars">25</property> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">2</property> - </packing> - </child> </object> </child> </object> </child> <child type="label"> - <object class="GtkLabel" id="label3"> + <object class="GtkLabel" id="label61"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Downloads</b></property> + <property name="label" translatable="yes"><b>General</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="position">0</property> + <property name="position">2</property> </packing> </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label22"> + <property name="visible">True</property> + <property name="label" translatable="yes">Privacy</property> + </object> + <packing> + <property name="position">3</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox_network"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkFrame" id="frame_tabs"> + <object class="GtkFrame" id="frame_network_proxy"> <property name="visible">True</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment8"> + <object class="GtkAlignment" id="alignment15"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkVBox" id="advanced_tabs_vbox"> + <object class="GtkTable" id="table2"> <property name="visible">True</property> - <property name="orientation">vertical</property> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <property name="column_spacing">6</property> + <property name="row_spacing">6</property> <child> - <object class="GtkCheckButton" id="checkShowSingleTab"> - <property name="label" translatable="yes">Show tab bar with only one tab</property> + <object class="GtkLabel" id="label42"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Proxy type</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkCheckButton" id="checkFocusNew"> - <property name="label" translatable="yes">Shift focus to new tab</property> + <object class="GtkLabel" id="label43"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Host</property> </object> <packing> - <property name="position">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkCheckButton" id="checkNewBlank"> - <property name="label" translatable="yes">Open blank window</property> + <object class="GtkLabel" id="label44"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Username</property> </object> <packing> - <property name="position">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkHBox" id="hbox10"> + <object class="GtkLabel" id="label45"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Password</property> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="comboProxyType"> <property name="visible">True</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">The type of HTTP proxy server.</property> + <property name="model">liststore_proxy_type</property> <child> - <object class="GtkLabel" id="label26"> + <object class="GtkCellRendererText" id="cellrenderertext6"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox19"> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <object class="GtkEntry" id="entryProxyHost"> <property name="visible">True</property> - <property name="xalign">0.4699999988079071</property> - <property name="xpad">2</property> - <property name="label" translatable="yes">Tabs position</property> + <property name="can_focus">True</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Host name of your proxy server.</property> + <property name="invisible_char">●</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkComboBox" id="comboTabPosition"> + <object class="GtkLabel" id="label46"> <property name="visible">True</property> + <property name="label" translatable="yes">:</property> </object> <packing> + <property name="expand">False</property> <property name="position">1</property> </packing> </child> + <child> + <object class="GtkSpinButton" id="spinProxyPort"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Port number to connect to on proxy server.</property> + <property name="max_length">5</property> + <property name="invisible_char">●</property> + <property name="width_chars">5</property> + <property name="adjustment">adjustment_proxy_port</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + <property name="update_policy">if-valid</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> </object> <packing> - <property name="position">3</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> </packing> </child> - </object> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label21"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Tabs</b></property> - <property name="use_markup">True</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkFrame" id="frame_view_source"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> - <child> - <object class="GtkAlignment" id="alignment10"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <object class="GtkHBox" id="hbox11"> - <property name="visible">True</property> <child> - <object class="GtkRadioButton" id="sourceButtonWindow"> - <property name="label" translatable="yes">in own window </property> + <object class="GtkEntry" id="entryProxyUser"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Username to access the proxy</property> + <property name="invisible_char">●</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> </packing> </child> <child> - <object class="GtkRadioButton" id="sourceButtonTab"> - <property name="label" translatable="yes">in new tab</property> + <object class="GtkEntry" id="entryProxyPassword"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Password to access the proxy</property> + <property name="invisible_char">●</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> </packing> </child> </object> @@ -1797,110 +1651,127 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label24"> + <object class="GtkLabel" id="label37"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>View Source</b></property> + <property name="label" translatable="yes"><b>HTTP Proxy</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> + <property name="padding">6</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkFrame" id="frame_search"> + <object class="GtkFrame" id="frame_network_fetching"> <property name="visible">True</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment9"> + <object class="GtkAlignment" id="alignment16"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkHBox" id="hbox9"> + <object class="GtkTable" id="table1"> <property name="visible">True</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <property name="column_spacing">6</property> + <property name="row_spacing">6</property> <child> - <object class="GtkCheckButton" id="checkUrlSearch"> - <property name="label" translatable="yes">Search from URL bar </property> + <object class="GtkLabel" id="label39"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Maximum fetchers</property> </object> <packing> - <property name="expand">False</property> - <property name="position">0</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkLabel" id="label23"> + <object class="GtkLabel" id="label40"> <property name="visible">True</property> - <property name="label" translatable="yes">Default provider</property> - <property name="justify">right</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Fetches per host</property> </object> <packing> - <property name="fill">False</property> - <property name="position">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkComboBox" id="comboSearch"> + <object class="GtkLabel" id="label41"> <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Cached connections</property> </object> <packing> - <property name="position">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> </packing> </child> - </object> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label22"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Search</b></property> - <property name="use_markup">True</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">3</property> - </packing> - </child> - <child> - <object class="GtkFrame" id="frame_select_themes"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> - <child> - <object class="GtkAlignment" id="alignment11"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <object class="GtkHBox" id="themehbox"> - <property name="visible">True</property> <child> - <placeholder/> + <object class="GtkSpinButton" id="spinMaxFetchers"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Maximum number of concurrent items to fetch at once.</property> + <property name="invisible_char">●</property> + <property name="width_chars">3</property> + <property name="adjustment">adjustment_fetching_max</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> </child> <child> - <object class="GtkButton" id="buttonaddtheme"> - <property name="label" translatable="yes">Add theme…</property> + <object class="GtkSpinButton" id="spinFetchesPerHost"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Maximum number of item fetches per web server.</property> + <property name="invisible_char">●</property> + <property name="width_chars">3</property> + <property name="adjustment">adjustment_fetching_perhost</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="pack_type">end</property> - <property name="position">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spinCachedConnections"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Number of connections to keep in case they are needed again.</property> + <property name="invisible_char">●</property> + <property name="width_chars">3</property> + <property name="adjustment">adjustment_fetching_cached</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> </packing> </child> </object> @@ -1908,208 +1779,371 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label25"> + <object class="GtkLabel" id="label38"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Select themes</b></property> + <property name="label" translatable="yes"><b>Fetching</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="position">4</property> + <property name="padding">6</property> + <property name="position">1</property> </packing> </child> </object> <packing> - <property name="position">5</property> + <property name="position">4</property> </packing> </child> <child type="tab"> - <object class="GtkLabel" id="label109"> + <object class="GtkLabel" id="label36"> <property name="visible">True</property> - <property name="label" translatable="yes">Advanced</property> + <property name="label" translatable="yes">Network</property> </object> <packing> - <property name="position">5</property> + <property name="position">4</property> <property name="tab_fill">False</property> </packing> </child> <child> - <object class="GtkVBox" id="vbox_export"> + <object class="GtkVBox" id="vbox_pdfexport"> <property name="visible">True</property> <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkFrame" id="frame2"> + <object class="GtkFrame" id="frame_pdfexport_appearance"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment2"> + <object class="GtkAlignment" id="alignment17"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkHBox" id="hbox4"> + <object class="GtkVBox" id="vbox13"> <property name="visible">True</property> - <property name="homogeneous">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkTable" id="table1"> + <object class="GtkCheckButton" id="checkSuppressImages"> + <property name="label" translatable="yes">No images in output</property> <property name="visible">True</property> - <property name="n_rows">2</property> - <property name="n_columns">3</property> - <property name="column_spacing">4</property> - <property name="row_spacing">5</property> - <child> - <object class="GtkLabel" id="label10"> - <property name="visible">True</property> - <property name="label" translatable="yes">mm</property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="checkRemoveBackgrounds"> + <property name="label" translatable="yes">No background images in output</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="checkFitPage"> + <property name="label" translatable="yes">Scale output to fit page</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox15"> + <property name="visible">True</property> + <property name="spacing">6</property> <child> - <object class="GtkLabel" id="label9"> + <object class="GtkLabel" id="label59"> <property name="visible">True</property> - <property name="label" translatable="yes">mm</property> + <property name="label" translatable="yes">Scale output</property> </object> <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> + <property name="expand">False</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkSpinButton" id="spinMarginBottom"> + <object class="GtkSpinButton" id="spinExportScale"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="adjustment"></property> + <property name="max_length">4</property> + <property name="invisible_char">●</property> + <property name="width_chars">4</property> + <property name="xalign">1</property> + <property name="adjustment">adjustment_pdf_scale</property> <property name="climb_rate">1</property> + <property name="numeric">True</property> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="expand">False</property> + <property name="position">1</property> </packing> </child> <child> - <object class="GtkSpinButton" id="spinMarginTop"> + <object class="GtkLabel" id="label60"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> + <property name="label" translatable="yes">%</property> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> + <property name="expand">False</property> + <property name="position">2</property> </packing> </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label48"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Appearance</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">6</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame_pdfexport_margins"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment" id="alignment18"> + <property name="visible">True</property> + <property name="top_padding">6</property> + <property name="left_padding">12</property> + <property name="right_padding">12</property> + <child> + <object class="GtkVBox" id="vbox16"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkHBox" id="hbox22"> + <property name="visible">True</property> <child> - <object class="GtkLabel" id="label6"> + <object class="GtkLabel" id="label62"> <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Bottom</property> + <property name="label" translatable="yes">measurements in mm</property> </object> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="expand">False</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkLabel" id="label5"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Top</property> - </object> + <placeholder/> </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkTable" id="table2"> + <object class="GtkTable" id="table4"> <property name="visible">True</property> - <property name="n_rows">2</property> + <property name="n_rows">3</property> <property name="n_columns">3</property> - <property name="column_spacing">4</property> - <property name="row_spacing">5</property> - <child> - <object class="GtkLabel" id="label12"> - <property name="visible">True</property> - <property name="label" translatable="yes">mm</property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> <child> - <object class="GtkLabel" id="label11"> + <object class="GtkHBox" id="hbox16"> <property name="visible">True</property> - <property name="label" translatable="yes">mm</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label51"> + <property name="visible">True</property> + <property name="label" translatable="yes">Top</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spinMarginTop"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">4</property> + <property name="invisible_char">●</property> + <property name="width_chars">5</property> + <property name="xalign">1</property> + <property name="climb_rate">1</property> + <property name="digits">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> </object> <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkSpinButton" id="spinMarginRight"> + <object class="GtkHBox" id="hbox18"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label52"> + <property name="visible">True</property> + <property name="label" translatable="yes">Left</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spinMarginLeft"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">4</property> + <property name="invisible_char">●</property> + <property name="width_chars">5</property> + <property name="xalign">1</property> + <property name="adjustment">adjustment_pdf_lmargin</property> + <property name="climb_rate">1</property> + <property name="digits">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> + <property name="x_options">GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkSpinButton" id="spinMarginLeft"> + <object class="GtkHBox" id="hbox20"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label53"> + <property name="visible">True</property> + <property name="label" translatable="yes">Bottom</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spinMarginBottom"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">4</property> + <property name="invisible_char">●</property> + <property name="width_chars">5</property> + <property name="xalign">1</property> + <property name="climb_rate">1</property> + <property name="digits">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> </object> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkLabel" id="label8"> + <object class="GtkHBox" id="hbox21"> <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Right</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label54"> + <property name="visible">True</property> + <property name="label" translatable="yes">Right</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spinMarginRight"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">4</property> + <property name="invisible_char">●</property> + <property name="width_chars">5</property> + <property name="xalign">1</property> + <property name="climb_rate">1</property> + <property name="digits">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> </object> <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> + <property name="x_options">GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkLabel" id="label7"> - <property name="visible">True</property> - <property name="xalign">0.89999997615814209</property> - <property name="label" translatable="yes">Left</property> - </object> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> <property name="position">1</property> </packing> </child> @@ -2118,7 +2152,7 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="frame"> + <object class="GtkLabel" id="label49"> <property name="visible">True</property> <property name="label" translatable="yes"><b>Margins</b></property> <property name="use_markup">True</property> @@ -2127,165 +2161,32 @@ </object> <packing> <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkFrame" id="frame3"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> - <child> - <object class="GtkAlignment" id="alignment3"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <object class="GtkHBox" id="hbox5"> - <property name="visible">True</property> - <property name="spacing">4</property> - <child> - <object class="GtkLabel" id="label14"> - <property name="visible">True</property> - <property name="label" translatable="yes">Scale</property> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="spinExportScale"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment"></property> - <property name="climb_rate">1</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label15"> - <property name="visible">True</property> - <property name="label" translatable="yes">%</property> - </object> - <packing> - <property name="expand">False</property> - <property name="position">2</property> - </packing> - </child> - </object> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label13"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Scaling</b></property> - <property name="use_markup">True</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> + <property name="padding">6</property> <property name="position">1</property> </packing> </child> <child> - <object class="GtkFrame" id="frame4"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> - <child> - <object class="GtkAlignment" id="alignment4"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <object class="GtkVBox" id="vbox6"> - <property name="visible">True</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkCheckButton" id="checkSuppressImages"> - <property name="label" translatable="yes">Suppress images</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="checkRemoveBackgrounds"> - <property name="label" translatable="yes">Remove backgrounds</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="checkFitPage"> - <property name="label" translatable="yes">Fit page</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="position">2</property> - </packing> - </child> - </object> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label16"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Appearance</b></property> - <property name="use_markup">True</property> - </object> - </child> - </object> - <packing> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkFrame" id="frame5"> + <object class="GtkFrame" id="frame_pdfexport_generation"> <property name="visible">True</property> - <property name="border_width">5</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment5"> + <object class="GtkAlignment" id="alignment19"> <property name="visible">True</property> + <property name="top_padding">6</property> <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkVBox" id="vbox7"> + <object class="GtkVBox" id="vbox14"> <property name="visible">True</property> <property name="orientation">vertical</property> + <property name="spacing">7</property> <child> <object class="GtkCheckButton" id="checkCompressPDF"> - <property name="label" translatable="yes">Compress PDF</property> + <property name="label" translatable="yes">Output is compressed</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> - <property name="use_underline">True</property> <property name="draw_indicator">True</property> </object> <packing> @@ -2294,11 +2195,10 @@ </child> <child> <object class="GtkCheckButton" id="checkPasswordPDF"> - <property name="label" translatable="yes">Set a password for PDF</property> + <property name="label" translatable="yes">Output has a password</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> - <property name="use_underline">True</property> <property name="draw_indicator">True</property> </object> <packing> @@ -2310,55 +2210,31 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label17"> + <object class="GtkLabel" id="label50"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Advanced</b></property> + <property name="label" translatable="yes"><b>Generation</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">3</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox7"> - <property name="visible">True</property> - <property name="border_width">10</property> - <child> - <object class="GtkButton" id="setDefaultExportOptions"> - <property name="label" translatable="yes">Default</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">4</property> + <property name="padding">6</property> + <property name="position">2</property> </packing> </child> </object> <packing> - <property name="position">6</property> + <property name="position">5</property> </packing> </child> <child type="tab"> - <object class="GtkLabel" id="label2"> + <object class="GtkLabel" id="label47"> <property name="visible">True</property> - <property name="label" translatable="yes">Export</property> + <property name="label" translatable="yes">PDF</property> </object> <packing> - <property name="position">6</property> + <property name="position">5</property> <property name="tab_fill">False</property> </packing> </child> @@ -2368,14 +2244,13 @@ </packing> </child> <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area7"> + <object class="GtkHButtonBox" id="dialog-action_area1"> <property name="visible">True</property> <property name="layout_style">edge</property> <child> <object class="GtkButton" id="help"> <property name="label">gtk-help</property> <property name="visible">True</property> - <property name="sensitive">False</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_stock">True</property> @@ -2414,4 +2289,277 @@ <action-widget response="-7">close</action-widget> </action-widgets> </object> + <object class="GtkListStore" id="liststore_search_provider"> + <columns> + <!-- column-name Provider --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">Google</col> + </row> + <row> + <col id="0" translatable="yes">Yahoo!</col> + </row> + <row> + <col id="0" translatable="yes">Microsoft Live</col> + </row> + <row> + <col id="0" translatable="yes">Buisiness.com</col> + </row> + <row> + <col id="0" translatable="yes">Omgili</col> + </row> + <row> + <col id="0" translatable="yes">BBC News</col> + </row> + <row> + <col id="0" translatable="yes">Ubuntu Packages</col> + </row> + <row> + <col id="0" translatable="yes">Creative Commons</col> + </row> + <row> + <col id="0" translatable="yes">Ask</col> + </row> + <row> + <col id="0" translatable="yes">Answers</col> + </row> + <row> + <col id="0" translatable="yes">Dictionary.com</col> + </row> + <row> + <col id="0" translatable="yes">YouTube</col> + </row> + <row> + <col id="0" translatable="yes">AeroMP3</col> + </row> + <row> + <col id="0" translatable="yes">AOL</col> + </row> + <row> + <col id="0" translatable="yes">Baidu</col> + </row> + <row> + <col id="0" translatable="yes">Amazon</col> + </row> + <row> + <col id="0" translatable="yes">Ebay</col> + </row> + <row> + <col id="0" translatable="yes">IMBD</col> + </row> + <row> + <col id="0" translatable="yes">ESPN</col> + </row> + <row> + <col id="0" translatable="yes">Wikipedia</col> + </row> + <row> + <col id="0" translatable="yes">DuckDuckGo</col> + </row> + </data> + </object> + <object class="GtkListStore" id="liststore_tab_position"> + <columns> + <!-- column-name Position --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">Top</col> + </row> + <row> + <col id="0" translatable="yes">Left</col> + </row> + <row> + <col id="0" translatable="yes">Right</col> + </row> + <row> + <col id="0" translatable="yes">Bottom</col> + </row> + </data> + </object> + <object class="GtkListStore" id="liststore_toolbar_buttontype"> + <columns> + <!-- column-name Type --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">Small Icons</col> + </row> + <row> + <col id="0" translatable="yes">Large Icons</col> + </row> + <row> + <col id="0" translatable="yes">Large Icons and Text</col> + </row> + <row> + <col id="0" translatable="yes">Text only</col> + </row> + </data> + </object> + <object class="GtkListStore" id="liststore_image_loading"> + <columns> + <!-- column-name Type --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">foreground and background images</col> + </row> + <row> + <col id="0" translatable="yes">foreground images</col> + </row> + <row> + <col id="0" translatable="yes">background images</col> + </row> + <row> + <col id="0" translatable="yes">no images</col> + </row> + </data> + </object> + <object class="GtkListStore" id="liststore_defaultfont"> + <columns> + <!-- column-name Type --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">Sans-serif</col> + </row> + <row> + <col id="0" translatable="yes">Serif</col> + </row> + <row> + <col id="0" translatable="yes">Monospace</col> + </row> + <row> + <col id="0" translatable="yes">Cursive</col> + </row> + <row> + <col id="0" translatable="yes">Fantasy</col> + </row> + </data> + </object> + <object class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="xpad">3</property> + <property name="stock">gtk-apply</property> + </object> + <object class="GtkListStore" id="liststore_proxy_type"> + <columns> + <!-- column-name Type --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">Direct connection</col> + </row> + <row> + <col id="0" translatable="yes">Manual with no authentication</col> + </row> + <row> + <col id="0" translatable="yes">Manual with basic authentication</col> + </row> + <row> + <col id="0" translatable="yes">Manual with NTLM authentication</col> + </row> + <row> + <col id="0" translatable="yes">System settings</col> + </row> + </data> + </object> + <object class="GtkAdjustment" id="adjustment_animation_time"> + <property name="value">0.10000000000000001</property> + <property name="lower">0.10000000000000001</property> + <property name="upper">10</property> + <property name="step_increment">0.10000000000000001</property> + <property name="page_increment">1</property> + </object> + <object class="GtkAdjustment" id="adjustment_font_default_size"> + <property name="value">16</property> + <property name="lower">1</property> + <property name="upper">100</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment_history_age"> + <property name="value">28</property> + <property name="upper">999</property> + <property name="step_increment">1</property> + <property name="page_increment">28</property> + </object> + <object class="GtkAdjustment" id="adjustment_cache_memory_size"> + <property name="value">16</property> + <property name="upper">2048</property> + <property name="step_increment">4</property> + <property name="page_increment">16</property> + </object> + <object class="GtkAdjustment" id="adjustment_cache_disc_size"> + <property name="value">16</property> + <property name="upper">2048</property> + <property name="step_increment">4</property> + <property name="page_increment">16</property> + </object> + <object class="GtkAdjustment" id="adjustment_disc_cache_age"> + <property name="value">28</property> + <property name="upper">999</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment_proxy_port"> + <property name="value">3128</property> + <property name="lower">1</property> + <property name="upper">65535</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment_fetching_max"> + <property name="value">10</property> + <property name="lower">1</property> + <property name="upper">100</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment_fetching_perhost"> + <property name="value">1</property> + <property name="lower">1</property> + <property name="upper">100</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment_fetching_cached"> + <property name="value">1</property> + <property name="upper">100</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment_pdf_scale"> + <property name="value">100</property> + <property name="lower">1</property> + <property name="upper">1000</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment_pdf_lmargin"> + <property name="upper">999</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkListStore" id="liststore_content_language"> + <columns> + <!-- column-name Code --> + <column type="gchararray"/> + <!-- column-name Description --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">en</col> + <col id="1" translatable="yes">English</col> + </row> + </data> + </object> </interface> diff --git a/gtk/res/options.gtk3.ui b/gtk/res/options.gtk3.ui index b6254a34d..7fb513ef5 100644 --- a/gtk/res/options.gtk3.ui +++ b/gtk/res/options.gtk3.ui @@ -263,7 +263,7 @@ </object> <!-- interface-requires gtk+ 2.6 --> <!-- interface-naming-policy toplevel-contextual --> - <object class="GtkDialog" id="dlgPreferences"> + <object class="GtkDialog" id="dialogPreferences"> <property name="border_width">5</property> <property name="title" translatable="yes">Netsurf Preferences</property> <property name="window_position">center-on-parent</property> diff --git a/javascript/jsapi.c b/javascript/jsapi.c index ef34371d1..7b68fe975 100644 --- a/javascript/jsapi.c +++ b/javascript/jsapi.c @@ -17,14 +17,16 @@ */ #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" - +#include "render/html_internal.h" #include "content/content.h" #include "javascript/content.h" #include "javascript/js.h" #include "utils/log.h" +#include "window.h" +#include "event.h" + static JSRuntime *rt; /* global runtime */ void js_initialise(void) diff --git a/javascript/jsapi/binding.h b/javascript/jsapi/binding.h deleted file mode 100644 index 7b0f61428..000000000 --- a/javascript/jsapi/binding.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright 2012 Vincent Sanders <vince@netsurf-browser.org> - * - * This file is part of NetSurf, http://www.netsurf-browser.org/ - * - * NetSurf is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * NetSurf is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -/** \file - * spidermonkey jsapi class bindings - */ - -#ifndef _NETSURF_JAVASCRIPT_JSAPI_BINDING_H_ -#define _NETSURF_JAVASCRIPT_JSAPI_BINDING_H_ - - -#include "render/html_internal.h" - -JSObject *jsapi_InitClass_Window(JSContext *cx, JSObject *parent); - -/** Create a new javascript window object - * - * @param cx The javascript context. - * @param parent The parent object or NULL for new global - * @param win_priv The private context to set on the object - * @return new javascript object or NULL on error - */ -JSObject *jsapi_new_Window(JSContext *cx, - JSObject *window, - JSObject *parent, - struct browser_window *bw, - html_content *htmlc); - -JSObject *jsapi_InitClass_Location(JSContext *cx, JSObject *parent); -JSObject *jsapi_new_Location(JSContext *cx, - JSObject *window, - JSObject *parent, - nsurl *url, - html_content *htmlc); - - -JSObject *jsapi_InitClass_Document(JSContext *cx, JSObject *parent); - -/** Create a new javascript document object - * - * @param cx The javascript context. - * @param parent The parent object, usually a global window object - * @param doc_priv The private context to set on the object - * @return new javascript object or NULL on error - */ -JSObject *jsapi_new_Document(JSContext *cx, - JSObject *proto, - JSObject *parent, - dom_document *node, - struct html_content *htmlc); - -JSObject *jsapi_InitClass_Console(JSContext *cx, JSObject *parent); -/** Create a new javascript console object - * - * @param cx The javascript context. - * @param parent The parent object, usually a global window object - * @return new javascript object or NULL on error - */ -JSObject *jsapi_new_Console(JSContext *cx, JSObject *prototype, JSObject *parent); - - -JSObject *jsapi_InitClass_Navigator(JSContext *cx, JSObject *parent); -/** Create a new javascript navigator object - * - * @param cx The javascript context. - * @param parent The parent object, usually a global window object - * @return new javascript object or NULL on error - */ -JSObject *jsapi_new_Navigator(JSContext *cx, JSObject *proto, JSObject *parent); - -extern JSClass JSClass_HTMLElement; - -JSObject *jsapi_InitClass_HTMLElement(JSContext *cx, JSObject *parent); -/** Create a new javascript element object - * - * @param cx The javascript context. - * @param parent The parent object, usually a global window object - * @param doc_priv The private context to set on the object - * @return new javascript object or NULL on error - */ -JSObject *jsapi_new_HTMLElement(JSContext *cx, - JSObject *prototype, - JSObject *parent, - dom_element *node, - struct html_content *htmlc); - -JSObject *jsapi_InitClass_HTMLCollection(JSContext *cx, JSObject *parent); -/** Create a new javascript element object - * - * @param cx The javascript context. - * @param parent The parent object, usually a global window object - * @param doc_priv The private context to set on the object - * @return new javascript object or NULL on error - */ -JSObject *jsapi_new_HTMLCollection(JSContext *cx, - JSObject *prototype, - JSObject *parent, - dom_html_collection *collection, - struct html_content *htmlc); - -JSObject *jsapi_InitClass_NodeList(JSContext *cx, JSObject *parent); -/** Create a new javascript element object - * - * @param cx The javascript context. - * @param parent The parent object, usually a global window object - * @param doc_priv The private context to set on the object - * @return new javascript object or NULL on error - */ -JSObject *jsapi_new_NodeList(JSContext *cx, - JSObject *prototype, - JSObject *parent, - dom_nodelist *nodelist, - struct html_content *htmlc); - - -extern JSClass JSClass_Text; - -JSObject *jsapi_InitClass_Text(JSContext *cx, JSObject *parent); -/** Create a new javascript text object - * - * @param cx The javascript context. - * @param parent The parent object, usually a global window object - * @param node The dom node to use in the object - * @return new javascript object or NULL on error - */ -JSObject *jsapi_new_Text(JSContext *cx, - JSObject *prototype, - JSObject *parent, - dom_text *node, - struct html_content *htmlc); - -JSObject *jsapi_InitClass_Node(JSContext *cx, JSObject *parent); -JSObject *jsapi_new_Node(JSContext *cx, - JSObject *prototype, - JSObject *parent); - -extern JSClass JSClass_Event; -JSObject *jsapi_InitClass_Event(JSContext *cx, JSObject *parent); -JSObject *jsapi_new_Event(JSContext *cx, - JSObject *prototype, - JSObject *parent, - dom_event *event); - -#endif diff --git a/javascript/jsapi/console.bnd b/javascript/jsapi/console.bnd index 7c3484529..9b3d21f95 100644 --- a/javascript/jsapi/console.bnd +++ b/javascript/jsapi/console.bnd @@ -19,9 +19,9 @@ preamble %{ #include "utils/config.h" #include "utils/log.h" - #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" + +#include "console.h" %} diff --git a/javascript/jsapi/event.bnd b/javascript/jsapi/event.bnd index cc03c920a..b8b0aff47 100644 --- a/javascript/jsapi/event.bnd +++ b/javascript/jsapi/event.bnd @@ -16,14 +16,15 @@ hdrcomment "Released under the terms of the MIT License,"; hdrcomment " http://www.opensource.org/licenses/mit-license"; preamble %{ +#include <stdlib.h> #include <dom/dom.h> #include "utils/config.h" #include "utils/log.h" - #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" + +#include "event.h" %} diff --git a/javascript/jsapi/htmlcollection.bnd b/javascript/jsapi/htmlcollection.bnd index 5e99e48b8..38e14ed1d 100644 --- a/javascript/jsapi/htmlcollection.bnd +++ b/javascript/jsapi/htmlcollection.bnd @@ -23,9 +23,11 @@ preamble %{ #include "utils/config.h" #include "utils/log.h" - #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" +#include "render/html_internal.h" + +#include "htmlelement.h" +#include "htmlcollection.h" %} diff --git a/javascript/jsapi/htmldocument.bnd b/javascript/jsapi/htmldocument.bnd index c29e470c2..ddf408a9f 100644 --- a/javascript/jsapi/htmldocument.bnd +++ b/javascript/jsapi/htmldocument.bnd @@ -25,12 +25,16 @@ preamble %{ #include "utils/log.h" #include "utils/corestrings.h" #include "utils/libdom.h" - #include "content/urldb.h" - #include "javascript/js.h" #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" +#include "render/html_internal.h" + +#include "htmldocument.h" +#include "htmlelement.h" +#include "text.h" +#include "nodelist.h" +#include "location.h" %} diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index 3ede93bbf..48ebbdb64 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -24,10 +24,13 @@ preamble %{ #include "utils/config.h" #include "utils/log.h" #include "utils/corestrings.h" - #include "javascript/js.h" #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" +#include "render/html_internal.h" + +#include "htmlelement.h" +#include "text.h" +#include "location.h" %} diff --git a/javascript/jsapi/location.bnd b/javascript/jsapi/location.bnd index 32677d1b5..85117a2ce 100644 --- a/javascript/jsapi/location.bnd +++ b/javascript/jsapi/location.bnd @@ -21,9 +21,10 @@ preamble %{ #include "utils/config.h" #include "utils/log.h" - #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" +#include "render/html_internal.h" + +#include "location.h" %} diff --git a/javascript/jsapi/navigator.bnd b/javascript/jsapi/navigator.bnd index e63e9a9fd..d040edec2 100644 --- a/javascript/jsapi/navigator.bnd +++ b/javascript/jsapi/navigator.bnd @@ -24,14 +24,13 @@ preamble %{ #include "desktop/netsurf.h" #include "desktop/options.h" - #include "utils/config.h" #include "utils/useragent.h" #include "utils/log.h" #include "utils/utsname.h" - #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" + +#include "navigator.h" /* * navigator properties for netsurf diff --git a/javascript/jsapi/node.bnd b/javascript/jsapi/node.bnd index bcf0ef7b3..49fd06bc5 100644 --- a/javascript/jsapi/node.bnd +++ b/javascript/jsapi/node.bnd @@ -23,7 +23,8 @@ preamble %{ #include "utils/log.h" #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" + +#include "node.h" %} diff --git a/javascript/jsapi/nodelist.bnd b/javascript/jsapi/nodelist.bnd index b57dc6e05..4aa8c47f5 100644 --- a/javascript/jsapi/nodelist.bnd +++ b/javascript/jsapi/nodelist.bnd @@ -20,9 +20,11 @@ preamble %{ #include "utils/config.h" #include "utils/log.h" - #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" +#include "render/html_internal.h" + +#include "nodelist.h" +#include "htmlelement.h" %} diff --git a/javascript/jsapi/text.bnd b/javascript/jsapi/text.bnd index 42791d081..6b4352116 100644 --- a/javascript/jsapi/text.bnd +++ b/javascript/jsapi/text.bnd @@ -23,9 +23,11 @@ preamble %{ #include "utils/config.h" #include "utils/log.h" - +#include "render/html_internal.h" #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" + +#include "text.h" +#include "htmlelement.h" %} diff --git a/javascript/jsapi/window.bnd b/javascript/jsapi/window.bnd index 6153e90aa..288b5b3d8 100644 --- a/javascript/jsapi/window.bnd +++ b/javascript/jsapi/window.bnd @@ -24,10 +24,20 @@ preamble %{ #include "utils/config.h" #include "utils/log.h" #include "utils/corestrings.h" - +#include "render/html_internal.h" #include "javascript/jsapi.h" -#include "javascript/jsapi/binding.h" +#include "console.h" +#include "navigator.h" +#include "event.h" +#include "node.h" +#include "htmlcollection.h" +#include "nodelist.h" +#include "htmldocument.h" +#include "text.h" +#include "htmlelement.h" +#include "window.h" +#include "location.h" %} diff --git a/monkey/Makefile.target b/monkey/Makefile.target index fa15a50f2..05a32d005 100644 --- a/monkey/Makefile.target +++ b/monkey/Makefile.target @@ -41,7 +41,7 @@ MONKEYCFLAGS := -std=c99 -Dmonkey -Dnsmonkey \ -D_POSIX_C_SOURCE=200112L \ -D_NETBSD_SOURCE \ -DMONKEY_RESPATH=\"$(NETSURF_MONKEY_RESOURCES)\" \ - $(WARNFLAGS) -I. -g \ + $(WARNFLAGS) -g \ $(shell $(PKG_CONFIG) --cflags glib-2.0) \ $(shell $(PKG_CONFIG) --cflags libdom libcurl) \ $(shell $(PKG_CONFIG) --cflags openssl) \ diff --git a/riscos/Makefile.target b/riscos/Makefile.target index e7370e7ee..faefa417f 100644 --- a/riscos/Makefile.target +++ b/riscos/Makefile.target @@ -42,12 +42,10 @@ TPD_RISCOS = $(foreach TPL,$(notdir $(TPL_RISCOS)), \ RESOURCES = $(TPD_RISCOS) split-messages -CFLAGS += -I. $(WARNFLAGS) -Driscos \ - -std=c99 -D_BSD_SOURCE -D_POSIX_C_SOURCE \ - -mpoke-function-name -fno-strict-aliasing +CFLAGS += $(WARNFLAGS) -Driscos -std=c99 -D_BSD_SOURCE -D_POSIX_C_SOURCE \ + -mpoke-function-name -fno-strict-aliasing -CFLAGS += -I$(GCCSDK_INSTALL_ENV)/include \ - -I$(GCCSDK_INSTALL_ENV)/include/libmng +CFLAGS += -I$(GCCSDK_INSTALL_ENV)/include -I$(GCCSDK_INSTALL_ENV)/include/libmng ifeq ($(HOST),riscos) CFLAGS += -I<OSLib$$Dir> -mthrowback endif diff --git a/utils/corestrings.c b/utils/corestrings.c index f970c107b..9fee96d6e 100644 --- a/utils/corestrings.c +++ b/utils/corestrings.c @@ -133,6 +133,7 @@ dom_string *corestring_dom_canplaythrough; dom_string *corestring_dom_cellpadding; dom_string *corestring_dom_cellspacing; dom_string *corestring_dom_change; +dom_string *corestring_dom_charset; dom_string *corestring_dom_click; dom_string *corestring_dom_close; dom_string *corestring_dom_color; @@ -355,6 +356,7 @@ void corestrings_fini(void) CSS_DOM_STRING_UNREF(cellpadding); CSS_DOM_STRING_UNREF(cellspacing); CSS_DOM_STRING_UNREF(change); + CSS_DOM_STRING_UNREF(charset); CSS_DOM_STRING_UNREF(click); CSS_DOM_STRING_UNREF(close); CSS_DOM_STRING_UNREF(color); @@ -608,6 +610,7 @@ nserror corestrings_init(void) CSS_DOM_STRING_INTERN(cellpadding); CSS_DOM_STRING_INTERN(cellspacing); CSS_DOM_STRING_INTERN(change); + CSS_DOM_STRING_INTERN(charset); CSS_DOM_STRING_INTERN(click); CSS_DOM_STRING_INTERN(close); CSS_DOM_STRING_INTERN(color); diff --git a/utils/corestrings.h b/utils/corestrings.h index 61771c178..08d254501 100644 --- a/utils/corestrings.h +++ b/utils/corestrings.h @@ -139,6 +139,7 @@ extern struct dom_string *corestring_dom_canplaythrough; extern struct dom_string *corestring_dom_cellpadding; extern struct dom_string *corestring_dom_cellspacing; extern struct dom_string *corestring_dom_change; +extern struct dom_string *corestring_dom_charset; extern struct dom_string *corestring_dom_click; extern struct dom_string *corestring_dom_close; extern struct dom_string *corestring_dom_color; diff --git a/utils/utf8.c b/utils/utf8.c index 5c27fa7c6..c0f6b106a 100644 --- a/utils/utf8.c +++ b/utils/utf8.c @@ -297,7 +297,7 @@ utf8_convert_ret utf8_convert(const char *string, size_t len, } slen = len ? len : strlen(string); - /* Worst case = ACSII -> UCS4, so allocate an output buffer + /* Worst case = ASCII -> UCS4, so allocate an output buffer * 4 times larger than the input buffer, and add 4 bytes at * the end for the NULL terminator */ @@ -337,3 +337,140 @@ utf8_convert_ret utf8_convert(const char *string, size_t len, return UTF8_CONVERT_OK; } + +static utf8_convert_ret utf8_convert_html_chunk(iconv_t cd, + const char *chunk, size_t inlen, + char **out, size_t *outlen) +{ + size_t ret, esclen; + uint32_t ucs4; + char *pescape, escape[11]; + + while (inlen > 0) { + ret = iconv(cd, (void *) &chunk, &inlen, (void *) out, outlen); + if (ret != (size_t) -1) + break; + + if (errno != EILSEQ) + return UTF8_CONVERT_NOMEM; + + ucs4 = utf8_to_ucs4(chunk, inlen); + esclen = snprintf(escape, sizeof(escape), "&#x%06x;", ucs4); + pescape = escape; + ret = iconv(cd, (void *) &pescape, &esclen, + (void *) out, outlen); + if (ret == (size_t) -1) + return UTF8_CONVERT_NOMEM; + + esclen = utf8_next(chunk, inlen, 0); + chunk += esclen; + inlen -= esclen; + } + + return UTF8_CONVERT_OK; +} + +/** + * Convert a UTF-8 encoded string into a string of the given encoding, + * applying HTML escape sequences where necessary. + * + * \param string String to convert (NUL-terminated) + * \param encname Name of encoding to convert to + * \param len Length, in bytes, of the input string, or 0 + * \param result Pointer to location to receive result + * \return Appropriate utf8_convert_ret value + */ +utf8_convert_ret utf8_to_html(const char *string, const char *encname, + size_t len, char **result) +{ + iconv_t cd; + const char *in; + char *out, *origout; + size_t off, prev_off, inlen, outlen, origoutlen, esclen; + utf8_convert_ret ret; + char *pescape, escape[11]; + + if (len == 0) + len = strlen(string); + + cd = iconv_open(encname, "UTF-8"); + if (cd == (iconv_t) -1) { + if (errno == EINVAL) + return UTF8_CONVERT_BADENC; + /* default to no memory */ + return UTF8_CONVERT_NOMEM; + } + + /* Worst case is ASCII -> UCS4, with all characters escaped: + * "&#xYYYYYY;", thus each input character may become a string + * of 10 UCS4 characters, each 4 bytes in length */ + origoutlen = outlen = len * 10 * 4; + origout = out = malloc(outlen); + if (out == NULL) { + iconv_close(cd); + return UTF8_CONVERT_NOMEM; + } + + /* Process input in chunks between characters we must escape */ + prev_off = off = 0; + while (off < len) { + /* Must escape '&', '<', and '>' */ + if (string[off] == '&' || string[off] == '<' || + string[off] == '>') { + if (off - prev_off > 0) { + /* Emit chunk */ + in = string + prev_off; + inlen = off - prev_off; + ret = utf8_convert_html_chunk(cd, in, inlen, + &out, &outlen); + if (ret != UTF8_CONVERT_OK) { + free(origout); + iconv_close(cd); + return ret; + } + } + + /* Emit mandatory escape */ + esclen = snprintf(escape, sizeof(escape), + "&#x%06x;", string[off]); + pescape = escape; + ret = utf8_convert_html_chunk(cd, pescape, esclen, + &out, &outlen); + if (ret != UTF8_CONVERT_OK) { + free(origout); + iconv_close(cd); + return ret; + } + + prev_off = off = utf8_next(string, len, off); + } else { + off = utf8_next(string, len, off); + } + } + + /* Process final chunk */ + if (prev_off < len) { + in = string + prev_off; + inlen = len - prev_off; + ret = utf8_convert_html_chunk(cd, in, inlen, &out, &outlen); + if (ret != UTF8_CONVERT_OK) { + free(origout); + iconv_close(cd); + return ret; + } + } + + iconv_close(cd); + + /* Shrink-wrap */ + *result = realloc(origout, origoutlen - outlen + 4); + if (*result == NULL) { + free(origout); + return UTF8_CONVERT_NOMEM; + } + memset(*result + (origoutlen - outlen), 0, 4); + + return UTF8_CONVERT_OK; +} + + diff --git a/utils/utf8.h b/utils/utf8.h index 9d8ec74fa..22aee1afa 100644 --- a/utils/utf8.h +++ b/utils/utf8.h @@ -47,6 +47,9 @@ utf8_convert_ret utf8_to_enc(const char *string, const char *encname, utf8_convert_ret utf8_from_enc(const char *string, const char *encname, size_t len, char **result); +utf8_convert_ret utf8_to_html(const char *string, const char *encname, + size_t len, char **result); + /* These two are platform specific */ utf8_convert_ret utf8_to_local_encoding(const char *string, size_t len, char **result); diff --git a/windows/Makefile.target b/windows/Makefile.target index 90f97fbea..33a9492af 100644 --- a/windows/Makefile.target +++ b/windows/Makefile.target @@ -3,48 +3,51 @@ # # This file is part of NetSurf - LDFLAGS += -L${GCCSDK_INSTALL_ENV}/lib - CFLAGS += -I${GCCSDK_INSTALL_ENV}/include/ - - NETSURF_FEATURE_NSSVG_CFLAGS := -DWITH_NS_SVG - NETSURF_FEATURE_ROSPRITE_CFLAGS := -DWITH_NSSPRITE - NETSURF_FEATURE_BMP_CFLAGS := -DWITH_BMP - NETSURF_FEATURE_GIF_CFLAGS := -DWITH_GIF - NETSURF_FEATURE_PNG_CFLAGS := -DWITH_PNG - $(eval $(call feature_enabled,BMP,-DWITH_BMP,-lnsbmp,BMP (libnsbmp))) - $(eval $(call feature_enabled,GIF,-DWITH_GIF,-lnsgif,GIF (libnsgif))) - $(eval $(call feature_enabled,PNG,-DWITH_PNG,-lpng,PNG (libpng) )) - $(eval $(call feature_enabled,NSSVG,-DWITH_NS_SVG,-lsvgtiny,SVG (libsvgtiny))) - $(eval $(call feature_enabled,MNG,,-llcms -ljpeg,PNG/JNG/MNG (libmng))) - - ifneq ($(PKG_CONFIG),) - CFLAGS += $(shell $(PKG_CONFIG) --cflags zlib libcares libcurl libhubbub \ - libparserutils libdom libwapcaplet) - LDFLAGS += $(shell $(PKG_CONFIG) --libs zlib libcurl libcares \ - libhubbub libparserutils libcss libdom libwapcaplet) - else - LDFLAGS += -lhubbub -lcss -lparserutils -lwapcaplet -lcurl -lz - endif - - LDFLAGS += -lssl -lcrypto -lregex -liconv \ +LDFLAGS += -L${GCCSDK_INSTALL_ENV}/lib +CFLAGS += -I${GCCSDK_INSTALL_ENV}/include/ + +NETSURF_FEATURE_NSSVG_CFLAGS := -DWITH_NS_SVG +NETSURF_FEATURE_ROSPRITE_CFLAGS := -DWITH_NSSPRITE +NETSURF_FEATURE_BMP_CFLAGS := -DWITH_BMP +NETSURF_FEATURE_GIF_CFLAGS := -DWITH_GIF +NETSURF_FEATURE_PNG_CFLAGS := -DWITH_PNG + +$(eval $(call feature_enabled,BMP,-DWITH_BMP,-lnsbmp,BMP (libnsbmp))) +$(eval $(call feature_enabled,GIF,-DWITH_GIF,-lnsgif,GIF (libnsgif))) +$(eval $(call feature_enabled,PNG,-DWITH_PNG,-lpng,PNG (libpng) )) +$(eval $(call feature_enabled,NSSVG,-DWITH_NS_SVG,-lsvgtiny,SVG (libsvgtiny))) +$(eval $(call feature_enabled,MNG,,-llcms -ljpeg,PNG/JNG/MNG (libmng))) + +ifneq ($(PKG_CONFIG),) + $(eval $(call pkg_config_find_and_add,zlib,ZLib)) + $(eval $(call pkg_config_find_and_add,libcurl,Curl)) + $(eval $(call pkg_config_find_and_add,libcares,Cares)) + $(eval $(call pkg_config_find_and_add,libwapcaplet,Wapcaplet)) + $(eval $(call pkg_config_find_and_add,libparserutils,Parserutils)) + $(eval $(call pkg_config_find_and_add,libhubbub,Hubbub)) + $(eval $(call pkg_config_find_and_add,libdom,DOM)) + $(eval $(call pkg_config_find_and_add,libcss,CSS)) +else + LDFLAGS += -lhubbub -lcss -lparserutils -lwapcaplet -lcurl -lz +endif + +LDFLAGS += -lssl -lcrypto -lregex -liconv \ -lgdi32 -lcomctl32 -lws2_32 -lmsimg32 -mwindows - CFLAGS += -U__STRICT_ANSI__ -mwin32 - # only windows versions after XP are supported - CFLAGS += '-DWINVER=0x0501' - CFLAGS += '-D_WIN32_WINNT=0x0501' - CFLAGS += '-D_WIN32_WINDOWS=0x0501' - CFLAGS += '-D_WIN32_IE=0x0501' +CFLAGS += -U__STRICT_ANSI__ -mwin32 +# only windows versions after XP are supported +CFLAGS += '-DWINVER=0x0501' +CFLAGS += '-D_WIN32_WINNT=0x0501' +CFLAGS += '-D_WIN32_WINDOWS=0x0501' +CFLAGS += '-D_WIN32_IE=0x0501' - #installed resource path - CFLAGS += '-DNETSURF_WINDOWS_RESPATH="$(NETSURF_WINDOWS_RESPATH)"' +#installed resource path +CFLAGS += '-DNETSURF_WINDOWS_RESPATH="$(NETSURF_WINDOWS_RESPATH)"' +WSCFLAGS := -std=c99 $(WARNFLAGS) -DCURL_STATICLIB -DCARES_STATICLIB -g - WSCFLAGS := -std=c99 \ - $(WARNFLAGS) -I. \ - -DCURL_STATICLIB -DCARES_STATICLIB -g - CFLAGS += $(WSCFLAGS) - LDFLAGS += $(WSCFLAGS) +CFLAGS += $(WSCFLAGS) +LDFLAGS += $(WSCFLAGS) # ---------------------------------------------------------------------------- # built-in resource setup |