diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main-window.vala | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/src/main-window.vala b/src/main-window.vala index 176001b..88c6e7f 100644 --- a/src/main-window.vala +++ b/src/main-window.vala @@ -274,6 +274,39 @@ public class MainWindow : Gtk.Window _set_struts (MenubarPositions.TOP, greeter.menubar_height); } + private void getScreenSize (out int nScreenWidth, out int nScreenHeight) + { + Gdk.Display pDisplay = Gdk.Display.get_default (); + int nMonitors = pDisplay.get_n_monitors (); + + if (nMonitors == 0) + { + nScreenWidth = 0; + nScreenHeight = 0; + + return; + } + + int x0 = int.MAX; + int y0 = int.MAX; + int x1 = int.MIN; + int y1 = int.MIN; + + for (int nMonitor = 0; nMonitor < nMonitors; nMonitor++) + { + Gdk.Monitor pMonitor = pDisplay.get_monitor (nMonitor); + Gdk.Rectangle cRectangle = pMonitor.get_geometry (); + + x0 = int.min (x0, cRectangle.x); + y0 = int.min (y0, cRectangle.y); + x1 = int.max (x1, cRectangle.x + cRectangle.width); + y1 = int.max (y1, cRectangle.y + cRectangle.height); + } + + nScreenWidth = x1 - x0; + nScreenHeight = y1 - y0; + } + private void _set_struts (uint position, long menubar_size) { if (!get_realized()) { @@ -292,6 +325,10 @@ public class MainWindow : Gtk.Window /* Subtract (non-scaled) 5px border + 2px extra spacing (to make indicator menus render nicely below menubar) */ menubar_size = menubar_size - 7; + int nScreenWidth = 0; + int nScreenHeight = 0; + getScreenSize (out nScreenWidth, out nScreenHeight); + // Struts dependent on position switch (position) { case MenubarPositions.TOP: @@ -305,13 +342,13 @@ public class MainWindow : Gtk.Window struts[Struts.LEFT_END] = (primary_monitor.y + primary_monitor.height) * scale - 1; break; case MenubarPositions.RIGHT: - struts[Struts.RIGHT] = (menubar_size + screen.get_width() - primary_monitor.x - primary_monitor.width) * scale; + struts[Struts.RIGHT] = (menubar_size + nScreenWidth - primary_monitor.x - primary_monitor.width) * scale; struts[Struts.RIGHT_START] = primary_monitor.y * scale; struts[Struts.RIGHT_END] = (primary_monitor.y + primary_monitor.height) * scale - 1; break; case MenubarPositions.BOTTOM: default: - struts[Struts.BOTTOM] = (menubar_size + screen.get_height() - primary_monitor.y - primary_monitor.height) * scale; + struts[Struts.BOTTOM] = (menubar_size + nScreenHeight - primary_monitor.y - primary_monitor.height) * scale; struts[Struts.BOTTOM_START] = primary_monitor.x * scale; struts[Struts.BOTTOM_END] = (primary_monitor.x + primary_monitor.width) * scale - 1; break; |