diff options
Diffstat (limited to 'src/appearance-prefs.c')
-rwxr-xr-x | src/appearance-prefs.c | 453 |
1 files changed, 0 insertions, 453 deletions
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)); -} |