summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'gtk')
-rw-r--r--gtk/completion.c3
-rw-r--r--gtk/dialogs/options.c533
-rw-r--r--gtk/dialogs/source.c3
-rw-r--r--gtk/download.c18
-rw-r--r--gtk/font_pango.c10
-rw-r--r--gtk/gui.c64
-rw-r--r--gtk/hotlist.c5
-rw-r--r--gtk/options.h113
-rw-r--r--gtk/plotters.c1
-rw-r--r--gtk/print.c1
-rw-r--r--gtk/scaffolding.c83
-rw-r--r--gtk/system_colour.c56
-rw-r--r--gtk/tabs.c8
-rw-r--r--gtk/theme.c6
-rw-r--r--gtk/window.c15
15 files changed, 523 insertions, 396 deletions
diff --git a/gtk/completion.c b/gtk/completion.c
index 80a4693e4..8782c876e 100644
--- a/gtk/completion.c
+++ b/gtk/completion.c
@@ -70,6 +70,7 @@ bool nsgtk_completion_udb_callback(const char *url, const struct url_data *data)
void nsgtk_completion_update(const char *prefix)
{
nsgtk_completion_empty();
- if (option_url_suggestion == true)
+ if (nsoption_bool(url_suggestion) == true) {
urldb_iterate_partial(prefix, nsgtk_completion_udb_callback);
+ }
}
diff --git a/gtk/dialogs/options.c b/gtk/dialogs/options.c
index 32eb62567..62cf9061f 100644
--- a/gtk/dialogs/options.c
+++ b/gtk/dialogs/options.c
@@ -32,7 +32,6 @@
#include "desktop/searchweb.h"
#include "gtk/compat.h"
-#include "gtk/options.h"
#include "gtk/gui.h"
#include "gtk/scaffolding.h"
#include "gtk/theme.h"
@@ -48,7 +47,6 @@ static GladeXML *gladeFile;
static struct browser_window *current_browser;
static int proxy_type;
-static float animation_delay;
static void dialog_response_handler (GtkDialog *dlg, gint res_id);
static gboolean on_dialog_close (GtkDialog *dlg, gboolean stay_alive);
@@ -294,14 +292,42 @@ GtkDialog* nsgtk_options_init(struct browser_window *bw, GtkWindow *parent)
void nsgtk_options_load(void)
{
GtkBox *box;
- const char *default_accept_language =
- option_accept_language ? option_accept_language : "en";
+ 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;
int active_language = 0;
int proxytype = 0;
FILE *fp;
char buf[50];
+ /* get widget text */
+ if (nsoption_charp(accept_language) != NULL) {
+ default_accept_language = nsoption_charp(accept_language);
+ }
+
+ if (nsoption_charp(homepage_url) != NULL) {
+ default_homepage_url = nsoption_charp(homepage_url);
+ }
+
+ if (nsoption_charp(http_proxy_host) != NULL) {
+ default_http_proxy_host = nsoption_charp(http_proxy_host);
+ }
+
+ if (nsoption_charp(http_proxy_auth_user) != NULL) {
+ default_http_proxy_auth_user = nsoption_charp(http_proxy_auth_user);
+ }
+
+ if (nsoption_charp(http_proxy_auth_pass) != NULL) {
+ default_http_proxy_auth_pass = nsoption_charp(http_proxy_auth_pass);
+ }
+
+ if (nsoption_bool(http_proxy) == true) {
+ proxytype = nsoption_int(http_proxy_auth) + 1;
+ }
+
/* Create combobox */
box = GTK_BOX(glade_xml_get_widget(gladeFile, "combolanguagevbox"));
comboLanguage = nsgtk_combo_box_text_new();
@@ -343,91 +369,85 @@ void nsgtk_options_load(void)
nsgtk_options_theme_combo();
- SET_ENTRY(entryHomePageURL,
- option_homepage_url ? option_homepage_url : "");
+ SET_ENTRY(entryHomePageURL, default_homepage_url);
SET_BUTTON(setCurrentPage);
SET_BUTTON(setDefaultPage);
- SET_CHECK(checkHideAdverts, option_block_ads);
+ SET_CHECK(checkHideAdverts, nsoption_bool(block_ads));
- SET_CHECK(checkDisablePopups, option_disable_popups);
- SET_CHECK(checkDisablePlugins, option_disable_plugins);
- SET_SPIN(spinHistoryAge, option_history_age);
- SET_CHECK(checkHoverURLs, option_hover_urls);
+ SET_CHECK(checkDisablePopups, nsoption_bool(disable_popups));
+ SET_CHECK(checkDisablePlugins, nsoption_bool(disable_plugins));
+ SET_SPIN(spinHistoryAge, nsoption_int(history_age));
+ SET_CHECK(checkHoverURLs, nsoption_bool(hover_urls));
- SET_CHECK(checkDisplayRecentURLs, option_url_suggestion);
- SET_CHECK(checkSendReferer, option_send_referer);
- SET_CHECK(checkShowSingleTab, option_show_single_tab);
+ SET_CHECK(checkDisplayRecentURLs, nsoption_bool(url_suggestion));
+ SET_CHECK(checkSendReferer, nsoption_bool(send_referer));
+ SET_CHECK(checkShowSingleTab, nsoption_bool(show_single_tab));
- if (option_http_proxy == false)
- proxytype = 0;
- else
- proxytype = option_http_proxy_auth + 1;
-
SET_COMBO(comboProxyType, proxytype);
- SET_ENTRY(entryProxyHost,
- option_http_proxy_host ? option_http_proxy_host : "");
+ SET_ENTRY(entryProxyHost, default_http_proxy_host);
+
gtk_widget_set_sensitive(entryProxyHost, proxytype != 0);
- snprintf(buf, sizeof(buf), "%d", option_http_proxy_port);
+ snprintf(buf, sizeof(buf), "%d", nsoption_int(http_proxy_port));
SET_ENTRY(entryProxyPort, buf);
gtk_widget_set_sensitive(entryProxyPort, proxytype != 0);
- SET_ENTRY(entryProxyUser, option_http_proxy_auth_user ?
- option_http_proxy_auth_user : "");
+ SET_ENTRY(entryProxyUser, default_http_proxy_auth_user);
+
gtk_widget_set_sensitive(entryProxyUser, proxytype != 0);
- SET_ENTRY(entryProxyPassword, option_http_proxy_auth_pass ?
- option_http_proxy_auth_pass : "");
+ SET_ENTRY(entryProxyPassword, default_http_proxy_auth_pass);
+
gtk_widget_set_sensitive(entryProxyPassword, proxytype != 0);
- SET_SPIN(spinMaxFetchers, option_max_fetchers);
- SET_SPIN(spinFetchesPerHost, option_max_fetchers_per_host);
- SET_SPIN(spinCachedConnections, option_max_cached_fetch_handles);
-
- SET_CHECK(checkResampleImages, option_render_resample);
- SET_SPIN(spinAnimationSpeed, option_minimum_gif_delay / 100.0);
- SET_CHECK(checkDisableAnimations, !option_animate_images);
-
- SET_FONT(fontSansSerif, option_font_sans);
- SET_FONT(fontSerif, option_font_serif);
- SET_FONT(fontMonospace, option_font_mono);
- SET_FONT(fontCursive, option_font_cursive);
- SET_FONT(fontFantasy, option_font_fantasy);
- SET_COMBO(comboDefault, option_font_default);
- SET_SPIN(spinDefaultSize, option_font_size / 10);
- SET_SPIN(spinMinimumSize, option_font_min_size / 10);
+ 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(checkResampleImages, nsoption_bool(render_resample));
+ SET_SPIN(spinAnimationSpeed, nsoption_int(minimum_gif_delay) / 100.0);
+ SET_CHECK(checkDisableAnimations, !nsoption_bool(animate_images));
+
+ 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_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, option_button_type -1);
+ SET_COMBO(comboButtonType, nsoption_int(button_type) -1);
- SET_COMBO(comboTabPosition, option_position_tab);
+ SET_COMBO(comboTabPosition, nsoption_int(position_tab));
- SET_SPIN(spinMemoryCacheSize, option_memory_cache_size >> 20);
- SET_SPIN(spinDiscCacheAge, option_disc_cache_age);
+ SET_SPIN(spinMemoryCacheSize, nsoption_int(memory_cache_size) >> 20);
+ SET_SPIN(spinDiscCacheAge, nsoption_int(disc_cache_age));
- SET_CHECK(checkClearDownloads, option_downloads_clear);
- SET_CHECK(checkRequestOverwrite, option_request_overwrite);
- SET_FILE_CHOOSER(fileChooserDownloads, option_downloads_directory);
+ SET_CHECK(checkClearDownloads, nsoption_bool(downloads_clear));
+ SET_CHECK(checkRequestOverwrite, nsoption_bool(request_overwrite));
+ SET_FILE_CHOOSER(fileChooserDownloads, nsoption_charp(downloads_directory));
- SET_CHECK(checkFocusNew, option_focus_new);
- SET_CHECK(checkNewBlank, option_new_blank);
- SET_CHECK(checkUrlSearch, option_search_url_bar);
- SET_COMBO(comboSearch, option_search_provider);
+ SET_CHECK(checkFocusNew, nsoption_bool(focus_new));
+ SET_CHECK(checkNewBlank, nsoption_bool(new_blank));
+ SET_CHECK(checkUrlSearch, nsoption_bool(search_url_bar));
+ SET_COMBO(comboSearch, nsoption_int(search_provider));
SET_BUTTON(buttonaddtheme);
- SET_CHECK(sourceButtonTab, option_source_tab);
+ SET_CHECK(sourceButtonTab, nsoption_bool(source_tab));
- SET_SPIN(spinMarginTop, option_margin_top);
- SET_SPIN(spinMarginBottom, option_margin_bottom);
- SET_SPIN(spinMarginLeft, option_margin_left);
- SET_SPIN(spinMarginRight, option_margin_right);
- SET_SPIN(spinExportScale, option_export_scale);
- SET_CHECK(checkSuppressImages, option_suppress_images);
- SET_CHECK(checkRemoveBackgrounds, option_remove_backgrounds);
- SET_CHECK(checkFitPage, option_enable_loosening);
- SET_CHECK(checkCompressPDF, option_enable_PDF_compression);
- SET_CHECK(checkPasswordPDF, option_enable_PDF_password);
+ SET_SPIN(spinMarginTop, nsoption_int(margin_top));
+ SET_SPIN(spinMarginBottom, nsoption_int(margin_bottom));
+ SET_SPIN(spinMarginLeft, nsoption_int(margin_left));
+ SET_SPIN(spinMarginRight, nsoption_int(margin_right));
+ SET_SPIN(spinExportScale, nsoption_int(export_scale));
+ SET_CHECK(checkSuppressImages, nsoption_bool(suppress_images));
+ SET_CHECK(checkRemoveBackgrounds, nsoption_bool(remove_backgrounds));
+ 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);
}
@@ -446,7 +466,7 @@ static void dialog_response_handler (GtkDialog *dlg, gint res_id)
static gboolean on_dialog_close (GtkDialog *dlg, gboolean stay_alive)
{
LOG(("Writing options to file"));
- options_write(options_file_location);
+ nsoption_write(options_file_location);
if ((stay_alive) && GTK_IS_WIDGET(dlg))
gtk_widget_hide(GTK_WIDGET(dlg));
else {
@@ -487,7 +507,7 @@ static void nsgtk_options_theme_combo(void) {
}
fclose(fp);
gtk_combo_box_set_active(GTK_COMBO_BOX(combotheme),
- option_current_theme);
+ nsoption_int(current_theme));
gtk_box_pack_start(box, combotheme, FALSE, TRUE, 0);
gtk_widget_show(combotheme);
}
@@ -505,54 +525,47 @@ bool nsgtk_options_combo_theme_add(const char *themename)
* nsgtk_reflow_all_windows only where necessary */
#define ENTRY_CHANGED(widget, option) \
- static gboolean on_##widget##_changed(GtkWidget *widget, gpointer data) { \
- if (!g_str_equal(gtk_entry_get_text(GTK_ENTRY((widget))), (option) ? (option) : "")) { \
+static gboolean on_##widget##_changed(GtkWidget *widget, gpointer data) \
+{ \
+ if (!g_str_equal(gtk_entry_get_text(GTK_ENTRY((widget))), \
+ nsoption_charp(option) ? nsoption_charp(option) : "")) { \
LOG(("Signal emitted on '%s'", #widget)); \
- if ((option)) \
- free((option)); \
- (option) = strdup(gtk_entry_get_text(GTK_ENTRY((widget)))); \
- } \
- do { \
+ nsoption_set_charp(option, strdup(gtk_entry_get_text(GTK_ENTRY((widget))))); \
+ } \
+ return FALSE; \
+}
#define CHECK_CHANGED(widget, option) \
static gboolean on_##widget##_changed(GtkWidget *widget, gpointer data) { \
LOG(("Signal emitted on '%s'", #widget)); \
- (option) = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON((widget))); \
- do { \
+ nsoption_set_bool(option, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON((widget)))); \
+ do
#define SPIN_CHANGED(widget, option) \
static gboolean on_##widget##_changed(GtkWidget *widget, gpointer data) { \
LOG(("Signal emitted on '%s'", #widget)); \
- (option) = gtk_spin_button_get_value(GTK_SPIN_BUTTON((widget))); \
- do { \
+ nsoption_set_int(option, gtk_spin_button_get_value(GTK_SPIN_BUTTON((widget)))); \
+ do
#define COMBO_CHANGED(widget, option) \
static gboolean on_##widget##_changed(GtkWidget *widget, gpointer data) { \
LOG(("Signal emitted on '%s'", #widget)); \
- (option) = gtk_combo_box_get_active(GTK_COMBO_BOX((widget))); \
- do {
+ nsoption_set_int(option, gtk_combo_box_get_active(GTK_COMBO_BOX((widget)))); \
+ do
#define FONT_CHANGED(widget, option) \
static gboolean on_##widget##_changed(GtkWidget *widget, gpointer data) { \
LOG(("Signal emitted on '%s'", #widget)); \
- if ((option)) \
- free((option)); \
- (option) = strdup(gtk_font_button_get_font_name(GTK_FONT_BUTTON((widget)))); \
- do {
-
-#define FILE_CHOOSER_CHANGED(widget, option) \
- static gboolean on_##widget##_changed(GtkWidget *widget, gpointer data) { \
- LOG(("Signal emitted on '%s'", #widget)); \
- (option) = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER((widget))); \
- do {
+ nsoption_set_charp(option, strdup(gtk_font_button_get_font_name(GTK_FONT_BUTTON((widget))))); \
+ do
#define BUTTON_CLICKED(widget) \
static gboolean on_##widget##_changed(GtkWidget *widget, gpointer data) { \
LOG(("Signal emitted on '%s'", #widget)); \
- do {
+ do
#define END_HANDLER \
- } while (0); \
+ while (0); \
return FALSE; \
}
@@ -564,79 +577,84 @@ static gboolean on_comboLanguage_changed(GtkWidget *widget, gpointer data)
if (lang == NULL)
return FALSE;
- if (option_accept_language != NULL) {
- free(option_accept_language);
- }
-
- option_accept_language = lang;
+ nsoption_set_charp(accept_language, lang);
g_free(lang);
return FALSE;
}
-ENTRY_CHANGED(entryHomePageURL, option_homepage_url)
-END_HANDLER
+ENTRY_CHANGED(entryHomePageURL, homepage_url)
BUTTON_CLICKED(setCurrentPage)
- const gchar *url = nsurl_access(hlcache_handle_get_url(
- current_browser->current_content));
+{
+ const gchar *url;
+ url = nsurl_access(hlcache_handle_get_url(current_browser->current_content));
gtk_entry_set_text(GTK_ENTRY(entryHomePageURL), url);
- option_homepage_url =
- strdup(gtk_entry_get_text(GTK_ENTRY(entryHomePageURL)));
+ nsoption_set_charp(homepage_url,
+ strdup(gtk_entry_get_text(GTK_ENTRY(entryHomePageURL))));
+}
END_HANDLER
BUTTON_CLICKED(setDefaultPage)
- gtk_entry_set_text(GTK_ENTRY(entryHomePageURL),
- "http://www.netsurf-browser.org/welcome/");
- option_homepage_url =
- strdup(gtk_entry_get_text(GTK_ENTRY(entryHomePageURL)));
+{
+ gtk_entry_set_text(GTK_ENTRY(entryHomePageURL), NETSURF_HOMEPAGE);
+ nsoption_set_charp(homepage_url,
+ strdup(gtk_entry_get_text(GTK_ENTRY(entryHomePageURL))));
+}
END_HANDLER
-CHECK_CHANGED(checkHideAdverts, option_block_ads)
+CHECK_CHANGED(checkHideAdverts, block_ads)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkDisplayRecentURLs, option_url_suggestion)
+CHECK_CHANGED(checkDisplayRecentURLs, url_suggestion)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkSendReferer, option_send_referer)
+CHECK_CHANGED(checkSendReferer, send_referer)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkShowSingleTab, option_show_single_tab)
+CHECK_CHANGED(checkShowSingleTab, show_single_tab)
+{
nsgtk_reflow_all_windows();
+}
END_HANDLER
-COMBO_CHANGED(comboProxyType, proxy_type)
- LOG(("proxy type: %d", proxy_type));
- switch (proxy_type)
- {
+COMBO_CHANGED(comboProxyType, http_proxy_auth)
+{
+ LOG(("proxy auth: %d", nsoption_int(http_proxy_auth)));
+ switch (nsoption_int(http_proxy_auth)) {
case 0:
- option_http_proxy = false;
- option_http_proxy_auth = OPTION_HTTP_PROXY_AUTH_NONE;
+ nsoption_set_bool(http_proxy, false);
+ nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_NONE);
break;
case 1:
- option_http_proxy = true;
- option_http_proxy_auth = OPTION_HTTP_PROXY_AUTH_NONE;
+ nsoption_set_bool(http_proxy, true);
+ nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_NONE);
break;
case 2:
- option_http_proxy = true;
- option_http_proxy_auth = OPTION_HTTP_PROXY_AUTH_BASIC;
+ nsoption_set_bool(http_proxy, true);
+ nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_BASIC);
break;
case 3:
- option_http_proxy = true;
- option_http_proxy_auth = OPTION_HTTP_PROXY_AUTH_NTLM;
+ nsoption_set_bool(http_proxy, true);
+ nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_NTLM);
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);
-
+ 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, option_http_proxy_host)
-END_HANDLER
+ENTRY_CHANGED(entryProxyHost, http_proxy_host)
gboolean on_entryProxyPort_changed(GtkWidget *widget, gpointer data)
{
@@ -645,92 +663,132 @@ gboolean on_entryProxyPort_changed(GtkWidget *widget, gpointer data)
errno = 0;
port = strtol((char *)gtk_entry_get_text(GTK_ENTRY(entryProxyPort)),
NULL, 10) & 0xffff;
- if (port != 0 && errno == 0) {
- option_http_proxy_port = port;
+ if ((port != 0) && (errno == 0)) {
+ nsoption_set_int(http_proxy_port, port);
} else {
char buf[32];
- snprintf(buf, sizeof(buf), "%d", option_http_proxy_port);
+ snprintf(buf, sizeof(buf), "%d", nsoption_int(http_proxy_port));
SET_ENTRY(entryProxyPort, buf);
}
return FALSE;
}
-ENTRY_CHANGED(entryProxyUser, option_http_proxy_auth_user)
-END_HANDLER
+ENTRY_CHANGED(entryProxyUser, http_proxy_auth_user)
-ENTRY_CHANGED(entryProxyPassword, option_http_proxy_auth_pass)
-END_HANDLER
+ENTRY_CHANGED(entryProxyPassword, http_proxy_auth_pass)
-SPIN_CHANGED(spinMaxFetchers, option_max_fetchers)
+SPIN_CHANGED(spinMaxFetchers, max_fetchers)
+{
+}
END_HANDLER
-SPIN_CHANGED(spinFetchesPerHost, option_max_fetchers_per_host)
+SPIN_CHANGED(spinFetchesPerHost, max_fetchers_per_host)
+{
+}
END_HANDLER
-SPIN_CHANGED(spinCachedConnections, option_max_cached_fetch_handles)
+SPIN_CHANGED(spinCachedConnections, max_cached_fetch_handles)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkResampleImages, option_render_resample)
+CHECK_CHANGED(checkResampleImages, render_resample)
+{
+}
END_HANDLER
-SPIN_CHANGED(spinAnimationSpeed, animation_delay)
- option_minimum_gif_delay = round(animation_delay * 100.0);
-END_HANDLER
+static gboolean on_spinAnimationSpeed_changed(GtkWidget *widget, gpointer data)
+{
+ LOG(("Signal emitted on '%s'", "spinAnimationSpeed"));
+ nsoption_set_int(minimum_gif_delay,
+ round(gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget)) * 100.0));
+ return FALSE;
+}
-CHECK_CHANGED(checkDisableAnimations, option_animate_images);
- option_animate_images = !option_animate_images;
+CHECK_CHANGED(checkDisableAnimations, animate_images)
+{
+ nsoption_set_bool(animate_images, !nsoption_bool(animate_images));
+}
END_HANDLER
-CHECK_CHANGED(checkDisablePopups, option_disable_popups)
+CHECK_CHANGED(checkDisablePopups, disable_popups)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkDisablePlugins, option_disable_plugins)
+CHECK_CHANGED(checkDisablePlugins, disable_plugins)
+{
+}
END_HANDLER
-SPIN_CHANGED(spinHistoryAge, option_history_age)
+SPIN_CHANGED(spinHistoryAge, history_age)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkHoverURLs, option_hover_urls)
+CHECK_CHANGED(checkHoverURLs, hover_urls)
+{
+}
END_HANDLER
-FONT_CHANGED(fontSansSerif, option_font_sans)
+FONT_CHANGED(fontSansSerif, font_sans)
+{
+}
END_HANDLER
-FONT_CHANGED(fontSerif, option_font_serif)
+FONT_CHANGED(fontSerif, font_serif)
+{
+}
END_HANDLER
-FONT_CHANGED(fontMonospace, option_font_mono)
+FONT_CHANGED(fontMonospace, font_mono)
+{
+}
END_HANDLER
-FONT_CHANGED(fontCursive, option_font_cursive)
+FONT_CHANGED(fontCursive, font_cursive)
+{
+}
END_HANDLER
-FONT_CHANGED(fontFantasy, option_font_fantasy)
+FONT_CHANGED(fontFantasy, font_fantasy)
+{
+}
END_HANDLER
-COMBO_CHANGED(comboDefault, option_font_default)
+COMBO_CHANGED(comboDefault, font_default)
+{
+}
END_HANDLER
-SPIN_CHANGED(spinDefaultSize, option_font_size)
- option_font_size *= 10;
+SPIN_CHANGED(spinDefaultSize, font_size)
+{
+ nsoption_set_int(font_size, nsoption_int(font_size) * 10);
+}
END_HANDLER
-SPIN_CHANGED(spinMinimumSize, option_font_min_size)
- option_font_min_size *= 10;
+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();
+}
END_HANDLER
-COMBO_CHANGED(comboButtonType, option_button_type)
+COMBO_CHANGED(comboButtonType, button_type)
+{
nsgtk_scaffolding *current = scaf_list;
- option_button_type++;
+ nsoption_set_int(button_type, nsoption_int(button_type) + 1);
+
/* value of 0 is reserved for 'unset' */
while (current) {
nsgtk_scaffolding_reset_offset(current);
- switch(option_button_type) {
+ switch(nsoption_int(button_type)) {
case 1:
gtk_toolbar_set_style(
GTK_TOOLBAR(nsgtk_scaffolding_toolbar(current)),
@@ -764,11 +822,14 @@ COMBO_CHANGED(comboButtonType, option_button_type)
}
current = nsgtk_scaffolding_iterate(current);
}
+}
END_HANDLER
-COMBO_CHANGED(comboTabPosition, option_position_tab)
+COMBO_CHANGED(comboTabPosition, position_tab)
+{
nsgtk_scaffolding *current = scaf_list;
- option_button_type++;
+ nsoption_set_int(button_type, nsoption_int(button_type) + 1);
+
/* value of 0 is reserved for 'unset' */
while (current) {
nsgtk_scaffolding_reset_offset(current);
@@ -777,43 +838,67 @@ COMBO_CHANGED(comboTabPosition, option_position_tab)
current = nsgtk_scaffolding_iterate(current);
}
+}
END_HANDLER
-SPIN_CHANGED(spinMemoryCacheSize, option_memory_cache_size)
- option_memory_cache_size <<= 20;
+SPIN_CHANGED(spinMemoryCacheSize, memory_cache_size)
+{
+ nsoption_set_int(memory_cache_size, nsoption_int(memory_cache_size) << 20);
+}
END_HANDLER
-SPIN_CHANGED(spinDiscCacheAge, option_disc_cache_age)
+SPIN_CHANGED(spinDiscCacheAge, disc_cache_age)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkClearDownloads, option_downloads_clear)
+CHECK_CHANGED(checkClearDownloads, downloads_clear)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkRequestOverwrite, option_request_overwrite)
+CHECK_CHANGED(checkRequestOverwrite, request_overwrite)
+{
+}
END_HANDLER
-FILE_CHOOSER_CHANGED(fileChooserDownloads, option_downloads_directory)
-END_HANDLER
+static gboolean on_fileChooserDownloads_changed(GtkWidget *widget, gpointer data)
+{
+ LOG(("Signal emitted on '%s'", "fileChooserDownloads"));
+ nsoption_set_charp(downloads_directory, gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER((widget))));
+ return FALSE;
+}
-CHECK_CHANGED(checkFocusNew, option_focus_new)
+CHECK_CHANGED(checkFocusNew, focus_new)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkNewBlank, option_new_blank)
+CHECK_CHANGED(checkNewBlank, new_blank)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkUrlSearch, option_search_url_bar)
+CHECK_CHANGED(checkUrlSearch, search_url_bar)
+{
+}
END_HANDLER
-COMBO_CHANGED(comboSearch, option_search_provider)
+COMBO_CHANGED(comboSearch, search_provider)
+{
nsgtk_scaffolding *current = scaf_list;
char *name;
+
/* refresh web search prefs from file */
- search_web_provider_details(option_search_provider);
+ search_web_provider_details(nsoption_charp(search_provider));
+
/* retrieve ico */
search_web_retrieve_ico(false);
+
/* callback may handle changing gui */
if (search_web_ico() != NULL)
gui_window_set_search_ico(search_web_ico());
+
/* set entry */
name = search_web_provider_name();
if (name == NULL) {
@@ -827,12 +912,14 @@ COMBO_CHANGED(comboSearch, option_search_provider)
nsgtk_scaffolding_set_websearch(current, content);
current = nsgtk_scaffolding_iterate(current);
}
+}
END_HANDLER
-COMBO_CHANGED(combotheme, option_current_theme)
+COMBO_CHANGED(combotheme, current_theme)
+{
nsgtk_scaffolding *current = scaf_list;
char *name;
- if (option_current_theme != 0) {
+ if (nsoption_int(current_theme) != 0) {
if (nsgtk_theme_name() != NULL)
free(nsgtk_theme_name());
name = nsgtk_combo_box_text_get_active_text(combotheme);
@@ -850,9 +937,11 @@ COMBO_CHANGED(combotheme, option_current_theme)
nsgtk_theme_implement(current);
current = nsgtk_scaffolding_iterate(current);
}
+}
END_HANDLER
BUTTON_CLICKED(buttonaddtheme)
+{
char *filename, *directory;
size_t len;
GtkWidget *fc = gtk_file_chooser_dialog_new(
@@ -903,62 +992,86 @@ BUTTON_CLICKED(buttonaddtheme)
if (filename != NULL)
free(filename);
}
-
+}
END_HANDLER
-CHECK_CHANGED(sourceButtonTab, option_source_tab)
+CHECK_CHANGED(sourceButtonTab, source_tab)
+{
+}
END_HANDLER
-SPIN_CHANGED(spinMarginTop, option_margin_top)
+SPIN_CHANGED(spinMarginTop, margin_top)
+{
+}
END_HANDLER
-SPIN_CHANGED(spinMarginBottom, option_margin_bottom)
+SPIN_CHANGED(spinMarginBottom, margin_bottom)
+{
+}
END_HANDLER
-SPIN_CHANGED(spinMarginLeft, option_margin_left)
+SPIN_CHANGED(spinMarginLeft, margin_left)
+{
+}
END_HANDLER
-SPIN_CHANGED(spinMarginRight, option_margin_right)
+SPIN_CHANGED(spinMarginRight, margin_right)
+{
+}
END_HANDLER
-SPIN_CHANGED(spinExportScale, option_export_scale)
+SPIN_CHANGED(spinExportScale, export_scale)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkSuppressImages, option_suppress_images)
+CHECK_CHANGED(checkSuppressImages, suppress_images)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkRemoveBackgrounds, option_remove_backgrounds)
+CHECK_CHANGED(checkRemoveBackgrounds, remove_backgrounds)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkFitPage, option_enable_loosening)
+CHECK_CHANGED(checkFitPage, enable_loosening)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkCompressPDF, option_enable_PDF_compression)
+CHECK_CHANGED(checkCompressPDF, enable_PDF_compression)
+{
+}
END_HANDLER
-CHECK_CHANGED(checkPasswordPDF, option_enable_PDF_password)
+CHECK_CHANGED(checkPasswordPDF, enable_PDF_password)
+{
+}
END_HANDLER
BUTTON_CLICKED(setDefaultExportOptions)
- option_margin_top = DEFAULT_MARGIN_TOP_MM;
- option_margin_bottom = DEFAULT_MARGIN_BOTTOM_MM;
- option_margin_left = DEFAULT_MARGIN_LEFT_MM;
- option_margin_right = DEFAULT_MARGIN_RIGHT_MM;
- option_export_scale = DEFAULT_EXPORT_SCALE * 100;
- option_suppress_images = false;
- option_remove_backgrounds = false;
- option_enable_loosening = true;
- option_enable_PDF_compression = true;
- option_enable_PDF_password = false;
+{
+ nsoption_set_int(margin_top, DEFAULT_MARGIN_TOP_MM);
+ nsoption_set_int(margin_bottom, DEFAULT_MARGIN_BOTTOM_MM);
+ nsoption_set_int(margin_left, DEFAULT_MARGIN_LEFT_MM);
+ nsoption_set_int(margin_right, DEFAULT_MARGIN_RIGHT_MM);
+ nsoption_set_int(export_scale, DEFAULT_EXPORT_SCALE * 100);
+ nsoption_set_bool(suppress_images, false);
+ nsoption_set_bool(remove_backgrounds, false);
+ nsoption_set_bool(enable_loosening, true);
+ nsoption_set_bool(enable_PDF_compression, true);
+ nsoption_set_bool(enable_PDF_password, false);
- SET_SPIN(spinMarginTop, option_margin_top);
- SET_SPIN(spinMarginBottom, option_margin_bottom);
- SET_SPIN(spinMarginLeft, option_margin_left);
- SET_SPIN(spinMarginRight, option_margin_right);
- SET_SPIN(spinExportScale, option_export_scale);
- SET_CHECK(checkSuppressImages, option_suppress_images);
- SET_CHECK(checkRemoveBackgrounds, option_remove_backgrounds);
- SET_CHECK(checkCompressPDF, option_enable_PDF_compression);
- SET_CHECK(checkPasswordPDF, option_enable_PDF_password);
- SET_CHECK(checkFitPage, option_enable_loosening);
+ SET_SPIN(spinMarginTop, nsoption_int(margin_top));
+ SET_SPIN(spinMarginBottom, nsoption_int(margin_bottom));
+ SET_SPIN(spinMarginLeft, nsoption_int(margin_left));
+ SET_SPIN(spinMarginRight, nsoption_int(margin_right));
+ SET_SPIN(spinExportScale, nsoption_int(export_scale));
+ SET_CHECK(checkSuppressImages, nsoption_bool(suppress_images));
+ SET_CHECK(checkRemoveBackgrounds, nsoption_bool(remove_backgrounds));
+ SET_CHECK(checkCompressPDF, nsoption_bool(enable_PDF_compression));
+ SET_CHECK(checkPasswordPDF, nsoption_bool(enable_PDF_password));
+ SET_CHECK(checkFitPage, nsoption_bool(enable_loosening));
+}
END_HANDLER
diff --git a/gtk/dialogs/source.c b/gtk/dialogs/source.c
index d4bf429c1..5fbd9bcd5 100644
--- a/gtk/dialogs/source.c
+++ b/gtk/dialogs/source.c
@@ -29,7 +29,6 @@
#include "gtk/gui.h"
#include "gtk/print.h"
#include "gtk/selection.h"
-#include "gtk/options.h"
#include "desktop/netsurf.h"
#include "desktop/print.h"
#include "desktop/options.h"
@@ -111,7 +110,7 @@ void nsgtk_source_dialog_init(GtkWindow *parent, struct browser_window *bw)
if (content_get_type(bw->current_content) != CONTENT_HTML)
return;
- if (option_source_tab) {
+ if (nsoption_bool(source_tab)) {
nsgtk_source_tab_init(parent, bw);
return;
}
diff --git a/gtk/download.c b/gtk/download.c
index 2a054791e..5e22352b4 100644
--- a/gtk/download.c
+++ b/gtk/download.c
@@ -30,7 +30,7 @@
#include "desktop/gui.h"
#include "gtk/gui.h"
#include "gtk/scaffolding.h"
-#include "gtk/options.h"
+#include "desktop/options.h"
#include "gtk/download.h"
#include "gtk/window.h"
#include "gtk/compat.h"
@@ -373,7 +373,7 @@ void gui_download_window_done(struct gui_download_window *dw)
nsgtk_download_change_sensitivity(dw, NSGTK_DOWNLOAD_CLEAR);
nsgtk_download_change_status(dw, NSGTK_DOWNLOAD_COMPLETE);
- if (option_downloads_clear)
+ if (nsoption_bool(downloads_clear))
nsgtk_download_store_clear_item(dw);
else
nsgtk_download_update(TRUE);
@@ -735,10 +735,10 @@ gchar* nsgtk_download_dialog_show (const gchar *filename, const gchar *domain,
(GTK_FILE_CHOOSER(dialog), filename);
gtk_file_chooser_set_current_folder
(GTK_FILE_CHOOSER(dialog),
- option_downloads_directory);
+ nsoption_charp(downloads_directory));
gtk_file_chooser_set_do_overwrite_confirmation
(GTK_FILE_CHOOSER(dialog),
- option_request_overwrite);
+ nsoption_bool(request_overwrite));
gint result = gtk_dialog_run(GTK_DIALOG(dialog));
if (result == GTK_RESPONSE_ACCEPT)
@@ -748,23 +748,23 @@ gchar* nsgtk_download_dialog_show (const gchar *filename, const gchar *domain,
break;
}
case GTK_RESPONSE_DOWNLOAD: {
- destination = malloc(strlen(option_downloads_directory)
+ destination = malloc(strlen(nsoption_charp(downloads_directory))
+ strlen(filename) + SLEN("/") + 1);
if (destination == NULL) {
warn_user(messages_get("NoMemory"), 0);
break;
}
sprintf(destination, "%s/%s",
- option_downloads_directory, filename);
+ nsoption_charp(downloads_directory), filename);
/* Test if file already exists and display overwrite
* confirmation if needed */
- if (g_file_test(destination, G_FILE_TEST_EXISTS)
- && option_request_overwrite) {
+ if (g_file_test(destination, G_FILE_TEST_EXISTS) &&
+ nsoption_bool(request_overwrite)) {
message = g_strdup_printf(messages_get(
"gtkOverwrite"), filename);
info = g_strdup_printf(messages_get(
"gtkOverwriteInfo"),
- option_downloads_directory);
+ nsoption_charp(downloads_directory));
dialog = gtk_message_dialog_new_with_markup(
nsgtk_download_parent,
diff --git a/gtk/font_pango.c b/gtk/font_pango.c
index 99da51561..00131b416 100644
--- a/gtk/font_pango.c
+++ b/gtk/font_pango.c
@@ -281,20 +281,20 @@ PangoFontDescription *nsfont_style_to_description(
switch (fstyle->family) {
case PLOT_FONT_FAMILY_SERIF:
- desc = pango_font_description_from_string(option_font_serif);
+ desc = pango_font_description_from_string(nsoption_charp(font_serif));
break;
case PLOT_FONT_FAMILY_MONOSPACE:
- desc = pango_font_description_from_string(option_font_mono);
+ desc = pango_font_description_from_string(nsoption_charp(font_mono));
break;
case PLOT_FONT_FAMILY_CURSIVE:
- desc = pango_font_description_from_string(option_font_cursive);
+ desc = pango_font_description_from_string(nsoption_charp(font_cursive));
break;
case PLOT_FONT_FAMILY_FANTASY:
- desc = pango_font_description_from_string(option_font_fantasy);
+ desc = pango_font_description_from_string(nsoption_charp(font_fantasy));
break;
case PLOT_FONT_FAMILY_SANS_SERIF:
default:
- desc = pango_font_description_from_string(option_font_sans);
+ desc = pango_font_description_from_string(nsoption_charp(font_sans));
break;
}
diff --git a/gtk/gui.c b/gtk/gui.c
index 9d352036f..b403297bf 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -69,7 +69,6 @@
#include "gtk/throbber.h"
#include "gtk/treeview.h"
#include "gtk/window.h"
-#include "gtk/options.h"
#include "gtk/schedule.h"
#include "render/box.h"
@@ -240,7 +239,7 @@ static void check_options(char **respath)
char *hdir = getenv("HOME");
char buf[PATH_MAX];
- option_core_select_menu = true;
+ nsoption_set_bool(core_select_menu, true);
/* Attempt to handle nonsense status bar widths. These may exist
* in people's Choices as the GTK front end used to abuse the
@@ -248,8 +247,8 @@ static void check_options(char **respath)
* The GTK front end now correctly uses it as a proportion of window
* width. Here we assume that a value of less than 15% is wrong
* and set to the default two thirds. */
- if (option_toolbar_status_width < 1500) {
- option_toolbar_status_width = 6667;
+ if (nsoption_int(toolbar_status_width) < 1500) {
+ nsoption_set_int(toolbar_status_width, 6667);
}
/* user options should be stored in the users home directory */
@@ -260,46 +259,47 @@ static void check_options(char **respath)
* resource path, they should just be set to the default
* values!
*/
- if (!option_cookie_file) {
+ if (nsoption_charp(cookie_file) == NULL) {
filepath_sfinddef(respath, buf, "Cookies", "~/.netsurf/");
LOG(("Using '%s' as Cookies file", buf));
- option_cookie_file = strdup(buf);
+ nsoption_set_charp(cookie_file, strdup(buf));
}
- if (!option_cookie_jar) {
+ if (nsoption_charp(cookie_jar) == NULL) {
filepath_sfinddef(respath, buf, "Cookies", "~/.netsurf/");
LOG(("Using '%s' as Cookie Jar file", buf));
- option_cookie_jar = strdup(buf);
+ nsoption_set_charp(cookie_jar, strdup(buf));
}
- if (!option_cookie_file || !option_cookie_jar)
+ if (nsoption_charp(cookie_file) == NULL ||
+ nsoption_charp(cookie_jar) == NULL)
die("Failed initialising cookie options");
- if (!option_url_file) {
+ if (nsoption_charp(url_file) == NULL) {
filepath_sfinddef(respath, buf, "URLs", "~/.netsurf/");
LOG(("Using '%s' as URL file", buf));
- option_url_file = strdup(buf);
+ nsoption_set_charp(url_file, strdup(buf));
}
- if (!option_ca_path) {
+ if (nsoption_charp(ca_path) == NULL) {
filepath_sfinddef(respath, buf, "certs", "/etc/ssl/");
LOG(("Using '%s' as certificate path", buf));
- option_ca_path = strdup(buf);
+ nsoption_set_charp(ca_path, strdup(buf));
}
- if (!option_downloads_directory) {
+ if (nsoption_charp(downloads_directory) == NULL) {
LOG(("Using '%s' as download directory", hdir));
- option_downloads_directory = hdir;
+ nsoption_set_charp(downloads_directory, hdir);
}
filepath_sfinddef(respath, buf, "icons/", "~/.netsurf/");
LOG(("Using '%s' as Tree icons dir", buf));
tree_set_icon_dir(strdup(buf));
- if (!option_hotlist_path) {
+ if (nsoption_charp(hotlist_path) == NULL) {
filepath_sfinddef(respath, buf, "Hotlist", "~/.netsurf/");
LOG(("Using '%s' as Hotlist file", buf));
- option_hotlist_path = strdup(buf);
+ nsoption_set_charp(hotlist_path, strdup(buf));
}
- if (!option_hotlist_path)
+ if (nsoption_charp(hotlist_path) == NULL)
die("Failed initialising hotlist option");
@@ -310,12 +310,12 @@ static void check_options(char **respath)
/* check what the font settings are, setting them to a default font
* if they're not set - stops Pango whinging
*/
-#define SETFONTDEFAULT(x,y) (x) = ((x) != NULL) ? (x) : strdup((y))
- SETFONTDEFAULT(option_font_sans, "Sans");
- SETFONTDEFAULT(option_font_serif, "Serif");
- SETFONTDEFAULT(option_font_mono, "Monospace");
- SETFONTDEFAULT(option_font_cursive, "Serif");
- SETFONTDEFAULT(option_font_fantasy, "Serif");
+#define SETFONTDEFAULT(OPTION,y) if (nsoption_charp(OPTION) == NULL) nsoption_set_charp(OPTION, strdup((y)))
+ SETFONTDEFAULT(font_sans, "Sans");
+ SETFONTDEFAULT(font_serif, "Serif");
+ SETFONTDEFAULT(font_mono, "Monospace");
+ SETFONTDEFAULT(font_cursive, "Serif");
+ SETFONTDEFAULT(font_fantasy, "Serif");
}
@@ -416,8 +416,8 @@ static void gui_init(int argc, char** argv, char **respath)
filepath_sfinddef(respath, buf, "mime.types", "/etc/");
gtk_fetch_filetype_init(buf);
- urldb_load(option_url_file);
- urldb_load_cookies(option_cookie_file);
+ urldb_load(nsoption_charp(url_file));
+ urldb_load_cookies(nsoption_charp(cookie_file));
/* The tree view system needs to know the screen's DPI, so we
* find that out here, rather than when we create a first browser
@@ -442,9 +442,9 @@ static void gui_init(int argc, char** argv, char **respath)
sslcert_init(tree_content_icon_name);
- if ((option_homepage_url != NULL) &&
- (option_homepage_url[0] != '\0'))
- addr = option_homepage_url;
+ if (nsoption_charp(homepage_url) != NULL) {
+ addr = nsoption_charp(homepage_url);
+ }
if (2 <= argc)
addr = argv[1];
@@ -587,14 +587,12 @@ void gui_poll(bool active)
void gui_quit(void)
{
nsgtk_download_destroy();
- urldb_save_cookies(option_cookie_jar);
- urldb_save(option_url_file);
+ urldb_save_cookies(nsoption_charp(cookie_jar));
+ urldb_save(nsoption_charp(url_file));
nsgtk_cookies_destroy();
nsgtk_history_destroy();
nsgtk_hotlist_destroy();
sslcert_cleanup();
- free(option_cookie_file);
- free(option_cookie_jar);
free(print_options_file_location);
free(search_engines_file_location);
free(search_default_ico_location);
diff --git a/gtk/hotlist.c b/gtk/hotlist.c
index e3c6b7068..dc95866db 100644
--- a/gtk/hotlist.c
+++ b/gtk/hotlist.c
@@ -23,7 +23,6 @@
#include "desktop/tree.h"
#include "gtk/gui.h"
#include "gtk/hotlist.h"
-#include "gtk/options.h"
#include "gtk/plotters.h"
#include "gtk/scaffolding.h"
#include "gtk/treeview.h"
@@ -131,7 +130,7 @@ bool nsgtk_hotlist_init(const char *glade_file_location)
CONNECT(window, "hide", nsgtk_tree_window_hide, hotlist_window);
hotlist_initialise(nsgtk_treeview_get_tree(hotlist_window),
- option_hotlist_path,
+ nsoption_charp(hotlist_path),
tree_directory_icon_name);
nsgtk_hotlist_init_menu();
@@ -163,7 +162,7 @@ void nsgtk_hotlist_init_menu(void)
void nsgtk_hotlist_destroy(void)
{
/* TODO: what about gladeFile? */
- hotlist_cleanup(option_hotlist_path);
+ hotlist_cleanup(nsoption_charp(hotlist_path));
nsgtk_treeview_destroy(hotlist_window);
}
diff --git a/gtk/options.h b/gtk/options.h
index 23de8b745..795eca91d 100644
--- a/gtk/options.h
+++ b/gtk/options.h
@@ -16,65 +16,68 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#ifndef _NETSURF_DESKTOP_OPTIONS_INCLUDING_
+#error "Frontend options header cannot be included directly"
+#endif
+
#ifndef _NETSURF_GTK_OPTIONS_H_
#define _NETSURF_GTK_OPTIONS_H_
-#include "desktop/options.h"
-
-extern bool option_render_resample;
-extern bool option_downloads_clear;
-extern bool option_request_overwrite;
-extern char *option_downloads_directory;
-extern char *option_url_file;
-extern bool option_show_single_tab;
-extern int option_button_type;
-extern bool option_disable_popups;
-extern bool option_disable_plugins;
-extern int option_history_age;
-extern bool option_hover_urls;
-extern bool option_focus_new;
-extern bool option_new_blank;
-extern char *option_hotlist_path;
-extern bool option_source_tab;
-extern int option_current_theme;
-extern int option_position_tab;
+#define NSOPTION_EXTRA_DEFINE \
+ bool render_resample; \
+ bool downloads_clear; \
+ bool request_overwrite; \
+ char *downloads_directory; \
+ char *url_file; \
+ bool show_single_tab; \
+ int button_type; \
+ bool disable_popups; \
+ bool disable_plugins; \
+ int history_age; \
+ bool hover_urls; \
+ bool focus_new; \
+ bool new_blank; \
+ char *hotlist_path; \
+ bool source_tab; \
+ int current_theme; \
+ int position_tab
-#define EXTRA_OPTION_DEFINE \
-bool option_render_resample = true; \
-bool option_downloads_clear = false; \
-bool option_request_overwrite = true; \
-char *option_downloads_directory = 0; \
-char *option_url_file = 0; \
-bool option_show_single_tab = false; \
-int option_button_type = 0; \
-bool option_disable_popups = false; \
-bool option_disable_plugins = false; \
-int option_history_age = 0; \
-bool option_hover_urls = false; \
-bool option_focus_new = false; \
-bool option_new_blank = false; \
-char *option_hotlist_path = NULL; \
-bool option_source_tab = false;\
-int option_current_theme = 0;\
-int option_position_tab = 0;
+#define NSOPTION_EXTRA_DEFAULTS \
+ .render_resample = true, \
+ .downloads_clear = false, \
+ .request_overwrite = true, \
+ .downloads_directory = NULL, \
+ .url_file = NULL, \
+ .show_single_tab = false, \
+ .button_type = 0, \
+ .disable_popups = false, \
+ .disable_plugins = false, \
+ .history_age = 0, \
+ .hover_urls = false, \
+ .focus_new = false, \
+ .new_blank = false, \
+ .hotlist_path = NULL, \
+ .source_tab = false, \
+ .current_theme = 0, \
+ .position_tab = 0
-#define EXTRA_OPTION_TABLE \
-{ "render_resample", OPTION_BOOL, &option_render_resample }, \
-{ "downloads_clear", OPTION_BOOL, &option_downloads_clear }, \
-{ "request_overwrite", OPTION_BOOL, &option_request_overwrite }, \
-{ "downloads_directory",OPTION_STRING, &option_downloads_directory }, \
-{ "url_file", OPTION_STRING, &option_url_file }, \
-{ "show_single_tab", OPTION_BOOL, &option_show_single_tab }, \
-{ "button_type", OPTION_INTEGER, &option_button_type}, \
-{ "disable_popups", OPTION_BOOL, &option_disable_popups}, \
-{ "disable_plugins", OPTION_BOOL, &option_disable_plugins}, \
-{ "history_age", OPTION_INTEGER, &option_history_age}, \
-{ "hover_urls", OPTION_BOOL, &option_hover_urls}, \
-{ "focus_new", OPTION_BOOL, &option_focus_new}, \
-{ "new_blank", OPTION_BOOL, &option_new_blank}, \
-{ "hotlist_path", OPTION_STRING, &option_hotlist_path}, \
-{ "source_tab", OPTION_BOOL, &option_source_tab},\
-{ "current_theme", OPTION_INTEGER, &option_current_theme}, \
-{ "position_tab", OPTION_INTEGER, &option_position_tab}
+#define NSOPTION_EXTRA_TABLE \
+{ "render_resample", OPTION_BOOL, &nsoptions.render_resample }, \
+{ "downloads_clear", OPTION_BOOL, &nsoptions.downloads_clear }, \
+{ "request_overwrite", OPTION_BOOL, &nsoptions.request_overwrite }, \
+{ "downloads_directory",OPTION_STRING, &nsoptions.downloads_directory }, \
+{ "url_file", OPTION_STRING, &nsoptions.url_file }, \
+{ "show_single_tab", OPTION_BOOL, &nsoptions.show_single_tab }, \
+{ "button_type", OPTION_INTEGER, &nsoptions.button_type}, \
+{ "disable_popups", OPTION_BOOL, &nsoptions.disable_popups}, \
+{ "disable_plugins", OPTION_BOOL, &nsoptions.disable_plugins}, \
+{ "history_age", OPTION_INTEGER, &nsoptions.history_age}, \
+{ "hover_urls", OPTION_BOOL, &nsoptions.hover_urls}, \
+{ "focus_new", OPTION_BOOL, &nsoptions.focus_new}, \
+{ "new_blank", OPTION_BOOL, &nsoptions.new_blank}, \
+{ "hotlist_path", OPTION_STRING, &nsoptions.hotlist_path}, \
+{ "source_tab", OPTION_BOOL, &nsoptions.source_tab},\
+{ "current_theme", OPTION_INTEGER, &nsoptions.current_theme}, \
+{ "position_tab", OPTION_INTEGER, &nsoptions.position_tab}
#endif
diff --git a/gtk/plotters.c b/gtk/plotters.c
index 4c9627380..2f2b111db 100644
--- a/gtk/plotters.c
+++ b/gtk/plotters.c
@@ -38,7 +38,6 @@
#include "gtk/scaffolding.h"
#include "render/font.h"
#include "desktop/options.h"
-#include "gtk/options.h"
#include "gtk/bitmap.h"
GtkWidget *current_widget;
diff --git a/gtk/print.c b/gtk/print.c
index 63489884a..73bf3b397 100644
--- a/gtk/print.c
+++ b/gtk/print.c
@@ -41,7 +41,6 @@
#include "gtk/bitmap.h"
#include "gtk/print.h"
#include "gtk/scaffolding.h"
-#include "gtk/options.h"
#include "render/font.h"
#include "utils/log.h"
#include "utils/utils.h"
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 27aff2f97..34e0d514b 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -73,7 +73,6 @@
#include "gtk/toolbar.h"
#include "gtk/treeview.h"
#include "gtk/window.h"
-#include "gtk/options.h"
#include "gtk/compat.h"
#include "gtk/gdk.h"
#include "image/ico.h"
@@ -546,9 +545,9 @@ static void nsgtk_openfile_open(const char *filename)
MULTIHANDLER(newwindow)
{
struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- const char *url = option_homepage_url;
+ const char *url = nsoption_charp(homepage_url);
- if ((url != NULL) && (url[0] == '\0'))
+ if (url != NULL)
url = NULL;
if (url == NULL)
@@ -563,15 +562,15 @@ MULTIHANDLER(newtab)
{
struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- if (option_new_blank) {
+ if (nsoption_bool(new_blank)) {
browser_window_create(NULL, bw, NULL, false, true);
GtkWidget *window = gtk_notebook_get_nth_page(g->notebook, -1);
gtk_widget_modify_bg(window, GTK_STATE_NORMAL, &((GdkColor)
{0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF}));
} else {
- const char *url = option_homepage_url;
+ const char *url = nsoption_charp(homepage_url);
- if ((url != NULL) && (url[0] == '\0'))
+ if (url != NULL)
url = NULL;
if (url == NULL)
@@ -1177,16 +1176,21 @@ MULTIHANDLER(downloads)
MULTIHANDLER(savewindowsize)
{
- if (GTK_IS_PANED(g->status_pane))
- option_toolbar_status_width =
- gtk_paned_get_position(g->status_pane);
- gtk_window_get_position(g->window, &option_window_x,
- &option_window_y);
- gtk_window_get_size(g->window, &option_window_width,
- &option_window_height);
+ int x,y,w,h;
+
+ if (GTK_IS_PANED(g->status_pane)) {
+ nsoption_set_int(toolbar_status_width,
+ gtk_paned_get_position(g->status_pane));
+ }
+ gtk_window_get_position(g->window, &x, &y);
+ gtk_window_get_size(g->window, &w, &h);
+ nsoption_set_int(window_width, w);
+ nsoption_set_int(window_height, h);
+ nsoption_set_int(window_x, x);
+ nsoption_set_int(window_y, y);
- options_write(options_file_location);
+ nsoption_write(options_file_location);
return TRUE;
}
@@ -1371,8 +1375,9 @@ MULTIHANDLER(home)
struct browser_window *bw =
nsgtk_get_browser_window(g->top_level);
- if (option_homepage_url != NULL && option_homepage_url[0] != '\0')
- addr = option_homepage_url;
+ if (nsoption_charp(homepage_url) != NULL) {
+ addr = nsoption_charp(homepage_url);
+ }
browser_window_go(bw, addr, 0, true);
@@ -1381,8 +1386,7 @@ MULTIHANDLER(home)
MULTIHANDLER(localhistory)
{
- struct browser_window *bw =
- nsgtk_get_browser_window(g->top_level);
+ struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
int x,y, width, height, mainwidth, mainheight, margin = 20;
/* if entries of the same url but different frag_ids have been added
@@ -1728,10 +1732,13 @@ nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
/* set this window's size and position to what's in the options, or
* or some sensible default if they're not set yet.
*/
- if (option_window_width > 0) {
- gtk_window_move(g->window, option_window_x, option_window_y);
- gtk_window_resize(g->window, option_window_width,
- option_window_height);
+ if (nsoption_int(window_width) > 0) {
+ gtk_window_move(g->window,
+ nsoption_int(window_x),
+ nsoption_int(window_y));
+ gtk_window_resize(g->window,
+ nsoption_int(window_width),
+ nsoption_int(window_height));
} else {
/* Set to 1000x700, so we're very likely to fit even on
* 1024x768 displays, not being able to take into account
@@ -1741,32 +1748,39 @@ nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
}
/* Default toolbar button type uses system defaults */
- if (option_button_type == 0) {
+ if (nsoption_int(button_type) == 0) {
GtkSettings *settings = gtk_settings_get_default();
GtkIconSize tooliconsize;
GtkToolbarStyle toolbarstyle;
- g_object_get(settings, "gtk-toolbar-icon-size", &tooliconsize,
- "gtk-toolbar-style", &toolbarstyle, NULL);
+
+ g_object_get(settings,
+ "gtk-toolbar-icon-size", &tooliconsize,
+ "gtk-toolbar-style", &toolbarstyle, NULL);
+
switch (toolbarstyle) {
case GTK_TOOLBAR_ICONS:
- option_button_type = (tooliconsize ==
- GTK_ICON_SIZE_SMALL_TOOLBAR) ?
- 1 : 2;
+ if (tooliconsize == GTK_ICON_SIZE_SMALL_TOOLBAR) {
+ nsoption_set_int(button_type, 1);
+ } else {
+ nsoption_set_int(button_type, 2);
+ }
break;
+
case GTK_TOOLBAR_TEXT:
- option_button_type = 4;
+ nsoption_set_int(button_type, 4);
break;
+
case GTK_TOOLBAR_BOTH:
case GTK_TOOLBAR_BOTH_HORIZ:
- /* no labels in default configuration */
+ /* no labels in default configuration */
default:
/* No system default, so use large icons */
- option_button_type = 2;
+ nsoption_set_int(button_type, 2);
break;
}
}
- switch (option_button_type) {
+ switch (nsoption_int(button_type)) {
/* case 0 is 'unset' [from fresh install / clearing options]
* see above */
@@ -1901,11 +1915,12 @@ nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
/* prepare to set the web search ico */
/* init web search prefs from file */
- search_web_provider_details(option_search_provider);
+ search_web_provider_details(nsoption_int(search_provider));
/* potentially retrieve ico */
- if (search_web_ico() == NULL)
+ if (search_web_ico() == NULL) {
search_web_retrieve_ico(false);
+ }
/* set entry */
searchname = search_web_provider_name();
diff --git a/gtk/system_colour.c b/gtk/system_colour.c
index b58717492..ec40947c0 100644
--- a/gtk/system_colour.c
+++ b/gtk/system_colour.c
@@ -39,170 +39,170 @@ static struct gui_system_colour_ctx colour_list[] = {
"ActiveBorder",
SLEN("ActiveBorder"),
0xff000000,
- &option_sys_colour_ActiveBorder,
+ &nsoption_charp(sys_colour_ActiveBorder),
NULL
}, {
"ActiveCaption",
SLEN("ActiveCaption"),
0xffdddddd,
- &option_sys_colour_ActiveCaption,
+ &nsoption_charp(sys_colour_ActiveCaption),
NULL
}, {
"AppWorkspace",
SLEN("AppWorkspace"),
0xffeeeeee,
- &option_sys_colour_AppWorkspace,
+ &nsoption_charp(sys_colour_AppWorkspace),
NULL
}, {
"Background",
SLEN("Background"),
0xff0000aa,
- &option_sys_colour_Background,
+ &nsoption_charp(sys_colour_Background),
NULL
}, {
"ButtonFace",
SLEN("ButtonFace"),
0xffaaaaaa,
- &option_sys_colour_ButtonFace,
+ &nsoption_charp(sys_colour_ButtonFace),
NULL
}, {
"ButtonHighlight",
SLEN("ButtonHighlight"),
0xffdddddd,
- &option_sys_colour_ButtonHighlight,
+ &nsoption_charp(sys_colour_ButtonHighlight),
NULL
}, {
"ButtonShadow",
SLEN("ButtonShadow"),
0xffbbbbbb,
- &option_sys_colour_ButtonShadow,
+ &nsoption_charp(sys_colour_ButtonShadow),
NULL
}, {
"ButtonText",
SLEN("ButtonText"),
0xff000000,
- &option_sys_colour_ButtonText,
+ &nsoption_charp(sys_colour_ButtonText),
NULL
}, {
"CaptionText",
SLEN("CaptionText"),
0xff000000,
- &option_sys_colour_CaptionText,
+ &nsoption_charp(sys_colour_CaptionText),
NULL
}, {
"GrayText",
SLEN("GrayText"),
0xffcccccc,
- &option_sys_colour_GrayText,
+ &nsoption_charp(sys_colour_GrayText),
NULL
}, {
"Highlight",
SLEN("Highlight"),
0xff0000ee,
- &option_sys_colour_Highlight,
+ &nsoption_charp(sys_colour_Highlight),
NULL
}, {
"HighlightText",
SLEN("HighlightText"),
0xff000000,
- &option_sys_colour_HighlightText,
+ &nsoption_charp(sys_colour_HighlightText),
NULL
}, {
"InactiveBorder",
SLEN("InactiveBorder"),
0xffffffff,
- &option_sys_colour_InactiveBorder,
+ &nsoption_charp(sys_colour_InactiveBorder),
NULL
}, {
"InactiveCaption",
SLEN("InactiveCaption"),
0xffffffff,
- &option_sys_colour_InactiveCaption,
+ &nsoption_charp(sys_colour_InactiveCaption),
NULL
}, {
"InactiveCaptionText",
SLEN("InactiveCaptionText"),
0xffcccccc,
- &option_sys_colour_InactiveCaptionText,
+ &nsoption_charp(sys_colour_InactiveCaptionText),
NULL
}, {
"InfoBackground",
SLEN("InfoBackground"),
0xffaaaaaa,
- &option_sys_colour_InfoBackground,
+ &nsoption_charp(sys_colour_InfoBackground),
NULL
}, {
"InfoText",
SLEN("InfoText"),
0xff000000,
- &option_sys_colour_InfoText,
+ &nsoption_charp(sys_colour_InfoText),
NULL
}, {
"Menu",
SLEN("Menu"),
0xffaaaaaa,
- &option_sys_colour_Menu,
+ &nsoption_charp(sys_colour_Menu),
NULL
}, {
"MenuText",
SLEN("MenuText"),
0xff000000,
- &option_sys_colour_MenuText,
+ &nsoption_charp(sys_colour_MenuText),
NULL
}, {
"Scrollbar",
SLEN("Scrollbar"),
0xffaaaaaa,
- &option_sys_colour_Scrollbar,
+ &nsoption_charp(sys_colour_Scrollbar),
NULL
}, {
"ThreeDDarkShadow",
SLEN("ThreeDDarkShadow"),
0xff555555,
- &option_sys_colour_ThreeDDarkShadow,
+ &nsoption_charp(sys_colour_ThreeDDarkShadow),
NULL
}, {
"ThreeDFace",
SLEN("ThreeDFace"),
0xffdddddd,
- &option_sys_colour_ThreeDFace,
+ &nsoption_charp(sys_colour_ThreeDFace),
NULL
}, {
"ThreeDHighlight",
SLEN("ThreeDHighlight"),
0xffaaaaaa,
- &option_sys_colour_ThreeDHighlight,
+ &nsoption_charp(sys_colour_ThreeDHighlight),
NULL
}, {
"ThreeDLightShadow",
SLEN("ThreeDLightShadow"),
0xff999999,
- &option_sys_colour_ThreeDLightShadow,
+ &nsoption_charp(sys_colour_ThreeDLightShadow),
NULL
}, {
"ThreeDShadow",
SLEN("ThreeDShadow"),
0xff777777,
- &option_sys_colour_ThreeDShadow,
+ &nsoption_charp(sys_colour_ThreeDShadow),
NULL
}, {
"Window",
SLEN("Window"),
0xffaaaaaa,
- &option_sys_colour_Window,
+ &nsoption_charp(sys_colour_Window),
NULL
}, {
"WindowFrame",
SLEN("WindowFrame"),
0xff000000,
- &option_sys_colour_WindowFrame,
+ &nsoption_charp(sys_colour_WindowFrame),
NULL
}, {
"WindowText",
SLEN("WindowText"),
0xff000000,
- &option_sys_colour_WindowText,
+ &nsoption_charp(sys_colour_WindowText),
NULL
},
diff --git a/gtk/tabs.c b/gtk/tabs.c
index 9f7a68605..13f6d393d 100644
--- a/gtk/tabs.c
+++ b/gtk/tabs.c
@@ -25,7 +25,6 @@
#include "desktop/options.h"
#include "desktop/search.h"
#include "utils/utils.h"
-#include "gtk/options.h"
#include "gtk/search.h"
#include "gtk/tabs.h"
@@ -64,7 +63,7 @@ static GtkWidget *nsgtk_tab_label_setup(struct gui_window *window)
hbox = gtk_hbox_new(FALSE, 2);
- if (option_new_blank == true)
+ if (nsoption_bool(new_blank) == true)
label = gtk_label_new("New Tab");
else
label = gtk_label_new("Loading...");
@@ -119,7 +118,7 @@ static void nsgtk_tab_page_changed(GtkNotebook *notebook, gpointer *page,
static void
nsgtk_tab_orientation(GtkNotebook *notebook)
{
- switch (option_position_tab) {
+ switch (nsoption_int(position_tab)) {
case 0:
gtk_notebook_set_tab_pos(notebook, GTK_POS_TOP);
break;
@@ -144,7 +143,8 @@ static void
nsgtk_tab_visibility_update(GtkNotebook *notebook, GtkWidget *child, guint page)
{
gint num_pages = gtk_notebook_get_n_pages(notebook);
- if (option_show_single_tab == true || num_pages > 1) {
+
+ if ((nsoption_bool(show_single_tab) == true) || (num_pages > 1)) {
gtk_notebook_set_show_tabs(notebook, TRUE);
} else {
gtk_notebook_set_show_tabs(notebook, FALSE);
diff --git a/gtk/theme.c b/gtk/theme.c
index 6284e92d1..26206110e 100644
--- a/gtk/theme.c
+++ b/gtk/theme.c
@@ -29,7 +29,7 @@
#include "gtk/menu.h"
#include "gtk/theme.h"
#include "gtk/window.h"
-#include "gtk/options.h"
+#include "desktop/options.h"
#include "gtk/dialogs/options.h"
#include "utils/container.h"
#include "utils/log.h"
@@ -156,7 +156,7 @@ static bool nsgtk_theme_verify(const char *themename)
void nsgtk_theme_init(void)
{
size_t len;
- if (option_current_theme == 0) {
+ if (nsoption_int(current_theme) == 0) {
return;
}
@@ -174,7 +174,7 @@ void nsgtk_theme_init(void)
if (buf[0] == '\0')
continue;
- if (row_count++ == option_current_theme) {
+ if (row_count++ == nsoption_int(current_theme)) {
if (current_theme_name != NULL)
free(current_theme_name);
/* clear the '\n' ["\n\0"->"\0\0"] */
diff --git a/gtk/window.c b/gtk/window.c
index 068da6fa7..14a17df40 100644
--- a/gtk/window.c
+++ b/gtk/window.c
@@ -34,7 +34,6 @@
#include "desktop/selection.h"
#include "gtk/compat.h"
#include "gtk/gui.h"
-#include "gtk/options.h"
#include "gtk/scaffolding.h"
#include "gtk/plotters.h"
#include "gtk/schedule.h"
@@ -507,8 +506,9 @@ static gboolean nsgtk_window_size_allocate_event(GtkWidget *widget,
/* TODO: Probably want to detect when the user adjusts the
* status bar width, remember that proportion for the
* window, and use that here. */
- gtk_paned_set_position(g->paned, (option_toolbar_status_width *
- allocation->width) / 10000);
+ gtk_paned_set_position(g->paned,
+ (nsoption_int(toolbar_status_width) *
+ allocation->width) / 10000);
}
return TRUE;
@@ -533,10 +533,11 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
g->paned = NULL;
g->mouse.state = 0;
g->current_pointer = GUI_POINTER_DEFAULT;
- if (clone != NULL)
+ if (clone != NULL) {
bw->scale = clone->scale;
- else
- bw->scale = (float) option_scale / 100;
+ } else {
+ bw->scale = (float) nsoption_int(scale) / 100.0;
+ }
g->careth = 0;
@@ -582,7 +583,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
bool tempback = true;
switch (temp_open_background) {
case -1:
- tempback = !(option_focus_new);
+ tempback = !(nsoption_bool(focus_new));
break;
case 0:
tempback = false;