diff --git a/js/ui/layout.js b/js/ui/layout.js index a3a32ebca..f308c4446 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -634,6 +634,13 @@ const LayoutManager = new Lang.Class({ } }, + getWorkAreaForMonitor: function(monitorIndex) { + // Assume that all workspaces will have the same + // struts and pick the first one. + let ws = global.screen.get_workspace_by_index(0); + return ws.get_work_area_for_monitor(monitorIndex); + }, + // This call guarantees that we return some monitor to simplify usage of it // In practice all tracked actors should be visible on some monitor anyway findIndexForActor: function(actor) { diff --git a/js/ui/overview.js b/js/ui/overview.js index a8f7e4abf..75b8f7ed6 100644 --- a/js/ui/overview.js +++ b/js/ui/overview.js @@ -374,15 +374,13 @@ const Overview = new Lang.Class({ this.hide(); let primary = Main.layoutManager.primaryMonitor; - - let contentY = Main.panel.actor.height; - let contentHeight = primary.height - contentY - Main.messageTray.actor.height; + let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex); this._overview.set_position(primary.x, primary.y); this._overview.set_size(primary.width, primary.height); - this._coverPane.set_position(0, contentY); - this._coverPane.set_size(primary.width, contentHeight); + this._coverPane.set_position(0, workArea.y); + this._coverPane.set_size(workArea.width, workArea.height); }, _onRestacked: function() { diff --git a/js/ui/panelMenu.js b/js/ui/panelMenu.js index ad3600f85..aa935e9c4 100644 --- a/js/ui/panelMenu.js +++ b/js/ui/panelMenu.js @@ -205,10 +205,8 @@ const Button = new Lang.Class({ // Setting the max-height won't do any good if the minimum height of the // menu is higher then the screen; it's useful if part of the menu is // scrollable so the minimum height is smaller than the natural height - let monitor = Main.layoutManager.primaryMonitor; - this.menu.actor.style = ('max-height: ' + - Math.round(monitor.height - Main.panel.actor.height) + - 'px;'); + let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex); + this.menu.actor.style = ('max-height: ' + Math.round(workArea.height) + 'px;'); }, destroy: function() { diff --git a/js/ui/workspaceSwitcherPopup.js b/js/ui/workspaceSwitcherPopup.js index 6bd124d5d..4005d77eb 100644 --- a/js/ui/workspaceSwitcherPopup.js +++ b/js/ui/workspaceSwitcherPopup.js @@ -55,10 +55,9 @@ const WorkspaceSwitcherPopup = new Lang.Class({ _getPreferredHeight : function (actor, forWidth, alloc) { let children = this._list.get_children(); - let primary = Main.layoutManager.primaryMonitor; + let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex); - let availHeight = primary.height; - availHeight -= Main.panel.actor.height; + let availHeight = workArea.height; availHeight -= this.actor.get_theme_node().get_vertical_padding(); availHeight -= this._container.get_theme_node().get_vertical_padding(); availHeight -= this._list.get_theme_node().get_vertical_padding(); @@ -67,7 +66,7 @@ const WorkspaceSwitcherPopup = new Lang.Class({ for (let i = 0; i < children.length; i++) { let [childMinHeight, childNaturalHeight] = children[i].get_preferred_height(-1); let [childMinWidth, childNaturalWidth] = children[i].get_preferred_width(childNaturalHeight); - height += childNaturalHeight * primary.width / primary.height; + height += childNaturalHeight * workArea.width / workArea.height; } let spacing = this._itemSpacing * (global.screen.n_workspaces - 1); @@ -81,8 +80,8 @@ const WorkspaceSwitcherPopup = new Lang.Class({ }, _getPreferredWidth : function (actor, forHeight, alloc) { - let primary = Main.layoutManager.primaryMonitor; - this._childWidth = Math.round(this._childHeight * primary.width / primary.height); + let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex); + this._childWidth = Math.round(this._childHeight * workArea.width / workArea.height); alloc.min_size = this._childWidth; alloc.natural_size = this._childWidth; @@ -122,12 +121,11 @@ const WorkspaceSwitcherPopup = new Lang.Class({ } - let primary = Main.layoutManager.primaryMonitor; + let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex); let [containerMinHeight, containerNatHeight] = this._container.get_preferred_height(global.screen_width); let [containerMinWidth, containerNatWidth] = this._container.get_preferred_width(containerNatHeight); - this._container.x = primary.x + Math.floor((primary.width - containerNatWidth) / 2); - this._container.y = primary.y + Main.panel.actor.height + - Math.floor(((primary.height - Main.panel.actor.height) - containerNatHeight) / 2); + this._container.x = workArea.x + Math.floor((workArea.width - containerNatWidth) / 2); + this._container.y = workArea.y + Math.floor((workArea.height - containerNatHeight) / 2); }, _show : function() { diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index fd68ce583..b0300f603 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -759,14 +759,7 @@ const ThumbnailsBox = new Lang.Class({ this._stateCounts[ThumbnailState[key]] = 0; // The "porthole" is the portion of the screen that we show in the workspaces - let panelHeight = Main.panel.actor.height; - let monitor = Main.layoutManager.primaryMonitor; - this._porthole = { - x: monitor.x, - y: monitor.y + panelHeight, - width: monitor.width, - height: monitor.height - panelHeight - }; + this._porthole = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex); this.addThumbnails(0, global.screen.n_workspaces);