mirror of
https://github.com/edu4rdshl/gnome-shell.git
synced 2026-07-17 23:24:51 +00:00
FdoNotificationDaemon: Emit ActivationToken before ActionInvoked signal
Two years ago FDO notifications spec gained the ability to pass an
activation token (often called startup id) let's finally implement it.
See: b9a470004d
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/358
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3199>
This commit is contained in:
parent
7d6f465a47
commit
bb73bf548c
3 changed files with 24 additions and 0 deletions
|
|
@ -31,5 +31,9 @@
|
||||||
<arg type="u"/>
|
<arg type="u"/>
|
||||||
<arg type="s"/>
|
<arg type="s"/>
|
||||||
</signal>
|
</signal>
|
||||||
|
<signal name="ActivationToken">
|
||||||
|
<arg type="u"/>
|
||||||
|
<arg type="s"/>
|
||||||
|
</signal>
|
||||||
</interface>
|
</interface>
|
||||||
</node>
|
</node>
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,14 @@ export const NotificationDaemon = class extends ServiceImplementation {
|
||||||
log(error.message);
|
log(error.message);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this._proxy.connectSignal('ActivationToken',
|
||||||
|
(proxy, sender, params) => {
|
||||||
|
const [id] = params;
|
||||||
|
this._emitSignal(
|
||||||
|
this._activeNotifications.get(id),
|
||||||
|
'ActivationToken',
|
||||||
|
new GLib.Variant('(us)', params));
|
||||||
|
});
|
||||||
this._proxy.connectSignal('ActionInvoked',
|
this._proxy.connectSignal('ActionInvoked',
|
||||||
(proxy, sender, params) => {
|
(proxy, sender, params) => {
|
||||||
const [id] = params;
|
const [id] = params;
|
||||||
|
|
|
||||||
|
|
@ -217,6 +217,7 @@ class FdoNotificationDaemon {
|
||||||
hasDefaultAction = true;
|
hasDefaultAction = true;
|
||||||
} else {
|
} else {
|
||||||
notification.addAction(label, () => {
|
notification.addAction(label, () => {
|
||||||
|
this._emitActivationToken(source, ndata.id);
|
||||||
this._emitActionInvoked(ndata.id, actionId);
|
this._emitActionInvoked(ndata.id, actionId);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -225,6 +226,7 @@ class FdoNotificationDaemon {
|
||||||
|
|
||||||
if (hasDefaultAction) {
|
if (hasDefaultAction) {
|
||||||
notification.connect('activated', () => {
|
notification.connect('activated', () => {
|
||||||
|
this._emitActivationToken(source, ndata.id);
|
||||||
this._emitActionInvoked(ndata.id, 'default');
|
this._emitActionInvoked(ndata.id, 'default');
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -301,6 +303,16 @@ class FdoNotificationDaemon {
|
||||||
this._dbusImpl.emit_signal('ActionInvoked',
|
this._dbusImpl.emit_signal('ActionInvoked',
|
||||||
GLib.Variant.new('(us)', [id, action]));
|
GLib.Variant.new('(us)', [id, action]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_emitActivationToken(source, id) {
|
||||||
|
const context = global.create_app_launch_context(0, -1);
|
||||||
|
const info = source.app?.get_app_info();
|
||||||
|
if (info) {
|
||||||
|
const token = context.get_startup_notify_id(info, []);
|
||||||
|
this._dbusImpl.emit_signal('ActivationToken',
|
||||||
|
GLib.Variant.new('(us)', [id, token]));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const FdoNotificationDaemonSource = GObject.registerClass(
|
export const FdoNotificationDaemonSource = GObject.registerClass(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue