]> git.0d.be Git - empathy.git/commitdiff
empathy_launch_external_app: allow to pass arguments
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Fri, 3 Aug 2012 12:12:00 +0000 (14:12 +0200)
committerXavier Claessens <xavier.claessens@collabora.co.uk>
Wed, 15 Aug 2012 12:08:45 +0000 (14:08 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=680778

libempathy-gtk/empathy-ui-utils.c
libempathy-gtk/empathy-ui-utils.h
src/empathy-accounts-dialog.c

index 905037bf882d58b63fb485a84094676c02697b8d..967d59cda325f5259b3100037d07f9b44f84435e 100644 (file)
@@ -1669,10 +1669,12 @@ launch_app_info (GAppInfo *app_info,
 
 gboolean
 empathy_launch_external_app (const gchar *desktop_file,
+    const gchar *args,
     GError **error)
 {
   GDesktopAppInfo *desktop_info;
   gboolean result;
+  GError *err = NULL;
 
   desktop_info = g_desktop_app_info_new (desktop_file);
   if (desktop_info == NULL)
@@ -1684,8 +1686,35 @@ empathy_launch_external_app (const gchar *desktop_file,
       return FALSE;
     }
 
-  result = launch_app_info (G_APP_INFO (desktop_info), error);
-  g_object_unref (desktop_info);
+  if (args == NULL)
+    {
+      result = launch_app_info (G_APP_INFO (desktop_info), error);
+    }
+  else
+    {
+      gchar *cmd;
+      GAppInfo *app_info;
+
+      /* glib doesn't have API to start a desktop file with args... (#637875) */
+      cmd = g_strdup_printf ("%s %s", g_app_info_get_commandline (
+            (GAppInfo *) desktop_info), args);
 
+      app_info = g_app_info_create_from_commandline (cmd, NULL, 0, &err);
+      if (app_info == NULL)
+        {
+          DEBUG ("Failed to launch '%s': %s", cmd, err->message);
+          g_free (cmd);
+          g_object_unref (desktop_info);
+          g_propagate_error (error, err);
+          return FALSE;
+        }
+
+      result = launch_app_info (app_info, error);
+
+      g_object_unref (app_info);
+      g_free (cmd);
+    }
+
+  g_object_unref (desktop_info);
   return result;
 }
index 97777e5b6d7c886236a0968c2246087b6d4cd4ef..73232cf5295d51fadd71672870c4136976bcd586 100644 (file)
@@ -148,6 +148,7 @@ void empathy_launch_program (const gchar *dir,
 void empathy_set_css_provider (GtkWidget *widget);
 
 gboolean empathy_launch_external_app (const gchar *desktop_file,
+    const gchar *args,
     GError **error);
 
 G_END_DECLS
index a4096b86f7cf0c91d06bdcbcdbb7d6c12a9cc509..1023bac153e6e1c2e5ac5f4efb2f22ecb3413497 100644 (file)
@@ -639,28 +639,6 @@ account_dialog_create_edit_params_dialog (EmpathyAccountsDialog *dialog)
   gtk_widget_show (subdialog);
 }
 
-static void
-start_external_app (GAppInfo *app_info)
-{
-  GError *error = NULL;
-  GdkAppLaunchContext *context = NULL;
-  GdkDisplay *display;
-
-  display = gdk_display_get_default ();
-  context = gdk_display_get_app_launch_context (display);
-
-  if (!g_app_info_launch (app_info, NULL, (GAppLaunchContext *) context,
-        &error))
-    {
-      g_critical ("Failed to launch %s: %s",
-          g_app_info_get_display_name (app_info),
-          error->message);
-      g_clear_error (&error);
-    }
-
-  tp_clear_object (&context);
-}
-
 static void
 use_external_storage_provider (EmpathyAccountsDialog *self,
     TpAccount *account)
@@ -670,47 +648,20 @@ use_external_storage_provider (EmpathyAccountsDialog *self,
   provider = tp_account_get_storage_provider (account);
   if (!tp_strdiff (provider, "com.meego.libsocialweb"))
     {
-      GDesktopAppInfo *desktop_info;
-      gchar *cmd;
-      GAppInfo *app_info;
-      GError *error = NULL;
-
-      desktop_info = g_desktop_app_info_new ("gnome-control-center.desktop");
-      if (desktop_info == NULL)
-        {
-          g_critical ("Could not locate 'gnome-control-center.desktop'");
-          return;
-        }
-
-      /* glib doesn't have API to start a desktop file with args... (#637875) */
-      cmd = g_strdup_printf ("%s bisho.desktop", g_app_info_get_commandline (
-            (GAppInfo *) desktop_info));
-
-      app_info = g_app_info_create_from_commandline (cmd, NULL, 0, &error);
-
-      if (app_info == NULL)
-        {
-          DEBUG ("Failed to create app info: %s", error->message);
-          g_error_free (error);
-        }
-      else
-        {
-          start_external_app (app_info);
-          g_object_unref (app_info);
-        }
-
-      g_object_unref (desktop_info);
-      g_free (cmd);
+      empathy_launch_external_app ("gnome-control-center.desktop",
+          "bisho.desktop", NULL);
       return;
     }
   else if (!tp_strdiff (provider, EMPATHY_GOA_PROVIDER))
     {
-      empathy_launch_external_app ("gnome-online-accounts-panel.desktop", NULL);
+      empathy_launch_external_app ("gnome-online-accounts-panel.desktop",
+          NULL, NULL);
       return;
     }
   else if (!tp_strdiff (provider, EMPATHY_UOA_PROVIDER))
     {
-      empathy_launch_external_app ("gnome-credentials-panel.desktop", NULL);
+      empathy_launch_external_app ("gnome-credentials-panel.desktop",
+          NULL, NULL);
       return;
     }
   else