From 66a4cb5875e643cee1b369c37eac4695785f4595 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 13 Oct 2013 16:01:56 -0400 Subject: [PATCH] messageTray: Move the notification policy classes here The NotificationDaemon really should be for the hookup of remote notifications, rather than policies. https://bugzilla.gnome.org/show_bug.cgi?id=710115 --- js/ui/components/telepathyClient.js | 7 +- js/ui/messageTray.js | 120 +++++++++++++++++++++++++++ js/ui/notificationDaemon.js | 124 +--------------------------- js/ui/status/bluetooth.js | 3 +- js/ui/status/network.js | 3 +- 5 files changed, 127 insertions(+), 130 deletions(-) diff --git a/js/ui/components/telepathyClient.js b/js/ui/components/telepathyClient.js index 48dbae683..86a62bbbb 100644 --- a/js/ui/components/telepathyClient.js +++ b/js/ui/components/telepathyClient.js @@ -13,7 +13,6 @@ const Tp = imports.gi.TelepathyGLib; const History = imports.misc.history; const Main = imports.ui.main; const MessageTray = imports.ui.messageTray; -const NotificationDaemon = imports.ui.notificationDaemon; const Params = imports.misc.params; const PopupMenu = imports.ui.popupMenu; @@ -416,7 +415,7 @@ const TelepathyClient = new Lang.Class({ _ensureAppSource: function() { if (this._appSource == null) { this._appSource = new MessageTray.Source(_("Chat"), 'empathy'); - this._appSource.policy = new NotificationDaemon.NotificationApplicationPolicy('empathy'); + this._appSource.policy = new MessageTray.NotificationApplicationPolicy('empathy'); Main.messageTray.add(this._appSource); this._appSource.connect('destroy', Lang.bind(this, function () { @@ -488,7 +487,7 @@ const ChatSource = new Lang.Class({ }, _createPolicy: function() { - return new NotificationDaemon.NotificationApplicationPolicy('empathy'); + return new MessageTray.NotificationApplicationPolicy('empathy'); }, _updateAlias: function() { @@ -1061,7 +1060,7 @@ const ApproverSource = new Lang.Class({ }, _createPolicy: function() { - return new NotificationDaemon.NotificationApplicationPolicy('empathy'); + return new MessageTray.NotificationApplicationPolicy('empathy'); }, destroy: function() { diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 9e5ddadad..65ab89be1 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -310,6 +310,126 @@ const NotificationPolicy = new Lang.Class({ }); Signals.addSignalMethods(NotificationPolicy.prototype); +const NotificationGenericPolicy = new Lang.Class({ + Name: 'NotificationGenericPolicy', + Extends: NotificationPolicy, + + _init: function() { + // Don't chain to parent, it would try setting + // our properties to the defaults + + this.id = 'generic'; + + this._masterSettings = new Gio.Settings({ schema: 'org.gnome.desktop.notifications' }); + this._masterSettings.connect('changed', Lang.bind(this, this._changed)); + }, + + store: function() { }, + + destroy: function() { + this._masterSettings.run_dispose(); + }, + + _changed: function(settings, key) { + this.emit('policy-changed', key); + }, + + get enable() { + return true; + }, + + get enableSound() { + return true; + }, + + get showBanners() { + return this._masterSettings.get_boolean('show-banners'); + }, + + get forceExpanded() { + return false; + }, + + get showInLockScreen() { + return this._masterSettings.get_boolean('show-in-lock-screen'); + }, + + get detailsInLockScreen() { + return false; + } +}); + +const NotificationApplicationPolicy = new Lang.Class({ + Name: 'NotificationApplicationPolicy', + Extends: NotificationPolicy, + + _init: function(id) { + // Don't chain to parent, it would try setting + // our properties to the defaults + + this.id = id; + this._canonicalId = this._canonicalizeId(id); + + this._masterSettings = new Gio.Settings({ schema: 'org.gnome.desktop.notifications' }); + this._settings = new Gio.Settings({ schema: 'org.gnome.desktop.notifications.application', + path: '/org/gnome/desktop/notifications/application/' + this._canonicalId + '/' }); + + this._masterSettings.connect('changed', Lang.bind(this, this._changed)); + this._settings.connect('changed', Lang.bind(this, this._changed)); + }, + + store: function() { + this._settings.set_string('application-id', this.id + '.desktop'); + + let apps = this._masterSettings.get_strv('application-children'); + if (apps.indexOf(this._canonicalId) < 0) { + apps.push(this._canonicalId); + this._masterSettings.set_strv('application-children', apps); + } + }, + + destroy: function() { + this._masterSettings.run_dispose(); + this._settings.run_dispose(); + }, + + _changed: function(settings, key) { + this.emit('policy-changed', key); + }, + + _canonicalizeId: function(id) { + // Keys are restricted to lowercase alphanumeric characters and dash, + // and two dashes cannot be in succession + return id.toLowerCase().replace(/[^a-z0-9\-]/g, '-').replace(/--+/g, '-'); + }, + + get enable() { + return this._settings.get_boolean('enable'); + }, + + get enableSound() { + return this._settings.get_boolean('enable-sound-alerts'); + }, + + get showBanners() { + return this._masterSettings.get_boolean('show-banners') && + this._settings.get_boolean('show-banners'); + }, + + get forceExpanded() { + return this._settings.get_boolean('force-expanded'); + }, + + get showInLockScreen() { + return this._masterSettings.get_boolean('show-in-lock-screen') && + this._settings.get_boolean('show-in-lock-screen'); + }, + + get detailsInLockScreen() { + return this._settings.get_boolean('details-in-lock-screen'); + } +}); + // Notification: // @source: the notification's Source // @title: the title diff --git a/js/ui/notificationDaemon.js b/js/ui/notificationDaemon.js index 928777440..4c41dd1a5 100644 --- a/js/ui/notificationDaemon.js +++ b/js/ui/notificationDaemon.js @@ -103,126 +103,6 @@ const STANDARD_TRAY_ICON_IMPLEMENTATIONS = { 'ibus-ui-gtk': 'keyboard' }; -const NotificationGenericPolicy = new Lang.Class({ - Name: 'NotificationGenericPolicy', - Extends: MessageTray.NotificationPolicy, - - _init: function() { - // Don't chain to parent, it would try setting - // our properties to the defaults - - this.id = 'generic'; - - this._masterSettings = new Gio.Settings({ schema: 'org.gnome.desktop.notifications' }); - this._masterSettings.connect('changed', Lang.bind(this, this._changed)); - }, - - store: function() { }, - - destroy: function() { - this._masterSettings.run_dispose(); - }, - - _changed: function(settings, key) { - this.emit('policy-changed', key); - }, - - get enable() { - return true; - }, - - get enableSound() { - return true; - }, - - get showBanners() { - return this._masterSettings.get_boolean('show-banners'); - }, - - get forceExpanded() { - return false; - }, - - get showInLockScreen() { - return this._masterSettings.get_boolean('show-in-lock-screen'); - }, - - get detailsInLockScreen() { - return false; - } -}); - -const NotificationApplicationPolicy = new Lang.Class({ - Name: 'NotificationApplicationPolicy', - Extends: MessageTray.NotificationPolicy, - - _init: function(id) { - // Don't chain to parent, it would try setting - // our properties to the defaults - - this.id = id; - this._canonicalId = this._canonicalizeId(id) - - this._masterSettings = new Gio.Settings({ schema: 'org.gnome.desktop.notifications' }); - this._settings = new Gio.Settings({ schema: 'org.gnome.desktop.notifications.application', - path: '/org/gnome/desktop/notifications/application/' + this._canonicalId + '/' }); - - this._masterSettings.connect('changed', Lang.bind(this, this._changed)); - this._settings.connect('changed', Lang.bind(this, this._changed)); - }, - - store: function() { - this._settings.set_string('application-id', this.id + '.desktop'); - - let apps = this._masterSettings.get_strv('application-children'); - if (apps.indexOf(this._canonicalId) < 0) { - apps.push(this._canonicalId); - this._masterSettings.set_strv('application-children', apps); - } - }, - - destroy: function() { - this._masterSettings.run_dispose(); - this._settings.run_dispose(); - }, - - _changed: function(settings, key) { - this.emit('policy-changed', key); - }, - - _canonicalizeId: function(id) { - // Keys are restricted to lowercase alphanumeric characters and dash, - // and two dashes cannot be in succession - return id.toLowerCase().replace(/[^a-z0-9\-]/g, '-').replace(/--+/g, '-'); - }, - - get enable() { - return this._settings.get_boolean('enable'); - }, - - get enableSound() { - return this._settings.get_boolean('enable-sound-alerts'); - }, - - get showBanners() { - return this._masterSettings.get_boolean('show-banners') && - this._settings.get_boolean('show-banners'); - }, - - get forceExpanded() { - return this._settings.get_boolean('force-expanded'); - }, - - get showInLockScreen() { - return this._masterSettings.get_boolean('show-in-lock-screen') && - this._settings.get_boolean('show-in-lock-screen'); - }, - - get detailsInLockScreen() { - return this._settings.get_boolean('details-in-lock-screen'); - } -}); - const NotificationDaemon = new Lang.Class({ Name: 'NotificationDaemon', @@ -675,9 +555,9 @@ const Source = new Lang.Class({ _createPolicy: function() { if (this.app) { let id = this.app.get_id().replace(/\.desktop$/,''); - return new NotificationApplicationPolicy(id); + return new MessageTray.NotificationApplicationPolicy(id); } else { - return new NotificationGenericPolicy(); + return new MessageTray.NotificationGenericPolicy(); } }, diff --git a/js/ui/status/bluetooth.js b/js/ui/status/bluetooth.js index c808d103b..fb4bad213 100644 --- a/js/ui/status/bluetooth.js +++ b/js/ui/status/bluetooth.js @@ -9,7 +9,6 @@ const St = imports.gi.St; const Main = imports.ui.main; const MessageTray = imports.ui.messageTray; -const NotificationDaemon = imports.ui.notificationDaemon; const PanelMenu = imports.ui.panelMenu; const PopupMenu = imports.ui.popupMenu; @@ -61,7 +60,7 @@ const Indicator = new Lang.Class({ _ensureSource: function() { if (!this._source) { this._source = new MessageTray.Source(_("Bluetooth"), 'bluetooth-active'); - this._source.policy = new NotificationDaemon.NotificationApplicationPolicy('gnome-bluetooth-panel'); + this._source.policy = new MessageTray.NotificationApplicationPolicy('gnome-bluetooth-panel'); Main.messageTray.add(this._source); } }, diff --git a/js/ui/status/network.js b/js/ui/status/network.js index f43428f2c..fdd95a755 100644 --- a/js/ui/status/network.js +++ b/js/ui/status/network.js @@ -16,7 +16,6 @@ const Main = imports.ui.main; const PanelMenu = imports.ui.panelMenu; const PopupMenu = imports.ui.popupMenu; const MessageTray = imports.ui.messageTray; -const NotificationDaemon = imports.ui.notificationDaemon; const ModalDialog = imports.ui.modalDialog; const ModemManager = imports.misc.modemManager; const Util = imports.misc.util; @@ -1367,7 +1366,7 @@ const NMApplet = new Lang.Class({ if (!this._source) { this._source = new MessageTray.Source(_("Network Manager"), 'network-transmit-receive'); - this._source.policy = new NotificationDaemon.NotificationApplicationPolicy('gnome-network-panel'); + this._source.policy = new MessageTray.NotificationApplicationPolicy('gnome-network-panel'); this._source.connect('destroy', Lang.bind(this, function() { this._source = null;