[empathy] factor out empathy_display_individual_info()



commit 60e19a5cd6acce9af9b19d013eb396f12ea42abe
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date:   Tue Jul 10 16:03:17 2012 +0200

    factor out empathy_display_individual_info()
    
    It didn't want to put more misc stuffs to ui-utils so used this file.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=679111

 .../empathy-individual-information-dialog.c        |  138 ++++++++++++++++++++
 .../empathy-individual-information-dialog.h        |    2 +
 libempathy-gtk/empathy-individual-menu.c           |  128 +------------------
 3 files changed, 141 insertions(+), 127 deletions(-)
---
diff --git a/libempathy-gtk/empathy-individual-information-dialog.c b/libempathy-gtk/empathy-individual-information-dialog.c
index 42bfb20..9ac783a 100644
--- a/libempathy-gtk/empathy-individual-information-dialog.c
+++ b/libempathy-gtk/empathy-individual-information-dialog.c
@@ -28,6 +28,7 @@
 
 #include <gtk/gtk.h>
 #include <glib/gi18n-lib.h>
+#include <gio/gdesktopappinfo.h>
 
 #include <telepathy-glib/util.h>
 #include <folks/folks.h>
@@ -35,11 +36,15 @@
 
 #include <libempathy/empathy-individual-manager.h>
 #include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-pkg-kit.h>
 
 #include "empathy-individual-information-dialog.h"
 #include "empathy-individual-widget.h"
 #include "empathy-ui-utils.h"
 
+#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
+#include <libempathy/empathy-debug.h>
+
 #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIndividualInformationDialog)
 typedef struct {
   FolksIndividual *individual;
@@ -316,3 +321,136 @@ empathy_individual_information_dialog_init (
   g_signal_connect (dialog, "response",
       G_CALLBACK (individual_dialogs_response_cb), &information_dialogs);
 }
+
+static void
+show_gnome_contacts_error_dialog (void)
+{
+  GtkWidget *dialog;
+
+  dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
+      GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
+      _("gnome-contacts not installed"));
+
+  gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+      _("Please install gnome-contacts to access contacts details."));
+
+  g_signal_connect_swapped (dialog, "response",
+          G_CALLBACK (gtk_widget_destroy), dialog);
+
+  gtk_widget_show (dialog);
+}
+
+static void
+start_gnome_contacts (FolksIndividual *individual,
+    gboolean try_installing);
+
+static void
+install_gnome_contacts_cb (GObject *source,
+    GAsyncResult *result,
+    gpointer user_data)
+{
+  FolksIndividual *individual = user_data;
+  GError *error = NULL;
+
+  if (!empathy_pkg_kit_install_packages_finish (result, &error))
+    {
+      DEBUG ("Failed to install gnome-contacts: %s", error->message);
+      g_error_free (error);
+
+      show_gnome_contacts_error_dialog ();
+      goto out;
+    }
+
+  DEBUG ("gnome-contacts installed");
+
+  start_gnome_contacts (individual, FALSE);
+
+out:
+  g_object_unref (individual);
+}
+
+static void
+start_gnome_contacts (FolksIndividual *individual,
+    gboolean try_installing)
+{
+  GDesktopAppInfo *desktop_info;
+  gchar *cmd;
+  GAppInfo *app_info;
+  GError *error = NULL;
+  GdkAppLaunchContext *context = NULL;
+  GdkDisplay *display;
+
+  g_return_if_fail (FOLKS_IS_INDIVIDUAL (individual));
+
+  /* Start gnome-contacts */
+  display = gdk_display_get_default ();
+  context = gdk_display_get_app_launch_context (display);
+
+  desktop_info = g_desktop_app_info_new ("gnome-contacts.desktop");
+  if (desktop_info == NULL)
+    {
+      if (try_installing)
+        {
+          const gchar *packages[] = { "gnome-contacts", NULL };
+
+          DEBUG ("gnome-contacts not installed; try to install it");
+
+          empathy_pkg_kit_install_packages_async (0, packages, NULL,
+              NULL, install_gnome_contacts_cb, g_object_ref (individual));
+        }
+      else
+        {
+          show_gnome_contacts_error_dialog ();
+        }
+
+      return;
+    }
+
+  /* glib doesn't have API to start a desktop file with args... (#637875) */
+  cmd = g_strdup_printf ("%s -i %s", g_app_info_get_commandline (
+        (GAppInfo *) desktop_info), folks_individual_get_id (individual));
+
+  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);
+      return;
+    }
+
+  if (!g_app_info_launch (app_info, NULL, (GAppLaunchContext *) context,
+        &error))
+    {
+      g_critical ("Failed to start gnome-contacts: %s", error->message);
+      g_error_free (error);
+    }
+
+  g_object_unref (desktop_info);
+  g_object_unref (app_info);
+}
+
+/* Use gnome-contacts to display @individual or fallback to
+ * EmpathyIndividualInformationDialog if user is not not in Folks.
+ */
+void
+empathy_display_individual_info (FolksIndividual *individual)
+{
+  EmpathyIndividualManager *mgr;
+
+  mgr = empathy_individual_manager_dup_singleton ();
+
+  /* Only use gnome-contacts if that's a 'real' individual we got from
+   * Folks (and so the individual manager knows about it). If not that's a
+   * MUC contact and we use the simple dialog. */
+  if (empathy_individual_manager_lookup_member (mgr,
+        folks_individual_get_id (individual)) != NULL)
+    {
+      start_gnome_contacts (individual, TRUE);
+    }
+  else
+    {
+      empathy_individual_information_dialog_show (individual, NULL);
+    }
+
+  g_object_unref (mgr);
+}
diff --git a/libempathy-gtk/empathy-individual-information-dialog.h b/libempathy-gtk/empathy-individual-information-dialog.h
index aad2670..cdba07a 100644
--- a/libempathy-gtk/empathy-individual-information-dialog.h
+++ b/libempathy-gtk/empathy-individual-information-dialog.h
@@ -55,6 +55,8 @@ GType empathy_individual_information_dialog_get_type (void) G_GNUC_CONST;
 void empathy_individual_information_dialog_show (FolksIndividual *individual,
     GtkWindow *parent);
 
+void empathy_display_individual_info (FolksIndividual *individual);
+
 G_END_DECLS
 
 #endif /*  __EMPATHY_INDIVIDUAL_INFORMATION_DIALOG_H__ */
diff --git a/libempathy-gtk/empathy-individual-menu.c b/libempathy-gtk/empathy-individual-menu.c
index bd02325..5b83b29 100644
--- a/libempathy-gtk/empathy-individual-menu.c
+++ b/libempathy-gtk/empathy-individual-menu.c
@@ -26,7 +26,6 @@
 
 #include <glib/gi18n-lib.h>
 #include <gtk/gtk.h>
-#include <gio/gdesktopappinfo.h>
 
 #include <telepathy-glib/util.h>
 
@@ -38,7 +37,6 @@
 #include <libempathy/empathy-individual-manager.h>
 #include <libempathy/empathy-chatroom-manager.h>
 #include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-pkg-kit.h>
 
 #include "empathy-account-selector-dialog.h"
 #include "empathy-individual-menu.h"
@@ -1465,134 +1463,10 @@ empathy_individual_favourite_menu_item_new (FolksIndividual *individual)
 }
 
 static void
-show_gnome_contacts_error_dialog (void)
-{
-  GtkWidget *dialog;
-
-  dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
-      GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
-      _("gnome-contacts not installed"));
-
-  gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
-      _("Please install gnome-contacts to access contacts details."));
-
-  g_signal_connect_swapped (dialog, "response",
-          G_CALLBACK (gtk_widget_destroy), dialog);
-
-  gtk_widget_show (dialog);
-}
-
-static void
-start_gnome_contacts (FolksIndividual *individual,
-    gboolean try_installing);
-
-static void
-install_gnome_contacts_cb (GObject *source,
-    GAsyncResult *result,
-    gpointer user_data)
-{
-  FolksIndividual *individual = user_data;
-  GError *error = NULL;
-
-  if (!empathy_pkg_kit_install_packages_finish (result, &error))
-    {
-      DEBUG ("Failed to install gnome-contacts: %s", error->message);
-      g_error_free (error);
-
-      show_gnome_contacts_error_dialog ();
-      goto out;
-    }
-
-  DEBUG ("gnome-contacts installed");
-
-  start_gnome_contacts (individual, FALSE);
-
-out:
-  g_object_unref (individual);
-}
-
-static void
-start_gnome_contacts (FolksIndividual *individual,
-    gboolean try_installing)
-{
-  GDesktopAppInfo *desktop_info;
-  gchar *cmd;
-  GAppInfo *app_info;
-  GError *error = NULL;
-  GdkAppLaunchContext *context = NULL;
-  GdkDisplay *display;
-
-  g_return_if_fail (FOLKS_IS_INDIVIDUAL (individual));
-
-  /* Start gnome-contacts */
-  display = gdk_display_get_default ();
-  context = gdk_display_get_app_launch_context (display);
-
-  desktop_info = g_desktop_app_info_new ("gnome-contacts.desktop");
-  if (desktop_info == NULL)
-    {
-      if (try_installing)
-        {
-          const gchar *packages[] = { "gnome-contacts", NULL };
-
-          DEBUG ("gnome-contacts not installed; try to install it");
-
-          empathy_pkg_kit_install_packages_async (0, packages, NULL,
-              NULL, install_gnome_contacts_cb, g_object_ref (individual));
-        }
-      else
-        {
-          show_gnome_contacts_error_dialog ();
-        }
-
-      return;
-    }
-
-  /* glib doesn't have API to start a desktop file with args... (#637875) */
-  cmd = g_strdup_printf ("%s -i %s", g_app_info_get_commandline (
-        (GAppInfo *) desktop_info), folks_individual_get_id (individual));
-
-  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);
-      return;
-    }
-
-  if (!g_app_info_launch (app_info, NULL, (GAppLaunchContext *) context,
-        &error))
-    {
-      g_critical ("Failed to start gnome-contacts: %s", error->message);
-      g_error_free (error);
-    }
-
-  g_object_unref (desktop_info);
-  g_object_unref (app_info);
-}
-
-static void
 individual_info_menu_item_activate_cb (GtkMenuItem *item,
     FolksIndividual *individual)
 {
-  EmpathyIndividualManager *mgr;
-
-  mgr = empathy_individual_manager_dup_singleton ();
-
-  /* Only use gnome-contacts if that's a 'real' individual we got from
-   * Folks (and so the individual manager knows about it). If not that's a
-   * MUC contact and we use the simple dialog. */
-  if (empathy_individual_manager_lookup_member (mgr,
-        folks_individual_get_id (individual)) != NULL)
-    {
-      start_gnome_contacts (individual, TRUE);
-    }
-  else
-    {
-      empathy_individual_information_dialog_show (individual, NULL);
-    }
-
-  g_object_unref (mgr);
+  empathy_display_individual_info (individual);
 }
 
 static GtkWidget *



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