[mutter] window: Expose Flatpak application ID
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Expose Flatpak application ID
- Date: Mon, 10 Oct 2016 22:51:28 +0000 (UTC)
commit bccff5bdd85c5512f7977488b12a9367f06c2ce6
Author: Florian Müllner <fmuellner gnome org>
Date: Fri Oct 7 17:55:32 2016 +0200
window: Expose Flatpak application ID
GNOME Shell's window matching currently fails frequently with Flatpak
applications, as one of the primary hints used to link windows with
.desktop files - the WM_CLASS - no longer matches when flatpak renames
the exported .desktop file. Luckily, Flatpak provides us with a fail-safe
way to map from the PID to the corresponding application ID, so expose an
appropriate method that allows GNOME Shell to reliably match windows to
the corresponding Flatpak app.
https://bugzilla.gnome.org/show_bug.cgi?id=772614
src/core/window-private.h | 1 +
src/core/window.c | 35 +++++++++++++++++++++++++++++++++++
src/meta/window.h | 1 +
3 files changed, 37 insertions(+), 0 deletions(-)
---
diff --git a/src/core/window-private.h b/src/core/window-private.h
index 67abbcc..c7d6934 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -164,6 +164,7 @@ struct _MetaWindow
char *startup_id;
char *mutter_hints;
+ char *flatpak_id;
char *gtk_theme_variant;
char *gtk_application_id;
char *gtk_unique_bus_name;
diff --git a/src/core/window.c b/src/core/window.c
index 3fea483..458e2d7 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -293,6 +293,7 @@ meta_window_finalize (GObject *object)
g_free (window->res_name);
g_free (window->title);
g_free (window->desc);
+ g_free (window->flatpak_id);
g_free (window->gtk_theme_variant);
g_free (window->gtk_application_id);
g_free (window->gtk_unique_bus_name);
@@ -765,6 +766,27 @@ sync_client_window_mapped (MetaWindow *window)
}
static void
+meta_window_update_flatpak_id (MetaWindow *window)
+{
+ uint32_t pid = meta_window_get_client_pid (window);
+ g_autoptr(GKeyFile) key_file = NULL;
+ g_autofree char *info_filename = NULL;
+
+ g_clear_pointer (&window->flatpak_id, g_free);
+
+ if (pid == 0)
+ return;
+
+ key_file = g_key_file_new ();
+ info_filename = g_strdup_printf ("/proc/%u/root/.flatpak-info", pid);
+
+ if (!g_key_file_load_from_file (key_file, info_filename, G_KEY_FILE_NONE, NULL))
+ return;
+
+ window->flatpak_id = g_key_file_get_string (key_file, "Application", "name", NULL);
+}
+
+static void
meta_window_update_desc (MetaWindow *window)
{
g_autofree gchar *title = NULL;
@@ -863,6 +885,7 @@ _meta_window_shared_new (MetaDisplay *display,
window->screen = screen;
+ meta_window_update_flatpak_id (window);
meta_window_update_desc (window);
window->override_redirect = attrs->override_redirect;
@@ -6898,6 +6921,18 @@ meta_window_get_wm_class_instance (MetaWindow *window)
}
/**
+ * meta_window_get_flatpak_id:
+ * @window: a #MetaWindow
+ *
+ * Return value: (transfer none): the Flatpak application ID or %NULL
+ **/
+const char *
+meta_window_get_flatpak_id (MetaWindow *window)
+{
+ return window->flatpak_id;
+}
+
+/**
* meta_window_get_gtk_theme_variant:
* @window: a #MetaWindow
*
diff --git a/src/meta/window.h b/src/meta/window.h
index 60c9997..2ae325e 100644
--- a/src/meta/window.h
+++ b/src/meta/window.h
@@ -138,6 +138,7 @@ const char * meta_window_get_wm_class (MetaWindow *window);
const char * meta_window_get_wm_class_instance (MetaWindow *window);
gboolean meta_window_showing_on_its_workspace (MetaWindow *window);
+const char * meta_window_get_flatpak_id (MetaWindow *window);
const char * meta_window_get_gtk_theme_variant (MetaWindow *window);
const char * meta_window_get_gtk_application_id (MetaWindow *window);
const char * meta_window_get_gtk_unique_bus_name (MetaWindow *window);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]