diff options
author | Victor Kareh <[email protected]> | 2018-02-27 12:35:19 -0500 |
---|---|---|
committer | Victor Kareh <[email protected]> | 2018-02-27 12:35:19 -0500 |
commit | 73e025b0eab94fe06cdafee61c347fb5fe6f7545 (patch) | |
tree | a37d69c565c82dfcc1224fd9a93ebfc3b0d2a697 | |
parent | a00f2c96e94c41cd405709e51bf3f4b23f1f6dd6 (diff) | |
download | mate-panel-73e025b0eab94fe06cdafee61c347fb5fe6f7545.tar.bz2 mate-panel-73e025b0eab94fe06cdafee61c347fb5fe6f7545.tar.xz |
Fix strut sizes for HiDPI multi-monitors
-rw-r--r-- | mate-panel/panel-struts.c | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/mate-panel/panel-struts.c b/mate-panel/panel-struts.c index f702f565..d5adccc4 100644 --- a/mate-panel/panel-struts.c +++ b/mate-panel/panel-struts.c @@ -75,17 +75,10 @@ panel_struts_get_monitor_geometry (GdkScreen *screen, int *width, int *height) { - GdkDisplay *display; - int scale; - - /* Use scale factor to bring strut dimensions up to application pixels to support HiDPI displays */ - display = gdk_screen_get_display (screen); - scale = gdk_monitor_get_scale_factor (gdk_display_get_monitor (display, monitor)); - - *x = panel_multiscreen_x (screen, monitor) * scale; - *y = panel_multiscreen_y (screen, monitor) * scale; - *width = panel_multiscreen_width (screen, monitor) * scale; - *height = panel_multiscreen_height (screen, monitor) * scale; + *x = panel_multiscreen_x (screen, monitor); + *y = panel_multiscreen_y (screen, monitor); + *width = panel_multiscreen_width (screen, monitor); + *height = panel_multiscreen_height (screen, monitor); } static PanelStrut * @@ -263,6 +256,7 @@ panel_struts_set_window_hint (PanelToplevel *toplevel) int monitor_x, monitor_y, monitor_width, monitor_height; int screen_width, screen_height; int leftmost, rightmost, topmost, bottommost; + int scale; widget = GTK_WIDGET (toplevel); @@ -274,10 +268,11 @@ panel_struts_set_window_hint (PanelToplevel *toplevel) return; } + scale = gtk_widget_get_scale_factor (widget); strut_size = strut->allocated_strut_size; - screen_width = WidthOfScreen (gdk_x11_screen_get_xscreen (strut->screen)); - screen_height = HeightOfScreen (gdk_x11_screen_get_xscreen (strut->screen)); + screen_width = WidthOfScreen (gdk_x11_screen_get_xscreen (strut->screen)) / scale; + screen_height = HeightOfScreen (gdk_x11_screen_get_xscreen (strut->screen)) / scale; panel_struts_get_monitor_geometry (strut->screen, strut->monitor, @@ -322,8 +317,8 @@ panel_struts_set_window_hint (PanelToplevel *toplevel) panel_xutils_set_strut (gtk_widget_get_window (widget), strut->orientation, strut_size, - strut->allocated_strut_start, - strut->allocated_strut_end); + strut->allocated_strut_start * scale, + strut->allocated_strut_end * scale); } void @@ -449,24 +444,32 @@ panel_struts_register_strut (PanelToplevel *toplevel, strut->geometry.y = monitor_y; strut->geometry.width = strut->strut_end - strut->strut_start + 1; strut->geometry.height = strut->strut_size / scale; + if (scale > 1) + strut->geometry.width -= (strut->strut_size / scale); break; case PANEL_ORIENTATION_BOTTOM: strut->geometry.x = strut->strut_start; strut->geometry.y = monitor_y + monitor_height - strut->strut_size; strut->geometry.width = strut->strut_end - strut->strut_start + 1; strut->geometry.height = strut->strut_size / scale; + if (scale > 1) + strut->geometry.width -= (strut->strut_size / scale); break; case PANEL_ORIENTATION_LEFT: strut->geometry.x = monitor_x; strut->geometry.y = strut->strut_start; strut->geometry.width = strut->strut_size / scale; strut->geometry.height = strut->strut_end - strut->strut_start + 1; + if (scale > 1) + strut->geometry.height -= (strut->strut_size / scale); break; case PANEL_ORIENTATION_RIGHT: strut->geometry.x = monitor_x + monitor_width - strut->strut_size; strut->geometry.y = strut->strut_start; strut->geometry.width = strut->strut_size / scale; strut->geometry.height = strut->strut_end - strut->strut_start + 1; + if (scale > 1) + strut->geometry.height -= (strut->strut_size / scale); break; } |