[gnome-software/wip/rancell/ubuntu-3-20-2: 15/59] Fix launching various KDE4 applications



commit fef6b4c036264110de6da4bd3fed9b53745c871c
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 08dac18..d377de8 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 3957dad..8d0f93a 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 956a721..76e87e0 100644
--- a/src/gs-utils.c
+++ b/src/gs-utils.c
@@ -623,4 +623,28 @@ gs_utils_widget_set_custom_css (GtkWidget *widget, const gchar *css)
                                g_object_unref);
 }
 
+/**
+ * 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 a218b80..c7cc175 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"
@@ -72,6 +73,8 @@ void           gs_utils_widget_set_custom_css (GtkWidget      *widget,
 
 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]