summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2008-09-12 03:55:04 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2008-09-12 03:55:04 +0000
commit19d32714e9b003b2eb82fa8c624d12d71e2348dc (patch)
treeb7670b13b6ad45960b7e1369eae1e7959e1efff1
parentd61669e6d306519b57f8114221d68e68bcd956ff (diff)
downloadgtk+-19d32714e9b003b2eb82fa8c624d12d71e2348dc.tar.gz
Unset the color when setting it to NULL instead of displaying a warning.
* gtk/gtktexttag.c (gtk_text_tag_set_property): Unset the color when setting it to NULL instead of displaying a warning. Patch by Xavier Claessens * gtk/gtkassistant.c: Don't emit signals with extra parameters. Patch by Antti Kaijanmäki * gtk/gtksettings.c: When reconstructing the color hash, try harder to avoid unnecessary notification, since this can lead to infinite reloading of rc files in some situations. svn path=/branches/gtk-2-12/; revision=21359
-rw-r--r--ChangeLog8
-rw-r--r--gtk/gtkassistant.c4
-rw-r--r--gtk/gtksettings.c37
-rw-r--r--gtk/gtktexttag.c12
4 files changed, 51 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 1dfef75bb0..01a9c75c4d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,14 @@
Merged from trunk:
+ * gtk/gtksettings.c: When reconstructing the color hash, try
+ harder to avoid unnecessary notification, since this can lead
+ to infinite reloading of rc files in some situations.
+
+2008-09-11 Matthias Clasen <mclasen@redhat.com>
+
+ Merged from trunk:
+
Bug 545875 – evo crashed when trying to print pages 6-7 of a 1 page
email
diff --git a/gtk/gtkassistant.c b/gtk/gtkassistant.c
index e3d6af62bf..8863faee8e 100644
--- a/gtk/gtkassistant.c
+++ b/gtk/gtkassistant.c
@@ -601,13 +601,13 @@ on_assistant_apply (GtkWidget *widget, GtkAssistant *assistant)
success = compute_next_step (assistant);
- g_signal_emit (assistant, signals [APPLY], 0, priv->current_page->page);
+ g_signal_emit (assistant, signals [APPLY], 0);
/* if the assistant hasn't switched to another page, just emit
* the CLOSE signal, it't the last page in the assistant flow
*/
if (!success)
- g_signal_emit (assistant, signals [CLOSE], 0, priv->current_page->page);
+ g_signal_emit (assistant, signals [CLOSE], 0);
}
static void
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index 8fdcfb9a37..ccd0a4d130 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -1726,14 +1726,13 @@ _gtk_settings_handle_event (GdkEventSetting *event)
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);
}
}
@@ -2052,6 +2051,7 @@ update_color_hash (ColorSchemeData *data,
{
gboolean changed = FALSE;
gint i;
+ GHashTable *old_hash;
if ((str == NULL || *str == '\0') &&
(data->lastentry[source] == NULL || data->lastentry[source][0] == '\0'))
@@ -2085,8 +2085,7 @@ update_color_hash (ColorSchemeData *data,
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++)
@@ -2096,7 +2095,35 @@ update_color_hash (ColorSchemeData *data,
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
diff --git a/gtk/gtktexttag.c b/gtk/gtktexttag.c
index 0d7db4609a..edc12f936a 100644
--- a/gtk/gtktexttag.c
+++ b/gtk/gtktexttag.c
@@ -1002,7 +1002,9 @@ gtk_text_tag_set_property (GObject *object,
{
GdkColor color;
- if (gdk_color_parse (g_value_get_string (value), &color))
+ if (!g_value_get_string (value))
+ set_bg_color (text_tag, NULL); /* reset to background_set to FALSE */
+ else if (gdk_color_parse (g_value_get_string (value), &color))
set_bg_color (text_tag, &color);
else
g_warning ("Don't know color `%s'", g_value_get_string (value));
@@ -1015,7 +1017,9 @@ gtk_text_tag_set_property (GObject *object,
{
GdkColor color;
- if (gdk_color_parse (g_value_get_string (value), &color))
+ if (!g_value_get_string (value))
+ set_fg_color (text_tag, NULL); /* reset to foreground_set to FALSE */
+ else if (gdk_color_parse (g_value_get_string (value), &color))
set_fg_color (text_tag, &color);
else
g_warning ("Don't know color `%s'", g_value_get_string (value));
@@ -1295,7 +1299,9 @@ gtk_text_tag_set_property (GObject *object,
{
GdkColor color;
- if (gdk_color_parse (g_value_get_string (value), &color))
+ if (!g_value_get_string (value))
+ set_pg_bg_color (text_tag, NULL); /* reset to paragraph_background_set to FALSE */
+ else if (gdk_color_parse (g_value_get_string (value), &color))
set_pg_bg_color (text_tag, &color);
else
g_warning ("Don't know color `%s'", g_value_get_string (value));