st-widget: Add method to clear background-image
For performance reasons, resources required to paint a widget are aggressively cached; we know of at least one case where our caching prevents updating the used background-image correctly, so add explicit API to clear all associated cache data. https://bugzilla.gnome.org/show_bug.cgi?id=679268
This commit is contained in:
parent
c4c470c1f3
commit
cd024e21f0
@ -2760,3 +2760,38 @@ st_widget_get_focus_chain (StWidget *widget)
|
|||||||
{
|
{
|
||||||
return ST_WIDGET_GET_CLASS (widget)->get_focus_chain (widget);
|
return ST_WIDGET_GET_CLASS (widget)->get_focus_chain (widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* st_widget_clear_background_image:
|
||||||
|
* @widget: An #StWidget
|
||||||
|
*
|
||||||
|
* Force a reload of the background-image property. Usually properties
|
||||||
|
* are cached heavily to avoid unnecessary work on paint, this method
|
||||||
|
* will force the cache to be recreated.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
st_widget_clear_background_image (StWidget *actor)
|
||||||
|
{
|
||||||
|
GFile *file;
|
||||||
|
const char *path;
|
||||||
|
char *uri;
|
||||||
|
|
||||||
|
if (actor->priv->theme_node == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
path = st_theme_node_get_background_image (actor->priv->theme_node);
|
||||||
|
if (path == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
file = g_file_new_for_path (path);
|
||||||
|
uri = g_file_get_uri (file);
|
||||||
|
|
||||||
|
st_texture_cache_clear_uri (st_texture_cache_get_default (), uri);
|
||||||
|
st_theme_node_invalidate_paint_state (actor->priv->theme_node);
|
||||||
|
|
||||||
|
if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR (actor)))
|
||||||
|
clutter_actor_queue_redraw (CLUTTER_ACTOR (actor));
|
||||||
|
|
||||||
|
g_object_unref (file);
|
||||||
|
g_free (uri);
|
||||||
|
}
|
||||||
|
@ -142,6 +142,8 @@ ClutterActor * st_widget_get_label_actor (StWidget *widg
|
|||||||
void st_widget_set_label_actor (StWidget *widget,
|
void st_widget_set_label_actor (StWidget *widget,
|
||||||
ClutterActor *label);
|
ClutterActor *label);
|
||||||
|
|
||||||
|
void st_widget_clear_background_image (StWidget *widget);
|
||||||
|
|
||||||
/* Only to be used by sub-classes of StWidget */
|
/* Only to be used by sub-classes of StWidget */
|
||||||
void st_widget_style_changed (StWidget *widget);
|
void st_widget_style_changed (StWidget *widget);
|
||||||
StThemeNode * st_widget_get_theme_node (StWidget *widget);
|
StThemeNode * st_widget_get_theme_node (StWidget *widget);
|
||||||
|
Loading…
Reference in New Issue
Block a user