diff options
| author | nippy <you@example.com> | 2026-04-18 13:49:56 +0200 |
|---|---|---|
| committer | nippy <you@example.com> | 2026-04-18 13:49:56 +0200 |
| commit | 5d94c0a7d44a2255b81815a52a7056a94a39842d (patch) | |
| tree | 759bdea9645c6a62f9e1e4c001f7d81cccd120d2 /raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/dbusProxy.js | |
| parent | e79cdf210b267f21a186255ce1a4d50029439d54 (diff) | |
| download | RaveOS-PKGBUILD-5d94c0a7d44a2255b81815a52a7056a94a39842d.tar.gz RaveOS-PKGBUILD-5d94c0a7d44a2255b81815a52a7056a94a39842d.zip | |
update Raveos themes
Diffstat (limited to 'raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/dbusProxy.js')
| -rw-r--r-- | raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/dbusProxy.js | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/dbusProxy.js b/raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/dbusProxy.js new file mode 100644 index 0000000..047f2d2 --- /dev/null +++ b/raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/dbusProxy.js @@ -0,0 +1,108 @@ +import Gio from 'gi://Gio'; +import GLib from 'gi://GLib'; +import GObject from 'gi://GObject'; + +import {CancellableChild, Logger} from './util.js'; + +Gio._promisify(Gio.DBusProxy.prototype, 'init_async'); + +export const DBusProxy = GObject.registerClass({ + Signals: {'destroy': {}}, +}, class DBusProxy extends Gio.DBusProxy { + static get TUPLE_VARIANT_TYPE() { + if (!this._tupleVariantType) + this._tupleVariantType = new GLib.VariantType('(v)'); + + return this._tupleVariantType; + } + + static destroy() { + delete this._tupleType; + } + + _init(busName, objectPath, interfaceInfo, flags = Gio.DBusProxyFlags.NONE) { + if (interfaceInfo.signals.length) + Logger.warn('Avoid exposing signals to gjs!'); + + super._init({ + gConnection: Gio.DBus.session, + gInterfaceName: interfaceInfo.name, + gInterfaceInfo: interfaceInfo, + gName: busName, + gObjectPath: objectPath, + gFlags: flags, + }); + + this._signalIds = []; + + if (!(flags & Gio.DBusProxyFlags.DO_NOT_CONNECT_SIGNALS)) { + this._signalIds.push(this.connect('g-signal', + (_proxy, ...args) => this._onSignal(...args))); + } + + this._signalIds.push(this.connect('notify::g-name-owner', () => { + if (!this.gNameOwner) { + this._cancellable.cancel(); + this._cancellable = new Gio.Cancellable(); + } + this._onNameOwnerChanged(); + })); + } + + async initAsync(cancellable) { + cancellable = new CancellableChild(cancellable); + await this.init_async(GLib.PRIORITY_DEFAULT, cancellable); + this._cancellable = cancellable; + + this.gInterfaceInfo.methods.map(m => m.name).forEach(method => + this._ensureAsyncMethod(method)); + } + + destroy() { + this.emit('destroy'); + + this._signalIds.forEach(id => this.disconnect(id)); + + if (this._cancellable) + this._cancellable.cancel(); + } + + // This can be removed when we will have GNOME 43 as minimum version + _ensureAsyncMethod(method) { + if (this[`${method}Async`]) + return; + + if (!this[`${method}Remote`]) + throw new Error(`Missing remote method '${method}'`); + + this[`${method}Async`] = function (...args) { + return new Promise((resolve, reject) => { + this[`${method}Remote`](...args, (ret, e) => { + if (e) + reject(e); + else + resolve(ret); + }); + }); + }; + } + + _onSignal() { + } + + getProperty(propertyName, cancellable) { + return this.gConnection.call(this.gName, + this.gObjectPath, 'org.freedesktop.DBus.Properties', 'Get', + GLib.Variant.new('(ss)', [this.gInterfaceName, propertyName]), + DBusProxy.TUPLE_VARIANT_TYPE, Gio.DBusCallFlags.NONE, -1, + cancellable); + } + + getProperties(cancellable) { + return this.gConnection.call(this.gName, + this.gObjectPath, 'org.freedesktop.DBus.Properties', 'GetAll', + GLib.Variant.new('(s)', [this.gInterfaceName]), + GLib.VariantType.new('(a{sv})'), Gio.DBusCallFlags.NONE, -1, + cancellable); + } +}); |