gnome-shell: update to 3.2.2.1.
This commit is contained in:
parent
d436bdcc5d
commit
8ab9ea39e6
2 changed files with 2 additions and 228 deletions
|
@ -1,224 +0,0 @@
|
||||||
From 7e654ab3ca6e8ac75ba5e45c2a411eb1c2904b26 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Marina Zhurakhinskaya <marinaz@redhat.com>
|
|
||||||
Date: Tue, 20 Dec 2011 05:51:35 +0000
|
|
||||||
Subject: notificationDaemon: group sources based on a combination of pid and title
|
|
||||||
|
|
||||||
That way different system notifications, such as the ones about battery power
|
|
||||||
and the ones about software updates, are shown with separate message tray
|
|
||||||
sources.
|
|
||||||
|
|
||||||
https://bugzilla.gnome.org/show_bug.cgi?id=664138
|
|
||||||
---
|
|
||||||
diff --git js/ui/notificationDaemon.js js/ui/notificationDaemon.js
|
|
||||||
index f40205d..c691efe 100644
|
|
||||||
--- js/ui/notificationDaemon.js
|
|
||||||
+++ js/ui/notificationDaemon.js
|
|
||||||
@@ -92,7 +92,7 @@ NotificationDaemon.prototype = {
|
|
||||||
_init: function() {
|
|
||||||
DBus.session.exportObject('/org/freedesktop/Notifications', this);
|
|
||||||
|
|
||||||
- this._sources = {};
|
|
||||||
+ this._sources = [];
|
|
||||||
this._senderToPid = {};
|
|
||||||
this._notifications = {};
|
|
||||||
this._busProxy = new Bus();
|
|
||||||
@@ -150,14 +150,30 @@ NotificationDaemon.prototype = {
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
+ _lookupSource: function(title, pid, trayIcon) {
|
|
||||||
+ for (let i = 0; i < this._sources.length; i++) {
|
|
||||||
+ let source = this._sources[i];
|
|
||||||
+ if (source.pid == pid &&
|
|
||||||
+ (source.initialTitle == title || source.trayIcon || trayIcon))
|
|
||||||
+ return source;
|
|
||||||
+ }
|
|
||||||
+ return null;
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
// Returns the source associated with ndata.notification if it is set.
|
|
||||||
- // Otherwise, returns the source associated with the pid if one is
|
|
||||||
- // stored in this._sources and the notification is not transient.
|
|
||||||
- // Otherwise, creates a new source as long as pid is provided.
|
|
||||||
+ // Otherwise, returns the source associated with the title and pid if
|
|
||||||
+ // such source is stored in this._sources and the notification is not
|
|
||||||
+ // transient. If the existing or requested source is associated with
|
|
||||||
+ // a tray icon and passed in pid matches a pid of an existing source,
|
|
||||||
+ // the title match is ignored to enable representing a tray icon and
|
|
||||||
+ // notifications from the same application with a single source.
|
|
||||||
+ //
|
|
||||||
+ // If no existing source is found, a new source is created as long as
|
|
||||||
+ // pid is provided.
|
|
||||||
//
|
|
||||||
// Either a pid or ndata.notification is needed to retrieve or
|
|
||||||
// create a source.
|
|
||||||
- _getSource: function(title, pid, ndata, sender) {
|
|
||||||
+ _getSource: function(title, pid, ndata, sender, trayIcon) {
|
|
||||||
if (!pid && !(ndata && ndata.notification))
|
|
||||||
return null;
|
|
||||||
|
|
||||||
@@ -174,20 +190,24 @@ NotificationDaemon.prototype = {
|
|
||||||
// with a transient one from the same sender, so we
|
|
||||||
// always create a new source object for new transient notifications
|
|
||||||
// and never add it to this._sources .
|
|
||||||
- if (!isForTransientNotification && this._sources[pid]) {
|
|
||||||
- let source = this._sources[pid];
|
|
||||||
- source.setTitle(title);
|
|
||||||
- return source;
|
|
||||||
+ if (!isForTransientNotification) {
|
|
||||||
+ let source = this._lookupSource(title, pid, trayIcon);
|
|
||||||
+ if (source) {
|
|
||||||
+ source.setTitle(title);
|
|
||||||
+ return source;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
- let source = new Source(title, pid, sender);
|
|
||||||
+ let source = new Source(title, pid, sender, trayIcon);
|
|
||||||
source.setTransient(isForTransientNotification);
|
|
||||||
|
|
||||||
if (!isForTransientNotification) {
|
|
||||||
- this._sources[pid] = source;
|
|
||||||
+ this._sources.push(source);
|
|
||||||
source.connect('destroy', Lang.bind(this,
|
|
||||||
function() {
|
|
||||||
- delete this._sources[pid];
|
|
||||||
+ let index = this._sources.indexOf(source);
|
|
||||||
+ if (index >= 0)
|
|
||||||
+ this._sources.splice(index, 1);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -261,7 +281,7 @@ NotificationDaemon.prototype = {
|
|
||||||
let sender = DBus.getCurrentMessageContext().sender;
|
|
||||||
let pid = this._senderToPid[sender];
|
|
||||||
|
|
||||||
- let source = this._getSource(appName, pid, ndata, sender);
|
|
||||||
+ let source = this._getSource(appName, pid, ndata, sender, null);
|
|
||||||
|
|
||||||
if (source) {
|
|
||||||
this._notifyForSource(source, ndata);
|
|
||||||
@@ -282,7 +302,7 @@ NotificationDaemon.prototype = {
|
|
||||||
if (!ndata)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- source = this._getSource(appName, pid, ndata, sender);
|
|
||||||
+ source = this._getSource(appName, pid, ndata, sender, null);
|
|
||||||
|
|
||||||
// We only store sender-pid entries for persistent sources.
|
|
||||||
// Removing the entries once the source is destroyed
|
|
||||||
@@ -432,8 +452,8 @@ NotificationDaemon.prototype = {
|
|
||||||
if (!tracker.focus_app)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- for (let id in this._sources) {
|
|
||||||
- let source = this._sources[id];
|
|
||||||
+ for (let i = 0; i < this._sources.length; i++) {
|
|
||||||
+ let source = this._sources[i];
|
|
||||||
if (source.app == tracker.focus_app) {
|
|
||||||
source.destroyNonResidentNotifications();
|
|
||||||
return;
|
|
||||||
@@ -456,12 +476,11 @@ NotificationDaemon.prototype = {
|
|
||||||
},
|
|
||||||
|
|
||||||
_onTrayIconAdded: function(o, icon) {
|
|
||||||
- let source = this._getSource(icon.title || icon.wm_class || _("Unknown"), icon.pid, null, null);
|
|
||||||
- source.setTrayIcon(icon);
|
|
||||||
+ let source = this._getSource(icon.title || icon.wm_class || _("Unknown"), icon.pid, null, null, icon);
|
|
||||||
},
|
|
||||||
|
|
||||||
_onTrayIconRemoved: function(o, icon) {
|
|
||||||
- let source = this._sources[icon.pid];
|
|
||||||
+ let source = this._lookupSource(icon.pid, null, true);
|
|
||||||
if (source)
|
|
||||||
source.destroy();
|
|
||||||
}
|
|
||||||
@@ -476,10 +495,12 @@ function Source(title, pid, sender) {
|
|
||||||
Source.prototype = {
|
|
||||||
__proto__: MessageTray.Source.prototype,
|
|
||||||
|
|
||||||
- _init: function(title, pid, sender) {
|
|
||||||
+ _init: function(title, pid, sender, trayIcon) {
|
|
||||||
MessageTray.Source.prototype._init.call(this, title);
|
|
||||||
|
|
||||||
- this._pid = pid;
|
|
||||||
+ this.initialTitle = title;
|
|
||||||
+
|
|
||||||
+ this.pid = pid;
|
|
||||||
if (sender)
|
|
||||||
// TODO: dbus-glib implementation of watch_name() doesn’t return an id to be used for
|
|
||||||
// unwatch_name() or implement unwatch_name(), however when we move to using GDBus implementation,
|
|
||||||
@@ -496,7 +517,12 @@ Source.prototype = {
|
|
||||||
this.title = this.app.get_name();
|
|
||||||
else
|
|
||||||
this.useNotificationIcon = true;
|
|
||||||
- this._trayIcon = null;
|
|
||||||
+
|
|
||||||
+ this.trayIcon = trayIcon;
|
|
||||||
+ if (this.trayIcon) {
|
|
||||||
+ this._setSummaryIcon(this.trayIcon);
|
|
||||||
+ this.useNotificationIcon = false;
|
|
||||||
+ }
|
|
||||||
},
|
|
||||||
|
|
||||||
_onNameVanished: function() {
|
|
||||||
@@ -523,7 +549,7 @@ Source.prototype = {
|
|
||||||
},
|
|
||||||
|
|
||||||
handleSummaryClick: function() {
|
|
||||||
- if (!this._trayIcon)
|
|
||||||
+ if (!this.trayIcon)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
let event = Clutter.get_current_event();
|
|
||||||
@@ -544,11 +570,11 @@ Source.prototype = {
|
|
||||||
let id = global.connect('notify::stage-input-mode', Lang.bind(this,
|
|
||||||
function () {
|
|
||||||
global.disconnect(id);
|
|
||||||
- this._trayIcon.click(event);
|
|
||||||
+ this.trayIcon.click(event);
|
|
||||||
}));
|
|
||||||
Main.overview.hide();
|
|
||||||
} else {
|
|
||||||
- this._trayIcon.click(event);
|
|
||||||
+ this.trayIcon.click(event);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
@@ -557,31 +583,25 @@ Source.prototype = {
|
|
||||||
if (this.app)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- this.app = Shell.WindowTracker.get_default().get_app_from_pid(this._pid);
|
|
||||||
+ this.app = Shell.WindowTracker.get_default().get_app_from_pid(this.pid);
|
|
||||||
if (!this.app)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Only override the icon if we were previously using
|
|
||||||
// notification-based icons (ie, not a trayicon) or if it was unset before
|
|
||||||
- if (!this._trayIcon) {
|
|
||||||
+ if (!this.trayIcon) {
|
|
||||||
this.useNotificationIcon = false;
|
|
||||||
this._setSummaryIcon(this.app.create_icon_texture (this.ICON_SIZE));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
- setTrayIcon: function(icon) {
|
|
||||||
- this._setSummaryIcon(icon);
|
|
||||||
- this.useNotificationIcon = false;
|
|
||||||
- this._trayIcon = icon;
|
|
||||||
- },
|
|
||||||
-
|
|
||||||
open: function(notification) {
|
|
||||||
this.destroyNonResidentNotifications();
|
|
||||||
this.openApp();
|
|
||||||
},
|
|
||||||
|
|
||||||
_lastNotificationRemoved: function() {
|
|
||||||
- if (!this._trayIcon)
|
|
||||||
+ if (!this.trayIcon)
|
|
||||||
this.destroy();
|
|
||||||
},
|
|
||||||
|
|
||||||
--
|
|
||||||
cgit v0.9.0.2
|
|
|
@ -1,17 +1,15 @@
|
||||||
# Template file for 'gnome-shell'
|
# Template file for 'gnome-shell'
|
||||||
pkgname=gnome-shell
|
pkgname=gnome-shell
|
||||||
version=3.2.2
|
version=3.2.2.1
|
||||||
patch_args="-Np0 -R"
|
|
||||||
distfiles="${GNOME_SITE}/$pkgname/3.2/$pkgname-$version.tar.xz"
|
distfiles="${GNOME_SITE}/$pkgname/3.2/$pkgname-$version.tar.xz"
|
||||||
build_style=gnu-configure
|
build_style=gnu-configure
|
||||||
configure_args="--disable-schemas-install --disable-schemas-compile
|
configure_args="--disable-schemas-install --disable-schemas-compile
|
||||||
--with-gconf-schema-file-dir=/usr/share/gconf/schemas"
|
--with-gconf-schema-file-dir=/usr/share/gconf/schemas"
|
||||||
revision=1
|
|
||||||
short_desc="GNOME core user interface"
|
short_desc="GNOME core user interface"
|
||||||
maintainer="Juan RP <xtraeme@gmail.com>"
|
maintainer="Juan RP <xtraeme@gmail.com>"
|
||||||
homepage="http://live.gnome.org/GnomeShell"
|
homepage="http://live.gnome.org/GnomeShell"
|
||||||
license="GPL-2"
|
license="GPL-2"
|
||||||
checksum=68967b9d58ad0551d7d3d28a276526a15faf1fc1d27f4624eb405663910e2eb8
|
checksum=209363084ef2d58777d70d8430e4659b058cf854c4b9766f3019d69ffea34d6f
|
||||||
long_desc="
|
long_desc="
|
||||||
GNOME Shell provides core user interface functions for the GNOME 3 desktop,
|
GNOME Shell provides core user interface functions for the GNOME 3 desktop,
|
||||||
like switching to windows and launching applications. GNOME Shell takes
|
like switching to windows and launching applications. GNOME Shell takes
|
||||||
|
|
Loading…
Reference in a new issue