[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 20:07:29 +0000 (UTC)
commit 34b84c93cb04361ca3e445b1fdd0c8ab693000f4
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.
Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/1635
https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1176
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]