diff --git a/src/shell-app-system.c b/src/shell-app-system.c index d9c57e0fb..feca09cf8 100644 --- a/src/shell-app-system.c +++ b/src/shell-app-system.c @@ -71,12 +71,37 @@ static void shell_app_system_class_init(ShellAppSystemClass *klass) g_type_class_add_private (gobject_class, sizeof (ShellAppSystemPrivate)); } +static void +scan_startup_wm_class_to_id (ShellAppSystem *self) +{ + ShellAppSystemPrivate *priv = self->priv; + GList *apps, *l; + + g_hash_table_remove_all (priv->startup_wm_class_to_id); + + apps = g_app_info_get_all (); + for (l = apps; l != NULL; l = l->next) + { + GAppInfo *info = l->data; + const char *startup_wm_class, *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) + g_hash_table_insert (priv->startup_wm_class_to_id, (char *) startup_wm_class, (char *) id); + } + + g_list_free_full (apps, g_object_unref); +} + static void installed_changed (GAppInfoMonitor *monitor, gpointer user_data) { ShellAppSystem *self = user_data; + scan_startup_wm_class_to_id (self); + g_signal_emit (self, signals[INSTALLED_CHANGED], 0, NULL); }