aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am4
-rwxr-xr-xsrc/appearance-prefs.c453
-rw-r--r--src/appearance-prefs.h58
-rw-r--r--src/ephy-shell.c16
-rw-r--r--src/ephy-tab.c16
-rwxr-xr-xsrc/general-prefs.c493
-rw-r--r--src/prefs-dialog.c854
-rw-r--r--src/prefs-dialog.h20
-rw-r--r--src/window-commands.c10
9 files changed, 722 insertions, 1202 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 75b3e5edd..285976850 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -43,8 +43,6 @@ endif
epiphany_bin_SOURCES = \
$(ephy_automation_interface_idl_sources) \
$(nautilus_view_sources) \
- appearance-prefs.c \
- appearance-prefs.h \
ephy-automation.c \
ephy-automation.h \
ephy-encoding-menu.c \
@@ -74,8 +72,6 @@ epiphany_bin_SOURCES = \
ephy-toolbars-model.h \
ephy-window.c \
ephy-window.h \
- general-prefs.c \
- general-prefs.h \
language-editor.c \
language-editor.h \
pdm-dialog.c \
diff --git a/src/appearance-prefs.c b/src/appearance-prefs.c
deleted file mode 100755
index e19e95c79..000000000
--- a/src/appearance-prefs.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- * Copyright (C) 2002 Marco Pesenti Gritti
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "appearance-prefs.h"
-#include "ephy-shell.h"
-#include "ephy-prefs.h"
-#include "ephy-embed-prefs.h"
-#include "eel-gconf-extensions.h"
-
-#include <string.h>
-#include <gtk/gtkcombo.h>
-#include <gtk/gtkspinbutton.h>
-#include <gtk/gtkeditable.h>
-#include <gtk/gtkoptionmenu.h>
-
-static void appearance_prefs_class_init (AppearancePrefsClass *klass);
-static void appearance_prefs_init (AppearancePrefs *dialog);
-static void appearance_prefs_finalize (GObject *object);
-
-/* Glade callbacks */
-void
-fonts_language_optionmenu_changed_cb (GtkWidget *optionmenu, EphyDialog *dialog);
-
-static GObjectClass *parent_class = NULL;
-
-struct AppearancePrefsPrivate
-{
- int language;
- gboolean switching;
-};
-
-enum
-{
- SERIF_PROP,
- SANSSERIF_PROP,
- MONOSPACE_PROP,
- FIXED_SIZE_PROP,
- VARIABLE_SIZE_PROP,
- MIN_SIZE_PROP,
- PROPORTIONAL_PROP,
- BACKGROUND_PROP,
- TEXT_PROP,
- UNVISITED_PROP,
- VISITED_PROP,
- USE_SYSCOLORS_PROP,
- USE_COLORS_PROP,
- USE_FONTS_PROP,
-};
-
-static const
-EphyDialogProperty properties [] =
-{
- { SERIF_PROP, "serif_combo", NULL, PT_NORMAL, NULL },
- { SANSSERIF_PROP, "sansserif_combo", NULL, PT_NORMAL, NULL },
- { MONOSPACE_PROP, "monospace_combo", NULL, PT_NORMAL, NULL },
- { FIXED_SIZE_PROP, "fixed_size_spinbutton", NULL, PT_NORMAL, NULL },
- { VARIABLE_SIZE_PROP, "variable_size_spinbutton", NULL, PT_NORMAL, NULL },
- { MIN_SIZE_PROP, "min_size_spinbutton", NULL, PT_NORMAL, NULL },
- { PROPORTIONAL_PROP, "proportional_optionmenu", CONF_RENDERING_DEFAULT_FONT, PT_AUTOAPPLY, NULL },
- { BACKGROUND_PROP, "background_cpick", CONF_RENDERING_BG_COLOR, PT_AUTOAPPLY, NULL },
- { TEXT_PROP, "text_cpick", CONF_RENDERING_TEXT_COLOR, PT_AUTOAPPLY, NULL },
- { UNVISITED_PROP, "unvisited_cpick", CONF_RENDERING_UNVISITED_LINKS, PT_AUTOAPPLY, NULL },
- { VISITED_PROP, "visited_cpick", CONF_RENDERING_VISITED_LINKS, PT_AUTOAPPLY, NULL },
- { USE_SYSCOLORS_PROP, "use_syscolors_checkbutton", CONF_RENDERING_USE_SYSTEM_COLORS, PT_AUTOAPPLY, NULL },
- { USE_COLORS_PROP, "use_colors_checkbutton", CONF_RENDERING_USE_OWN_COLORS, PT_AUTOAPPLY, NULL },
- { USE_FONTS_PROP, "use_fonts_checkbutton", CONF_RENDERING_USE_OWN_FONTS, PT_AUTOAPPLY, NULL },
-
- { -1, NULL, NULL }
-};
-
-/* FIXME duped in mozilla/ */
-const
-char *lang_encode[] =
-{
- "x-western",
- "x-central-euro",
- "ja",
- "zh-TW",
- "zh-CN",
- "ko",
- "x-cyrillic",
- "x-baltic",
- "el",
- "tr",
- "x-unicode",
- "th",
- "he",
- "ar"
-};
-
-enum
-{
- FONT_TYPE_SERIF,
- FONT_TYPE_SANSSERIF,
- FONT_TYPE_MONOSPACE
-};
-
-const
-char *fonts_types[] =
-{
- "serif",
- "sans-serif",
- "monospace"
-};
-
-enum
-{
- FONT_SIZE_FIXED,
- FONT_SIZE_VAR,
- FONT_SIZE_MIN
-};
-
-const
-char *size_prefs[] =
-{
- CONF_RENDERING_FONT_FIXED_SIZE,
- CONF_RENDERING_FONT_VAR_SIZE,
- CONF_RENDERING_FONT_MIN_SIZE
-};
-
-GType
-appearance_prefs_get_type (void)
-{
- static GType appearance_prefs_type = 0;
-
- if (appearance_prefs_type == 0)
- {
- static const GTypeInfo our_info =
- {
- sizeof (AppearancePrefsClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) appearance_prefs_class_init,
- NULL,
- NULL, /* class_data */
- sizeof (AppearancePrefs),
- 0, /* n_preallocs */
- (GInstanceInitFunc) appearance_prefs_init
- };
-
- appearance_prefs_type = g_type_register_static (EPHY_DIALOG_TYPE,
- "AppearancePrefs",
- &our_info, 0);
- }
-
- return appearance_prefs_type;
-
-}
-
-static void
-appearance_prefs_class_init (AppearancePrefsClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = appearance_prefs_finalize;
-}
-
-static void
-setup_font_menu (AppearancePrefs *dialog,
- const char *type,
- GtkWidget *combo)
-{
- char *default_font;
- GList *fonts;
- const char *name;
- char key[255];
- int pos;
- GtkWidget *entry = GTK_COMBO(combo)->entry;
- EphyEmbedSingle *single;
-
- single = ephy_embed_shell_get_embed_single
- (EPHY_EMBED_SHELL (ephy_shell));
-
- ephy_embed_single_get_font_list (single,
- lang_encode[dialog->priv->language],
- type, &fonts, &default_font);
-
- /* Get the default font */
- sprintf (key, "%s_%s_%s", CONF_RENDERING_FONT, type,
- lang_encode[dialog->priv->language]);
- name = eel_gconf_get_string (key);
- if (name == NULL)
- {
- name = default_font;
- }
-
- /* set popdown doesnt like NULL */
- if (fonts == NULL)
- {
- fonts = g_list_alloc ();
- }
-
- gtk_combo_set_popdown_strings (GTK_COMBO(combo), fonts);
-
- /* set the default value */
- if (name != NULL)
- {
- gtk_editable_delete_text (GTK_EDITABLE(entry), 0, -1);
- gtk_editable_insert_text (GTK_EDITABLE(entry),
- name, g_utf8_strlen (name, -1),
- &pos);
- }
-
- g_free (default_font);
-
- g_list_foreach (fonts, (GFunc)g_free, NULL);
- g_list_free (fonts);
-}
-
-static void
-save_font_menu (AppearancePrefs *dialog,
- int type,
- GtkWidget *entry)
-{
- char *name;
- char key[255];
-
- name = gtk_editable_get_chars
- (GTK_EDITABLE(entry), 0, -1);
-
- /* do not save empty fonts */
- if (!name || *name == '\0')
- {
- g_free (name);
- return;
- }
-
- sprintf (key, "%s_%s_%s", CONF_RENDERING_FONT,
- fonts_types[type],
- lang_encode[dialog->priv->language]);
- eel_gconf_set_string (key, name);
- g_free (name);
-}
-
-static void
-font_entry_changed_cb (GtkWidget *entry, AppearancePrefs *dialog)
-{
- int type;
-
- if (dialog->priv->switching) return;
-
- type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT(entry),
- "type"));
- save_font_menu (dialog, type, entry);
-}
-
-static void
-attach_font_signal (AppearancePrefs *dialog, int prop,
- gpointer type)
-{
- GtkWidget *combo;
- GtkWidget *entry;
-
- combo = ephy_dialog_get_control (EPHY_DIALOG(dialog),
- prop);
- entry = GTK_COMBO(combo)->entry;
- g_object_set_data (G_OBJECT(entry), "type", type);
- g_signal_connect (entry, "changed",
- G_CALLBACK(font_entry_changed_cb),
- dialog);
-}
-
-static void
-attach_fonts_signals (AppearancePrefs *dialog)
-{
- attach_font_signal (dialog, SERIF_PROP,
- GINT_TO_POINTER(FONT_TYPE_SERIF));
- attach_font_signal (dialog, SANSSERIF_PROP,
- GINT_TO_POINTER(FONT_TYPE_SANSSERIF));
- attach_font_signal (dialog, MONOSPACE_PROP,
- GINT_TO_POINTER(FONT_TYPE_MONOSPACE));
-}
-
-static void
-size_spinbutton_changed_cb (GtkWidget *spin, AppearancePrefs *dialog)
-{
- int type;
- char key[255];
-
- if (dialog->priv->switching) return;
-
- type = GPOINTER_TO_INT(g_object_get_data (G_OBJECT(spin), "type"));
-
- sprintf (key, "%s_%s",
- size_prefs[type],
- lang_encode[dialog->priv->language]);
- eel_gconf_set_integer (key, gtk_spin_button_get_value (GTK_SPIN_BUTTON (spin)));
-}
-
-static void
-attach_size_controls_signals (AppearancePrefs *dialog)
-{
- GtkWidget *spin;
-
- spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
- FIXED_SIZE_PROP);
- g_object_set_data (G_OBJECT(spin), "type",
- GINT_TO_POINTER(FONT_SIZE_FIXED));
- g_signal_connect (spin, "value_changed",
- G_CALLBACK(size_spinbutton_changed_cb),
- dialog);
-
- spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
- VARIABLE_SIZE_PROP);
- g_object_set_data (G_OBJECT(spin), "type",
- GINT_TO_POINTER(FONT_SIZE_VAR));
- g_signal_connect (spin, "value_changed",
- G_CALLBACK(size_spinbutton_changed_cb),
- dialog);
-
- spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
- MIN_SIZE_PROP);
- g_object_set_data (G_OBJECT(spin), "type",
- GINT_TO_POINTER(FONT_SIZE_MIN));
- g_signal_connect (spin, "value_changed",
- G_CALLBACK(size_spinbutton_changed_cb),
- dialog);
-}
-
-static void
-setup_size_control (AppearancePrefs *dialog,
- const char *pref,
- int default_size,
- GtkWidget *spin)
-{
- char key[255];
- int size;
-
- sprintf (key, "%s_%s", pref,
- lang_encode[dialog->priv->language]);
- size = eel_gconf_get_integer (key);
-
- if (size == 0) size = default_size;
-
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin), size);
-}
-
-static void
-setup_size_controls (AppearancePrefs *dialog)
-{
- GtkWidget *spin;
-
- spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
- FIXED_SIZE_PROP);
- setup_size_control (dialog, CONF_RENDERING_FONT_FIXED_SIZE, 12, spin);
-
- spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
- VARIABLE_SIZE_PROP);
- setup_size_control (dialog, CONF_RENDERING_FONT_VAR_SIZE, 16, spin);
-
- spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
- MIN_SIZE_PROP);
- setup_size_control (dialog, CONF_RENDERING_FONT_MIN_SIZE, 0, spin);
-}
-
-static void
-setup_fonts (AppearancePrefs *dialog)
-{
- GtkWidget *combo;
-
- dialog->priv->switching = TRUE;
-
- combo = ephy_dialog_get_control (EPHY_DIALOG(dialog),
- SERIF_PROP);
- setup_font_menu (dialog, "serif", combo);
-
- combo = ephy_dialog_get_control (EPHY_DIALOG(dialog),
- SANSSERIF_PROP);
- setup_font_menu (dialog, "sans-serif", combo);
-
- combo = ephy_dialog_get_control (EPHY_DIALOG(dialog),
- MONOSPACE_PROP);
- setup_font_menu (dialog, "monospace", combo);
-
- dialog->priv->switching = FALSE;
-}
-
-static void
-appearance_prefs_init (AppearancePrefs *dialog)
-{
- dialog->priv = g_new0 (AppearancePrefsPrivate, 1);
- dialog->priv->switching = FALSE;
-
- ephy_dialog_construct (EPHY_DIALOG(dialog),
- properties,
- "prefs-dialog.glade",
- "appearance_page_box");
-
- setup_fonts (dialog);
- setup_size_controls (dialog);
- attach_fonts_signals (dialog);
- attach_size_controls_signals (dialog);
-}
-
-static void
-appearance_prefs_finalize (GObject *object)
-{
- AppearancePrefs *dialog;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_appearance_PREFS (object));
-
- dialog = appearance_PREFS (object);
-
- g_return_if_fail (dialog->priv != NULL);
-
- g_free (dialog->priv);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-EphyDialog *
-appearance_prefs_new (void)
-{
- AppearancePrefs *dialog;
-
- dialog = appearance_PREFS (g_object_new (appearance_PREFS_TYPE,
- NULL));
-
- return EPHY_DIALOG(dialog);
-}
-
-void
-fonts_language_optionmenu_changed_cb (GtkWidget *optionmenu,
- EphyDialog *dialog)
-{
- int i;
-
- i = gtk_option_menu_get_history
- (GTK_OPTION_MENU (optionmenu));
-
- appearance_PREFS(dialog)->priv->language = i;
-
- setup_fonts (appearance_PREFS(dialog));
- setup_size_controls (appearance_PREFS(dialog));
-}
diff --git a/src/appearance-prefs.h b/src/appearance-prefs.h
deleted file mode 100644
index 17067b7e9..000000000
--- a/src/appearance-prefs.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2002 Marco Pesenti Gritti
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef APPEARANCE_PREFS_H
-#define APPEARANCE_PREFS_H
-
-#include "ephy-dialog.h"
-
-#include <glib-object.h>
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct AppearancePrefs AppearancePrefs;
-typedef struct AppearancePrefsClass AppearancePrefsClass;
-
-#define appearance_PREFS_TYPE (appearance_prefs_get_type ())
-#define appearance_PREFS(obj) (GTK_CHECK_CAST ((obj), appearance_PREFS_TYPE, AppearancePrefs))
-#define appearance_PREFS_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), appearance_PREFS, AppearancePrefsClass))
-#define IS_appearance_PREFS(obj) (GTK_CHECK_TYPE ((obj), appearance_PREFS_TYPE))
-#define IS_appearance_PREFS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), appearance_PREFS))
-
-typedef struct AppearancePrefsPrivate AppearancePrefsPrivate;
-
-struct AppearancePrefs
-{
- EphyDialog parent;
- AppearancePrefsPrivate *priv;
-};
-
-struct AppearancePrefsClass
-{
- EphyDialogClass parent_class;
-};
-
-GType appearance_prefs_get_type (void);
-
-EphyDialog *appearance_prefs_new (void);
-
-G_END_DECLS
-
-#endif
-
diff --git a/src/ephy-shell.c b/src/ephy-shell.c
index 56f31799e..daf5f4513 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -219,23 +219,11 @@ ephy_shell_new_window_cb (EphyEmbedShell *shell,
{
EphyTab *new_tab;
EphyWindow *window;
- gboolean open_in_tab;
g_assert (new_embed != NULL);
- open_in_tab = (chromemask & EMBED_CHROME_OPENASCHROME) ?
- FALSE :
- eel_gconf_get_boolean (CONF_TABS_TABBED_POPUPS);
-
- if (open_in_tab)
- {
- window = ephy_shell_get_active_window (ephy_shell);
- }
- else
- {
- window = ephy_window_new ();
- ephy_window_set_chrome (window, chromemask);
- }
+ window = ephy_window_new ();
+ ephy_window_set_chrome (window, chromemask);
new_tab = ephy_tab_new ();
ephy_window_add_tab (window, new_tab, EPHY_NOTEBOOK_INSERT_GROUPED, FALSE);
diff --git a/src/ephy-tab.c b/src/ephy-tab.c
index e146562d6..70302a595 100644
--- a/src/ephy-tab.c
+++ b/src/ephy-tab.c
@@ -646,21 +646,9 @@ ephy_tab_new_window_cb (EphyEmbed *embed, EphyEmbed **new_embed,
{
EphyTab *new_tab;
EphyWindow *window;
- gboolean open_in_tab;
- open_in_tab = (chromemask & EMBED_CHROME_OPENASCHROME) ?
- FALSE :
- eel_gconf_get_boolean (CONF_TABS_TABBED_POPUPS);
-
- if (open_in_tab)
- {
- window = ephy_tab_get_window (tab);
- }
- else
- {
- window = ephy_window_new ();
- ephy_window_set_chrome (window, chromemask);
- }
+ window = ephy_window_new ();
+ ephy_window_set_chrome (window, chromemask);
new_tab = ephy_tab_new ();
ephy_window_add_tab (window, new_tab, EPHY_NOTEBOOK_INSERT_GROUPED, FALSE);
diff --git a/src/general-prefs.c b/src/general-prefs.c
deleted file mode 100755
index 81fb1c1e2..000000000
--- a/src/general-prefs.c
+++ /dev/null
@@ -1,493 +0,0 @@
-/*
- * Copyright (C) 2002 Marco Pesenti Gritti
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "general-prefs.h"
-#include "ephy-shell.h"
-#include "ephy-embed-single.h"
-#include "ephy-prefs.h"
-#include "ephy-embed-prefs.h"
-#include "ephy-shell.h"
-#include "eel-gconf-extensions.h"
-#include "language-editor.h"
-
-#include <string.h>
-#include <gtk/gtkeditable.h>
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkoptionmenu.h>
-#include <gtk/gtkmenuitem.h>
-#include <bonobo/bonobo-i18n.h>
-
-static void general_prefs_class_init (GeneralPrefsClass *klass);
-static void general_prefs_init (GeneralPrefs *dialog);
-static void general_prefs_finalize (GObject *object);
-
-/* Glade callbacks */
-void
-prefs_homepage_current_button_clicked_cb (GtkWidget *button,
- EphyDialog *dialog);
-void
-prefs_homepage_blank_button_clicked_cb (GtkWidget *button,
- EphyDialog *dialog);
-void
-prefs_language_more_button_clicked_cb (GtkWidget *button,
- EphyDialog *dialog);
-
-static GObjectClass *parent_class = NULL;
-
-struct GeneralPrefsPrivate
-{
- gpointer dummy;
-};
-
-enum
-{
- HOMEPAGE_ENTRY_PROP,
- NEW_PAGE_PROP,
- AUTOCHARSET_PROP,
- DEFAULT_CHARSET_PROP,
- LANGUAGE_PROP
-};
-
-static const
-EphyDialogProperty properties [] =
-{
- { HOMEPAGE_ENTRY_PROP, "homepage_entry", CONF_GENERAL_HOMEPAGE, PT_AUTOAPPLY, NULL },
- { NEW_PAGE_PROP, "new_page_show_homepage", CONF_GENERAL_NEWPAGE_TYPE, PT_AUTOAPPLY, NULL },
- { AUTOCHARSET_PROP, "autocharset_optionmenu", CONF_LANGUAGE_AUTODETECT_CHARSET, PT_AUTOAPPLY, NULL },
- { DEFAULT_CHARSET_PROP, "default_charset_optionmenu", NULL, PT_NORMAL, NULL },
- { LANGUAGE_PROP, "language_optionmenu", NULL, PT_NORMAL, NULL },
-
- { -1, NULL, NULL }
-};
-
-static const
-struct
-{
- char *name;
- char *code;
-}
-languages [] =
-{
- { _("Afrikaans"), "ak" },
- { _("Albanian"), "sq" },
- { _("Arabic"), "ar" },
- { _("Azerbaijani"), "az" },
- { _("Basque"), "eu" },
- { _("Breton"), "br" },
- { _("Bulgarian"), "bg" },
- { _("Byelorussian"), "be" },
- { _("Catalan"), "ca" },
- { _("Chinese"), "zh" },
- { _("Croatian"), "hr" },
- { _("Czech"), "cs" },
- { _("Danish"), "da" },
- { _("Dutch"), "nl" },
- { _("English"), "en" },
- { _("Esperanto"), "eo" },
- { _("Estonian"), "et" },
- { _("Faeroese"), "fo" },
- { _("Finnish"), "fi" },
- { _("French"), "fr" },
- { _("Galician"), "gl" },
- { _("German"), "de" },
- { _("Greek"), "el" },
- { _("Hebrew"), "he" },
- { _("Hungarian"), "hu" },
- { _("Icelandic"), "is" },
- { _("Indonesian"), "id" },
- { _("Irish"), "ga" },
- { _("Italian"), "it" },
- { _("Japanese"), "ja" },
- { _("Korean"), "ko" },
- { _("Latvian"), "lv" },
- { _("Lithuanian"), "lt" },
- { _("Macedonian"), "mk" },
- { _("Malay"), "ms" },
- { _("Norwegian/Nynorsk"), "nn" },
- { _("Norwegian/Bokmaal"), "nb" },
- { _("Norwegian"), "no" },
- { _("Polish"), "pl" },
- { _("Portuguese"), "pt" },
- { _("Portuguese of Brazil"), "pt-BR" },
- { _("Romanian"), "ro" },
- { _("Russian"), "ru" },
- { _("Scottish"), "gd" },
- { _("Serbian"), "sr" },
- { _("Slovak"), "sk" },
- { _("Slovenian"), "sl" },
- { _("Spanish"), "es" },
- { _("Swedish"), "sv" },
- { _("Tamil"), "ta" },
- { _("Turkish"), "tr" },
- { _("Ukrainian"), "uk" },
- { _("Vietnamian"), "vi" },
- { _("Walloon"), "wa" },
- { NULL, NULL }
-};
-
-GType
-general_prefs_get_type (void)
-{
- static GType general_prefs_type = 0;
-
- if (general_prefs_type == 0)
- {
- static const GTypeInfo our_info =
- {
- sizeof (GeneralPrefsClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) general_prefs_class_init,
- NULL,
- NULL, /* class_data */
- sizeof (GeneralPrefs),
- 0, /* n_preallocs */
- (GInstanceInitFunc) general_prefs_init
- };
-
- general_prefs_type = g_type_register_static (EPHY_DIALOG_TYPE,
- "GeneralPrefs",
- &our_info, 0);
- }
-
- return general_prefs_type;
-
-}
-
-static void
-general_prefs_class_init (GeneralPrefsClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = general_prefs_finalize;
-}
-
-static void
-default_charset_menu_changed_cb (GtkOptionMenu *option_menu,
- EphyEmbedShell *shell)
-{
- GList *charsets;
- int i;
- CharsetInfo *info;
- EphyEmbedSingle *single;
-
- single = ephy_embed_shell_get_embed_single
- (EPHY_EMBED_SHELL (ephy_shell));
-
- ephy_embed_single_get_charset_titles (single, NULL, &charsets);
-
- i = gtk_option_menu_get_history (option_menu);
- charsets = g_list_nth (charsets, i);
- g_assert (charsets != NULL);
- info = (CharsetInfo *) charsets->data;
- eel_gconf_set_string (CONF_LANGUAGE_DEFAULT_CHARSET,
- info->name);
-
- g_list_free (charsets);
-}
-
-static gint
-find_charset_in_list_cmp (gconstpointer a,
- gconstpointer b)
-{
- CharsetInfo *info = (CharsetInfo *)a;
- const char *value = b;
-
- return (strcmp (info->name, value));
-}
-
-static void
-create_default_charset_menu (GeneralPrefs *dialog)
-{
- GList *l;
- GList *charsets;
- GtkWidget *menu;
- GtkWidget *optionmenu;
- char *value;
- EphyEmbedSingle *single;
-
- single = ephy_embed_shell_get_embed_single
- (EPHY_EMBED_SHELL (ephy_shell));
-
- ephy_embed_single_get_charset_titles (single, NULL, &l);
-
- menu = gtk_menu_new ();
-
- optionmenu = ephy_dialog_get_control (EPHY_DIALOG (dialog),
- DEFAULT_CHARSET_PROP);
-
- for (charsets = l; charsets != NULL; charsets = charsets->next)
- {
- CharsetInfo *info = (CharsetInfo *) charsets->data;
- GtkWidget *item;
-
- item = gtk_menu_item_new_with_label (info->title);
- gtk_menu_shell_append (GTK_MENU_SHELL(menu),
- item);
- gtk_widget_show (item);
- }
-
- gtk_option_menu_set_menu (GTK_OPTION_MENU(optionmenu), menu);
-
- /* init value */
- charsets = l;
- value = eel_gconf_get_string (CONF_LANGUAGE_DEFAULT_CHARSET);
- g_return_if_fail (value != NULL);
- charsets = g_list_find_custom (charsets, (gconstpointer)value,
- (GCompareFunc)find_charset_in_list_cmp);
- gtk_option_menu_set_history (GTK_OPTION_MENU(optionmenu),
- g_list_position (l, charsets));
- g_free (value);
-
- g_signal_connect (optionmenu, "changed",
- G_CALLBACK (default_charset_menu_changed_cb),
- embed_shell);
-
- g_list_free (l);
-}
-
-static GtkWidget *
-general_prefs_new_language_menu (GeneralPrefs *dialog)
-{
- int i;
- GtkWidget *menu;
-
- menu = gtk_menu_new ();
-
- for (i = 0; languages[i].name != NULL; i++)
- {
- GtkWidget *item;
-
- item = gtk_menu_item_new_with_label (languages[i].name);
- gtk_menu_shell_append (GTK_MENU_SHELL(menu),
- item);
- gtk_widget_show (item);
- g_object_set_data (G_OBJECT(item), "desc",
- languages[i].name);
- }
-
- return menu;
-}
-
-static void
-language_menu_changed_cb (GtkOptionMenu *option_menu,
- gpointer data)
-{
- GSList *list;
- GSList *l = NULL;
- int history;
-
- list = eel_gconf_get_string_list (CONF_RENDERING_LANGUAGE);
- l = g_slist_copy (list);
-
- /* Subst the first item according to the optionmenu */
- history = gtk_option_menu_get_history (option_menu);
- l->data = languages [history].code;
-
- eel_gconf_set_string_list (CONF_RENDERING_LANGUAGE, l);
-
- g_slist_free (l);
-}
-
-static void
-create_language_menu (GeneralPrefs *dialog)
-{
- GtkWidget *optionmenu;
- GtkWidget *menu;
- const char *value;
- int i;
- GSList *list;
-
- optionmenu = ephy_dialog_get_control (EPHY_DIALOG (dialog),
- LANGUAGE_PROP);
-
- menu = general_prefs_new_language_menu (dialog);
-
- gtk_option_menu_set_menu (GTK_OPTION_MENU(optionmenu), menu);
-
- /* init value */
- list = eel_gconf_get_string_list (CONF_RENDERING_LANGUAGE);
- g_return_if_fail (list != NULL);
- value = (const char *)list->data;
-
- i = 0;
- while (languages[i].code && strcmp (languages[i].code, value) != 0)
- {
- i++;
- }
-
- gtk_option_menu_set_history (GTK_OPTION_MENU(optionmenu), i);
-
- g_signal_connect (optionmenu, "changed",
- G_CALLBACK (language_menu_changed_cb),
- NULL);
-}
-
-static void
-general_prefs_init (GeneralPrefs *dialog)
-{
- dialog->priv = g_new0 (GeneralPrefsPrivate, 1);
-
- ephy_dialog_construct (EPHY_DIALOG(dialog),
- properties,
- "prefs-dialog.glade",
- "general_page_box");
-
- create_default_charset_menu (dialog);
- create_language_menu (dialog);
-}
-
-static void
-general_prefs_finalize (GObject *object)
-{
- GeneralPrefs *dialog;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_GENERAL_PREFS (object));
-
- dialog = GENERAL_PREFS (object);
-
- g_return_if_fail (dialog->priv != NULL);
-
- g_free (dialog->priv);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-EphyDialog *
-general_prefs_new (void)
-{
- GeneralPrefs *dialog;
-
- dialog = GENERAL_PREFS (g_object_new (GENERAL_PREFS_TYPE,
- NULL));
-
- return EPHY_DIALOG(dialog);
-}
-
-static void
-set_homepage_entry (EphyDialog *dialog,
- const char *new_location)
-{
- GtkWidget *entry;
- int pos;
-
- entry = ephy_dialog_get_control (dialog, HOMEPAGE_ENTRY_PROP);
-
- gtk_editable_delete_text (GTK_EDITABLE (entry), 0, -1);
- gtk_editable_insert_text (GTK_EDITABLE (entry), new_location,
- g_utf8_strlen (new_location, -1),
- &pos);
-}
-
-void
-prefs_homepage_current_button_clicked_cb (GtkWidget *button,
- EphyDialog *dialog)
-{
- EphyWindow *window;
- EphyTab *tab;
-
- window = ephy_shell_get_active_window (ephy_shell);
- g_return_if_fail (window != NULL);
-
- tab = ephy_window_get_active_tab (window);
- g_return_if_fail (tab != NULL);
-
- set_homepage_entry (dialog, ephy_tab_get_location (tab));
-}
-
-void
-prefs_homepage_blank_button_clicked_cb (GtkWidget *button,
- EphyDialog *dialog)
-{
- set_homepage_entry (dialog, "about:blank");
-}
-
-static void
-fill_language_editor (LanguageEditor *le)
-{
- GSList *strings;
- GSList *tmp;
- int i;
-
- /* Fill the list */
- strings = eel_gconf_get_string_list (CONF_RENDERING_LANGUAGE);
-
- for (tmp = strings; tmp != NULL; tmp = g_slist_next (tmp))
- {
- char *value = (char *)tmp->data;
-
- i = 0;
- while (languages[i].code && strcmp (languages[i].code, value) != 0)
- {
- i++;
- }
-
- /* FIXME unsafe, bad prefs could cause it to access random memory */
- language_editor_add (le, languages[i].name, i);
- }
-}
-
-static void
-language_dialog_changed_cb (LanguageEditor *le,
- GSList *list,
- GeneralPrefs *dialog)
-{
- GtkWidget *optionmenu;
- const GSList *l;
- GSList *langs = NULL;
-
- optionmenu = ephy_dialog_get_control (EPHY_DIALOG (dialog),
- LANGUAGE_PROP);
- gtk_option_menu_set_history (GTK_OPTION_MENU(optionmenu),
- GPOINTER_TO_INT(list->data));
-
- for (l = list; l != NULL; l = l->next)
- {
- int i = GPOINTER_TO_INT (l->data);
- langs = g_slist_append (langs, languages[i].code);
- }
-
- eel_gconf_set_string_list (CONF_RENDERING_LANGUAGE, langs);
- g_slist_free (langs);
-}
-
-void
-prefs_language_more_button_clicked_cb (GtkWidget *button,
- EphyDialog *dialog)
-{
- LanguageEditor *editor;
- GtkWidget *menu;
- GtkWidget *toplevel;
-
- menu = general_prefs_new_language_menu (GENERAL_PREFS(dialog));
-
- toplevel = gtk_widget_get_toplevel (button);
- editor = language_editor_new (toplevel);
- language_editor_set_menu (editor, menu);
- fill_language_editor (editor);
- ephy_dialog_set_modal (EPHY_DIALOG(editor), TRUE);
-
- g_signal_connect (editor, "changed",
- G_CALLBACK(language_dialog_changed_cb),
- dialog);
-
- ephy_dialog_show (EPHY_DIALOG(editor));
-}
diff --git a/src/prefs-dialog.c b/src/prefs-dialog.c
index de74939b1..6a9fa6e10 100644
--- a/src/prefs-dialog.c
+++ b/src/prefs-dialog.c
@@ -21,16 +21,15 @@
#endif
#include "prefs-dialog.h"
-#include "general-prefs.h"
-#include "appearance-prefs.h"
#include "ephy-dialog.h"
#include "ephy-prefs.h"
#include "ephy-embed-prefs.h"
#include "ephy-shell.h"
-#include "ephy-state.h"
#include "ephy-gui.h"
+#include "eel-gconf-extensions.h"
+#include "language-editor.h"
-#include <bonobo/bonobo-i18n.h>
+#include <libgnome/gnome-i18n.h>
#include <gtk/gtkframe.h>
#include <gtk/gtkhbox.h>
#include <gtk/gtkvbox.h>
@@ -39,6 +38,7 @@
#include <gtk/gtkimage.h>
#include <gtk/gtklabel.h>
#include <gtk/gtkstock.h>
+#include <string.h>
static void
prefs_dialog_class_init (PrefsDialogClass *klass);
@@ -57,40 +57,204 @@ prefs_clear_memory_cache_button_clicked_cb (GtkWidget *button,
void
prefs_clear_disk_cache_button_clicked_cb (GtkWidget *button,
gpointer data);
+void
+prefs_dialog_response_cb (GtkDialog *dialog, gint response_id, gpointer data);
+void
+fonts_language_optionmenu_changed_cb (GtkWidget *optionmenu, EphyDialog *dialog);
+void
+prefs_homepage_current_button_clicked_cb (GtkWidget *button,
+ EphyDialog *dialog);
+void
+prefs_homepage_blank_button_clicked_cb (GtkWidget *button,
+ EphyDialog *dialog);
+void
+prefs_language_more_button_clicked_cb (GtkWidget *button,
+ EphyDialog *dialog);
+/* FIXME duped in mozilla/ */
+const
+char *lang_encode[] =
+{
+ "x-western",
+ "x-central-euro",
+ "ja",
+ "zh-TW",
+ "zh-CN",
+ "ko",
+ "x-cyrillic",
+ "x-baltic",
+ "el",
+ "tr",
+ "x-unicode",
+ "th",
+ "he",
+ "ar"
+};
-/* Proxy page */
+static const
+struct
+{
+ char *name;
+ char *code;
+}
+languages [] =
+{
+ { N_("Afrikaans"), "ak" },
+ { N_("Albanian"), "sq" },
+ { N_("Arabic"), "ar" },
+ { N_("Azerbaijani"), "az" },
+ { N_("Basque"), "eu" },
+ { N_("Breton"), "br" },
+ { N_("Bulgarian"), "bg" },
+ { N_("Byelorussian"), "be" },
+ { N_("Catalan"), "ca" },
+ { N_("Chinese"), "zh" },
+ { N_("Croatian"), "hr" },
+ { N_("Czech"), "cs" },
+ { N_("Danish"), "da" },
+ { N_("Dutch"), "nl" },
+ { N_("English"), "en" },
+ { N_("Esperanto"), "eo" },
+ { N_("Estonian"), "et" },
+ { N_("Faeroese"), "fo" },
+ { N_("Finnish"), "fi" },
+ { N_("French"), "fr" },
+ { N_("Galician"), "gl" },
+ { N_("German"), "de" },
+ { N_("Greek"), "el" },
+ { N_("Hebrew"), "he" },
+ { N_("Hungarian"), "hu" },
+ { N_("Icelandic"), "is" },
+ { N_("Indonesian"), "id" },
+ { N_("Irish"), "ga" },
+ { N_("Italian"), "it" },
+ { N_("Japanese"), "ja" },
+ { N_("Korean"), "ko" },
+ { N_("Latvian"), "lv" },
+ { N_("Lithuanian"), "lt" },
+ { N_("Macedonian"), "mk" },
+ { N_("Malay"), "ms" },
+ { N_("Norwegian/Nynorsk"), "nn" },
+ { N_("Norwegian/Bokmaal"), "nb" },
+ { N_("Norwegian"), "no" },
+ { N_("Polish"), "pl" },
+ { N_("Portuguese"), "pt" },
+ { N_("Portuguese of Brazil"), "pt-BR" },
+ { N_("Romanian"), "ro" },
+ { N_("Russian"), "ru" },
+ { N_("Scottish"), "gd" },
+ { N_("Serbian"), "sr" },
+ { N_("Slovak"), "sk" },
+ { N_("Slovenian"), "sl" },
+ { N_("Spanish"), "es" },
+ { N_("Swedish"), "sv" },
+ { N_("Tamil"), "ta" },
+ { N_("Turkish"), "tr" },
+ { N_("Ukrainian"), "uk" },
+ { N_("Vietnamian"), "vi" },
+ { N_("Walloon"), "wa" },
+ { NULL, NULL }
+};
enum
{
- CACHE_COMPARE_PROP,
- DISK_CACHE_PROP,
- MEMORY_CACHE_PROP
+ FONT_TYPE_SERIF,
+ FONT_TYPE_SANSSERIF,
+ FONT_TYPE_MONOSPACE
};
-static const
-EphyDialogProperty network_properties [] =
+const
+char *fonts_types[] =
{
- { CACHE_COMPARE_PROP, "cache_compare_radiobutton", CONF_NETWORK_CACHE_COMPARE, PT_AUTOAPPLY, NULL },
- { DISK_CACHE_PROP, "disk_cache_spin", CONF_NETWORK_DISK_CACHE, PT_AUTOAPPLY, NULL },
- { MEMORY_CACHE_PROP, "memory_cache_spin", CONF_NETWORK_MEMORY_CACHE, PT_AUTOAPPLY, NULL },
+ "serif",
+ "sans-serif",
+ "monospace"
+};
- { -1, NULL, NULL }
+enum
+{
+ FONT_SIZE_FIXED,
+ FONT_SIZE_VAR,
+ FONT_SIZE_MIN
+};
+
+const
+char *size_prefs[] =
+{
+ CONF_RENDERING_FONT_FIXED_SIZE,
+ CONF_RENDERING_FONT_VAR_SIZE,
+ CONF_RENDERING_FONT_MIN_SIZE
};
enum
{
+ WINDOW_PROP,
+ NOTEBOOK_PROP,
+
+ /* General */
OPEN_IN_TABS_PROP,
- JUMP_TO_PROP,
- POPUPS_PROP
+ HOMEPAGE_ENTRY_PROP,
+ NEW_PAGE_PROP,
+ AUTOCHARSET_PROP,
+ DEFAULT_CHARSET_PROP,
+ LANGUAGE_PROP,
+
+ /* Appeareance */
+ SERIF_PROP,
+ SANSSERIF_PROP,
+ MONOSPACE_PROP,
+ FIXED_SIZE_PROP,
+ VARIABLE_SIZE_PROP,
+ MIN_SIZE_PROP,
+ PROPORTIONAL_PROP,
+ BACKGROUND_PROP,
+ TEXT_PROP,
+ UNVISITED_PROP,
+ VISITED_PROP,
+ USE_SYSCOLORS_PROP,
+ USE_COLORS_PROP,
+ USE_FONTS_PROP,
+
+ /* Advanced */
+ CACHE_COMPARE_PROP,
+ DISK_CACHE_PROP,
+ MEMORY_CACHE_PROP
};
static const
-EphyDialogProperty ui_properties [] =
+EphyDialogProperty properties [] =
{
+ { WINDOW_PROP, "prefs_dialog", NULL, PT_NORMAL, NULL },
+ { NOTEBOOK_PROP, "prefs_notebook", NULL, PT_NORMAL, NULL },
+
+ /* General */
{ OPEN_IN_TABS_PROP, "open_in_tabs_checkbutton", CONF_TABS_TABBED, PT_AUTOAPPLY, NULL },
- { JUMP_TO_PROP, "jump_to_checkbutton", CONF_TABS_TABBED_AUTOJUMP, PT_AUTOAPPLY, NULL },
- { POPUPS_PROP, "popups_checkbutton", CONF_TABS_TABBED_POPUPS, PT_AUTOAPPLY, NULL },
+ { HOMEPAGE_ENTRY_PROP, "homepage_entry", CONF_GENERAL_HOMEPAGE, PT_AUTOAPPLY, NULL },
+ { NEW_PAGE_PROP, "new_page_show_homepage", CONF_GENERAL_NEWPAGE_TYPE, PT_AUTOAPPLY, NULL },
+ { AUTOCHARSET_PROP, "autocharset_optionmenu", CONF_LANGUAGE_AUTODETECT_CHARSET, PT_AUTOAPPLY, NULL },
+ { DEFAULT_CHARSET_PROP, "default_charset_optionmenu", NULL, PT_NORMAL, NULL },
+ { LANGUAGE_PROP, "language_optionmenu", NULL, PT_NORMAL, NULL },
+
+ /* Appeareance */
+ { SERIF_PROP, "serif_combo", NULL, PT_NORMAL, NULL },
+ { SANSSERIF_PROP, "sansserif_combo", NULL, PT_NORMAL, NULL },
+ { MONOSPACE_PROP, "monospace_combo", NULL, PT_NORMAL, NULL },
+ { FIXED_SIZE_PROP, "fixed_size_spinbutton", NULL, PT_NORMAL, NULL },
+ { VARIABLE_SIZE_PROP, "variable_size_spinbutton", NULL, PT_NORMAL, NULL },
+ { MIN_SIZE_PROP, "min_size_spinbutton", NULL, PT_NORMAL, NULL },
+ { PROPORTIONAL_PROP, "proportional_optionmenu", CONF_RENDERING_DEFAULT_FONT, PT_AUTOAPPLY, NULL },
+ { BACKGROUND_PROP, "background_cpick", CONF_RENDERING_BG_COLOR, PT_AUTOAPPLY, NULL },
+ { TEXT_PROP, "text_cpick", CONF_RENDERING_TEXT_COLOR, PT_AUTOAPPLY, NULL },
+ { UNVISITED_PROP, "unvisited_cpick", CONF_RENDERING_UNVISITED_LINKS, PT_AUTOAPPLY, NULL },
+ { VISITED_PROP, "visited_cpick", CONF_RENDERING_VISITED_LINKS, PT_AUTOAPPLY, NULL },
+ { USE_SYSCOLORS_PROP, "use_syscolors_checkbutton", CONF_RENDERING_USE_SYSTEM_COLORS, PT_AUTOAPPLY, NULL },
+ { USE_COLORS_PROP, "use_colors_checkbutton", CONF_RENDERING_USE_OWN_COLORS, PT_AUTOAPPLY, NULL },
+ { USE_FONTS_PROP, "use_fonts_checkbutton", CONF_RENDERING_USE_OWN_FONTS, PT_AUTOAPPLY, NULL },
+
+ /* Advanced */
+ { CACHE_COMPARE_PROP, "cache_compare_radiobutton", CONF_NETWORK_CACHE_COMPARE, PT_AUTOAPPLY, NULL },
+ { DISK_CACHE_PROP, "disk_cache_spin", CONF_NETWORK_DISK_CACHE, PT_AUTOAPPLY, NULL },
+ { MEMORY_CACHE_PROP, "memory_cache_spin", CONF_NETWORK_MEMORY_CACHE, PT_AUTOAPPLY, NULL },
{ -1, NULL, NULL }
};
@@ -98,6 +262,10 @@ EphyDialogProperty ui_properties [] =
struct PrefsDialogPrivate
{
GtkWidget *notebook;
+ GtkWidget *window;
+
+ int language;
+ gboolean switching;
};
static GObjectClass *parent_class = NULL;
@@ -122,7 +290,7 @@ prefs_dialog_get_type (void)
(GInstanceInitFunc) prefs_dialog_init
};
- prefs_dialog_type = g_type_register_static (GTK_TYPE_DIALOG,
+ prefs_dialog_type = g_type_register_static (EPHY_DIALOG_TYPE,
"PrefsDialog",
&our_info, 0);
}
@@ -131,12 +299,14 @@ prefs_dialog_get_type (void)
}
-GtkDialog *
-prefs_dialog_new (void)
+EphyDialog *
+prefs_dialog_new (GtkWidget *parent)
{
- GtkDialog *dialog;
+ EphyDialog *dialog;
- dialog = GTK_DIALOG (g_object_new (PREFS_DIALOG_TYPE, NULL));
+ dialog = EPHY_DIALOG (g_object_new (PREFS_DIALOG_TYPE,
+ "ParentWindow", parent,
+ NULL));
return dialog;
}
@@ -168,188 +338,473 @@ prefs_dialog_finalize (GObject *object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
-static EphyDialog *
-create_page (PrefsPageID id,
- const char *page_widget,
- const EphyDialogProperty *prop)
+static void
+prefs_dialog_show_help (PrefsDialog *pd)
{
- EphyDialog *page = NULL;
+ gint id;
+
+ /* FIXME: Once we actually have documentation we
+ * should point these at the correct links.
+ */
+ gchar *help_preferences[] = {
+ "setting-preferences",
+ "setting-preferences",
+ "setting-preferences",
+ "setting-preferences"
+ };
+
+ id = gtk_notebook_get_current_page (GTK_NOTEBOOK (pd->priv->notebook));
+
+ ephy_gui_help (GTK_WINDOW (pd), "epiphany", help_preferences[id]);
+}
+
+static void
+setup_font_menu (PrefsDialog *dialog,
+ const char *type,
+ GtkWidget *combo)
+{
+ char *default_font;
+ GList *fonts;
+ const char *name;
+ char key[255];
+ int pos;
+ GtkWidget *entry = GTK_COMBO(combo)->entry;
+ EphyEmbedSingle *single;
+
+ single = ephy_embed_shell_get_embed_single
+ (EPHY_EMBED_SHELL (ephy_shell));
+
+ ephy_embed_single_get_font_list (single,
+ lang_encode[dialog->priv->language],
+ type, &fonts, &default_font);
+
+ /* Get the default font */
+ sprintf (key, "%s_%s_%s", CONF_RENDERING_FONT, type,
+ lang_encode[dialog->priv->language]);
+ name = eel_gconf_get_string (key);
+ if (name == NULL)
+ {
+ name = default_font;
+ }
+
+ /* set popdown doesnt like NULL */
+ if (fonts == NULL)
+ {
+ fonts = g_list_alloc ();
+ }
+
+ gtk_combo_set_popdown_strings (GTK_COMBO(combo), fonts);
- switch (id)
+ /* set the default value */
+ if (name != NULL)
{
- case PREFS_PAGE_GENERAL:
- page = general_prefs_new ();
- break;
- case PREFS_PAGE_APPEARANCE:
- page = appearance_prefs_new ();
- break;
- case PREFS_PAGE_UI:
- case PREFS_PAGE_ADVANCED:
- page = ephy_dialog_new ();
- ephy_dialog_construct (EPHY_DIALOG(page),
- prop,
- "prefs-dialog.glade",
- page_widget);
- break;
+ gtk_editable_delete_text (GTK_EDITABLE(entry), 0, -1);
+ gtk_editable_insert_text (GTK_EDITABLE(entry),
+ name, g_utf8_strlen (name, -1),
+ &pos);
}
- return page;
+ g_free (default_font);
+
+ g_list_foreach (fonts, (GFunc)g_free, NULL);
+ g_list_free (fonts);
}
-static EphyDialog *
-prefs_dialog_get_page (PrefsDialog *pd,
- PrefsPageID id)
+static void
+save_font_menu (PrefsDialog *dialog,
+ int type,
+ GtkWidget *entry)
{
- const char *page_widget = NULL;
- EphyDialog *page;
- const EphyDialogProperty *prop = NULL;
+ char *name;
+ char key[255];
- switch (id)
+ name = gtk_editable_get_chars
+ (GTK_EDITABLE(entry), 0, -1);
+
+ /* do not save empty fonts */
+ if (!name || *name == '\0')
{
- case PREFS_PAGE_APPEARANCE:
- page_widget = "appearance_page_box";
- break;
- case PREFS_PAGE_GENERAL:
- page_widget = "general_page_box";
- break;
- case PREFS_PAGE_UI:
- page_widget = "ui_page_box";
- prop = ui_properties;
- break;
- case PREFS_PAGE_ADVANCED:
- page_widget = "network_page_box";
- prop = network_properties;
- break;
+ g_free (name);
+ return;
}
- g_assert (page_widget != NULL);
+ sprintf (key, "%s_%s_%s", CONF_RENDERING_FONT,
+ fonts_types[type],
+ lang_encode[dialog->priv->language]);
+ eel_gconf_set_string (key, name);
+ g_free (name);
+}
+
+static void
+font_entry_changed_cb (GtkWidget *entry, PrefsDialog *dialog)
+{
+ int type;
- page = create_page (id, page_widget, prop);
- g_assert (page != NULL);
+ if (dialog->priv->switching) return;
- return page;
+ type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT(entry),
+ "type"));
+ save_font_menu (dialog, type, entry);
}
-void
-prefs_dialog_show_page (PrefsDialog *pd,
- PrefsPageID id)
+static void
+attach_font_signal (PrefsDialog *dialog, int prop,
+ gpointer type)
{
- gtk_notebook_set_current_page (GTK_NOTEBOOK (pd->priv->notebook), id);
+ GtkWidget *combo;
+ GtkWidget *entry;
+
+ combo = ephy_dialog_get_control (EPHY_DIALOG(dialog),
+ prop);
+ entry = GTK_COMBO(combo)->entry;
+ g_object_set_data (G_OBJECT(entry), "type", type);
+ g_signal_connect (entry, "changed",
+ G_CALLBACK(font_entry_changed_cb),
+ dialog);
}
static void
-prefs_dialog_show_help (PrefsDialog *pd)
+attach_fonts_signals (PrefsDialog *dialog)
{
- gint id;
+ attach_font_signal (dialog, SERIF_PROP,
+ GINT_TO_POINTER(FONT_TYPE_SERIF));
+ attach_font_signal (dialog, SANSSERIF_PROP,
+ GINT_TO_POINTER(FONT_TYPE_SANSSERIF));
+ attach_font_signal (dialog, MONOSPACE_PROP,
+ GINT_TO_POINTER(FONT_TYPE_MONOSPACE));
+}
- /* FIXME: Once we actually have documentation we
- * should point these at the correct links.
- */
- gchar *help_preferences[] = {
- "setting-preferences",
- "setting-preferences",
- "setting-preferences",
- "setting-preferences"
- };
+static void
+size_spinbutton_changed_cb (GtkWidget *spin, PrefsDialog *dialog)
+{
+ int type;
+ char key[255];
- id = gtk_notebook_get_current_page (GTK_NOTEBOOK (pd->priv->notebook));
+ if (dialog->priv->switching) return;
- ephy_gui_help (GTK_WINDOW (pd), "epiphany", help_preferences[id]);
+ type = GPOINTER_TO_INT(g_object_get_data (G_OBJECT(spin), "type"));
+
+ sprintf (key, "%s_%s",
+ size_prefs[type],
+ lang_encode[dialog->priv->language]);
+ eel_gconf_set_integer (key, gtk_spin_button_get_value (GTK_SPIN_BUTTON (spin)));
}
static void
-prefs_dialog_response_cb (GtkDialog *dialog, gint response_id, gpointer data)
+attach_size_controls_signals (PrefsDialog *dialog)
{
- if (response_id == GTK_RESPONSE_CLOSE)
- {
- gtk_widget_destroy (GTK_WIDGET(dialog));
- }
- else if (response_id == GTK_RESPONSE_HELP)
- {
- PrefsDialog *pd = (PrefsDialog *)data;
- prefs_dialog_show_help (pd);
- }
+ GtkWidget *spin;
+
+ spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
+ FIXED_SIZE_PROP);
+ g_object_set_data (G_OBJECT(spin), "type",
+ GINT_TO_POINTER(FONT_SIZE_FIXED));
+ g_signal_connect (spin, "value_changed",
+ G_CALLBACK(size_spinbutton_changed_cb),
+ dialog);
+
+ spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
+ VARIABLE_SIZE_PROP);
+ g_object_set_data (G_OBJECT(spin), "type",
+ GINT_TO_POINTER(FONT_SIZE_VAR));
+ g_signal_connect (spin, "value_changed",
+ G_CALLBACK(size_spinbutton_changed_cb),
+ dialog);
+
+ spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
+ MIN_SIZE_PROP);
+ g_object_set_data (G_OBJECT(spin), "type",
+ GINT_TO_POINTER(FONT_SIZE_MIN));
+ g_signal_connect (spin, "value_changed",
+ G_CALLBACK(size_spinbutton_changed_cb),
+ dialog);
+}
+
+static void
+setup_size_control (PrefsDialog *dialog,
+ const char *pref,
+ int default_size,
+ GtkWidget *spin)
+{
+ char key[255];
+ int size;
+
+ sprintf (key, "%s_%s", pref,
+ lang_encode[dialog->priv->language]);
+ size = eel_gconf_get_integer (key);
+
+ if (size == 0) size = default_size;
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin), size);
+}
+
+static void
+setup_size_controls (PrefsDialog *dialog)
+{
+ GtkWidget *spin;
+
+ spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
+ FIXED_SIZE_PROP);
+ setup_size_control (dialog, CONF_RENDERING_FONT_FIXED_SIZE, 12, spin);
+
+ spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
+ VARIABLE_SIZE_PROP);
+ setup_size_control (dialog, CONF_RENDERING_FONT_VAR_SIZE, 16, spin);
+
+ spin = ephy_dialog_get_control (EPHY_DIALOG(dialog),
+ MIN_SIZE_PROP);
+ setup_size_control (dialog, CONF_RENDERING_FONT_MIN_SIZE, 0, spin);
+}
+
+static void
+setup_fonts (PrefsDialog *dialog)
+{
+ GtkWidget *combo;
+
+ dialog->priv->switching = TRUE;
+
+ combo = ephy_dialog_get_control (EPHY_DIALOG(dialog),
+ SERIF_PROP);
+ setup_font_menu (dialog, "serif", combo);
+
+ combo = ephy_dialog_get_control (EPHY_DIALOG(dialog),
+ SANSSERIF_PROP);
+ setup_font_menu (dialog, "sans-serif", combo);
+
+ combo = ephy_dialog_get_control (EPHY_DIALOG(dialog),
+ MONOSPACE_PROP);
+ setup_font_menu (dialog, "monospace", combo);
+
+ dialog->priv->switching = FALSE;
}
static void
-prefs_build_notebook (PrefsDialog *pd)
+default_charset_menu_changed_cb (GtkOptionMenu *option_menu,
+ EphyEmbedShell *shell)
{
+ GList *charsets;
int i;
- GtkWidget *nb;
+ CharsetInfo *info;
+ EphyEmbedSingle *single;
+
+ single = ephy_embed_shell_get_embed_single
+ (EPHY_EMBED_SHELL (ephy_shell));
+
+ ephy_embed_single_get_charset_titles (single, NULL, &charsets);
- struct
+ i = gtk_option_menu_get_history (option_menu);
+ charsets = g_list_nth (charsets, i);
+ g_assert (charsets != NULL);
+ info = (CharsetInfo *) charsets->data;
+ eel_gconf_set_string (CONF_LANGUAGE_DEFAULT_CHARSET,
+ info->name);
+
+ g_list_free (charsets);
+}
+
+static gint
+find_charset_in_list_cmp (gconstpointer a,
+ gconstpointer b)
+{
+ CharsetInfo *info = (CharsetInfo *)a;
+ const char *value = b;
+
+ return (strcmp (info->name, value));
+}
+
+static void
+create_default_charset_menu (PrefsDialog *dialog)
+{
+ GList *l;
+ GList *charsets;
+ GtkWidget *menu;
+ GtkWidget *optionmenu;
+ char *value;
+ EphyEmbedSingle *single;
+
+ single = ephy_embed_shell_get_embed_single
+ (EPHY_EMBED_SHELL (ephy_shell));
+
+ ephy_embed_single_get_charset_titles (single, NULL, &l);
+
+ menu = gtk_menu_new ();
+
+ optionmenu = ephy_dialog_get_control (EPHY_DIALOG (dialog),
+ DEFAULT_CHARSET_PROP);
+
+ for (charsets = l; charsets != NULL; charsets = charsets->next)
{
- char *name;
- int id;
+ CharsetInfo *info = (CharsetInfo *) charsets->data;
+ GtkWidget *item;
+
+ item = gtk_menu_item_new_with_label (info->title);
+ gtk_menu_shell_append (GTK_MENU_SHELL(menu),
+ item);
+ gtk_widget_show (item);
}
- pages[] =
- {
- { _("General"), PREFS_PAGE_GENERAL },
- { _("Appearance"), PREFS_PAGE_APPEARANCE },
- { _("User Interface"), PREFS_PAGE_UI },
- { _("Advanced"), PREFS_PAGE_ADVANCED },
- { NULL, 0 }
- };
+ gtk_option_menu_set_menu (GTK_OPTION_MENU(optionmenu), menu);
- gtk_dialog_add_button (GTK_DIALOG (pd), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
+ /* init value */
+ charsets = l;
+ value = eel_gconf_get_string (CONF_LANGUAGE_DEFAULT_CHARSET);
+ g_return_if_fail (value != NULL);
+ charsets = g_list_find_custom (charsets, (gconstpointer)value,
+ (GCompareFunc)find_charset_in_list_cmp);
+ gtk_option_menu_set_history (GTK_OPTION_MENU(optionmenu),
+ g_list_position (l, charsets));
+ g_free (value);
- gtk_dialog_add_button (GTK_DIALOG (pd), GTK_STOCK_HELP, GTK_RESPONSE_HELP);
- g_signal_connect (pd, "response",
- G_CALLBACK (prefs_dialog_response_cb),
- pd);
+ g_signal_connect (optionmenu, "changed",
+ G_CALLBACK (default_charset_menu_changed_cb),
+ embed_shell);
- gtk_container_set_border_width (GTK_CONTAINER (pd), 5);
+ g_list_free (l);
+}
+
+static GtkWidget *
+general_prefs_new_language_menu (PrefsDialog *dialog)
+{
+ int i;
+ GtkWidget *menu;
- nb = gtk_notebook_new ();
- gtk_container_set_border_width (GTK_CONTAINER (nb), 5);
- gtk_widget_show (nb);
- gtk_container_add (GTK_CONTAINER (GTK_DIALOG (pd)->vbox), nb);
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (nb), TRUE);
- pd->priv->notebook = nb;
+ menu = gtk_menu_new ();
- for (i = 0; pages[i].name != NULL; i++)
+ for (i = 0; languages[i].name != NULL; i++)
{
- GtkWidget *label, *child;
- EphyDialog *page;
+ GtkWidget *item;
+
+ item = gtk_menu_item_new_with_label (languages[i].name);
+ gtk_menu_shell_append (GTK_MENU_SHELL(menu),
+ item);
+ gtk_widget_show (item);
+ g_object_set_data (G_OBJECT(item), "desc",
+ languages[i].name);
+ }
+
+ return menu;
+}
+
+static void
+language_menu_changed_cb (GtkOptionMenu *option_menu,
+ gpointer data)
+{
+ GSList *list;
+ GSList *l = NULL;
+ int history;
+
+ list = eel_gconf_get_string_list (CONF_RENDERING_LANGUAGE);
+ l = g_slist_copy (list);
+
+ /* Subst the first item according to the optionmenu */
+ history = gtk_option_menu_get_history (option_menu);
+ l->data = languages [history].code;
+
+ eel_gconf_set_string_list (CONF_RENDERING_LANGUAGE, l);
+
+ g_slist_free (l);
+}
+
+static void
+create_language_menu (PrefsDialog *dialog)
+{
+ GtkWidget *optionmenu;
+ GtkWidget *menu;
+ const char *value;
+ int i;
+ GSList *list;
- page = prefs_dialog_get_page (pd, pages[i].id);
+ optionmenu = ephy_dialog_get_control (EPHY_DIALOG (dialog),
+ LANGUAGE_PROP);
- child = gtk_hbox_new (FALSE, 0);
- gtk_widget_show (child);
- label = gtk_label_new (pages[i].name);
- gtk_notebook_append_page (GTK_NOTEBOOK (nb),
- child, label);
+ menu = general_prefs_new_language_menu (dialog);
- ephy_dialog_show_embedded (page, child);
+ gtk_option_menu_set_menu (GTK_OPTION_MENU(optionmenu), menu);
+
+ /* init value */
+ list = eel_gconf_get_string_list (CONF_RENDERING_LANGUAGE);
+ g_return_if_fail (list != NULL);
+ value = (const char *)list->data;
+
+ i = 0;
+ while (languages[i].code && strcmp (languages[i].code, value) != 0)
+ {
+ i++;
}
+
+ gtk_option_menu_set_history (GTK_OPTION_MENU(optionmenu), i);
+
+ g_signal_connect (optionmenu, "changed",
+ G_CALLBACK (language_menu_changed_cb),
+ NULL);
}
static void
+set_homepage_entry (EphyDialog *dialog,
+ const char *new_location)
+{
+ GtkWidget *entry;
+ int pos;
+
+ entry = ephy_dialog_get_control (dialog, HOMEPAGE_ENTRY_PROP);
+
+ gtk_editable_delete_text (GTK_EDITABLE (entry), 0, -1);
+ gtk_editable_insert_text (GTK_EDITABLE (entry), new_location,
+ g_utf8_strlen (new_location, -1),
+ &pos);
+}
+
+
+static void
prefs_dialog_init (PrefsDialog *pd)
{
+ EphyDialog *dialog = EPHY_DIALOG (pd);
GdkPixbuf *icon;
+
pd->priv = g_new0 (PrefsDialogPrivate, 1);
- gtk_window_set_title (GTK_WINDOW(pd), _("Preferences"));
- gtk_dialog_set_has_separator (GTK_DIALOG(pd), FALSE);
-
- ephy_state_add_window (GTK_WIDGET(pd),
- "prefs_dialog", -1, -1);
-
- icon = gtk_widget_render_icon (GTK_WIDGET(pd),
- GTK_STOCK_PREFERENCES,
- GTK_ICON_SIZE_MENU,
- "prefs_dialog");
- gtk_window_set_icon (GTK_WINDOW(pd), icon);
+ ephy_dialog_construct (EPHY_DIALOG (pd),
+ properties,
+ "prefs-dialog.glade",
+ "prefs_dialog");
+
+ pd->priv->window = ephy_dialog_get_control (dialog, WINDOW_PROP);
+ pd->priv->notebook = ephy_dialog_get_control (dialog, NOTEBOOK_PROP);
+
+
+ icon = gtk_widget_render_icon (pd->priv->window,
+ GTK_STOCK_PREFERENCES,
+ GTK_ICON_SIZE_MENU,
+ "prefs_dialog");
+ gtk_window_set_icon (GTK_WINDOW (pd->priv->window), icon);
g_object_unref(icon);
- prefs_build_notebook (pd);
+ pd->priv->switching = FALSE;
+ setup_fonts (pd);
+ setup_size_controls (pd);
+ attach_fonts_signals (pd);
+ attach_size_controls_signals (pd);
+ create_default_charset_menu (pd);
+ create_language_menu (pd);
}
/* Network page callbacks */
void
+prefs_dialog_response_cb (GtkDialog *dialog, gint response_id, gpointer data)
+{
+ if (response_id == GTK_RESPONSE_CLOSE)
+ {
+ gtk_widget_destroy (GTK_WIDGET(dialog));
+ }
+ else if (response_id == GTK_RESPONSE_HELP)
+ {
+ PrefsDialog *pd = (PrefsDialog *)data;
+ prefs_dialog_show_help (pd);
+ }
+}
+
+void
prefs_clear_memory_cache_button_clicked_cb (GtkWidget *button,
gpointer data)
{
@@ -372,3 +827,114 @@ prefs_clear_disk_cache_button_clicked_cb (GtkWidget *button,
ephy_embed_single_clear_cache (single, DISK_CACHE);
}
+
+void
+fonts_language_optionmenu_changed_cb (GtkWidget *optionmenu,
+ EphyDialog *dialog)
+{
+ int i;
+ PrefsDialog *pd = PREFS_DIALOG (dialog);
+
+ i = gtk_option_menu_get_history
+ (GTK_OPTION_MENU (optionmenu));
+
+ pd->priv->language = i;
+
+ setup_fonts (pd);
+ setup_size_controls (pd);
+}
+
+void
+prefs_homepage_current_button_clicked_cb (GtkWidget *button,
+ EphyDialog *dialog)
+{
+ EphyWindow *window;
+ EphyTab *tab;
+
+ window = ephy_shell_get_active_window (ephy_shell);
+ g_return_if_fail (window != NULL);
+
+ tab = ephy_window_get_active_tab (window);
+ g_return_if_fail (tab != NULL);
+
+ set_homepage_entry (dialog, ephy_tab_get_location (tab));
+}
+
+void
+prefs_homepage_blank_button_clicked_cb (GtkWidget *button,
+ EphyDialog *dialog)
+{
+ set_homepage_entry (dialog, "about:blank");
+}
+
+static void
+fill_language_editor (LanguageEditor *le)
+{
+ GSList *strings;
+ GSList *tmp;
+ int i;
+
+ /* Fill the list */
+ strings = eel_gconf_get_string_list (CONF_RENDERING_LANGUAGE);
+
+ for (tmp = strings; tmp != NULL; tmp = g_slist_next (tmp))
+ {
+ char *value = (char *)tmp->data;
+
+ i = 0;
+ while (languages[i].code && strcmp (languages[i].code, value) != 0)
+ {
+ i++;
+ }
+
+ /* FIXME unsafe, bad prefs could cause it to access random memory */
+ language_editor_add (le, languages[i].name, i);
+ }
+}
+
+static void
+language_dialog_changed_cb (LanguageEditor *le,
+ GSList *list,
+ PrefsDialog *dialog)
+{
+ GtkWidget *optionmenu;
+ const GSList *l;
+ GSList *langs = NULL;
+
+ optionmenu = ephy_dialog_get_control (EPHY_DIALOG (dialog),
+ LANGUAGE_PROP);
+ gtk_option_menu_set_history (GTK_OPTION_MENU(optionmenu),
+ GPOINTER_TO_INT(list->data));
+
+ for (l = list; l != NULL; l = l->next)
+ {
+ int i = GPOINTER_TO_INT (l->data);
+ langs = g_slist_append (langs, languages[i].code);
+ }
+
+ eel_gconf_set_string_list (CONF_RENDERING_LANGUAGE, langs);
+ g_slist_free (langs);
+}
+
+void
+prefs_language_more_button_clicked_cb (GtkWidget *button,
+ EphyDialog *dialog)
+{
+ LanguageEditor *editor;
+ GtkWidget *menu;
+ GtkWidget *toplevel;
+
+ menu = general_prefs_new_language_menu (PREFS_DIALOG (dialog));
+
+ toplevel = gtk_widget_get_toplevel (button);
+ editor = language_editor_new (toplevel);
+ language_editor_set_menu (editor, menu);
+ fill_language_editor (editor);
+ ephy_dialog_set_modal (EPHY_DIALOG(editor), TRUE);
+
+ g_signal_connect (editor, "changed",
+ G_CALLBACK(language_dialog_changed_cb),
+ dialog);
+
+ ephy_dialog_show (EPHY_DIALOG(editor));
+}
diff --git a/src/prefs-dialog.h b/src/prefs-dialog.h
index 3c5528b2f..358886d10 100644
--- a/src/prefs-dialog.h
+++ b/src/prefs-dialog.h
@@ -19,7 +19,8 @@
#ifndef PREFS_DIALOG_H
#define PREFS_DIALOG_H
-#include <gtk/gtkdialog.h>
+#include "ephy-dialog.h"
+
#include <glib-object.h>
#include <glib.h>
@@ -34,30 +35,19 @@ typedef struct PrefsDialogClass PrefsDialogClass;
typedef struct PrefsDialogPrivate PrefsDialogPrivate;
-typedef enum
-{
- PREFS_PAGE_GENERAL,
- PREFS_PAGE_APPEARANCE,
- PREFS_PAGE_UI,
- PREFS_PAGE_ADVANCED
-} PrefsPageID;
-
struct PrefsDialog
{
- GtkDialog parent;
+ EphyDialog parent;
PrefsDialogPrivate *priv;
};
struct PrefsDialogClass
{
- GtkDialogClass parent_class;
+ EphyDialogClass parent_class;
};
GType prefs_dialog_get_type (void);
-GtkDialog *prefs_dialog_new (void);
-
-void prefs_dialog_show_page (PrefsDialog *pd,
- PrefsPageID id);
+EphyDialog *prefs_dialog_new (GtkWidget *parent);
#endif
diff --git a/src/window-commands.c b/src/window-commands.c
index a64305efe..5d50f6e05 100644
--- a/src/window-commands.c
+++ b/src/window-commands.c
@@ -633,14 +633,10 @@ void
window_cmd_edit_prefs (EggAction *action,
EphyWindow *window)
{
- GtkDialog *dialog;
+ EphyDialog *dialog;
- dialog = prefs_dialog_new ();
- prefs_dialog_show_page (PREFS_DIALOG(dialog),
- PREFS_PAGE_GENERAL);
- gtk_window_set_transient_for (GTK_WINDOW (dialog),
- GTK_WINDOW (window));
- gtk_widget_show (GTK_WIDGET(dialog));
+ dialog = prefs_dialog_new (GTK_WIDGET (window));
+ ephy_dialog_show (dialog);
}
static void