[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:04:49 +0000 (UTC)
commit a251386b649f4ebc12b0f4849fa0e8d445b052af
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.
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]