[gnome-shell/gbsneto/fix-switching-scale] st/widget: Compare scale factor when recomputing style
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/gbsneto/fix-switching-scale] st/widget: Compare scale factor when recomputing style
- Date: Fri, 3 Apr 2020 19:57:43 +0000 (UTC)
commit eb70606a05e4a6b0c2ab1a7ce8241915f2954355
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Fri Apr 3 16:54:44 2020 -0300
st/widget: Compare scale factor when recomputing style
Changing the scale affects not only painting, but also the actual
geometry of the actors. Right now, however, it is not being accounted
for when recomputing styles, which results in various UI elements
(the icon grid, top panel elements, etc) to have an old geometry.
Compare scale factors when recomputing style, and consider scale
factor changes as geometry changes.
src/st/st-widget.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
---
diff --git a/src/st/st-widget.c b/src/st/st-widget.c
index 7314a6ca5f..1fd1d7d098 100644
--- a/src/st/st-widget.c
+++ b/src/st/st-widget.c
@@ -80,6 +80,8 @@ struct _StWidgetPrivate
AtkRole accessible_role;
AtkStateSet *local_state_set;
+ int scale_factor;
+
ClutterActor *label_actor;
gchar *accessible_name;
@@ -1648,6 +1650,7 @@ st_widget_init (StWidget *actor)
priv = st_widget_get_instance_private (actor);
priv->transition_animation = NULL;
priv->local_state_set = atk_state_set_new ();
+ priv->scale_factor = 1;
/* connect style changed */
g_signal_connect (actor, "notify::name", G_CALLBACK (st_widget_name_notify), NULL);
@@ -1686,6 +1689,7 @@ st_widget_recompute_style (StWidget *widget,
StSettings *settings;
gboolean paint_equal, geometry_equal = FALSE;
gboolean animations_enabled;
+ ClutterActor *stage;
if (new_theme_node == old_theme_node)
{
@@ -1697,6 +1701,23 @@ st_widget_recompute_style (StWidget *widget,
if (old_theme_node)
geometry_equal = st_theme_node_geometry_equal (old_theme_node, new_theme_node);
+
+ stage = clutter_actor_get_stage (CLUTTER_ACTOR (widget));
+ if (stage)
+ {
+ StThemeContext *context;
+ int scale_factor;
+
+ context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
+ g_object_get (context, "scale-factor", &scale_factor, NULL);
+
+ if (scale_factor != priv->scale_factor)
+ {
+ priv->scale_factor = scale_factor;
+ geometry_equal = FALSE;
+ }
+ }
+
if (!geometry_equal)
clutter_actor_queue_relayout ((ClutterActor *) widget);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]