[gnome-shell] messageTray: Take over trayBox from LayoutManager
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] messageTray: Take over trayBox from LayoutManager
- Date: Fri, 27 Feb 2015 13:24:27 +0000 (UTC)
commit b3a96f2f6c5bbd4e8f6a9e960cb0b52c4462057f
Author: Florian Müllner <fmuellner gnome org>
Date: Wed Feb 25 17:43:54 2015 +0100
messageTray: Take over trayBox from LayoutManager
Since commit e189a34, the trayBox uses a Contraint to cover the primary
monitor's work area. This allows banners to be clipped so they don't
leak into monitors above the primary one during animations. However even
without being reactive, the trayBox now interferes with operations like
Looking Glass' object picker and overview DND.
With the trayBox no longer being positioned manually, there's no strong
reason to keep it in LayoutManager, and handling it in MessageTray allows
to hide the actor while no banner is showing, which helps with the issue
outlined above.
https://bugzilla.gnome.org/show_bug.cgi?id=744912
js/ui/layout.js | 13 ---------
js/ui/messageTray.js | 73 +++++++++++++++++++++++++++++--------------------
2 files changed, 43 insertions(+), 43 deletions(-)
---
diff --git a/js/ui/layout.js b/js/ui/layout.js
index c52ed61..a4abc28 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -236,11 +236,6 @@ const LayoutManager = new Lang.Class({
this.panelBox.connect('allocation-changed',
Lang.bind(this, this._panelBoxChanged));
- this.trayBox = new St.Widget({ name: 'trayBox',
- clip_to_allocation: true,
- layout_manager: new Clutter.BinLayout() });
- this.addChrome(this.trayBox, { affectsInputRegion: false });
-
this.modalDialogGroup = new St.Widget({ name: 'modalDialogGroup',
layout_manager: new Clutter.BinLayout() });
this.uiGroup.add_actor(this.modalDialogGroup);
@@ -284,12 +279,6 @@ const LayoutManager = new Lang.Class({
init: function() {
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
- let trayConstraint = new MonitorConstraint({ primary: true, work_area: true });
- this.trayBox.add_constraint(trayConstraint);
- this.panelBox.bind_property('visible', trayConstraint, 'work-area',
- GObject.BindingFlags.SYNC_CREATE);
-
-
this._loadBackground();
},
@@ -599,7 +588,6 @@ const LayoutManager = new Lang.Class({
// the UI group to get the correct allocation for the struts.
this._updateRegions();
- this.trayBox.hide();
this.keyboardBox.hide();
let monitor = this.primaryMonitor;
@@ -666,7 +654,6 @@ const LayoutManager = new Lang.Class({
this._startingUp = false;
- this.trayBox.show();
this.keyboardBox.show();
if (!Main.sessionMode.isGreeter) {
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index 139b165..84408f8 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -3,6 +3,7 @@
const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
+const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Atk = imports.gi.Atk;
const Lang = imports.lang;
@@ -15,6 +16,7 @@ const St = imports.gi.St;
const Calendar = imports.ui.calendar;
const GnomeSession = imports.misc.gnomeSession;
+const Layout = imports.ui.layout;
const Main = imports.ui.main;
const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
@@ -1494,19 +1496,30 @@ const MessageTray = new Lang.Class({
global.sync_pointer();
}));
- this.actor = new St.Widget({ name: 'notification-container',
- reactive: true,
- track_hover: true,
- y_align: Clutter.ActorAlign.START,
- x_align: Clutter.ActorAlign.CENTER,
- y_expand: true,
- x_expand: true,
+ this.actor = new St.Widget({ visible: false,
+ clip_to_allocation: true,
layout_manager: new Clutter.BinLayout() });
- this.actor.connect('key-release-event', Lang.bind(this, this._onNotificationKeyRelease));
- this.actor.connect('notify::hover', Lang.bind(this, this._onNotificationHoverChanged));
-
- this.actor.hide();
- this._notificationFocusGrabber = new FocusGrabber(this.actor);
+ let constraint = new Layout.MonitorConstraint({ primary: true });
+ Main.layoutManager.panelBox.bind_property('visible',
+ constraint, 'work-area',
+ GObject.BindingFlags.SYNC_CREATE);
+ this.actor.add_constraint(constraint);
+
+ this._bannerBin = new St.Widget({ name: 'notification-container',
+ reactive: true,
+ track_hover: true,
+ y_align: Clutter.ActorAlign.START,
+ x_align: Clutter.ActorAlign.CENTER,
+ y_expand: true,
+ x_expand: true,
+ layout_manager: new Clutter.BinLayout() });
+ this._bannerBin.connect('key-release-event',
+ Lang.bind(this, this._onNotificationKeyRelease));
+ this._bannerBin.connect('notify::hover',
+ Lang.bind(this, this._onNotificationHoverChanged));
+ this.actor.add_actor(this._bannerBin);
+
+ this._notificationFocusGrabber = new FocusGrabber(this._bannerBin);
this._notificationQueue = [];
this._notification = null;
this._banner = null;
@@ -1525,7 +1538,7 @@ const MessageTray = new Lang.Class({
// state of the pointer when a notification pops up.
this._pointerInNotification = false;
- // This tracks this.actor.hover and is used to fizzle
+ // This tracks this._bannerBin.hover and is used to fizzle
// out non-changing hover notifications in onNotificationHoverChanged.
this._notificationHovered = false;
@@ -1535,8 +1548,8 @@ const MessageTray = new Lang.Class({
this.clearableCount = 0;
- Main.layoutManager.trayBox.add_actor(this.actor);
- Main.layoutManager.trackChrome(this.actor, { affectsInputRegion: true });
+ Main.layoutManager.addChrome(this.actor, { affectsInputRegion: false });
+ Main.layoutManager.trackChrome(this._bannerBin, { affectsInputRegion: true });
global.screen.connect('in-fullscreen-changed', Lang.bind(this, this._updateState));
@@ -1704,10 +1717,10 @@ const MessageTray = new Lang.Class({
},
_onNotificationHoverChanged: function() {
- if (this.actor.hover == this._notificationHovered)
+ if (this._bannerBin.hover == this._notificationHovered)
return;
- this._notificationHovered = this.actor.hover;
+ this._notificationHovered = this._bannerBin.hover;
if (this._notificationHovered) {
this._resetNotificationLeftTimeout();
@@ -1721,7 +1734,7 @@ const MessageTray = new Lang.Class({
// automatically. Instead, the user is able to expand the notification by mousing away from
it and then
// mousing back in. Because this is an expected action, we set the boolean flag that
indicates that a longer
// timeout should be used before popping down the notification.
- if (this.actor.contains(actorAtShowNotificationPosition)) {
+ if (this._bannerBin.contains(actorAtShowNotificationPosition)) {
this._useLongerNotificationLeftTimeout = true;
return;
}
@@ -1877,7 +1890,7 @@ const MessageTray = new Lang.Class({
},
_clampOpacity: function() {
- this.actor.opacity = Math.max(0, Math.min(this.actor._opacity, 255));
+ this._bannerBin.opacity = Math.max(0, Math.min(this._bannerBin._opacity, 255));
},
_onIdleMonitorBecameActive: function() {
@@ -1908,11 +1921,11 @@ const MessageTray = new Lang.Class({
this._updateState();
}));
- this.actor.add_actor(this._banner.actor);
+ this._bannerBin.add_actor(this._banner.actor);
- this.actor._opacity = 0;
- this.actor.opacity = 0;
- this.actor.y = -this._banner.actor.height;
+ this._bannerBin._opacity = 0;
+ this._bannerBin.opacity = 0;
+ this._bannerBin.y = -this._banner.actor.height;
this.actor.show();
this._updateShowingNotification();
@@ -1965,7 +1978,7 @@ const MessageTray = new Lang.Class({
onCompleteScope: this
};
- this._tween(this.actor, '_notificationState', State.SHOWN, tweenParams);
+ this._tween(this._bannerBin, '_notificationState', State.SHOWN, tweenParams);
},
_showNotificationCompleted: function() {
@@ -2025,8 +2038,8 @@ const MessageTray = new Lang.Class({
this._resetNotificationLeftTimeout();
if (animate) {
- this._tween(this.actor, '_notificationState', State.HIDDEN,
- { y: -this.actor.height,
+ this._tween(this._bannerBin, '_notificationState', State.HIDDEN,
+ { y: -this._bannerBin.height,
_opacity: 0,
time: ANIMATION_TIME,
transition: 'easeOutBack',
@@ -2036,9 +2049,9 @@ const MessageTray = new Lang.Class({
onCompleteScope: this
});
} else {
- Tweener.removeTweens(this.actor);
- this.actor.y = -this.actor.height;
- this.actor.opacity = 0;
+ Tweener.removeTweens(this._bannerBin);
+ this._bannerBin.y = -this._bannerBin.height;
+ this._bannerBin.opacity = 0;
this._notificationState = State.HIDDEN;
this._hideNotificationCompleted();
}
@@ -2054,7 +2067,7 @@ const MessageTray = new Lang.Class({
this._notificationRemoved = false;
if (notification.resident)
- this.actor.remove_actor(this._banner.actor);
+ this._bannerBin.remove_actor(this._banner.actor);
else
this._banner.actor.destroy();
this._banner = null;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]