gtk2/color-loop.patch

75 lines
2.3 KiB
Diff

diff -up gtk+-2.13.7/gtk/gtksettings.c.color-loop gtk+-2.13.7/gtk/gtksettings.c
--- gtk+-2.13.7/gtk/gtksettings.c.color-loop 2008-08-25 09:16:09.000000000 -0400
+++ gtk+-2.13.7/gtk/gtksettings.c 2008-08-25 09:16:21.000000000 -0400
@@ -1892,14 +1892,13 @@ _gtk_settings_handle_event (GdkEventSett
if (property_id == PROP_COLOR_SCHEME)
{
GValue value = { 0, };
-
+
g_value_init (&value, G_TYPE_STRING);
if (!gdk_screen_get_setting (settings->screen, pspec->name, &value))
g_value_set_static_string (&value, "");
merge_color_scheme (settings, &value, GTK_SETTINGS_SOURCE_XSETTING);
g_value_unset (&value);
}
-
g_object_notify (G_OBJECT (settings), pspec->name);
}
}
@@ -2258,6 +2257,7 @@ update_color_hash (ColorSchemeData *da
{
gboolean changed = FALSE;
gint i;
+ GHashTable *old_hash;
if ((str == NULL || *str == '\0') &&
(data->lastentry[source] == NULL || data->lastentry[source][0] == '\0'))
@@ -2291,8 +2291,7 @@ update_color_hash (ColorSchemeData *da
return FALSE;
/* Rebuild the merged hash table. */
- if (data->color_hash)
- g_hash_table_unref (data->color_hash);
+ old_hash = data->color_hash;
data->color_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
(GDestroyNotify) gdk_color_free);
for (i = 0; i <= GTK_SETTINGS_SOURCE_APPLICATION; i++)
@@ -2302,7 +2301,35 @@ update_color_hash (ColorSchemeData *da
data->color_hash);
}
- return TRUE;
+ if (old_hash)
+ {
+ /* now check if the merged hash has changed */
+ changed = FALSE;
+ if (g_hash_table_size (old_hash) != g_hash_table_size (data->color_hash))
+ changed = TRUE;
+ else
+ {
+ GHashTableIter iter;
+ gpointer key, value, new_value;
+
+ g_hash_table_iter_init (&iter, old_hash);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ {
+ new_value = g_hash_table_lookup (data->color_hash, key);
+ if (!new_value || !gdk_color_equal (value, new_value))
+ {
+ changed = TRUE;
+ break;
+ }
+ }
+ }
+
+ g_hash_table_unref (old_hash);
+ }
+ else
+ changed = TRUE;
+
+ return changed;
}
static void