[gnome-shell/gnome-3-12] layout: Don't always extend struts to the screen edge
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/gnome-3-12] layout: Don't always extend struts to the screen edge
- Date: Tue, 15 Apr 2014 21:43:59 +0000 (UTC)
commit 8b6fcbea50e13d4770b8a2dd1806bfef2520537c
Author: Florian Müllner <fmuellner gnome org>
Date: Tue Apr 15 17:24:07 2014 +0200
layout: Don't always extend struts to the screen edge
NetWM struts are defined in terms of screen edges (rather than monitor
edges), which works poorly with vertical monitor layouts (as it renders
entire monitors unusable). Don't extend struts in those cases.
https://bugzilla.gnome.org/show_bug.cgi?id=663690
js/ui/layout.js | 30 +++++++++++++++++++++++++-----
1 files changed, 25 insertions(+), 5 deletions(-)
---
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 46cf6ad..3a23a44 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -1017,19 +1017,39 @@ const LayoutManager = new Lang.Class({
continue;
// Ensure that the strut rects goes all the way to the screen edge,
- // as this really what mutter expects.
+ // as this really what mutter expects. However skip this step
+ // in cases where this would render an entire monitor unusable.
switch (side) {
case Meta.Side.TOP:
- y1 = 0;
+ let hasMonitorsAbove = this.monitors.some(Lang.bind(this,
+ function(mon) {
+ return this._isAboveOrBelowPrimary(mon) &&
+ mon.y < primary.y;
+ }));
+ if (!hasMonitorsAbove)
+ y1 = 0;
break;
case Meta.Side.BOTTOM:
- y2 = global.screen_height;
+ if (this.primaryIndex == this.bottomIndex)
+ y2 = global.screen_height;
break;
case Meta.Side.LEFT:
- x1 = 0;
+ let hasMonitorsLeft = this.monitors.some(Lang.bind(this,
+ function(mon) {
+ return !this._isAboveOrBelowPrimary(mon) &&
+ mon.x < primary.x;
+ }));
+ if (!hasMonitorsLeft)
+ x1 = 0;
break;
case Meta.Side.RIGHT:
- x2 = global.screen_width;
+ let hasMonitorsRight = this.monitors.some(Lang.bind(this,
+ function(mon) {
+ return !this._isAboveOrBelowPrimary(mon) &&
+ mon.x > primary.x;
+ }));
+ if (!hasMonitorsRight)
+ x2 = global.screen_width;
break;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]