summaryrefslogtreecommitdiff
path: root/gtk/gtkstylecascade.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2012-04-08 17:35:24 +0200
committerBenjamin Otte <otte@redhat.com>2012-04-17 08:59:21 +0200
commit6443baadb9b2ce99932623fde504189e5538e6e9 (patch)
tree2f93b0290715954dcd3467ca25638ed08861d249 /gtk/gtkstylecascade.c
parent74f4c6f6bd755967b68bac3e551f6fff2dde6a24 (diff)
downloadgtk+-6443baadb9b2ce99932623fde504189e5538e6e9.tar.gz
styleprovider: Make all implementors emit the new signal
... and listen to it in the cases where they use other style providers.
Diffstat (limited to 'gtk/gtkstylecascade.c')
-rw-r--r--gtk/gtkstylecascade.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/gtk/gtkstylecascade.c b/gtk/gtkstylecascade.c
index a05d36dd77..1b8e9f7195 100644
--- a/gtk/gtkstylecascade.c
+++ b/gtk/gtkstylecascade.c
@@ -34,6 +34,7 @@ struct _GtkStyleProviderData
{
GtkStyleProvider *provider;
guint priority;
+ guint changed_signal_id;
};
static GtkStyleProvider *
@@ -263,6 +264,7 @@ style_provider_data_clear (gpointer data_)
{
GtkStyleProviderData *data = data_;
+ g_signal_handler_disconnect (data->provider, data->changed_signal_id);
g_object_unref (data->provider);
}
@@ -313,10 +315,21 @@ _gtk_style_cascade_set_parent (GtkStyleCascade *cascade,
return;
if (parent)
- g_object_ref (parent);
+ {
+ g_object_ref (parent);
+ g_signal_connect_swapped (parent,
+ "-gtk-private-changed",
+ G_CALLBACK (_gtk_style_provider_private_changed),
+ cascade);
+ }
if (cascade->parent)
- g_object_unref (cascade->parent);
+ {
+ g_signal_handlers_disconnect_by_func (cascade->parent,
+ _gtk_style_provider_private_changed,
+ cascade);
+ g_object_unref (cascade->parent);
+ }
cascade->parent = parent;
}
@@ -335,6 +348,10 @@ _gtk_style_cascade_add_provider (GtkStyleCascade *cascade,
data.provider = g_object_ref (provider);
data.priority = priority;
+ data.changed_signal_id = g_signal_connect_swapped (provider,
+ "-gtk-private-changed",
+ G_CALLBACK (_gtk_style_provider_private_changed),
+ cascade);
/* ensure it gets removed first */
_gtk_style_cascade_remove_provider (cascade, provider);
@@ -345,6 +362,8 @@ _gtk_style_cascade_add_provider (GtkStyleCascade *cascade,
break;
}
g_array_insert_val (cascade->providers, i, data);
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (cascade));
}
void
@@ -363,6 +382,8 @@ _gtk_style_cascade_remove_provider (GtkStyleCascade *cascade,
if (data->provider == provider)
{
g_array_remove_index (cascade->providers, i);
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (cascade));
break;
}
}