diff options
author | Marco Pesenti Gritti <mpeseng@src.gnome.org> | 2002-12-31 03:29:24 +0800 |
---|---|---|
committer | Marco Pesenti Gritti <mpeseng@src.gnome.org> | 2002-12-31 03:29:24 +0800 |
commit | 6876ede98282c7db318089bfefb292aa59e55d48 (patch) | |
tree | 76b23252d04da232d0ebf22e53bfe3e022686af9 /src/ui-prefs.c | |
download | gsoc2013-epiphany-6876ede98282c7db318089bfefb292aa59e55d48.tar gsoc2013-epiphany-6876ede98282c7db318089bfefb292aa59e55d48.tar.gz gsoc2013-epiphany-6876ede98282c7db318089bfefb292aa59e55d48.tar.bz2 gsoc2013-epiphany-6876ede98282c7db318089bfefb292aa59e55d48.tar.lz gsoc2013-epiphany-6876ede98282c7db318089bfefb292aa59e55d48.tar.xz gsoc2013-epiphany-6876ede98282c7db318089bfefb292aa59e55d48.tar.zst gsoc2013-epiphany-6876ede98282c7db318089bfefb292aa59e55d48.zip |
Initial revision
Diffstat (limited to 'src/ui-prefs.c')
-rwxr-xr-x | src/ui-prefs.c | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/src/ui-prefs.c b/src/ui-prefs.c new file mode 100755 index 000000000..e461bf7e6 --- /dev/null +++ b/src/ui-prefs.c @@ -0,0 +1,232 @@ +/* + * 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 "ui-prefs.h" +#include "ephy-shell.h" +#include "ephy-prefs.h" +#include "eel-gconf-extensions.h" +#include "ephy-spinner.h" + +#include <string.h> +#include <libgnome/gnome-util.h> +#include <libgnomeui/gnome-icon-list.h> + +static void ui_prefs_class_init (UIPrefsClass *klass); +static void ui_prefs_init (UIPrefs *dialog); +static void ui_prefs_finalize (GObject *object); + +/* Glade callbacks */ +void +spinners_iconlist_select_icon_cb (GtkWidget *iconlist, gint num, + GdkEvent *event, UIPrefs *dialog); + +static GObjectClass *parent_class = NULL; + +struct UIPrefsPrivate +{ + gpointer dummy; + GList *spinner_list; +}; + +enum +{ + SPINNERS_PROP, + OPEN_IN_TABS_PROP, + JUMP_TO_PROP, + POPUPS_PROP +}; + +static const +EphyDialogProperty properties [] = +{ + { SPINNERS_PROP, "spinners_iconlist", NULL, PT_NORMAL, NULL }, + { 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 }, + + { -1, NULL, NULL } +}; + +GType +ui_prefs_get_type (void) +{ + static GType ui_prefs_type = 0; + + if (ui_prefs_type == 0) + { + static const GTypeInfo our_info = + { + sizeof (UIPrefsClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) ui_prefs_class_init, + NULL, + NULL, /* class_data */ + sizeof (UIPrefs), + 0, /* n_preallocs */ + (GInstanceInitFunc) ui_prefs_init + }; + + ui_prefs_type = g_type_register_static (EPHY_DIALOG_TYPE, + "UIPrefs", + &our_info, 0); + } + + return ui_prefs_type; + +} + +static void +ui_prefs_class_init (UIPrefsClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->finalize = ui_prefs_finalize; +} + +/** + * Free any existing spinner list. + */ +static void +free_spinner_list (UIPrefs *dialog) +{ + GList *node; + + for (node = dialog->priv->spinner_list; node; node = node->next) + g_free(node->data); + + g_list_free(dialog->priv->spinner_list); + dialog->priv->spinner_list = NULL; +} + +/** + * spinner_get_path_from_index: used in prefs_callbacks.c to get the + * path of selected icon + */ +static const gchar * +spinner_get_path_from_index (UIPrefs *dialog, gint index) +{ + gchar *path; + + path = g_list_nth_data (dialog->priv->spinner_list, index); + + return path; +} + +/* + * spinner_fill_iconlist: fill a gnome icon list with icons of available spinners + */ +static void +spinner_fill_iconlist (UIPrefs *dialog, GnomeIconList *icon_list) +{ + GList *spinners, *tmp; + gchar *pref_spinner_path; + gint index; + + /* clear spinner list */ + free_spinner_list (dialog); + gnome_icon_list_clear (GNOME_ICON_LIST (icon_list)); + + pref_spinner_path = + eel_gconf_get_string (CONF_TOOLBAR_SPINNER_THEME); + index = gnome_icon_list_get_num_icons (icon_list); + + spinners = ephy_spinner_list_spinners (); + for (tmp = spinners; tmp != NULL; tmp = g_list_next (tmp)) + { + EphySpinnerInfo *info = tmp->data; + + dialog->priv->spinner_list = + g_list_append (dialog->priv->spinner_list, + g_strdup (info->name)); + + gnome_icon_list_append (icon_list, info->filename, info->name); + + /* Select the icon configured in prefs */ + if (pref_spinner_path && + strcmp (pref_spinner_path, info->name) == 0) + { + gnome_icon_list_select_icon (icon_list, index); + } + index++; + } + g_list_foreach (spinners, (GFunc)ephy_spinner_info_free, NULL); + g_list_free (spinners); + + g_free (pref_spinner_path); +} + +static void +ui_prefs_init (UIPrefs *dialog) +{ + GtkWidget *icon_list; + + dialog->priv = g_new0 (UIPrefsPrivate, 1); + dialog->priv->spinner_list = NULL; + + ephy_dialog_construct (EPHY_DIALOG(dialog), + properties, + "prefs-dialog.glade", + "ui_page_box"); + + icon_list = ephy_dialog_get_control (EPHY_DIALOG(dialog), + SPINNERS_PROP); + + spinner_fill_iconlist (dialog, GNOME_ICON_LIST (icon_list)); +} + +static void +ui_prefs_finalize (GObject *object) +{ + UIPrefs *dialog; + + g_return_if_fail (object != NULL); + g_return_if_fail (IS_UI_PREFS (object)); + + dialog = UI_PREFS (object); + + g_return_if_fail (dialog->priv != NULL); + + free_spinner_list (dialog); + + g_free (dialog->priv); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +EphyDialog * +ui_prefs_new (void) +{ + UIPrefs *dialog; + + dialog = UI_PREFS (g_object_new (UI_PREFS_TYPE, + NULL)); + + return EPHY_DIALOG(dialog); +} + +void +spinners_iconlist_select_icon_cb (GtkWidget *iconlist, gint num, + GdkEvent *event, UIPrefs *dialog) +{ + const char *path; + path = spinner_get_path_from_index (dialog, num); + eel_gconf_set_string (CONF_TOOLBAR_SPINNER_THEME, path); +} |