diff options
author | Viktor Odintsev <ninetls@xfce.org> | 2019-05-30 20:59:26 +0300 |
---|---|---|
committer | Viktor Odintsev <ninetls@xfce.org> | 2019-05-30 20:59:26 +0300 |
commit | 0a82935b7bb3bfc9525bf6b38a20abba857f4dde (patch) | |
tree | aac414a35cc56149d47e9928536ea9cfcac7a6af /common | |
parent | b5c07beffa7f8a939bba432aeedac30fed6d164b (diff) | |
download | xfwm4-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.c | 47 | ||||
-rw-r--r-- | common/xfwm-common.h | 3 |
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); |