add GnomeThemeElement parameter to the ThemeChangedCallback so that the
2009-01-25 Jens Granseuer <jensgr@gmx.net> * 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) 2009-01-25 Jens Granseuer <jensgr@gmx.net> 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 svn path=/trunk/; revision=9206
This commit is contained in:
parent
19f8c86dc1
commit
65d2e5c3e5
6 changed files with 39 additions and 17 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
2009-01-25 Jens Granseuer <jensgr@gmx.net>
|
||||||
|
|
||||||
|
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.3 ====================
|
||||||
==================== 2.25.2 ====================
|
==================== 2.25.2 ====================
|
||||||
|
|
||||||
|
|
|
@ -793,19 +793,20 @@ create_thumbnail (const gchar *name, GdkPixbuf *default_thumb, AppearanceData *d
|
||||||
static void
|
static void
|
||||||
changed_on_disk_cb (GnomeThemeCommonInfo *theme,
|
changed_on_disk_cb (GnomeThemeCommonInfo *theme,
|
||||||
GnomeThemeChangeType change_type,
|
GnomeThemeChangeType change_type,
|
||||||
|
GnomeThemeElement element_type,
|
||||||
AppearanceData *data)
|
AppearanceData *data)
|
||||||
{
|
{
|
||||||
if (theme->type == GNOME_THEME_TYPE_REGULAR) {
|
if (theme->type == GNOME_THEME_TYPE_REGULAR) {
|
||||||
GnomeThemeInfo *info = (GnomeThemeInfo *) theme;
|
GnomeThemeInfo *info = (GnomeThemeInfo *) theme;
|
||||||
|
|
||||||
if (change_type == GNOME_THEME_CHANGE_DELETED) {
|
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);
|
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);
|
remove_from_treeview ("window_themes_list", info->name, data);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (info->has_gtk) {
|
if (element_type & GNOME_THEME_GTK_2) {
|
||||||
if (change_type == GNOME_THEME_CHANGE_CREATED)
|
if (change_type == GNOME_THEME_CHANGE_CREATED)
|
||||||
add_to_treeview ("gtk_themes_list", info->name, info->name, data->gtk_theme_icon, data);
|
add_to_treeview ("gtk_themes_list", info->name, info->name, data->gtk_theme_icon, data);
|
||||||
else if (change_type == GNOME_THEME_CHANGE_CHANGED)
|
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);
|
(ThemeThumbnailFunc) gtk_theme_thumbnail_cb, data, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->has_metacity) {
|
if (element_type & GNOME_THEME_METACITY) {
|
||||||
if (change_type == GNOME_THEME_CHANGE_CREATED)
|
if (change_type == GNOME_THEME_CHANGE_CREATED)
|
||||||
add_to_treeview ("window_themes_list", info->name, info->name, data->window_theme_icon, data);
|
add_to_treeview ("window_themes_list", info->name, info->name, data->window_theme_icon, data);
|
||||||
else if (change_type == GNOME_THEME_CHANGE_CHANGED)
|
else if (change_type == GNOME_THEME_CHANGE_CHANGED)
|
||||||
|
|
|
@ -172,6 +172,7 @@ theme_thumbnail_generate (GnomeThemeMetaInfo *info, AppearanceData *data)
|
||||||
static void
|
static void
|
||||||
theme_changed_on_disk_cb (GnomeThemeCommonInfo *theme,
|
theme_changed_on_disk_cb (GnomeThemeCommonInfo *theme,
|
||||||
GnomeThemeChangeType change_type,
|
GnomeThemeChangeType change_type,
|
||||||
|
GnomeThemeElement element_type,
|
||||||
AppearanceData *data)
|
AppearanceData *data)
|
||||||
{
|
{
|
||||||
if (theme->type == GNOME_THEME_TYPE_METATHEME) {
|
if (theme->type == GNOME_THEME_TYPE_METATHEME) {
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
2009-01-25 Jens Granseuer <jensgr@gmx.net>
|
||||||
|
|
||||||
|
* 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.3 ====================
|
||||||
==================== 2.25.2 ====================
|
==================== 2.25.2 ====================
|
||||||
|
|
||||||
|
|
|
@ -688,7 +688,8 @@ read_cursor_fonts (void)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_change_signal (gpointer data,
|
handle_change_signal (gpointer data,
|
||||||
GnomeThemeChangeType change_type)
|
GnomeThemeChangeType change_type,
|
||||||
|
GnomeThemeElement element_type)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
gchar *type_str = NULL;
|
gchar *type_str = NULL;
|
||||||
|
@ -703,7 +704,7 @@ handle_change_signal (gpointer data,
|
||||||
|
|
||||||
for (list = callbacks; list; list = list->next) {
|
for (list = callbacks; list; list = list->next) {
|
||||||
ThemeCallbackData *callback_data = list->data;
|
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
|
#ifdef DEBUG
|
||||||
|
@ -714,12 +715,11 @@ handle_change_signal (gpointer data,
|
||||||
else if (theme->type == GNOME_THEME_TYPE_CURSOR)
|
else if (theme->type == GNOME_THEME_TYPE_CURSOR)
|
||||||
type_str = "cursor";
|
type_str = "cursor";
|
||||||
else if (theme->type == GNOME_THEME_TYPE_REGULAR) {
|
else if (theme->type == GNOME_THEME_TYPE_REGULAR) {
|
||||||
GnomeThemeInfo *rtheme = (GnomeThemeInfo *) theme;
|
if (element_type & GNOME_THEME_GTK_2)
|
||||||
if (rtheme->has_gtk)
|
|
||||||
element_str = "gtk-2";
|
element_str = "gtk-2";
|
||||||
else if (rtheme->has_keybinding)
|
else if (element_type & GNOME_THEME_GTK_2_KEYBINDING)
|
||||||
element_str = "keybinding";
|
element_str = "keybinding";
|
||||||
else if (rtheme->has_metacity)
|
else if (element_type & GNOME_THEME_METACITY)
|
||||||
element_str = "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);
|
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);
|
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 {
|
} else {
|
||||||
gboolean theme_used_to_exist = FALSE;
|
gboolean theme_used_to_exist = FALSE;
|
||||||
|
@ -806,11 +806,11 @@ update_theme_index (GFile *index_uri,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (theme_exists && theme_used_to_exist) {
|
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) {
|
} 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) {
|
} 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) {
|
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) {
|
if (theme_exists) {
|
||||||
g_hash_table_insert (hash_by_uri, g_strdup (common_theme_dir), 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);
|
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 {
|
} else {
|
||||||
if (theme_exists) {
|
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);
|
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);
|
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);
|
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);
|
theme_free (old_theme_info);
|
||||||
} else {
|
} else {
|
||||||
theme_free (theme_info);
|
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);
|
g_hash_table_remove (hash_by_uri, common_theme_dir);
|
||||||
remove_theme_from_hash_by_name (hash_by_name, old_theme_info);
|
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);
|
theme_free (old_theme_info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,6 +131,7 @@ enum {
|
||||||
|
|
||||||
typedef void (* ThemeChangedCallback) (GnomeThemeCommonInfo *theme,
|
typedef void (* ThemeChangedCallback) (GnomeThemeCommonInfo *theme,
|
||||||
GnomeThemeChangeType change_type,
|
GnomeThemeChangeType change_type,
|
||||||
|
GnomeThemeElement element_type,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
#define GNOME_THEME_ERROR gnome_theme_info_error_quark ()
|
#define GNOME_THEME_ERROR gnome_theme_info_error_quark ()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue