Skip to content

Commit 77fdffd

Browse files
vkarehraveit65
authored and
raveit65
committed
Fix strut sizes for HiDPI multi-monitors
1 parent 06c84c7 commit 77fdffd

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

mate-panel/panel-struts.c

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,10 @@ panel_struts_get_monitor_geometry (GdkScreen *screen,
7575
int *width,
7676
int *height)
7777
{
78-
GdkDisplay *display;
79-
int scale;
80-
81-
/* Use scale factor to bring strut dimensions up to application pixels to support HiDPI displays */
82-
display = gdk_screen_get_display (screen);
83-
scale = gdk_monitor_get_scale_factor (gdk_display_get_monitor (display, monitor));
84-
85-
*x = panel_multiscreen_x (screen, monitor) * scale;
86-
*y = panel_multiscreen_y (screen, monitor) * scale;
87-
*width = panel_multiscreen_width (screen, monitor) * scale;
88-
*height = panel_multiscreen_height (screen, monitor) * scale;
78+
*x = panel_multiscreen_x (screen, monitor);
79+
*y = panel_multiscreen_y (screen, monitor);
80+
*width = panel_multiscreen_width (screen, monitor);
81+
*height = panel_multiscreen_height (screen, monitor);
8982
}
9083

9184
static PanelStrut *
@@ -263,6 +256,7 @@ panel_struts_set_window_hint (PanelToplevel *toplevel)
263256
int monitor_x, monitor_y, monitor_width, monitor_height;
264257
int screen_width, screen_height;
265258
int leftmost, rightmost, topmost, bottommost;
259+
int scale;
266260

267261
widget = GTK_WIDGET (toplevel);
268262

@@ -274,10 +268,11 @@ panel_struts_set_window_hint (PanelToplevel *toplevel)
274268
return;
275269
}
276270

271+
scale = gtk_widget_get_scale_factor (widget);
277272
strut_size = strut->allocated_strut_size;
278273

279-
screen_width = WidthOfScreen (gdk_x11_screen_get_xscreen (strut->screen));
280-
screen_height = HeightOfScreen (gdk_x11_screen_get_xscreen (strut->screen));
274+
screen_width = WidthOfScreen (gdk_x11_screen_get_xscreen (strut->screen)) / scale;
275+
screen_height = HeightOfScreen (gdk_x11_screen_get_xscreen (strut->screen)) / scale;
281276

282277
panel_struts_get_monitor_geometry (strut->screen,
283278
strut->monitor,
@@ -322,8 +317,8 @@ panel_struts_set_window_hint (PanelToplevel *toplevel)
322317
panel_xutils_set_strut (gtk_widget_get_window (widget),
323318
strut->orientation,
324319
strut_size,
325-
strut->allocated_strut_start,
326-
strut->allocated_strut_end);
320+
strut->allocated_strut_start * scale,
321+
strut->allocated_strut_end * scale);
327322
}
328323

329324
void
@@ -449,24 +444,32 @@ panel_struts_register_strut (PanelToplevel *toplevel,
449444
strut->geometry.y = monitor_y;
450445
strut->geometry.width = strut->strut_end - strut->strut_start + 1;
451446
strut->geometry.height = strut->strut_size / scale;
447+
if (scale > 1)
448+
strut->geometry.width -= (strut->strut_size / scale);
452449
break;
453450
case PANEL_ORIENTATION_BOTTOM:
454451
strut->geometry.x = strut->strut_start;
455452
strut->geometry.y = monitor_y + monitor_height - strut->strut_size;
456453
strut->geometry.width = strut->strut_end - strut->strut_start + 1;
457454
strut->geometry.height = strut->strut_size / scale;
455+
if (scale > 1)
456+
strut->geometry.width -= (strut->strut_size / scale);
458457
break;
459458
case PANEL_ORIENTATION_LEFT:
460459
strut->geometry.x = monitor_x;
461460
strut->geometry.y = strut->strut_start;
462461
strut->geometry.width = strut->strut_size / scale;
463462
strut->geometry.height = strut->strut_end - strut->strut_start + 1;
463+
if (scale > 1)
464+
strut->geometry.height -= (strut->strut_size / scale);
464465
break;
465466
case PANEL_ORIENTATION_RIGHT:
466467
strut->geometry.x = monitor_x + monitor_width - strut->strut_size;
467468
strut->geometry.y = strut->strut_start;
468469
strut->geometry.width = strut->strut_size / scale;
469470
strut->geometry.height = strut->strut_end - strut->strut_start + 1;
471+
if (scale > 1)
472+
strut->geometry.height -= (strut->strut_size / scale);
470473
break;
471474
}
472475

0 commit comments

Comments
 (0)