messageTray: Don't always open the source when clicking on the notification
Some consumers may not always want to open the app, so make clients that want to do this explicitly connect to the 'clicked' signal. https://bugzilla.gnome.org/show_bug.cgi?id=710137
This commit is contained in:
parent
43f4682ec4
commit
8ee0ef2cde
@ -446,6 +446,7 @@ const ChatSource = new Lang.Class({
|
|||||||
this._closedId = this._channel.connect('invalidated', Lang.bind(this, this._channelClosed));
|
this._closedId = this._channel.connect('invalidated', Lang.bind(this, this._channelClosed));
|
||||||
|
|
||||||
this._notification = new ChatNotification(this);
|
this._notification = new ChatNotification(this);
|
||||||
|
this._notification.connect('clicked', Lang.bind(this, this.open));
|
||||||
this._notification.setUrgency(MessageTray.Urgency.HIGH);
|
this._notification.setUrgency(MessageTray.Urgency.HIGH);
|
||||||
this._notifyTimeoutId = 0;
|
this._notifyTimeoutId = 0;
|
||||||
|
|
||||||
@ -544,20 +545,19 @@ const ChatSource = new Lang.Class({
|
|||||||
this._notification.update(this._notification.title, null, { customContent: true });
|
this._notification.update(this._notification.title, null, { customContent: true });
|
||||||
},
|
},
|
||||||
|
|
||||||
open: function(notification) {
|
open: function() {
|
||||||
if (this._client.is_handling_channel(this._channel)) {
|
if (this._client.is_handling_channel(this._channel)) {
|
||||||
// We are handling the channel, try to pass it to Empathy
|
// We are handling the channel, try to pass it to Empathy
|
||||||
this._client.delegate_channels_async([this._channel],
|
this._client.delegate_channels_async([this._channel],
|
||||||
global.get_current_time(),
|
global.get_current_time(),
|
||||||
'org.freedesktop.Telepathy.Client.Empathy.Chat', null);
|
'org.freedesktop.Telepathy.Client.Empathy.Chat', null);
|
||||||
}
|
} else {
|
||||||
else {
|
// We are not the handler, just ask to present the channel
|
||||||
// We are not the handler, just ask to present the channel
|
let dbus = Tp.DBusDaemon.dup();
|
||||||
let dbus = Tp.DBusDaemon.dup();
|
let cd = Tp.ChannelDispatcher.new(dbus);
|
||||||
let cd = Tp.ChannelDispatcher.new(dbus);
|
|
||||||
|
|
||||||
cd.present_channel_async(this._channel, global.get_current_time(), null);
|
cd.present_channel_async(this._channel, global.get_current_time(), null);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_getLogMessages: function() {
|
_getLogMessages: function() {
|
||||||
|
@ -1385,9 +1385,7 @@ const Source = new Lang.Class({
|
|||||||
if (this.notifications.indexOf(notification) >= 0)
|
if (this.notifications.indexOf(notification) >= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
notification.connect('clicked', Lang.bind(this, this.open));
|
|
||||||
notification.connect('destroy', Lang.bind(this, this._onNotificationDestroy));
|
notification.connect('destroy', Lang.bind(this, this._onNotificationDestroy));
|
||||||
|
|
||||||
this.notifications.push(notification);
|
this.notifications.push(notification);
|
||||||
this.emit('notification-added', notification);
|
this.emit('notification-added', notification);
|
||||||
|
|
||||||
|
@ -422,15 +422,15 @@ const NotificationDaemon = new Lang.Class({
|
|||||||
soundName: hints['sound-name'] });
|
soundName: hints['sound-name'] });
|
||||||
notification.setImage(image);
|
notification.setImage(image);
|
||||||
|
|
||||||
|
let hasDefaultAction = false;
|
||||||
|
|
||||||
if (actions.length) {
|
if (actions.length) {
|
||||||
let useActionIcons = (hints['action-icons'] == true);
|
let useActionIcons = (hints['action-icons'] == true);
|
||||||
|
|
||||||
for (let i = 0; i < actions.length - 1; i += 2) {
|
for (let i = 0; i < actions.length - 1; i += 2) {
|
||||||
let [actionId, label] = [actions[i], actions[i+1]];
|
let [actionId, label] = [actions[i], actions[i+1]];
|
||||||
if (actionId == 'default') {
|
if (actionId == 'default') {
|
||||||
notification.connect('clicked', Lang.bind(this, function() {
|
hasDefaultAction = true;
|
||||||
this._emitActionInvoked(ndata.id, "default");
|
|
||||||
}));
|
|
||||||
} else {
|
} else {
|
||||||
notification.addButton(this._makeButton(id, label, useActionIcons), Lang.bind(this, function() {
|
notification.addButton(this._makeButton(id, label, useActionIcons), Lang.bind(this, function() {
|
||||||
this._emitActionInvoked(ndata.id, actionId);
|
this._emitActionInvoked(ndata.id, actionId);
|
||||||
@ -438,6 +438,17 @@ const NotificationDaemon = new Lang.Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasDefaultAction) {
|
||||||
|
notification.connect('clicked', Lang.bind(this, function() {
|
||||||
|
this._emitActionInvoked(ndata.id, 'default');
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
notification.connect('clicked', Lang.bind(this, function() {
|
||||||
|
source.open();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
switch (hints.urgency) {
|
switch (hints.urgency) {
|
||||||
case Urgency.LOW:
|
case Urgency.LOW:
|
||||||
notification.setUrgency(MessageTray.Urgency.LOW);
|
notification.setUrgency(MessageTray.Urgency.LOW);
|
||||||
|
@ -39,6 +39,9 @@ const WindowAttentionHandler = new Lang.Class({
|
|||||||
let [title, banner] = this._getTitleAndBanner(app, window);
|
let [title, banner] = this._getTitleAndBanner(app, window);
|
||||||
|
|
||||||
let notification = new MessageTray.Notification(source, title, banner);
|
let notification = new MessageTray.Notification(source, title, banner);
|
||||||
|
notification.connect('clicked', function() {
|
||||||
|
source.open();
|
||||||
|
});
|
||||||
notification.setForFeedback(true);
|
notification.setForFeedback(true);
|
||||||
|
|
||||||
source.notify(notification);
|
source.notify(notification);
|
||||||
@ -79,7 +82,7 @@ const Source = new Lang.Class({
|
|||||||
return this._app.create_icon_texture(size);
|
return this._app.create_icon_texture(size);
|
||||||
},
|
},
|
||||||
|
|
||||||
open : function(notification) {
|
open: function() {
|
||||||
Main.activateWindow(this._window);
|
Main.activateWindow(this._window);
|
||||||
this.destroy();
|
this.destroy();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user