Xpra: Ticket #476: workarounds for crippled desktop environments without a system tray (ie: gnome3)

On those desktop environments, we have no way of interacting with the xpra client controls...

r4969 allows us to show the "session-info" window using "Meta+Shift+F11", which helps a little, but we have no way of toggling any of the settings usually found in the system tray.

We could:

Tue, 19 Aug 2014 03:01:35 GMT - Antoine Martin: owner, status, milestone changed

Scheduling for this release, together with #508 and #472.

See also #657

Looking at the API: gtk-application-set-app-menu, it looks like we need to port to GTK3 first (#90). Sigh. https://mail.gnome.org/archives/commits-list/2012-January/msg08239.html

Example code? mini-dbusmenu

Or maybe we can just write ctypes / cython code for it?

Sat, 06 Sep 2014 15:49:01 GMT - Antoine Martin: attachment set

cython file for linking with libdbusmenu

Wed, 10 Sep 2014 14:56:29 GMT - Antoine Martin: attachment set

only a small portion of the headers... and far too many functions already

Tue, 14 Apr 2015 16:37:30 GMT - Antoine Martin: milestone changed

no time for this mess

Thu, 17 Sep 2015 16:09:32 GMT - Antoine Martin:

This is what I see for an terminal under Fedora:

$ xprop | grep _GTK_
_GTK_APP_MENU_OBJECT_PATH(UTF8_STRING) = "/org/gnome/Terminal/menus/appmenu"
_GTK_WINDOW_OBJECT_PATH(UTF8_STRING) = "/org/gnome/Terminal/window/1"
_GTK_APPLICATION_ID(UTF8_STRING) = "org.gnome.Terminal"
$ qdbus org.gnome.Terminal /org/gnome/Terminal
method QDBusVariant org.freedesktop.DBus.Properties.Get(QString interface_name, QString property_name)
method QVariantMap org.freedesktop.DBus.Properties.GetAll(QString interface_name)
signal void org.freedesktop.DBus.Properties.PropertiesChanged(QString interface_name, QVariantMap changed_properties, QStringList invalidated_properties)
method void org.freedesktop.DBus.Properties.Set(QString interface_name, QString property_name, QDBusVariant value)
method QString org.freedesktop.DBus.Introspectable.Introspect()
method QString org.freedesktop.DBus.Peer.GetMachineId()
method void org.freedesktop.DBus.Peer.Ping()
method QDBusRawType::a{oa{sa{sv}}} org.freedesktop.DBus.ObjectManager.GetManagedObjects()
signal void org.freedesktop.DBus.ObjectManager.InterfacesAdded(QDBusObjectPath object_path, QDBusRawType::a{sa{sv}} interfaces_and_properties)
signal void org.freedesktop.DBus.ObjectManager.InterfacesRemoved(QDBusObjectPath object_path, QStringList interfaces)
method void org.gtk.Actions.Activate(QString action_name, QVariantList parameter, QVariantMap platform_data)
signal void org.gtk.Actions.Changed(QStringList removals, QDBusRawType::a{sb} enable_changes, QVariantMap state_changes, QDBusRawType::a{s(bgav additions)
method QDBusRawType::(bgav) org.gtk.Actions.Describe(QString action_name)
method QDBusRawType::a{s(bgav)} org.gtk.Actions.DescribeAll()
method QStringList org.gtk.Actions.List()
method void org.gtk.Actions.SetState(QString action_name, QDBusVariant value, QVariantMap platform_data)
method void org.freedesktop.Application.Activate(QVariantMap platform-data)
method void org.freedesktop.Application.ActivateAction(QString action-name, QVariantList parameter, QVariantMap platform-data)
method void org.freedesktop.Application.Open(QStringList uris, QVariantMap platform-data)
property read bool org.gtk.Application.Busy
method void org.gtk.Application.Activate(QVariantMap platform-data)
method int org.gtk.Application.CommandLine(QDBusObjectPath path, QDBusRawType::aay arguments, QVariantMap platform-data)
method void org.gtk.Application.Open(QStringList uris, QString hint, QVariantMap platform-data)

Not sure if we want to call dbus from an X11 event callback... this could be asking for trouble.

Sat, 19 Sep 2015 14:26:05 GMT - Antoine Martin: attachment set

stub for adding gtk menus as a window property we can export

Sat, 19 Sep 2015 14:33:29 GMT - Antoine Martin: priority changed

Raising: if we want to integrate some form of OS global menu, be it Gnome's, Ubuntu's (#472), OSX'x or even just the MS Windows taskbar (#508), we need to define an API - this one seems to be the broadest and most generic one to use as a base.

The example code added in r10666 (improved in r10672) is enough to query a gtk application's global menu.

What needs to be done:

Hopefully, we can make the code generic enough to be re-used for #904.


Tue, 29 Sep 2015 12:18:23 GMT - Antoine Martin:

Mostly implemented in r10702.

Still TODO:

Sat, 03 Oct 2015 09:04:49 GMT - Antoine Martin: attachment set

not sure what this is for - but it is referenced in some of the docs

Sat, 03 Oct 2015 09:06:41 GMT - Antoine Martin: attachment set

trying to make multi window mode more reliable (and failing)

Sat, 03 Oct 2015 11:19:05 GMT - Antoine Martin:

Found more undocumented features in parsing the source of mutter:

Might be related: gtk2's setup_toplevel_window uses a single leader window for all its windows (see ICCCM Group Leader stuff!)

Fri, 13 Nov 2015 11:17:26 GMT - Antoine Martin: milestone changed

Note: this sort of works in 0.16, but only OSX clients will actually be able to show the forwarded menu.

Wed, 15 Feb 2017 09:21:56 GMT - Antoine Martin: milestone changed


Mon, 01 Apr 2019 16:09:06 GMT - Antoine Martin:

Maybe we can write an extension, at least for xpra's own tray. Example of a simple extension: https://github.com/JasonLG1979/gnome-shell-extensions-morphine. (Javascript - shudder)

Mon, 22 Jul 2019 15:48:36 GMT - Antoine Martin: milestone changed

Out of time, more details on the Linux desktop tray icon pain in ticket:2161#comment:3.

Sat, 21 Sep 2019 11:59:21 GMT - Antoine Martin: milestone changed

Writing Gnome Shell Extensions

And as far as I can tell, extensions aren't enabled by default..

Tue, 22 Oct 2019 09:58:30 GMT - Antoine Martin:

Similar request here: Detecting if TopIcons-Plus is active: dconf /org/gnome/shell/ .... 'TopIcons@…' ....

Sat, 23 Jan 2021 04:56:44 GMT - migration script:

this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/476