[gnome-shell] get_app_for_window_direct search ShellApp by window, before create.
- From: Maxim Ermilov <mermilov src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] get_app_for_window_direct search ShellApp by window, before create.
- Date: Sun, 21 Feb 2010 00:20:47 +0000 (UTC)
commit c793d7d0a4d0fa1002a873054dddc50f52564b9b
Author: Maxim Ermilov <zaspire rambler ru>
Date: Sun Feb 21 03:16:30 2010 +0300
get_app_for_window_direct search ShellApp by window, before create.
https://bugzilla.gnome.org/show_bug.cgi?id=610324
src/shell-app-system.c | 26 ++++++++++++++++++++++++++
src/shell-app-system.h | 1 +
src/shell-window-tracker.c | 8 +++-----
3 files changed, 30 insertions(+), 5 deletions(-)
---
diff --git a/src/shell-app-system.c b/src/shell-app-system.c
index 4b57e8a..4d8b7c8 100644
--- a/src/shell-app-system.c
+++ b/src/shell-app-system.c
@@ -484,6 +484,32 @@ shell_app_system_get_app (ShellAppSystem *self,
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
* apps per id.
*/
diff --git a/src/shell-app-system.h b/src/shell-app-system.h
index d6c7581..a02cfb7 100644
--- a/src/shell-app-system.h
+++ b/src/shell-app-system.h
@@ -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);
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);
diff --git a/src/shell-window-tracker.c b/src/shell-window-tracker.c
index 0865b2b..bf76488 100644
--- a/src/shell-window-tracker.c
+++ b/src/shell-window-tracker.c
@@ -302,15 +302,15 @@ get_app_for_window_direct (MetaWindow *window)
char *wmclass;
char *with_desktop;
+ appsys = shell_app_system_get_default ();
wmclass = get_appid_from_window (window);
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);
g_free (wmclass);
- appsys = shell_app_system_get_default ();
app = shell_app_system_lookup_heuristic_basename (appsys, with_desktop);
g_free (with_desktop);
@@ -323,9 +323,7 @@ get_app_for_window_direct (MetaWindow *window)
}
if (app == NULL)
- {
- app = _shell_app_new_for_window (window);
- }
+ app = shell_app_system_get_app_for_window (appsys, window);
return app;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]