diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-08-03 20:00:48 +0800 |
---|---|---|
committer | Xavier Claessens <xavier.claessens@collabora.co.uk> | 2012-08-15 14:05:26 +0800 |
commit | f4fc6c6be76bb4cdfb4ebda9ca7de6758f2f18d1 (patch) | |
tree | a1a58418be88ae87be52200f5b1a216c13fc531f /libempathy-gtk | |
parent | 1f872789f7cba0934744071fa85ad6bd7c35abdc (diff) | |
download | gsoc2013-empathy-f4fc6c6be76bb4cdfb4ebda9ca7de6758f2f18d1.tar gsoc2013-empathy-f4fc6c6be76bb4cdfb4ebda9ca7de6758f2f18d1.tar.gz gsoc2013-empathy-f4fc6c6be76bb4cdfb4ebda9ca7de6758f2f18d1.tar.bz2 gsoc2013-empathy-f4fc6c6be76bb4cdfb4ebda9ca7de6758f2f18d1.tar.lz gsoc2013-empathy-f4fc6c6be76bb4cdfb4ebda9ca7de6758f2f18d1.tar.xz gsoc2013-empathy-f4fc6c6be76bb4cdfb4ebda9ca7de6758f2f18d1.tar.zst gsoc2013-empathy-f4fc6c6be76bb4cdfb4ebda9ca7de6758f2f18d1.zip |
factor out empathy_launch_external_app()
https://bugzilla.gnome.org/show_bug.cgi?id=680778
Diffstat (limited to 'libempathy-gtk')
-rw-r--r-- | libempathy-gtk/empathy-ui-utils.c | 48 | ||||
-rw-r--r-- | libempathy-gtk/empathy-ui-utils.h | 3 |
2 files changed, 51 insertions, 0 deletions
diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c index 7c6c6a7f0..905037bf8 100644 --- a/libempathy-gtk/empathy-ui-utils.c +++ b/libempathy-gtk/empathy-ui-utils.c @@ -37,6 +37,7 @@ #include <glib/gi18n-lib.h> #include <gtk/gtk.h> #include <gio/gio.h> +#include <gio/gdesktopappinfo.h> #include <telepathy-glib/util.h> #include <folks/folks.h> @@ -1641,3 +1642,50 @@ out: g_free (filename); g_object_unref (provider); } + +static gboolean +launch_app_info (GAppInfo *app_info, + GError **error) +{ + GdkAppLaunchContext *context = NULL; + GdkDisplay *display; + GError *err = NULL; + + display = gdk_display_get_default (); + context = gdk_display_get_app_launch_context (display); + + if (!g_app_info_launch (app_info, NULL, (GAppLaunchContext *) context, + &err)) + { + DEBUG ("Failed to launch %s: %s", + g_app_info_get_display_name (app_info), err->message); + g_propagate_error (error, err); + return FALSE; + } + + tp_clear_object (&context); + return TRUE; +} + +gboolean +empathy_launch_external_app (const gchar *desktop_file, + GError **error) +{ + GDesktopAppInfo *desktop_info; + gboolean result; + + desktop_info = g_desktop_app_info_new (desktop_file); + if (desktop_info == NULL) + { + DEBUG ("%s not found", desktop_file); + + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + "%s not found", desktop_file); + return FALSE; + } + + result = launch_app_info (G_APP_INFO (desktop_info), error); + g_object_unref (desktop_info); + + return result; +} diff --git a/libempathy-gtk/empathy-ui-utils.h b/libempathy-gtk/empathy-ui-utils.h index fdf69df06..97777e5b6 100644 --- a/libempathy-gtk/empathy-ui-utils.h +++ b/libempathy-gtk/empathy-ui-utils.h @@ -147,6 +147,9 @@ void empathy_launch_program (const gchar *dir, void empathy_set_css_provider (GtkWidget *widget); +gboolean empathy_launch_external_app (const gchar *desktop_file, + GError **error); + G_END_DECLS #endif /* __EMPATHY_UI_UTILS_H__ */ |