应用程序启动器图标中的“退出”选项执行什么操作?

应用程序启动器图标中的“退出”选项执行什么操作?

总结Quit每个启动器图标中的操作调用了什么命令/dbus 方法/操作?

过去几天我一直在阅读 Unity 7 的源代码,发现几行代码表明可能存在可以调用的 dbus 方法来正常终止应用程序的所有窗口:

  /* 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()

(取自unity-7.2.0+14.04.20140416/launcher/ApplicationLauncherIcon.cpp

一段时间以来,与 X 服务器通信一直很困难。发送HUP或任何其他信号都无法正常关闭 GUI 窗口。诸如xdotool和之类的工具wmctrl确实可以与 X 通信,但只是在 C 编程级别。

上面的代码表明,有一种更简单的方法可以以优雅的方式以编程方式关闭窗口,而无需安装wmctrl或之类的外部工具xdotool。这正是我在这个问题中追求的。

答案1

据我了解,该代码会创建一个菜单项并通过 DBus 将其连接到void ApplicationLauncherIcon::Quit()(同一个文件)。

这基本上调用

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

(文件unity-shared/BamfApplicationManager.cpp)属于启动器图标的每个窗口,其本质上与wmctrl -i -c window_id

相关内容