[gnome-shell] app-system: Improve StartupWMClass heuristics
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] app-system: Improve StartupWMClass heuristics
- Date: Fri, 26 Jun 2015 17:22:09 +0000 (UTC)
commit eac303f84c83b550afc19dc6076f4563e4039d93
Author: Florian Müllner <fmuellner gnome org>
Date: Fri Jun 26 13:46:11 2015 +0200
app-system: Improve StartupWMClass heuristics
Our StartUpWMClass heuristics use a StartupWMClass -> .desktop ID
mapping built from the list of all installed applications. In case
of multiple .desktop files setting the same StartupWMClass, we
currently simply pick the last one returned by g_app_info_get_all (),
which can be a bit surprising:
A window with WM_CLASS 'emacs', launched through a .desktop file
named 'emacs.desktop' with a StartupWMClass of 'emacs' maps to ...
'emacsclient.desktop'!
Make this case a bit less random by preferring the app info whose
ID matches the StartupWMClass.
https://bugzilla.gnome.org/show_bug.cgi?id=751541
src/shell-app-system.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
---
diff --git a/src/shell-app-system.c b/src/shell-app-system.c
index ff838f9..a45da0d 100644
--- a/src/shell-app-system.c
+++ b/src/shell-app-system.c
@@ -83,12 +83,18 @@ scan_startup_wm_class_to_id (ShellAppSystem *self)
for (l = apps; l != NULL; l = l->next)
{
GAppInfo *info = l->data;
- const char *startup_wm_class, *id;
+ const char *startup_wm_class, *id, *old_id;
id = g_app_info_get_id (info);
startup_wm_class = g_desktop_app_info_get_startup_wm_class (G_DESKTOP_APP_INFO (info));
- if (startup_wm_class != NULL)
+ if (startup_wm_class == NULL)
+ continue;
+
+ /* In case multiple .desktop files set the same StartupWMClass, prefer
+ * the one where ID and StartupWMClass match */
+ old_id = g_hash_table_lookup (priv->startup_wm_class_to_id, startup_wm_class);
+ if (old_id == NULL || strcmp (id, startup_wm_class) == 0)
g_hash_table_insert (priv->startup_wm_class_to_id,
g_strdup (startup_wm_class), g_strdup (id));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]