[gnome-software/wip/rancell/ubuntu-3-20-rebase: 7/14] Fix launching various KDE4 applications



commit 7825a3f6acef99443710e9eae3acaae9e498f915
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       |    2 ++
 5 files changed, 30 insertions(+), 3 deletions(-)
---
diff --git a/src/gs-application.c b/src/gs-application.c
index 6b10e01..11382b0 100644
--- a/src/gs-application.c
+++ b/src/gs-application.c
@@ -623,7 +623,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 e657f2a..be3988d 100644
--- a/src/gs-dbus-helper.c
+++ b/src/gs-dbus-helper.c
@@ -297,7 +297,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 ebb85b0..5a50aed 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:
@@ -355,7 +356,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 2c783f2..ad48647 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 aa2925e..e524cb0 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"
@@ -66,6 +67,7 @@ gchar         *gs_utils_get_user_hash         (GError         **error);
 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
 


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