[gnome-shell] layout: deal better with vertically-stacked monitors
- From: Dan Winship <danw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] layout: deal better with vertically-stacked monitors
- Date: Wed, 6 Jul 2011 12:40:49 +0000 (UTC)
commit 1dfffdbc4e5f0e6242cf0ba913cc199e635b1828
Author: Dan Winship <danw gnome org>
Date: Mon Jun 13 10:37:10 2011 -0400
layout: deal better with vertically-stacked monitors
If there is a monitor below the primary monitor, then put the message
tray there, rather than necessarily on the primary.
https://bugzilla.gnome.org/show_bug.cgi?id=636963
js/ui/layout.js | 30 +++++++++++++++++++++++++++++-
js/ui/messageTray.js | 24 ++++++++++++------------
2 files changed, 41 insertions(+), 13 deletions(-)
---
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 0fd0eb5..37a8bb7 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -38,8 +38,22 @@ LayoutManager.prototype = {
for (let i = 0; i < nMonitors; i++)
this.monitors.push(screen.get_monitor_geometry(i));
- this.primaryIndex = screen.get_primary_monitor();
+ if (nMonitors == 1) {
+ this.primaryIndex = this.bottomIndex = 0;
+ } else {
+ // If there are monitors below the primary, then we need
+ // to split primary from bottom.
+ this.primaryIndex = this.bottomIndex = screen.get_primary_monitor();
+ for (let i = 0; i < this.monitors.length; i++) {
+ let monitor = this.monitors[i];
+ if (this._isAboveOrBelowPrimary(monitor)) {
+ if (monitor.y > this.monitors[this.bottomIndex].y)
+ this.bottomIndex = i;
+ }
+ }
+ }
this.primaryMonitor = this.monitors[this.primaryIndex];
+ this.bottomMonitor = this.monitors[this.bottomIndex];
},
_updateHotCorners: function() {
@@ -103,6 +117,20 @@ LayoutManager.prototype = {
this.emit('monitors-changed');
},
+ _isAboveOrBelowPrimary: function(monitor) {
+ let primary = this.monitors[this.primaryIndex];
+ let monitorLeft = monitor.x, monitorRight = monitor.x + monitor.width;
+ let primaryLeft = primary.x, primaryRight = primary.x + primary.width;
+
+ if ((monitorLeft >= primaryLeft && monitorLeft <= primaryRight) ||
+ (monitorRight >= primaryLeft && monitorRight <= primaryRight) ||
+ (primaryLeft >= monitorLeft && primaryLeft <= monitorRight) ||
+ (primaryRight >= monitorLeft && primaryRight <= monitorRight))
+ return true;
+
+ return false;
+ },
+
get focusIndex() {
let screen = global.screen;
let display = screen.get_display();
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index a1b99bf..e6be84c 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -1293,20 +1293,20 @@ MessageTray.prototype = {
},
_setSizePosition: function() {
- let primary = Main.layoutManager.primaryMonitor;
- this.actor.x = primary.x;
- this.actor.y = primary.y + primary.height - 1;
- this.actor.width = primary.width;
+ let monitor = Main.layoutManager.bottomMonitor;
+ this.actor.x = monitor.x;
+ this.actor.y = monitor.y + monitor.height - 1;
+ this.actor.width = monitor.width;
this._notificationBin.x = 0;
- this._notificationBin.width = primary.width;
+ this._notificationBin.width = monitor.width;
this._summaryBin.x = 0;
- this._summaryBin.width = primary.width;
+ this._summaryBin.width = monitor.width;
if (this._pointerBarrier)
global.destroy_pointer_barrier(this._pointerBarrier);
this._pointerBarrier =
- global.create_pointer_barrier(primary.x + primary.width, primary.y + primary.height - this.actor.height,
- primary.x + primary.width, primary.y + primary.height,
+ global.create_pointer_barrier(monitor.x + monitor.width, monitor.y + monitor.height - this.actor.height,
+ monitor.x + monitor.width, monitor.y + monitor.height,
4 /* BarrierNegativeX */);
@@ -1867,18 +1867,18 @@ MessageTray.prototype = {
},
_showTray: function() {
- let primary = Main.layoutManager.primaryMonitor;
+ let monitor = Main.layoutManager.bottomMonitor;
this._tween(this.actor, '_trayState', State.SHOWN,
- { y: primary.y + primary.height - this.actor.height,
+ { y: monitor.y + monitor.height - this.actor.height,
time: ANIMATION_TIME,
transition: 'easeOutQuad'
});
},
_hideTray: function() {
- let primary = Main.layoutManager.primaryMonitor;
+ let monitor = Main.layoutManager.bottomMonitor;
this._tween(this.actor, '_trayState', State.HIDDEN,
- { y: primary.y + primary.height - 1,
+ { y: monitor.y + monitor.height - 1,
time: ANIMATION_TIME,
transition: 'easeOutQuad'
});
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]