From 1490b52a6b96b6a69a0c4fe9e0515dc717425128 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 22 Mar 2012 09:34:34 +0000 Subject: NetSurf options rework (a=vince r=daniels,jmb) svn path=/trunk/netsurf/; revision=13548 --- gtk/completion.c | 3 +- gtk/dialogs/options.c | 533 ++++++++++++++++++++++++++++++-------------------- gtk/dialogs/source.c | 3 +- gtk/download.c | 18 +- gtk/font_pango.c | 10 +- gtk/gui.c | 64 +++--- gtk/hotlist.c | 5 +- gtk/options.h | 113 +++++------ gtk/plotters.c | 1 - gtk/print.c | 1 - gtk/scaffolding.c | 83 ++++---- gtk/system_colour.c | 56 +++--- gtk/tabs.c | 8 +- gtk/theme.c | 6 +- gtk/window.c | 15 +- 15 files changed, 523 insertions(+), 396 deletions(-) (limited to 'gtk') 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 . */ +#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; -- cgit v1.2.3