[gnome-shell] Reuse same labels and containers on notification updates
- From: Dan Winship <danw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Reuse same labels and containers on notification updates
- Date: Wed, 11 Aug 2010 20:55:35 +0000 (UTC)
commit 4e283cf4196b8bdb19b4f8c197eebcd318f35450
Author: Giovanni Campagna <scampa giovanni gmail com>
Date: Wed Jul 28 17:02:32 2010 +0200
Reuse same labels and containers on notification updates
When calling Notification.update, reuse the previous _bannerBox and
related labels (only changing the label content and relayouting), so
that the opacity set on popOut is preserved. As a consequence, updating
an opened notification no longer shows (or flicker) the banner at the
top.
https://bugzilla.gnome.org/show_bug.cgi?id=625502
js/ui/messageTray.js | 41 +++++++++++++++++++++--------------------
1 files changed, 21 insertions(+), 20 deletions(-)
---
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index d90ac85..f3ea1b5 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -106,6 +106,25 @@ Notification.prototype = {
this.source.clicked();
}));
+ // The first line should have the title, followed by the
+ // banner text, but ellipsized if they won't both fit. We can't
+ // make St.Table or St.BoxLayout do this the way we want (don't
+ // show banner at all if title needs to be ellipsized), so we
+ // use Shell.GenericContainer.
+ this._bannerBox = new Shell.GenericContainer();
+ this._bannerBox.connect('get-preferred-width', Lang.bind(this, this._bannerBoxGetPreferredWidth));
+ this._bannerBox.connect('get-preferred-height', Lang.bind(this, this._bannerBoxGetPreferredHeight));
+ this._bannerBox.connect('allocate', Lang.bind(this, this._bannerBoxAllocate));
+ this.actor.add(this._bannerBox, { row: 0,
+ col: 1,
+ y_expand: false,
+ y_fill: false });
+
+ this._titleLabel = new St.Label();
+ this._bannerBox.add_actor(this._titleLabel);
+ this._bannerLabel = new St.Label();
+ this._bannerBox.add_actor(this._bannerLabel);
+
this.update(title, banner, true);
Main.overview.connect('showing', Lang.bind(this,
@@ -129,8 +148,6 @@ Notification.prototype = {
update: function(title, banner, clear) {
if (this._icon)
this._icon.destroy();
- if (this._bannerBox)
- this._bannerBox.destroy();
if (this._scrollArea && (this._bannerBody || clear)) {
this._scrollArea.destroy();
this._scrollArea = null;
@@ -149,34 +166,17 @@ Notification.prototype = {
y_expand: false,
y_fill: false });
- // The first line should have the title, followed by the
- // banner text, but ellipsized if they won't both fit. We can't
- // make St.Table or St.BoxLayout do this the way we want (don't
- // show banner at all if title needs to be ellipsized), so we
- // use Shell.GenericContainer.
- this._bannerBox = new Shell.GenericContainer();
- this._bannerBox.connect('get-preferred-width', Lang.bind(this, this._bannerBoxGetPreferredWidth));
- this._bannerBox.connect('get-preferred-height', Lang.bind(this, this._bannerBoxGetPreferredHeight));
- this._bannerBox.connect('allocate', Lang.bind(this, this._bannerBoxAllocate));
- this.actor.add(this._bannerBox, { row: 0,
- col: 1,
- y_expand: false,
- y_fill: false });
-
- this._titleLabel = new St.Label();
title = title ? _cleanMarkup(title.replace(/\n/g, ' ')) : '';
this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>');
- this._bannerBox.add_actor(this._titleLabel);
if (this._bannerBody)
this._bannerBodyText = banner;
else
this._bannerBodyText = null;
- this._bannerLabel = new St.Label();
banner = banner ? _cleanMarkup(banner.replace(/\n/g, ' ')) : '';
this._bannerLabel.clutter_text.set_markup(banner);
- this._bannerBox.add_actor(this._bannerLabel);
+ this._bannerLabel.queue_relayout();
// Add the bannerBody now if we know for sure we'll need it
if (this._bannerBodyText && this._bannerBodyText.indexOf('\n') > -1)
@@ -376,6 +376,7 @@ Notification.prototype = {
popIn: function() {
if (this.actor.row_count <= 1)
return false;
+
Tweener.addTween(this._bannerLabel,
{ opacity: 255,
time: ANIMATION_TIME,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]