[gnome-shell] st-widget: Keep background-image and border-image updated
- From: Florian MÃllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] st-widget: Keep background-image and border-image updated
- Date: Wed, 17 Oct 2012 21:58:44 +0000 (UTC)
commit d54f7b13fb94e6199b48576226d7cc20eb0cb24a
Author: Florian MÃllner <fmuellner gnome org>
Date: Thu Sep 20 21:44:45 2012 +0200
st-widget: Keep background-image and border-image updated
Currently we miss changes to a file referenced in background-image
or border-image.
Connect to the StTextureCache::texture-file-changed signal to keep
up with file changes and update the drawing state if necessary.
https://bugzilla.gnome.org/show_bug.cgi?id=679268
src/st/st-widget.c | 39 +++++++++++++++++++++++++++++++++++++++
1 files changed, 39 insertions(+), 0 deletions(-)
---
diff --git a/src/st/st-widget.c b/src/st/st-widget.c
index 27cc2fb..46904e9 100644
--- a/src/st/st-widget.c
+++ b/src/st/st-widget.c
@@ -270,6 +270,39 @@ st_widget_remove_transition (StWidget *widget)
}
static void
+st_widget_texture_cache_changed (StTextureCache *cache,
+ const char *uri,
+ gpointer user_data)
+{
+ StWidget *actor = ST_WIDGET (user_data);
+ StThemeNode *node = actor->priv->theme_node;
+ StBorderImage *border_image;
+ char *path;
+ gboolean changed;
+
+ if (node == NULL)
+ return;
+
+ path = g_filename_from_uri (uri, NULL, NULL);
+
+ changed = g_strcmp0 (st_theme_node_get_background_image (node), path) == 0;
+
+ border_image = st_theme_node_get_border_image (node);
+ if (!changed && border_image)
+ changed = strcmp (st_border_image_get_filename (border_image), path) == 0;
+
+ g_free (path);
+
+ if (!changed)
+ return;
+
+ st_theme_node_invalidate_paint_state (node);
+
+ if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR (actor)))
+ clutter_actor_queue_redraw (CLUTTER_ACTOR (actor));
+}
+
+static void
st_widget_dispose (GObject *gobject)
{
StWidget *actor = ST_WIDGET (gobject);
@@ -302,6 +335,10 @@ st_widget_dispose (GObject *gobject)
priv->label_actor = NULL;
}
+ g_signal_handlers_disconnect_by_func (st_texture_cache_get_default (),
+ st_widget_texture_cache_changed,
+ actor);
+
g_clear_object (&priv->prev_first_child);
g_clear_object (&priv->prev_last_child);
@@ -1470,6 +1507,8 @@ st_widget_init (StWidget *actor)
g_signal_connect (actor, "notify::first-child", G_CALLBACK (st_widget_first_child_notify), NULL);
g_signal_connect (actor, "notify::last-child", G_CALLBACK (st_widget_last_child_notify), NULL);
+ g_signal_connect (st_texture_cache_get_default (), "texture-file-changed",
+ G_CALLBACK (st_widget_texture_cache_changed), actor);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]