shell-app: Consider desktop actions in can_open_new_window()

We currently only consider a remote "app.new-window" action when running,
but not a fixed "new-window" action in the .desktop file. The latter is
clearly useful as well, in particular as open_new_window() already does,
so add it.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/665
This commit is contained in:
Florian Müllner 2019-08-06 13:19:59 +02:00
parent 213d10bf4e
commit 1e6cb43815

View File

@ -601,6 +601,8 @@ shell_app_can_open_new_window (ShellApp *app)
{ {
ShellAppRunningState *state; ShellAppRunningState *state;
MetaWindow *window; MetaWindow *window;
GDesktopAppInfo *desktop_info;
const char * const *desktop_actions;
/* Apps that are not running can always open new windows, because /* Apps that are not running can always open new windows, because
activating them would open the first one */ activating them would open the first one */
@ -619,12 +621,18 @@ shell_app_can_open_new_window (ShellApp *app)
if (!app->info) if (!app->info)
return FALSE; return FALSE;
desktop_info = G_DESKTOP_APP_INFO (app->info);
/* If the app is explicitly telling us, then we know for sure */ /* If the app is explicitly telling us, then we know for sure */
if (g_desktop_app_info_has_key (G_DESKTOP_APP_INFO (app->info), if (g_desktop_app_info_has_key (desktop_info, "X-GNOME-SingleWindow"))
"X-GNOME-SingleWindow")) return !g_desktop_app_info_get_boolean (desktop_info,
return !g_desktop_app_info_get_boolean (G_DESKTOP_APP_INFO (app->info),
"X-GNOME-SingleWindow"); "X-GNOME-SingleWindow");
/* If it has a new-window desktop action, it should be able to */
desktop_actions = g_desktop_app_info_list_actions (desktop_info);
if (desktop_actions && g_strv_contains (desktop_actions, "new-window"))
return TRUE;
/* If this is a unique GtkApplication, and we don't have a new-window, then /* If this is a unique GtkApplication, and we don't have a new-window, then
probably we can't probably we can't