summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorViktor Odintsev <ninetls@xfce.org>2019-05-30 20:59:26 +0300
committerViktor Odintsev <ninetls@xfce.org>2019-05-30 20:59:26 +0300
commit0a82935b7bb3bfc9525bf6b38a20abba857f4dde (patch)
treeaac414a35cc56149d47e9928536ea9cfcac7a6af /common
parentb5c07beffa7f8a939bba432aeedac30fed6d164b (diff)
downloadxfwm4-0a82935b7bb3bfc9525bf6b38a20abba857f4dde.tar.gz
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.
Diffstat (limited to 'common')
-rw-r--r--common/xfwm-common.c47
-rw-r--r--common/xfwm-common.h3
2 files changed, 35 insertions, 15 deletions
diff --git a/common/xfwm-common.c b/common/xfwm-common.c
index 740451a96..f187e4277 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 667caff3a..693ad8476 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);