get_app_for_window_direct search ShellApp by window, before create.
https://bugzilla.gnome.org/show_bug.cgi?id=610324
This commit is contained in:
parent
1b7c3580e6
commit
c793d7d0a4
@ -484,6 +484,32 @@ shell_app_system_get_app (ShellAppSystem *self,
|
|||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* shell_app_system_get_app_for_window:
|
||||||
|
* @self: A #ShellAppSystem
|
||||||
|
* @window: A #MetaWindow
|
||||||
|
*
|
||||||
|
* Find or create a #ShellApp for window
|
||||||
|
*
|
||||||
|
* Return value: (transfer full): The #ShellApp for window, or %NULL if none
|
||||||
|
*/
|
||||||
|
ShellApp *
|
||||||
|
shell_app_system_get_app_for_window (ShellAppSystem *self,
|
||||||
|
MetaWindow *window)
|
||||||
|
{
|
||||||
|
char *id = g_strdup_printf ("window:%p", window);
|
||||||
|
ShellApp *app = g_hash_table_lookup (self->priv->app_id_to_app, id);
|
||||||
|
|
||||||
|
if (app)
|
||||||
|
g_object_ref (G_OBJECT (app));
|
||||||
|
else
|
||||||
|
app = _shell_app_new_for_window (window);
|
||||||
|
|
||||||
|
g_free (id);
|
||||||
|
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
|
||||||
/* ShellAppSystem ensures we have a unique instance of
|
/* ShellAppSystem ensures we have a unique instance of
|
||||||
* apps per id.
|
* apps per id.
|
||||||
*/
|
*/
|
||||||
|
@ -66,6 +66,7 @@ gboolean shell_app_info_launch (ShellAppInfo *info,
|
|||||||
ShellAppInfo *shell_app_system_load_from_desktop_file (ShellAppSystem *system, const char *filename, GError **error);
|
ShellAppInfo *shell_app_system_load_from_desktop_file (ShellAppSystem *system, const char *filename, GError **error);
|
||||||
|
|
||||||
ShellApp *shell_app_system_get_app (ShellAppSystem *system, const char *id);
|
ShellApp *shell_app_system_get_app (ShellAppSystem *system, const char *id);
|
||||||
|
ShellApp *shell_app_system_get_app_for_window (ShellAppSystem *self, MetaWindow *window);
|
||||||
|
|
||||||
void _shell_app_system_register_app (ShellAppSystem *self, ShellApp *app);
|
void _shell_app_system_register_app (ShellAppSystem *self, ShellApp *app);
|
||||||
|
|
||||||
|
@ -302,15 +302,15 @@ get_app_for_window_direct (MetaWindow *window)
|
|||||||
char *wmclass;
|
char *wmclass;
|
||||||
char *with_desktop;
|
char *with_desktop;
|
||||||
|
|
||||||
|
appsys = shell_app_system_get_default ();
|
||||||
wmclass = get_appid_from_window (window);
|
wmclass = get_appid_from_window (window);
|
||||||
|
|
||||||
if (!wmclass)
|
if (!wmclass)
|
||||||
return _shell_app_new_for_window (window);
|
return shell_app_system_get_app_for_window (appsys, window);
|
||||||
|
|
||||||
with_desktop = g_strjoin (NULL, wmclass, ".desktop", NULL);
|
with_desktop = g_strjoin (NULL, wmclass, ".desktop", NULL);
|
||||||
g_free (wmclass);
|
g_free (wmclass);
|
||||||
|
|
||||||
appsys = shell_app_system_get_default ();
|
|
||||||
app = shell_app_system_lookup_heuristic_basename (appsys, with_desktop);
|
app = shell_app_system_lookup_heuristic_basename (appsys, with_desktop);
|
||||||
g_free (with_desktop);
|
g_free (with_desktop);
|
||||||
|
|
||||||
@ -323,9 +323,7 @@ get_app_for_window_direct (MetaWindow *window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (app == NULL)
|
if (app == NULL)
|
||||||
{
|
app = shell_app_system_get_app_for_window (appsys, window);
|
||||||
app = _shell_app_new_for_window (window);
|
|
||||||
}
|
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user