Qual é a ação executada pela opção “Sair” no ícone do lançador de aplicativos?

5

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.

    
por Sergiy Kolodyazhnyy 04.04.2016 / 20:50

1 resposta

4

Tanto quanto eu entendo que o código cria um item de menu e conecta via DBus para void ApplicationLauncherIcon::Quit() (mesmo arquivo).

Isso basicamente chama

void AppWindow::Quit() const
{
  WindowManager::Default().Close(window_id());
}

(arquivo unity-shared/BamfApplicationManager.cpp ) para cada janela que pertence ao ícone do lançador, que essencialmente faz o mesmo que wmctrl -i -c window_id

    
por Florian Diesch 04.04.2016 / 22:31