wayland/surface: Only update the scale if on any outputs
authorJonas Ådahl <jadahl@gmail.com>
Fri, 7 Jan 2022 18:28:36 +0000 (19:28 +0100)
committerJonas Ådahl <jadahl@gmail.com>
Fri, 7 Jan 2022 18:32:04 +0000 (19:32 +0100)
If we ended up on no output at all, keep the HiDPI scale as is, as it
likely means we were on a workspace that was switched away from. By
keeping the same scale, we avoid unnecessary scale changes that would
otherwise take place if the scale when on monitors would end up being
more than 1.

gdk/wayland/gdksurface-wayland.c

index c2d4ea464cdbdabdfae50a657fc5024e32f25dd0..3c046b5ea2becf448770b7773e1c0d7e09224ebf 100644 (file)
@@ -780,11 +780,22 @@ gdk_wayland_surface_update_scale (GdkSurface *surface)
       return;
     }
 
-  scale = 1;
-  for (l = impl->display_server.outputs; l != NULL; l = l->next)
+  if (!impl->display_server.outputs)
     {
-      guint32 output_scale = gdk_wayland_display_get_output_scale (display_wayland, l->data);
-      scale = MAX (scale, output_scale);
+      scale = impl->scale;
+    }
+  else
+    {
+      scale = 1;
+      for (l = impl->display_server.outputs; l != NULL; l = l->next)
+        {
+          struct wl_output *output = l->data;
+          uint32_t output_scale;
+
+          output_scale = gdk_wayland_display_get_output_scale (display_wayland,
+                                                               output);
+          scale = MAX (scale, output_scale);
+        }
     }
 
   /* Notify app that scale changed */