From 9d88a0bb5ebb2916ebe84237270ed76e73f35684 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Tue, 3 Jan 2006 10:06:50 +0000 Subject: [PATCH] Fixes bug #147665 2006-01-03 Guillaume Desmottes Fixes bug #147665 * gnome-theme-manager.[ch] (update_font_button_state, update_background_button_state): new functions. (background_key_changed): call the 2 above functions to update the background from metathemes that include a background. --- capplets/theme-switcher/ChangeLog | 9 ++ capplets/theme-switcher/gnome-theme-manager.c | 105 +++++++++++++++++- capplets/theme-switcher/gnome-theme-manager.h | 1 + 3 files changed, 114 insertions(+), 1 deletion(-) diff --git a/capplets/theme-switcher/ChangeLog b/capplets/theme-switcher/ChangeLog index 7baa4a0af..5a54ab82f 100644 --- a/capplets/theme-switcher/ChangeLog +++ b/capplets/theme-switcher/ChangeLog @@ -1,3 +1,12 @@ +2006-01-03 Guillaume Desmottes + + Fixes bug #147665 + + * gnome-theme-manager.[ch] (update_font_button_state, + update_background_button_state): new functions. + (background_key_changed): call the 2 above functions to update + the background from metathemes that include a background. + 2005-11-14 David Sedeņo * gnome-theme-details.c (gtk_theme_update_remove_button): Update the diff --git a/capplets/theme-switcher/gnome-theme-manager.c b/capplets/theme-switcher/gnome-theme-manager.c index d9f941bcc..9204334df 100644 --- a/capplets/theme-switcher/gnome-theme-manager.c +++ b/capplets/theme-switcher/gnome-theme-manager.c @@ -82,6 +82,8 @@ static void meta_theme_setup_info (GnomeThemeMetaInfo *meta_theme static void meta_theme_selection_changed (GtkTreeSelection *selection, GladeXML *dialog); static void update_themes_from_disk (GladeXML *dialog); +static void update_font_button_state (GladeXML *dialog); +static void update_background_button_state (GladeXML *dialog); static void update_settings_from_gconf (void); static void gtk_theme_key_changed (GConfClient *client, guint cnxn_id, @@ -97,6 +99,10 @@ static void font_key_changed (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data); +static void background_key_changed (GConfClient *client, + guint cnxn_id, + GConfEntry *entry, + gpointer user_data); static void theme_changed_func (gpointer uri, gpointer user_data); static void cb_dialog_response (GtkDialog *dialog, @@ -895,6 +901,8 @@ update_settings_from_gconf_idle (gpointer data) g_free (current_window_theme); g_free (current_icon_theme); update_settings_from_gconf_idle_id = 0; + update_font_button_state (dialog); + update_background_button_state (dialog); return FALSE; } @@ -987,6 +995,51 @@ update_font_button_state (GladeXML *dialog) g_object_unref (client); } +static void +update_background_button_state (GladeXML *dialog) +{ + GConfClient *client = gconf_client_get_default (); + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (WID ("meta_theme_treeview"))); + + if (gtk_tree_selection_get_selected (selection, &model, &iter)) + { + GnomeThemeMetaInfo *meta_theme_info; + char *meta_theme_name, *str; + + gtk_tree_model_get (model, &iter, + META_THEME_ID_COLUMN, &meta_theme_name, + -1); + if (!meta_theme_name) + return; + + meta_theme_info = gnome_theme_meta_info_find (meta_theme_name); + + g_assert (meta_theme_info); + g_free (meta_theme_name); + + str = gconf_client_get_string (client, BACKGROUND_KEY, NULL); + + if (meta_theme_info->background_image != NULL && str != NULL && + strcmp (meta_theme_info->background_image, str) == 0) + { + gtk_widget_set_sensitive (WID ("meta_theme_background1_button"), FALSE); + gtk_widget_set_sensitive (WID ("meta_theme_background2_button"), FALSE); + } + else + { + gtk_widget_set_sensitive (WID ("meta_theme_background1_button"), TRUE); + gtk_widget_set_sensitive (WID ("meta_theme_background2_button"), TRUE); + } + + g_free (str); + } + +} + static void font_key_changed (GConfClient *client, guint cnxn_id, @@ -998,6 +1051,17 @@ font_key_changed (GConfClient *client, update_font_button_state (dialog); } +static void +background_key_changed (GConfClient *client, + guint cnxn_id, + GConfEntry *entry, + gpointer user_data) +{ + GladeXML *dialog = user_data; + + update_background_button_state (dialog); +} + static void icon_key_changed (GConfClient *client, guint cnxn_id, @@ -1137,6 +1201,36 @@ apply_font_clicked (GtkWidget *button, g_object_unref (client); } +static void +apply_background_clicked (GtkWidget *button, + gpointer data) +{ + GladeXML *dialog = data; + GConfClient *client; + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; + + client = gconf_client_get_default (); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (WID ("meta_theme_treeview"))); + + if (gtk_tree_selection_get_selected (selection, &model, &iter)) + { + GnomeThemeMetaInfo *meta_theme_info; + char *meta_theme_name; + + gtk_tree_model_get (model, &iter, + META_THEME_ID_COLUMN, &meta_theme_name, + -1); + meta_theme_info = gnome_theme_meta_info_find (meta_theme_name); + + g_assert (meta_theme_info); + g_free (meta_theme_name); + + gconf_client_set_string (client, BACKGROUND_KEY, meta_theme_info->background_image, NULL); + } +} + static void revert_theme_clicked (GtkWidget *button, gpointer data) @@ -1185,9 +1279,13 @@ setup_dialog (GladeXML *dialog) g_signal_connect (G_OBJECT (WID ("meta_theme_details_button")), "clicked", gnome_theme_details_show, NULL); g_signal_connect (G_OBJECT (WID ("meta_theme_font1_button")), "clicked", G_CALLBACK (apply_font_clicked), dialog); + g_signal_connect (G_OBJECT (WID ("meta_theme_font2_button")), "clicked", G_CALLBACK (apply_font_clicked), dialog); g_signal_connect (G_OBJECT (WID ("meta_theme_revert_button")), "clicked", G_CALLBACK (revert_theme_clicked),NULL); + g_signal_connect (G_OBJECT (WID ("meta_theme_background1_button")), "clicked", G_CALLBACK (apply_background_clicked), dialog); + g_signal_connect (G_OBJECT (WID ("meta_theme_background2_button")), "clicked", G_CALLBACK (apply_background_clicked), dialog); + setup_meta_tree_view (GTK_TREE_VIEW (WID ("meta_theme_treeview")), (GCallback) meta_theme_selection_changed, dialog); @@ -1202,11 +1300,15 @@ setup_dialog (GladeXML *dialog) ICON_THEME_KEY, (GConfClientNotifyFunc) &icon_key_changed, dialog, NULL, NULL); - gconf_client_notify_add (client, FONT_KEY, (GConfClientNotifyFunc) &font_key_changed, dialog, NULL, NULL); + gconf_client_notify_add (client, + BACKGROUND_KEY, + (GConfClientNotifyFunc) &background_key_changed, + dialog, NULL, NULL); + g_object_unref (client); if (window_manager) @@ -1241,6 +1343,7 @@ setup_dialog (GladeXML *dialog) capplet_set_icon (parent, "gnome-settings-theme"); update_font_button_state (dialog); + update_background_button_state (dialog); gtk_widget_show (parent); } diff --git a/capplets/theme-switcher/gnome-theme-manager.h b/capplets/theme-switcher/gnome-theme-manager.h index 81efdc9c6..ff93ed437 100644 --- a/capplets/theme-switcher/gnome-theme-manager.h +++ b/capplets/theme-switcher/gnome-theme-manager.h @@ -10,6 +10,7 @@ #define FONT_KEY "/desktop/gnome/interface/font_name" #define DESKTOP_FONT_KEY "/apps/nautilus/preferences/desktop_font" #define MONOSPACE_FONT_KEY "/desktop/gnome/interface/monospace_font_name" +#define BACKGROUND_KEY "/desktop/gnome/background/picture_filename" #define METACITY_THEME_DIR "/apps/metacity/general" #define METACITY_THEME_KEY METACITY_THEME_DIR "/theme"