[Xfce4-commits] [xfce/xfwm4] 04/05: Use device geometry for primary monitor

noreply at xfce.org noreply at xfce.org
Thu Jun 6 21:20:34 CEST 2019


This is an automated email from the git hooks/post-receive script.

o   l   i   v   i   e   r       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/xfwm4.

commit 0a82935b7bb3bfc9525bf6b38a20abba857f4dde
Author: Viktor Odintsev <ninetls at xfce.org>
Date:   Thu May 30 20:59:26 2019 +0300

    Use device geometry for primary monitor
    
    `xfwm_get_primary_monitor_geometry` returns logical dimensions instead
    of device dimensions, which leads to incorrect `_NET_WORKAREA`
    calculation.
---
 common/xfwm-common.c | 47 +++++++++++++++++++++++++++++++++--------------
 common/xfwm-common.h |  3 ++-
 src/placement.c      |  2 +-
 src/workspaces.c     |  2 +-
 4 files changed, 37 insertions(+), 17 deletions(-)

diff --git a/common/xfwm-common.c b/common/xfwm-common.c
index 740451a..f187e42 100644
--- a/common/xfwm-common.c
+++ b/common/xfwm-common.c
@@ -75,52 +75,71 @@ xfwm_get_screen_dimensions (gint *width, gint *height)
 
 
 
+static void
+xfwm_geometry_convert_to_device_pixels (GdkRectangle *geometry,
+                                        gint          scale)
+{
+  if (geometry != NULL)
+    {
+      geometry->x *= scale;
+      geometry->y *= scale;
+      geometry->width *= scale;
+      geometry->height *= scale;
+    }
+}
+
+
+
 void
 xfwm_get_monitor_geometry (GdkScreen    *screen,
                            gint          monitor_num,
                            GdkRectangle *geometry,
                            gboolean      scaled)
 {
+  gint        scale;
 #if GTK_CHECK_VERSION(3, 22, 0)
   GdkDisplay *display;
   GdkMonitor *monitor;
 
   display = gdk_screen_get_display (screen);
   monitor = gdk_display_get_monitor (display, monitor_num);
+  scale = gdk_monitor_get_scale_factor (monitor);
   gdk_monitor_get_geometry (monitor, geometry);
-
-  /* Convert to device pixels */
-  if (scaled)
-    {
-      int scale = gdk_monitor_get_scale_factor (monitor);
-      geometry->x *= scale;
-      geometry->y *= scale;
-      geometry->width *= scale;
-      geometry->height *= scale;
-    }
 #else
+  scale = gdk_screen_get_monitor_scale_factor (screen, monitor_num);
   gdk_screen_get_monitor_geometry (screen, monitor_num, geometry);
 #endif
+
+  if (scaled && scale != 1)
+    xfwm_geometry_convert_to_device_pixels (geometry, scale);
 }
 
 
 
 void
 xfwm_get_primary_monitor_geometry (GdkScreen    *screen,
-                                   GdkRectangle *geometry)
+                                   GdkRectangle *geometry,
+                                   gboolean      scaled)
 {
+  gint        scale;
 #if GTK_CHECK_VERSION(3, 22, 0)
   GdkDisplay *display;
   GdkMonitor *monitor;
 
   display = gdk_screen_get_display (screen);
   monitor = gdk_display_get_primary_monitor (display);
+  scale = gdk_monitor_get_scale_factor (monitor);
   gdk_monitor_get_geometry (monitor, geometry);
 #else
-  gdk_screen_get_monitor_geometry (screen,
-                                   gdk_screen_get_primary_monitor (screen),
-                                   geometry);
+  gint        monitor_num;
+
+  monitor_num = gdk_screen_get_primary_monitor (screen);
+  scale = gdk_screen_get_monitor_scale_factor (screen, monitor_num);
+  gdk_screen_get_monitor_geometry (screen, monitor_num, geometry);
 #endif
+
+  if (scaled && scale != 1)
+    xfwm_geometry_convert_to_device_pixels (geometry, scale);
 }
 
 
diff --git a/common/xfwm-common.h b/common/xfwm-common.h
index 667caff..693ad84 100644
--- a/common/xfwm-common.h
+++ b/common/xfwm-common.h
@@ -35,7 +35,8 @@ void              xfwm_get_monitor_geometry             (GdkScreen    *screen,
                                                          gboolean      scaled);
 
 void              xfwm_get_primary_monitor_geometry     (GdkScreen    *screen,
-                                                         GdkRectangle *geometry);
+                                                         GdkRectangle *geometry,
+                                                         gboolean      scaled);
 
 gint              xfwm_get_primary_refresh_rate         (GdkScreen    *screen);
 
diff --git a/src/placement.c b/src/placement.c
index 3fb1294..c947597 100644
--- a/src/placement.c
+++ b/src/placement.c
@@ -773,7 +773,7 @@ clientInitPosition (Client * c)
     position = (c->size->flags & (PPosition | USPosition));
 
     n_monitors = myScreenGetNumMonitors (c->screen_info);
-    xfwm_get_primary_monitor_geometry (screen_info->gscr, &rect);
+    xfwm_get_primary_monitor_geometry (screen_info->gscr, &rect, TRUE);
     is_transient = clientIsTransient (c);
 
     if (position || is_transient || (c->type & (WINDOW_TYPE_DONT_PLACE | WINDOW_TYPE_DIALOG)))
diff --git a/src/workspaces.c b/src/workspaces.c
index d8aa4ed..6981845 100644
--- a/src/workspaces.c
+++ b/src/workspaces.c
@@ -548,7 +548,7 @@ workspaceUpdateArea (ScreenInfo *screen_info)
         screen_info->margins[i] = screen_info->gnome_margins[i];
     }
 
-    xfwm_get_primary_monitor_geometry (screen_info->gscr, &workarea);
+    xfwm_get_primary_monitor_geometry (screen_info->gscr, &workarea, TRUE);
 
     for (c = screen_info->clients, i = 0; i < screen_info->client_count; c = c->next, i++)
     {

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list