From 558de407c4afe0d3d42a6a67687f78d31404ade8 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 9 Aug 2008 02:24:46 +0000 Subject: Kill EShellSettingsDialog. Rename EMultiConfigDialog to EPreferencesWindow and improve the API. svn path=/branches/kill-bonobo/; revision=35944 --- widgets/misc/e-preferences-window.c | 377 ++++++++++++++++++++++++++++++++++++ 1 file changed, 377 insertions(+) create mode 100644 widgets/misc/e-preferences-window.c (limited to 'widgets/misc/e-preferences-window.c') diff --git a/widgets/misc/e-preferences-window.c b/widgets/misc/e-preferences-window.c new file mode 100644 index 0000000000..1f2d38345f --- /dev/null +++ b/widgets/misc/e-preferences-window.c @@ -0,0 +1,377 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ +/* e-preferences-window.c + * + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "e-preferences-window.h" + +#include + +#define SWITCH_PAGE_INTERVAL 250 + +#define E_PREFERENCES_WINDOW_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE \ + ((obj), E_TYPE_PREFERENCES_WINDOW, EPreferencesWindowPrivate)) + +struct _EPreferencesWindowPrivate { + GtkWidget *icon_view; + GtkWidget *notebook; + GHashTable *index; +}; + +enum { + COLUMN_TEXT, /* G_TYPE_STRING */ + COLUMN_PIXBUF, /* GDK_TYPE_PIXBUF */ + COLUMN_PAGE, /* G_TYPE_INT */ + COLUMN_SORT /* G_TYPE_INT */ +}; + +static gpointer parent_class; + +static GdkPixbuf * +preferences_window_load_pixbuf (const gchar *icon_name) +{ + GtkIconTheme *icon_theme; + GtkIconInfo *icon_info; + GdkPixbuf *pixbuf; + const gchar *filename; + gint size; + GError *error = NULL; + + icon_theme = gtk_icon_theme_get_default (); + + if (!gtk_icon_size_lookup (GTK_ICON_SIZE_DIALOG, &size, 0)) + return NULL; + + icon_info = gtk_icon_theme_lookup_icon ( + icon_theme, icon_name, size, 0); + + if (icon_info == NULL) + return NULL; + + filename = gtk_icon_info_get_filename (icon_info); + + pixbuf = gdk_pixbuf_new_from_file (filename, &error); + + gtk_icon_info_free (icon_info); + + if (error != NULL) { + g_warning ("%s", error->message); + g_error_free (error); + } + + return pixbuf; +} + +static void +preferences_window_selection_changed_cb (EPreferencesWindow *dialog) +{ + GtkIconView *icon_view; + GtkNotebook *notebook; + GtkTreeModel *model; + GtkTreeIter iter; + GList *list; + gint page; + + icon_view = GTK_ICON_VIEW (dialog->priv->icon_view); + list = gtk_icon_view_get_selected_items (icon_view); + if (list == NULL) + return; + + model = gtk_icon_view_get_model (icon_view); + gtk_tree_model_get_iter (model, &iter, list->data); + gtk_tree_model_get (model, &iter, COLUMN_PAGE, &page, -1); + + notebook = GTK_NOTEBOOK (dialog->priv->notebook); + gtk_notebook_set_current_page (notebook, page); + + g_list_foreach (list, (GFunc) gtk_tree_path_free, NULL); + g_list_free (list); + + gtk_widget_grab_focus (GTK_WIDGET (icon_view)); +} + +static void +preferences_window_dispose (GObject *object) +{ + EPreferencesWindowPrivate *priv; + + priv = E_PREFERENCES_WINDOW_GET_PRIVATE (object); + + if (priv->icon_view != NULL) { + g_object_unref (priv->icon_view); + priv->icon_view = NULL; + } + + if (priv->notebook != NULL) { + g_object_unref (priv->notebook); + priv->notebook = NULL; + } + + g_hash_table_remove_all (priv->index); + + /* Chain up to parent's dispose() method. */ + G_OBJECT_CLASS (parent_class)->dispose (object); +} + +static void +preferences_window_finalize (GObject *object) +{ + EPreferencesWindowPrivate *priv; + + priv = E_PREFERENCES_WINDOW_GET_PRIVATE (object); + + g_hash_table_destroy (priv->index); + + /* Chain up to parent's finalize() method. */ + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +preferences_window_map (GtkWidget *widget) +{ + GtkDialog *dialog; + + /* Chain up to parent's map() method. */ + GTK_WIDGET_CLASS (parent_class)->map (widget); + + /* Override those stubborn style properties. */ + dialog = GTK_DIALOG (widget); + gtk_box_set_spacing (GTK_BOX (dialog->vbox), 12); + gtk_container_set_border_width (GTK_CONTAINER (widget), 12); + gtk_container_set_border_width (GTK_CONTAINER (dialog->vbox), 0); + gtk_container_set_border_width (GTK_CONTAINER (dialog->action_area), 0); +} + +static void +preferences_window_response (GtkDialog *dialog, + gint response_id) +{ + GError *error = NULL; + + switch (response_id) { + case GTK_RESPONSE_HELP: + gnome_help_display ( + "evolution.xml", "config-prefs", &error); + if (error != NULL) { + g_warning ("%s", error->message); + g_error_free (error); + } + break; + + case GTK_RESPONSE_CLOSE: + default: + gtk_widget_destroy (GTK_WIDGET (dialog)); + break; + } +} + +static void +preferences_window_class_init (EPreferencesWindowClass *class) +{ + GObjectClass *object_class; + GtkWidgetClass *widget_class; + GtkDialogClass *dialog_class; + + parent_class = g_type_class_peek_parent (class); + g_type_class_add_private (class, sizeof (EPreferencesWindowPrivate)); + + object_class = G_OBJECT_CLASS (class); + object_class->dispose = preferences_window_dispose; + object_class->finalize = preferences_window_finalize; + + widget_class = GTK_WIDGET_CLASS (class); + widget_class->map = preferences_window_map; + + dialog_class = GTK_DIALOG_CLASS (class); + dialog_class->response = preferences_window_response; +} + +static void +preferences_window_init (EPreferencesWindow *dialog) +{ + GtkListStore *store; + GtkWidget *container; + GtkWidget *hbox; + GtkWidget *widget; + GHashTable *index; + + index = g_hash_table_new_full ( + g_str_hash, g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) gtk_tree_row_reference_free); + + dialog->priv = E_PREFERENCES_WINDOW_GET_PRIVATE (dialog); + dialog->priv->index = index; + + store = gtk_list_store_new ( + 4, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_INT, G_TYPE_INT); + gtk_tree_sortable_set_sort_column_id ( + GTK_TREE_SORTABLE (store), COLUMN_SORT, GTK_SORT_ASCENDING); + + gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); + gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE); + + container = GTK_DIALOG (dialog)->vbox; + + hbox = gtk_hbox_new (FALSE, 12); + gtk_container_add (GTK_CONTAINER (container), hbox); + gtk_widget_show (hbox); + + widget = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy ( + GTK_SCROLLED_WINDOW (widget), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type ( + GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN); + gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, TRUE, 0); + gtk_widget_show (widget); + + container = widget; + + widget = gtk_icon_view_new_with_model (GTK_TREE_MODEL (store)); + gtk_icon_view_set_columns (GTK_ICON_VIEW (widget), 1); + gtk_icon_view_set_text_column (GTK_ICON_VIEW (widget), COLUMN_TEXT); + gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (widget), COLUMN_PIXBUF); + g_signal_connect_swapped ( + widget, "selection-changed", + G_CALLBACK (preferences_window_selection_changed_cb), dialog); + gtk_container_add (GTK_CONTAINER (container), widget); + dialog->priv->icon_view = g_object_ref (widget); + gtk_widget_show (widget); + g_object_unref (store); + + widget = gtk_notebook_new (); + gtk_notebook_set_show_tabs (GTK_NOTEBOOK (widget), FALSE); + gtk_notebook_set_show_border (GTK_NOTEBOOK (widget), FALSE); + gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0); + dialog->priv->notebook = g_object_ref (widget); + gtk_widget_show (widget); + + gtk_dialog_add_buttons ( + GTK_DIALOG (dialog), + GTK_STOCK_HELP, GTK_RESPONSE_HELP, + GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, + NULL); + + gtk_dialog_set_default_response ( + GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE); +} + +GType +e_preferences_window_get_type (void) +{ + static GType type = 0; + + if (G_UNLIKELY (type == 0)) { + const GTypeInfo type_info = { + sizeof (EPreferencesWindowClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) preferences_window_class_init, + (GClassFinalizeFunc) NULL, + NULL, /* class_data */ + sizeof (EPreferencesWindow), + 0, /* n_preallocs */ + (GInstanceInitFunc) preferences_window_init, + NULL /* value_table */ + }; + + type = g_type_register_static ( + GTK_TYPE_DIALOG, "EPreferencesWindow", &type_info, 0); + } + + return type; +} + +GtkWidget * +e_preferences_window_new (void) +{ + return g_object_new (E_TYPE_PREFERENCES_WINDOW, NULL); +} + +void +e_preferences_window_add_page (EPreferencesWindow *dialog, + const gchar *page_name, + const gchar *icon_name, + const gchar *caption, + gint sort_order, + GtkWidget *widget) +{ + GtkTreeRowReference *reference; + GtkIconView *icon_view; + GtkNotebook *notebook; + GtkTreeModel *model; + GtkTreePath *path; + GHashTable *index; + GdkPixbuf *pixbuf; + GtkTreeIter iter; + gint page; + + g_return_if_fail (E_IS_MULTI_CONFIG_DIALOG (dialog)); + g_return_if_fail (page_name != NULL); + g_return_if_fail (icon_name != NULL); + g_return_if_fail (caption != NULL); + g_return_if_fail (GTK_IS_WIDGET (widget)); + + icon_view = GTK_ICON_VIEW (dialog->priv->icon_view); + notebook = GTK_NOTEBOOK (dialog->priv->notebook); + + page = gtk_notebook_get_n_pages (notebook); + model = gtk_icon_view_get_model (icon_view); + pixbuf = preferences_window_load_pixbuf (icon_name); + + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + + gtk_list_store_set ( + GTK_LIST_STORE (model), &iter, + COLUMN_TEXT, caption, COLUMN_PIXBUF, pixbuf, + COLUMN_PAGE, page, COLUMN_SORT, sort_order, -1); + + index = dialog->priv->index; + path = gtk_tree_model_get_path (model, &iter); + reference = gtk_tree_row_reference_new (model, path); + g_hash_table_insert (index, g_strdup (page_name), reference); + gtk_tree_path_free (path); + + gtk_notebook_append_page (notebook, widget, NULL); + + if (page == 0) + e_preferences_window_show_page (dialog, page_name); +} + +void +e_preferences_window_show_page (EPreferencesWindow *dialog, + const gchar *page_name) +{ + GtkTreeRowReference *reference; + GtkIconView *icon_view; + GtkTreePath *path; + + g_return_if_fail (E_IS_MULTI_CONFIG_DIALOG (dialog)); + g_return_if_fail (page_name != NULL); + + icon_view = GTK_ICON_VIEW (dialog->priv->icon_view); + reference = g_hash_table_lookup (dialog->priv->index, page_name); + g_return_if_fail (reference != NULL); + + path = gtk_tree_row_reference_get_path (reference); + gtk_icon_view_select_path (icon_view, path); + gtk_icon_view_scroll_to_path (icon_view, path, FALSE, 0.0, 0.0); + gtk_tree_path_free (path); +} -- cgit v1.2.3 From 2ef1b5bf42b5d429e00f94710458f237d18315b2 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 24 Aug 2008 13:17:11 +0000 Subject: Progress update: - Get the "New" button and menu working. - Add a GtkMenuToolButton subclass called EMenuToolButton, which does some behind-the-scenes stuff to make the "New" button work properly. - Kill EComboButton and its associated a11y widget. svn path=/branches/kill-bonobo/; revision=36045 --- widgets/misc/e-preferences-window.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) (limited to 'widgets/misc/e-preferences-window.c') diff --git a/widgets/misc/e-preferences-window.c b/widgets/misc/e-preferences-window.c index 1f2d38345f..883d6df280 100644 --- a/widgets/misc/e-preferences-window.c +++ b/widgets/misc/e-preferences-window.c @@ -20,7 +20,7 @@ #include "e-preferences-window.h" -#include +#include #define SWITCH_PAGE_INTERVAL 250 @@ -162,16 +162,9 @@ static void preferences_window_response (GtkDialog *dialog, gint response_id) { - GError *error = NULL; - switch (response_id) { case GTK_RESPONSE_HELP: - gnome_help_display ( - "evolution.xml", "config-prefs", &error); - if (error != NULL) { - g_warning ("%s", error->message); - g_error_free (error); - } + e_display_help (GTK_WINDOW (dialog), "config-prefs"); break; case GTK_RESPONSE_CLOSE: -- cgit v1.2.3 From e0c501b7018f12d37b10e32923f95b7a01c7982c Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 29 Aug 2008 22:32:46 +0000 Subject: Progress update: - Contacts module partially working! - Implement UI merging. Also merge EInfoLabel into ESidebar. The shell window now manages the icon and labels and keeps them up-to-date via EShellView properties. svn path=/branches/kill-bonobo/; revision=36214 --- widgets/misc/e-preferences-window.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'widgets/misc/e-preferences-window.c') diff --git a/widgets/misc/e-preferences-window.c b/widgets/misc/e-preferences-window.c index 883d6df280..988d065d76 100644 --- a/widgets/misc/e-preferences-window.c +++ b/widgets/misc/e-preferences-window.c @@ -303,8 +303,8 @@ e_preferences_window_add_page (EPreferencesWindow *dialog, const gchar *page_name, const gchar *icon_name, const gchar *caption, - gint sort_order, - GtkWidget *widget) + GtkWidget *widget, + gint sort_order) { GtkTreeRowReference *reference; GtkIconView *icon_view; @@ -346,6 +346,8 @@ e_preferences_window_add_page (EPreferencesWindow *dialog, if (page == 0) e_preferences_window_show_page (dialog, page_name); + + gtk_widget_queue_resize (GTK_WIDGET (dialog)); } void -- cgit v1.2.3 From 3843185df1e71e14e4f2e5d34aca34724090b496 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 30 Aug 2008 04:42:02 +0000 Subject: Preferences window awesomeness. svn path=/branches/kill-bonobo/; revision=36215 --- widgets/misc/e-preferences-window.c | 143 ++++++++++++++++++++---------------- 1 file changed, 79 insertions(+), 64 deletions(-) (limited to 'widgets/misc/e-preferences-window.c') diff --git a/widgets/misc/e-preferences-window.c b/widgets/misc/e-preferences-window.c index 988d065d76..c18d975c1d 100644 --- a/widgets/misc/e-preferences-window.c +++ b/widgets/misc/e-preferences-window.c @@ -20,6 +20,7 @@ #include "e-preferences-window.h" +#include #include #define SWITCH_PAGE_INTERVAL 250 @@ -79,7 +80,13 @@ preferences_window_load_pixbuf (const gchar *icon_name) } static void -preferences_window_selection_changed_cb (EPreferencesWindow *dialog) +preferences_window_help_clicked_cb (GtkWindow *window) +{ + e_display_help (window, "config-prefs"); +} + +static void +preferences_window_selection_changed_cb (EPreferencesWindow *window) { GtkIconView *icon_view; GtkNotebook *notebook; @@ -88,7 +95,7 @@ preferences_window_selection_changed_cb (EPreferencesWindow *dialog) GList *list; gint page; - icon_view = GTK_ICON_VIEW (dialog->priv->icon_view); + icon_view = GTK_ICON_VIEW (window->priv->icon_view); list = gtk_icon_view_get_selected_items (icon_view); if (list == NULL) return; @@ -97,7 +104,7 @@ preferences_window_selection_changed_cb (EPreferencesWindow *dialog) gtk_tree_model_get_iter (model, &iter, list->data); gtk_tree_model_get (model, &iter, COLUMN_PAGE, &page, -1); - notebook = GTK_NOTEBOOK (dialog->priv->notebook); + notebook = GTK_NOTEBOOK (window->priv->notebook); gtk_notebook_set_current_page (notebook, page); g_list_foreach (list, (GFunc) gtk_tree_path_free, NULL); @@ -143,35 +150,16 @@ preferences_window_finalize (GObject *object) } static void -preferences_window_map (GtkWidget *widget) +preferences_window_show (GtkWidget *widget) { - GtkDialog *dialog; + EPreferencesWindowPrivate *priv; - /* Chain up to parent's map() method. */ - GTK_WIDGET_CLASS (parent_class)->map (widget); + priv = E_PREFERENCES_WINDOW_GET_PRIVATE (widget); - /* Override those stubborn style properties. */ - dialog = GTK_DIALOG (widget); - gtk_box_set_spacing (GTK_BOX (dialog->vbox), 12); - gtk_container_set_border_width (GTK_CONTAINER (widget), 12); - gtk_container_set_border_width (GTK_CONTAINER (dialog->vbox), 0); - gtk_container_set_border_width (GTK_CONTAINER (dialog->action_area), 0); -} + gtk_widget_grab_focus (priv->icon_view); -static void -preferences_window_response (GtkDialog *dialog, - gint response_id) -{ - switch (response_id) { - case GTK_RESPONSE_HELP: - e_display_help (GTK_WINDOW (dialog), "config-prefs"); - break; - - case GTK_RESPONSE_CLOSE: - default: - gtk_widget_destroy (GTK_WIDGET (dialog)); - break; - } + /* Chain up to parent's show() method. */ + GTK_WIDGET_CLASS (parent_class)->show (widget); } static void @@ -179,7 +167,6 @@ preferences_window_class_init (EPreferencesWindowClass *class) { GObjectClass *object_class; GtkWidgetClass *widget_class; - GtkDialogClass *dialog_class; parent_class = g_type_class_peek_parent (class); g_type_class_add_private (class, sizeof (EPreferencesWindowPrivate)); @@ -189,42 +176,53 @@ preferences_window_class_init (EPreferencesWindowClass *class) object_class->finalize = preferences_window_finalize; widget_class = GTK_WIDGET_CLASS (class); - widget_class->map = preferences_window_map; - - dialog_class = GTK_DIALOG_CLASS (class); - dialog_class->response = preferences_window_response; + widget_class->show = preferences_window_show; } static void -preferences_window_init (EPreferencesWindow *dialog) +preferences_window_init (EPreferencesWindow *window) { GtkListStore *store; GtkWidget *container; GtkWidget *hbox; + GtkWidget *vbox; GtkWidget *widget; GHashTable *index; + const gchar *title; index = g_hash_table_new_full ( g_str_hash, g_str_equal, (GDestroyNotify) g_free, (GDestroyNotify) gtk_tree_row_reference_free); - dialog->priv = E_PREFERENCES_WINDOW_GET_PRIVATE (dialog); - dialog->priv->index = index; + window->priv = E_PREFERENCES_WINDOW_GET_PRIVATE (window); + window->priv->index = index; store = gtk_list_store_new ( 4, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_INT, G_TYPE_INT); gtk_tree_sortable_set_sort_column_id ( GTK_TREE_SORTABLE (store), COLUMN_SORT, GTK_SORT_ASCENDING); - gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); - gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE); + title = _("Evolution Preferences"); + gtk_window_set_title (GTK_WINDOW (window), title); + gtk_window_set_resizable (GTK_WINDOW (window), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (window), 12); + + g_signal_connect ( + window, "delete-event", + G_CALLBACK (gtk_widget_hide_on_delete), NULL); - container = GTK_DIALOG (dialog)->vbox; + widget = gtk_vbox_new (FALSE, 12); + gtk_container_add (GTK_CONTAINER (window), widget); + gtk_widget_show (widget); - hbox = gtk_hbox_new (FALSE, 12); - gtk_container_add (GTK_CONTAINER (container), hbox); - gtk_widget_show (hbox); + vbox = widget; + + widget = gtk_hbox_new (FALSE, 12); + gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0); + gtk_widget_show (widget); + + hbox = widget; widget = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy ( @@ -243,9 +241,9 @@ preferences_window_init (EPreferencesWindow *dialog) gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (widget), COLUMN_PIXBUF); g_signal_connect_swapped ( widget, "selection-changed", - G_CALLBACK (preferences_window_selection_changed_cb), dialog); + G_CALLBACK (preferences_window_selection_changed_cb), window); gtk_container_add (GTK_CONTAINER (container), widget); - dialog->priv->icon_view = g_object_ref (widget); + window->priv->icon_view = g_object_ref (widget); gtk_widget_show (widget); g_object_unref (store); @@ -253,17 +251,34 @@ preferences_window_init (EPreferencesWindow *dialog) gtk_notebook_set_show_tabs (GTK_NOTEBOOK (widget), FALSE); gtk_notebook_set_show_border (GTK_NOTEBOOK (widget), FALSE); gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0); - dialog->priv->notebook = g_object_ref (widget); + window->priv->notebook = g_object_ref (widget); gtk_widget_show (widget); - gtk_dialog_add_buttons ( - GTK_DIALOG (dialog), - GTK_STOCK_HELP, GTK_RESPONSE_HELP, - GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, - NULL); + widget = gtk_hbutton_box_new (); + gtk_button_box_set_layout ( + GTK_BUTTON_BOX (widget), GTK_BUTTONBOX_END); + gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); + gtk_widget_show (widget); + + container = widget; - gtk_dialog_set_default_response ( - GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE); + widget = gtk_button_new_from_stock (GTK_STOCK_HELP); + g_signal_connect_swapped ( + widget, "clicked", + G_CALLBACK (preferences_window_help_clicked_cb), window); + gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); + gtk_button_box_set_child_secondary ( + GTK_BUTTON_BOX (container), widget, TRUE); + gtk_widget_show (widget); + + widget = gtk_button_new_from_stock (GTK_STOCK_CLOSE); + g_signal_connect_swapped ( + widget, "clicked", + G_CALLBACK (gtk_widget_hide), window); + GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); + gtk_widget_grab_default (widget); + gtk_widget_show (widget); } GType @@ -286,7 +301,7 @@ e_preferences_window_get_type (void) }; type = g_type_register_static ( - GTK_TYPE_DIALOG, "EPreferencesWindow", &type_info, 0); + GTK_TYPE_WINDOW, "EPreferencesWindow", &type_info, 0); } return type; @@ -299,7 +314,7 @@ e_preferences_window_new (void) } void -e_preferences_window_add_page (EPreferencesWindow *dialog, +e_preferences_window_add_page (EPreferencesWindow *window, const gchar *page_name, const gchar *icon_name, const gchar *caption, @@ -316,14 +331,14 @@ e_preferences_window_add_page (EPreferencesWindow *dialog, GtkTreeIter iter; gint page; - g_return_if_fail (E_IS_MULTI_CONFIG_DIALOG (dialog)); + g_return_if_fail (E_IS_PREFERENCES_WINDOW (window)); g_return_if_fail (page_name != NULL); g_return_if_fail (icon_name != NULL); g_return_if_fail (caption != NULL); g_return_if_fail (GTK_IS_WIDGET (widget)); - icon_view = GTK_ICON_VIEW (dialog->priv->icon_view); - notebook = GTK_NOTEBOOK (dialog->priv->notebook); + icon_view = GTK_ICON_VIEW (window->priv->icon_view); + notebook = GTK_NOTEBOOK (window->priv->notebook); page = gtk_notebook_get_n_pages (notebook); model = gtk_icon_view_get_model (icon_view); @@ -336,7 +351,7 @@ e_preferences_window_add_page (EPreferencesWindow *dialog, COLUMN_TEXT, caption, COLUMN_PIXBUF, pixbuf, COLUMN_PAGE, page, COLUMN_SORT, sort_order, -1); - index = dialog->priv->index; + index = window->priv->index; path = gtk_tree_model_get_path (model, &iter); reference = gtk_tree_row_reference_new (model, path); g_hash_table_insert (index, g_strdup (page_name), reference); @@ -345,24 +360,24 @@ e_preferences_window_add_page (EPreferencesWindow *dialog, gtk_notebook_append_page (notebook, widget, NULL); if (page == 0) - e_preferences_window_show_page (dialog, page_name); + e_preferences_window_show_page (window, page_name); - gtk_widget_queue_resize (GTK_WIDGET (dialog)); + gtk_widget_queue_resize (GTK_WIDGET (window)); } void -e_preferences_window_show_page (EPreferencesWindow *dialog, +e_preferences_window_show_page (EPreferencesWindow *window, const gchar *page_name) { GtkTreeRowReference *reference; GtkIconView *icon_view; GtkTreePath *path; - g_return_if_fail (E_IS_MULTI_CONFIG_DIALOG (dialog)); + g_return_if_fail (E_IS_PREFERENCES_WINDOW (window)); g_return_if_fail (page_name != NULL); - icon_view = GTK_ICON_VIEW (dialog->priv->icon_view); - reference = g_hash_table_lookup (dialog->priv->index, page_name); + icon_view = GTK_ICON_VIEW (window->priv->icon_view); + reference = g_hash_table_lookup (window->priv->index, page_name); g_return_if_fail (reference != NULL); path = gtk_tree_row_reference_get_path (reference); -- cgit v1.2.3 From 0ad2c0cf65f5769856e9359ec3d0c8d48676c171 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 30 Aug 2008 14:38:37 +0000 Subject: Figured out why the switcher buttons have no relief. GTK+ bug: http://bugzilla.gnome.org/show_bug.cgi?id=549943 svn path=/branches/kill-bonobo/; revision=36221 --- widgets/misc/e-preferences-window.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'widgets/misc/e-preferences-window.c') diff --git a/widgets/misc/e-preferences-window.c b/widgets/misc/e-preferences-window.c index c18d975c1d..1ccd07d91e 100644 --- a/widgets/misc/e-preferences-window.c +++ b/widgets/misc/e-preferences-window.c @@ -361,8 +361,6 @@ e_preferences_window_add_page (EPreferencesWindow *window, if (page == 0) e_preferences_window_show_page (window, page_name); - - gtk_widget_queue_resize (GTK_WIDGET (window)); } void -- cgit v1.2.3 From 791c982c456fca453978358d2e919082419b7808 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 1 Oct 2008 21:51:10 +0000 Subject: Update the headers on files I've created or completely rewritten to match Sankar's LGPLv3 template. svn path=/branches/kill-bonobo/; revision=36535 --- widgets/misc/e-preferences-window.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'widgets/misc/e-preferences-window.c') diff --git a/widgets/misc/e-preferences-window.c b/widgets/misc/e-preferences-window.c index 1ccd07d91e..7ae9fdf596 100644 --- a/widgets/misc/e-preferences-window.c +++ b/widgets/misc/e-preferences-window.c @@ -1,21 +1,22 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-preferences-window.c - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) +/* + * e-preferences-window.c * * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) version 3. * * 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. + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the program; if not, see + * + * + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * 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., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. */ #include "e-preferences-window.h" -- cgit v1.2.3 From 80e6c5adad4e89846c004efb2029d4db9ec2e64f Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 30 Oct 2008 20:51:26 +0000 Subject: Add popup menus to the calendar memopad and taskpad. Implement support for "hide completed tasks" option (not yet tested). Flesh out most of the Preferences window. Still need Certificates page. svn path=/branches/kill-bonobo/; revision=36701 --- widgets/misc/e-preferences-window.c | 1 + 1 file changed, 1 insertion(+) (limited to 'widgets/misc/e-preferences-window.c') diff --git a/widgets/misc/e-preferences-window.c b/widgets/misc/e-preferences-window.c index 7ae9fdf596..1235ebbad8 100644 --- a/widgets/misc/e-preferences-window.c +++ b/widgets/misc/e-preferences-window.c @@ -358,6 +358,7 @@ e_preferences_window_add_page (EPreferencesWindow *window, g_hash_table_insert (index, g_strdup (page_name), reference); gtk_tree_path_free (path); + gtk_widget_show (widget); gtk_notebook_append_page (notebook, widget, NULL); if (page == 0) -- cgit v1.2.3 From 9c9e85d286fe61ed11e457c737bd26e2732119ab Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 30 Oct 2008 21:23:17 +0000 Subject: Secondary checkout spotted a compilation issue. Select the first Preferences page when the window is shown. svn path=/branches/kill-bonobo/; revision=36702 --- widgets/misc/e-preferences-window.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'widgets/misc/e-preferences-window.c') diff --git a/widgets/misc/e-preferences-window.c b/widgets/misc/e-preferences-window.c index 1235ebbad8..ecdbee1402 100644 --- a/widgets/misc/e-preferences-window.c +++ b/widgets/misc/e-preferences-window.c @@ -154,9 +154,18 @@ static void preferences_window_show (GtkWidget *widget) { EPreferencesWindowPrivate *priv; + GtkIconView *icon_view; + GtkTreePath *path; priv = E_PREFERENCES_WINDOW_GET_PRIVATE (widget); + icon_view = GTK_ICON_VIEW (priv->icon_view); + + path = gtk_tree_path_new_first (); + gtk_icon_view_select_path (icon_view, path); + gtk_icon_view_scroll_to_path (icon_view, path, FALSE, 0.0, 0.0); + gtk_tree_path_free (path); + gtk_widget_grab_focus (priv->icon_view); /* Chain up to parent's show() method. */ @@ -360,9 +369,6 @@ e_preferences_window_add_page (EPreferencesWindow *window, gtk_widget_show (widget); gtk_notebook_append_page (notebook, widget, NULL); - - if (page == 0) - e_preferences_window_show_page (window, page_name); } void -- cgit v1.2.3