TL; DR qual comando / método / ação do dbus está sendo chamado pela ação Quit
em cada ícone do ativador?
Eu tenho lido a fonte do Unity 7 nos últimos dias e descobri algumas linhas de código que sugerem que pode haver um método dbus que pode ser chamado para matar todas as janelas de um aplicativo:
/* Quit */
menu_item = dbusmenu_menuitem_new();
dbusmenu_menuitem_property_set(menu_item, DBUSMENU_MENUITEM_PROP_LABEL, _("Quit"));
dbusmenu_menuitem_property_set_bool(menu_item, DBUSMENU_MENUITEM_PROP_ENABLED, true);
dbusmenu_menuitem_property_set_bool(menu_item, DBUSMENU_MENUITEM_PROP_VISIBLE, true);
_gsignals.Add<void, DbusmenuMenuitem*, unsigned>(menu_item, DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
[this] (DbusmenuMenuitem*, unsigned) {
Quit()
(tirada de unity-7.2.0+14.04.20140416/launcher/ApplicationLauncherIcon.cpp
)
Por algum tempo tem sido uma dificuldade de comunicação com o servidor X. O envio de HUP
ou qualquer outro sinal não fecha a janela da GUI normalmente. Ferramentas como xdotool
e wmctrl
se comunicam com o X, mas no nível de programação C.
O que o código acima sugere é que existe uma maneira mais simples de fechar programaticamente as janelas de maneira elegante, sem a necessidade de instalar ferramentas externas como wmctrl
ou xdotool
. É precisamente o que estou procurando nesta questão.