From 3c9d0fbca6b8044a4b071b543c6d0548bb5efd22 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Thu, 28 Jan 2010 12:04:26 -0500 Subject: [PATCH] [MessageTray] fix up allocation, ellipsize long notifications https://bugzilla.gnome.org/show_bug.cgi?id=606755 --- js/ui/messageTray.js | 65 +++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 86cd60211..56570831d 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -3,8 +3,9 @@ const Clutter = imports.gi.Clutter; const Lang = imports.lang; const Mainloop = imports.mainloop; -const St = imports.gi.St; +const Shell = imports.gi.Shell; const Signals = imports.signals; +const St = imports.gi.St; const Tweener = imports.ui.tweener; const Main = imports.ui.main; @@ -110,26 +111,20 @@ MessageTray.prototype = { this.actor = new St.BoxLayout({ name: 'message-tray', reactive: true }); - global.connect('screen-size-changed', - Lang.bind(this, this._setSizePosition)); - this._setSizePosition(); - - this._summaryBin = new St.Bin({ x_align: St.Align.END }); - this.actor.add(this._summaryBin, { expand: true }); - this._summaryBin.hide(); - + this._notificationBin = new St.Bin(); + this.actor.add(this._notificationBin); + this._notificationBin.hide(); this._notificationBox = new NotificationBox(); + this._notificationBin.child = this._notificationBox.actor; this._notificationQueue = []; - this.actor.add(this._notificationBox.actor); - this._notificationBox.actor.hide(); - this._summaryBin.connect('notify::allocation', Lang.bind(this, - function() { - let primary = global.get_primary_monitor(); - this._summaryBin.x = primary.x + primary.width - this._summaryBin.width; - })); - - Main.chrome.addActor(this.actor, { affectsStruts: false }); + this._summaryBin = new St.BoxLayout(); + this.actor.add(this._summaryBin); + this._summaryBin.hide(); + this._summary = new St.BoxLayout({ name: 'summary-mode' }); + this._summaryBin.add(this._summary, { x_align: St.Align.END, + x_fill: false, + expand: true }); this.actor.connect('enter-event', Lang.bind(this, this._onMessageTrayEntered)); @@ -137,9 +132,11 @@ MessageTray.prototype = { Lang.bind(this, this._onMessageTrayLeft)); this._state = MessageTrayState.HIDDEN; this.actor.show(); + Main.chrome.addActor(this.actor, { affectsStruts: false }); - this._summary = new St.BoxLayout({ name: 'summary-mode' }); - this._summaryBin.child = this._summary; + global.connect('screen-size-changed', + Lang.bind(this, this._setSizePosition)); + this._setSizePosition(); this._sources = {}; this._icons = {}; @@ -149,8 +146,13 @@ MessageTray.prototype = { let primary = global.get_primary_monitor(); this.actor.x = primary.x; this.actor.y = primary.y + primary.height - 1; - this.actor.width = primary.width; + + let third = Math.floor(this.actor.width / 3); + this._notificationBin.x = third; + this._notificationBin.width = third; + this._summaryBin.x = this.actor.width - third; + this._summaryBin.width = third; }, contains: function(source) { @@ -331,30 +333,25 @@ MessageTray.prototype = { _showNotification: function() { this._notificationBox.setContent(this._notificationQueue.shift()); - let notification = this._notificationBox.actor; - let primary = global.get_primary_monitor(); - notification.opacity = 0; - notification.y = primary.y + this.actor.height; - notification.show(); - let futureY = primary.y + this.actor.height - notification.height; + this._notificationBin.opacity = 0; + this._notificationBin.y = this.actor.height; + this._notificationBin.show(); - Tweener.addTween(notification, - { y: futureY, + Tweener.addTween(this._notificationBin, + { y: 0, opacity: 255, time: ANIMATION_TIME, transition: "easeOutQuad" }); }, _hideNotification: function() { - let notification = this._notificationBox.actor; - - Tweener.addTween(notification, - { y: notification.y + notification.height, + Tweener.addTween(this._notificationBin, + { y: this.actor.height, opacity: 0, time: ANIMATION_TIME, transition: "easeOutQuad", onComplete: Lang.bind(this, function() { - notification.hide(); + this._notificationBin.hide(); })}); },