[gnome-shell] messageTray: Use a GIcon for a notification's icon/secondary icon
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] messageTray: Use a GIcon for a notification's icon/secondary icon
- Date: Tue, 16 Oct 2012 16:53:40 +0000 (UTC)
commit 928ea3bb0155f59059e6762acde0487050c5b0bf
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Fri Sep 14 11:33:52 2012 -0300
messageTray: Use a GIcon for a notification's icon/secondary icon
Using a GIcon instead of an actor means that we can always create
a new icon with the right size from an old icon.
https://bugzilla.gnome.org/show_bug.cgi?id=680426
js/ui/components/telepathyClient.js | 23 +++++++++----------
js/ui/messageTray.js | 40 +++++++++++++++++++++--------------
js/ui/notificationDaemon.js | 6 +---
js/ui/status/network.js | 5 +--
4 files changed, 39 insertions(+), 35 deletions(-)
---
diff --git a/js/ui/components/telepathyClient.js b/js/ui/components/telepathyClient.js
index 4231706..26e19ed 100644
--- a/js/ui/components/telepathyClient.js
+++ b/js/ui/components/telepathyClient.js
@@ -527,33 +527,32 @@ const ChatSource = new Lang.Class({
},
createSecondaryIcon: function() {
- let iconBox = new St.Bin();
- iconBox.child = new St.Icon({ style_class: 'secondary-icon' });
+ let iconName;
let presenceType = this._contact.get_presence_type();
switch (presenceType) {
case Tp.ConnectionPresenceType.AVAILABLE:
- iconBox.child.icon_name = 'user-available';
+ iconName = 'user-available';
break;
case Tp.ConnectionPresenceType.BUSY:
- iconBox.child.icon_name = 'user-busy';
+ iconName = 'user-busy';
break;
case Tp.ConnectionPresenceType.OFFLINE:
- iconBox.child.icon_name = 'user-offline';
+ iconName = 'user-offline';
break;
case Tp.ConnectionPresenceType.HIDDEN:
- iconBox.child.icon_name = 'user-invisible';
+ iconName = 'user-invisible';
break;
case Tp.ConnectionPresenceType.AWAY:
- iconBox.child.icon_name = 'user-away';
+ iconName = 'user-away';
break;
case Tp.ConnectionPresenceType.EXTENDED_AWAY:
- iconBox.child.icon_name = 'user-idle';
+ iconName = 'user-idle';
break;
default:
- iconBox.child.icon_name = 'user-offline';
+ iconName = 'user-offline';
}
- return iconBox;
+ return new Gio.ThemedIcon({ name: iconName });
},
_updateAvatarIcon: function() {
@@ -733,7 +732,7 @@ const ChatSource = new Lang.Class({
title = GLib.markup_escape_text(this.title, -1);
- this._notification.update(this._notification.title, null, { customContent: true, secondaryIcon: this.createSecondaryIcon() });
+ this._notification.update(this._notification.title, null, { customContent: true, secondaryGIcon: this.createSecondaryIcon() });
if (message)
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
@@ -761,7 +760,7 @@ const ChatNotification = new Lang.Class({
Extends: MessageTray.Notification,
_init: function(source) {
- this.parent(source, source.title, null, { customContent: true, secondaryIcon: source.createSecondaryIcon() });
+ this.parent(source, source.title, null, { customContent: true, secondaryGIcon: source.createSecondaryIcon() });
this.setResident(true);
this._responseEntry = new St.Entry({ style_class: 'chat-response',
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index 40d5ee0..c41b492 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -35,8 +35,6 @@ const LONGER_SUMMARY_TIMEOUT = 4;
const HIDE_TIMEOUT = 0.2;
const LONGER_HIDE_TIMEOUT = 0.6;
-const NOTIFICATION_ICON_SIZE = 24;
-
// We delay hiding of the tray if the mouse is within MOUSE_LEFT_ACTOR_THRESHOLD
// range from the point where it left the tray.
const MOUSE_LEFT_ACTOR_THRESHOLD = 20;
@@ -291,9 +289,12 @@ function makeCloseButton() {
// If @params contains a 'body' parameter, then that text will be added to
// the content area (as with addBody()).
//
-// By default, the icon shown is created by calling
-// source.createIcon(). However, if @params contains an 'icon'
-// parameter, the passed in icon will be used.
+// By default, the icon shown is the same as the source's.
+// However, if @params contains a 'gicon' parameter, the passed in gicon
+// will be used.
+//
+// You can add a secondary icon to the banner with 'secondaryGIcon'. There
+// is no fallback for this icon.
//
// If @params contains a 'titleMarkup', 'bannerMarkup', or
// 'bodyMarkup' parameter with the value %true, then the corresponding
@@ -308,6 +309,8 @@ function makeCloseButton() {
const Notification = new Lang.Class({
Name: 'Notification',
+ ICON_SIZE: 24,
+
IMAGE_SIZE: 125,
_init: function(source, title, banner, params) {
@@ -391,8 +394,8 @@ const Notification = new Lang.Class({
update: function(title, banner, params) {
params = Params.parse(params, { customContent: false,
body: null,
- icon: null,
- secondaryIcon: null,
+ gicon: null,
+ secondaryGIcon: null,
titleMarkup: false,
bannerMarkup: false,
bodyMarkup: false,
@@ -402,12 +405,12 @@ const Notification = new Lang.Class({
let oldFocus = global.stage.key_focus;
- if (this._icon && (params.icon || params.clear)) {
+ if (this._icon && (params.gicon || params.clear)) {
this._icon.destroy();
this._icon = null;
}
- if (this._secondaryIcon && (params.secondaryIcon || params.clear)) {
+ if (this._secondaryIcon && (params.secondaryGIcon || params.clear)) {
this._secondaryIcon.destroy();
this._secondaryIcon = null;
}
@@ -437,8 +440,14 @@ const Notification = new Lang.Class({
if (!this._scrollArea && !this._actionArea && !this._imageBin)
this._table.remove_style_class_name('multi-line-notification');
- if (!this._icon) {
- this._icon = params.icon || this.source.createIcon(NOTIFICATION_ICON_SIZE);
+ if (params.gicon) {
+ this._icon = new St.Icon({ gicon: params.gicon,
+ icon_size: this.ICON_SIZE });
+ } else {
+ this._icon = this.source.createIcon(this.ICON_SIZE);
+ }
+
+ if (this._icon) {
this._table.add(this._icon, { row: 0,
col: 0,
x_expand: false,
@@ -447,11 +456,10 @@ const Notification = new Lang.Class({
y_align: St.Align.START });
}
- if (!this._secondaryIcon) {
- this._secondaryIcon = params.secondaryIcon;
-
- if (this._secondaryIcon)
- this._bannerBox.add_actor(this._secondaryIcon);
+ if (params.secondaryGIcon) {
+ this._secondaryIcon = new St.Icon({ gicon: params.secondaryGIcon,
+ style_class: 'secondary-icon' });
+ this._bannerBox.add_actor(this._secondaryIcon);
}
this.title = title;
diff --git a/js/ui/notificationDaemon.js b/js/ui/notificationDaemon.js
index 6d2fd6d..ff421f6 100644
--- a/js/ui/notificationDaemon.js
+++ b/js/ui/notificationDaemon.js
@@ -356,12 +356,10 @@ const NotificationDaemon = new Lang.Class({
ndata.actions, ndata.hints, ndata.notification];
let gicon = this._iconForNotificationData(icon, hints);
- let iconActor = new St.Icon({ gicon: gicon,
- icon_size: MessageTray.NOTIFICATION_ICON_SIZE });
if (notification == null) {
notification = new MessageTray.Notification(source, summary, body,
- { icon: iconActor,
+ { gicon: gicon,
bannerMarkup: true });
ndata.notification = notification;
notification.connect('destroy', Lang.bind(this,
@@ -386,7 +384,7 @@ const NotificationDaemon = new Lang.Class({
this._emitActionInvoked(ndata.id, actionId);
}));
} else {
- notification.update(summary, body, { icon: iconActor,
+ notification.update(summary, body, { gicon: gicon,
bannerMarkup: true,
clear: true });
}
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 4e4e155..ce46e5a 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -1747,10 +1747,9 @@ const NMApplet = new Lang.Class({
or this._source will be cleared */
this._ensureSource();
- let icon = new St.Icon({ icon_name: iconName,
- icon_size: MessageTray.NOTIFICATION_ICON_SIZE });
+ let gicon = new Gio.ThemedIcon({ name: iconName });
device._notification = new MessageTray.Notification(this._source, title, text,
- { icon: icon });
+ { gicon: gicon });
device._notification.setUrgency(urgency);
device._notification.setTransient(true);
device._notification.connect('destroy', function() {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]