diff --git a/capplets/appearance/ChangeLog b/capplets/appearance/ChangeLog index d09e26585..9b60ff006 100644 --- a/capplets/appearance/ChangeLog +++ b/capplets/appearance/ChangeLog @@ -1,3 +1,14 @@ +2009-01-25 Jens Granseuer + + Fix newly installed themes appearing twice in the GTK themes list if + the package contains themes for both GTK and metacity (bug #568595) + + * appearance-style.c: (changed_on_disk_cb): check the new + GnomeThemeElement parameter instead of the theme properties to + determine what part of the theme changed + * appearance-themes.c: (theme_changed_on_disk_cb): use new callback + signature + ==================== 2.25.3 ==================== ==================== 2.25.2 ==================== diff --git a/capplets/appearance/appearance-style.c b/capplets/appearance/appearance-style.c index 1fa9c0939..859d7af82 100644 --- a/capplets/appearance/appearance-style.c +++ b/capplets/appearance/appearance-style.c @@ -793,19 +793,20 @@ create_thumbnail (const gchar *name, GdkPixbuf *default_thumb, AppearanceData *d static void changed_on_disk_cb (GnomeThemeCommonInfo *theme, GnomeThemeChangeType change_type, + GnomeThemeElement element_type, AppearanceData *data) { if (theme->type == GNOME_THEME_TYPE_REGULAR) { GnomeThemeInfo *info = (GnomeThemeInfo *) theme; if (change_type == GNOME_THEME_CHANGE_DELETED) { - if (info->has_gtk) + if (element_type & GNOME_THEME_GTK_2) remove_from_treeview ("gtk_themes_list", info->name, data); - if (info->has_metacity) + if (element_type & GNOME_THEME_METACITY) remove_from_treeview ("window_themes_list", info->name, data); } else { - if (info->has_gtk) { + if (element_type & GNOME_THEME_GTK_2) { if (change_type == GNOME_THEME_CHANGE_CREATED) add_to_treeview ("gtk_themes_list", info->name, info->name, data->gtk_theme_icon, data); else if (change_type == GNOME_THEME_CHANGE_CHANGED) @@ -815,7 +816,7 @@ changed_on_disk_cb (GnomeThemeCommonInfo *theme, (ThemeThumbnailFunc) gtk_theme_thumbnail_cb, data, NULL); } - if (info->has_metacity) { + if (element_type & GNOME_THEME_METACITY) { if (change_type == GNOME_THEME_CHANGE_CREATED) add_to_treeview ("window_themes_list", info->name, info->name, data->window_theme_icon, data); else if (change_type == GNOME_THEME_CHANGE_CHANGED) diff --git a/capplets/appearance/appearance-themes.c b/capplets/appearance/appearance-themes.c index 3b8a2cdaf..71fefdb1c 100644 --- a/capplets/appearance/appearance-themes.c +++ b/capplets/appearance/appearance-themes.c @@ -172,6 +172,7 @@ theme_thumbnail_generate (GnomeThemeMetaInfo *info, AppearanceData *data) static void theme_changed_on_disk_cb (GnomeThemeCommonInfo *theme, GnomeThemeChangeType change_type, + GnomeThemeElement element_type, AppearanceData *data) { if (theme->type == GNOME_THEME_TYPE_METATHEME) { diff --git a/capplets/common/ChangeLog b/capplets/common/ChangeLog index d720d4ba9..e5e2f5b1d 100644 --- a/capplets/common/ChangeLog +++ b/capplets/common/ChangeLog @@ -1,3 +1,11 @@ +2009-01-25 Jens Granseuer + + * gnome-theme-info.c: (handle_change_signal), (update_theme_index), + (update_common_theme_dir_index): + * gnome-theme-info.h: add GnomeThemeElement parameter to the + ThemeChangedCallback so that the receiver can determine what part of + the theme changed (part of bug #568595) + ==================== 2.25.3 ==================== ==================== 2.25.2 ==================== diff --git a/capplets/common/gnome-theme-info.c b/capplets/common/gnome-theme-info.c index aa4d75b5b..a1929f918 100644 --- a/capplets/common/gnome-theme-info.c +++ b/capplets/common/gnome-theme-info.c @@ -688,7 +688,8 @@ read_cursor_fonts (void) static void handle_change_signal (gpointer data, - GnomeThemeChangeType change_type) + GnomeThemeChangeType change_type, + GnomeThemeElement element_type) { #ifdef DEBUG gchar *type_str = NULL; @@ -703,7 +704,7 @@ handle_change_signal (gpointer data, for (list = callbacks; list; list = list->next) { ThemeCallbackData *callback_data = list->data; - (* callback_data->func) (theme, change_type, callback_data->data); + (* callback_data->func) (theme, change_type, element_type, callback_data->data); } #ifdef DEBUG @@ -714,12 +715,11 @@ handle_change_signal (gpointer data, else if (theme->type == GNOME_THEME_TYPE_CURSOR) type_str = "cursor"; else if (theme->type == GNOME_THEME_TYPE_REGULAR) { - GnomeThemeInfo *rtheme = (GnomeThemeInfo *) theme; - if (rtheme->has_gtk) + if (element_type & GNOME_THEME_GTK_2) element_str = "gtk-2"; - else if (rtheme->has_keybinding) + else if (element_type & GNOME_THEME_GTK_2_KEYBINDING) element_str = "keybinding"; - else if (rtheme->has_metacity) + else if (element_type & GNOME_THEME_METACITY) element_str = "metacity"; } @@ -784,7 +784,7 @@ update_theme_index (GFile *index_uri, g_hash_table_insert (theme_hash_by_uri, g_strdup (common_theme_dir), theme_info); add_theme_to_hash_by_name (theme_hash_by_name, theme_info); - handle_change_signal (theme_info, GNOME_THEME_CHANGE_CREATED); + handle_change_signal (theme_info, GNOME_THEME_CHANGE_CREATED, key_element); } } else { gboolean theme_used_to_exist = FALSE; @@ -806,11 +806,11 @@ update_theme_index (GFile *index_uri, } if (theme_exists && theme_used_to_exist) { - handle_change_signal (theme_info, GNOME_THEME_CHANGE_CHANGED); + handle_change_signal (theme_info, GNOME_THEME_CHANGE_CHANGED, key_element); } else if (theme_exists && !theme_used_to_exist) { - handle_change_signal (theme_info, GNOME_THEME_CHANGE_CREATED); + handle_change_signal (theme_info, GNOME_THEME_CHANGE_CREATED, key_element); } else if (!theme_exists && theme_used_to_exist) { - handle_change_signal (theme_info, GNOME_THEME_CHANGE_DELETED); + handle_change_signal (theme_info, GNOME_THEME_CHANGE_DELETED, key_element); } if (!theme_info->has_metacity && !theme_info->has_keybinding && !theme_info->has_gtk) { @@ -906,7 +906,7 @@ update_common_theme_dir_index (GFile *theme_index_uri, if (theme_exists) { g_hash_table_insert (hash_by_uri, g_strdup (common_theme_dir), theme_info); add_theme_to_hash_by_name (hash_by_name, theme_info); - handle_change_signal (theme_info, GNOME_THEME_CHANGE_CREATED); + handle_change_signal (theme_info, GNOME_THEME_CHANGE_CREATED, 0); } } else { if (theme_exists) { @@ -916,7 +916,7 @@ update_common_theme_dir_index (GFile *theme_index_uri, remove_theme_from_hash_by_name (hash_by_name, old_theme_info); g_hash_table_insert (hash_by_uri, g_strdup (common_theme_dir), theme_info); add_theme_to_hash_by_name (hash_by_name, theme_info); - handle_change_signal (theme_info, GNOME_THEME_CHANGE_CHANGED); + handle_change_signal (theme_info, GNOME_THEME_CHANGE_CHANGED, 0); theme_free (old_theme_info); } else { theme_free (theme_info); @@ -925,7 +925,7 @@ update_common_theme_dir_index (GFile *theme_index_uri, g_hash_table_remove (hash_by_uri, common_theme_dir); remove_theme_from_hash_by_name (hash_by_name, old_theme_info); - handle_change_signal (old_theme_info, GNOME_THEME_CHANGE_DELETED); + handle_change_signal (old_theme_info, GNOME_THEME_CHANGE_DELETED, 0); theme_free (old_theme_info); } } diff --git a/capplets/common/gnome-theme-info.h b/capplets/common/gnome-theme-info.h index 6a891f62c..3502d68cb 100644 --- a/capplets/common/gnome-theme-info.h +++ b/capplets/common/gnome-theme-info.h @@ -131,6 +131,7 @@ enum { typedef void (* ThemeChangedCallback) (GnomeThemeCommonInfo *theme, GnomeThemeChangeType change_type, + GnomeThemeElement element_type, gpointer user_data); #define GNOME_THEME_ERROR gnome_theme_info_error_quark ()