[gnome-software/wip/ubuntu-xenial] Fix launching various KDE4 applications



commit e45232027a18b4cd620beabbc0265e39e1854048
Author: Richard Hughes <richard hughsie com>
Date:   Wed Apr 27 10:31:47 2016 +0100

    Fix launching various KDE4 applications
    
    Based on a patch by Iain Lane <iain orangesquash org uk>, many thanks.

 src/gs-application.c |    2 +-
 src/gs-dbus-helper.c |    2 +-
 src/gs-plugin.c      |    3 ++-
 src/gs-utils.c       |   24 ++++++++++++++++++++++++
 src/gs-utils.h       |    3 +++
 5 files changed, 31 insertions(+), 3 deletions(-)
---
diff --git a/src/gs-application.c b/src/gs-application.c
index 098e85b..532ff09 100644
--- a/src/gs-application.c
+++ b/src/gs-application.c
@@ -723,7 +723,7 @@ launch_activated (GSimpleAction *action,
 
        desktop_id = g_variant_get_string (parameter, NULL);
        display = gdk_display_get_default ();
-       appinfo = G_APP_INFO (g_desktop_app_info_new (desktop_id));
+       appinfo = G_APP_INFO (gs_utils_get_desktop_app_info (desktop_id));
        if (appinfo == NULL) {
                g_warning ("no such desktop file: %s", desktop_id);
                return;
diff --git a/src/gs-dbus-helper.c b/src/gs-dbus-helper.c
index f1c1ced..fa30681 100644
--- a/src/gs-dbus-helper.c
+++ b/src/gs-dbus-helper.c
@@ -298,7 +298,7 @@ notify_search_resources (GsShellExtrasMode   mode,
        g_autoptr(GNotification) n = NULL;
 
        if (desktop_id != NULL) {
-               app_info = g_desktop_app_info_new (desktop_id);
+               app_info = gs_utils_get_desktop_app_info (desktop_id);
                if (app_info != NULL)
                        app_name = g_app_info_get_name (G_APP_INFO (app_info));
        }
diff --git a/src/gs-plugin.c b/src/gs-plugin.c
index 35404c4..6002a7a 100644
--- a/src/gs-plugin.c
+++ b/src/gs-plugin.c
@@ -44,6 +44,7 @@
 
 #include "gs-plugin.h"
 #include "gs-os-release.h"
+#include "gs-utils.h"
 
 /**
  * gs_plugin_status_to_string:
@@ -362,7 +363,7 @@ gs_plugin_app_launch (GsPlugin *plugin, GsApp *app, GError **error)
                             desktop_id);
                return FALSE;
        }
-       appinfo = G_APP_INFO (g_desktop_app_info_new (desktop_id));
+       appinfo = G_APP_INFO (gs_utils_get_desktop_app_info (desktop_id));
        if (appinfo == NULL) {
                g_set_error (error,
                             GS_PLUGIN_ERROR,
diff --git a/src/gs-utils.c b/src/gs-utils.c
index f5b438f..b7a6b99 100644
--- a/src/gs-utils.c
+++ b/src/gs-utils.c
@@ -532,4 +532,28 @@ gs_utils_is_current_desktop (const gchar *name)
        return g_strv_contains ((const gchar * const *) names, name);
 }
 
+/**
+ * gs_utils_get_desktop_app_info:
+ */
+GDesktopAppInfo *
+gs_utils_get_desktop_app_info (const gchar *id)
+{
+       GDesktopAppInfo *app_info;
+
+       /* try to get the standard app-id */
+       app_info = g_desktop_app_info_new (id);
+
+       /* KDE is a special project because it believes /usr/share/applications
+        * isn't KDE enough. For this reason we support falling back to the
+        * "kde4-" prefixed ID to avoid educating various self-righteous
+        * upstreams about the correct ID to use in the AppData file. */
+       if (app_info == NULL) {
+               g_autofree gchar *kde_id = NULL;
+               kde_id = g_strdup_printf ("%s-%s", "kde4", id);
+               app_info = g_desktop_app_info_new (kde_id);
+       }
+
+       return app_info;
+}
+
 /* vim: set noexpandtab: */
diff --git a/src/gs-utils.h b/src/gs-utils.h
index 8aaf732..a9d4cb4 100644
--- a/src/gs-utils.h
+++ b/src/gs-utils.h
@@ -22,6 +22,7 @@
 #ifndef __GS_UTILS_H
 #define __GS_UTILS_H
 
+#include <gio/gdesktopappinfo.h>
 #include <gtk/gtk.h>
 
 #include "gs-app.h"
@@ -67,6 +68,8 @@ GPermission   *gs_utils_get_permission        (const gchar    *id);
 
 gboolean        gs_utils_is_current_desktop    (const gchar    *name);
 
+GDesktopAppInfo *gs_utils_get_desktop_app_info (const gchar    *id);
+
 G_END_DECLS
 
 #endif /* __GS_UTILS_H */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]