]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-persona-view.c
individual_view_drag_end: remove the auto scroll
[empathy.git] / libempathy-gtk / empathy-persona-view.c
index a037465387583be076a4bc9337fe47db480f2c7b..7df94a630ea1871b692315b54ab200162d05b806 100644 (file)
@@ -46,7 +46,6 @@
 #include "empathy-cell-renderer-text.h"
 #include "empathy-cell-renderer-activatable.h"
 #include "empathy-gtk-enum-types.h"
-#include "empathy-gtk-marshal.h"
 #include "empathy-ui-utils.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
@@ -84,30 +83,30 @@ enum
   PROP_FEATURES,
 };
 
-enum DndDragType
+typedef enum
 {
-  DND_DRAG_TYPE_INDIVIDUAL_ID,
+  DND_DRAG_TYPE_UNKNOWN = -1,
+  DND_DRAG_TYPE_INDIVIDUAL_ID = 0,
   DND_DRAG_TYPE_PERSONA_ID,
   DND_DRAG_TYPE_STRING,
-};
+} DndDragType;
 
 #define DRAG_TYPE(T,I) \
   { (gchar *) T, 0, I }
 
 static const GtkTargetEntry drag_types_dest[] = {
-  DRAG_TYPE ("text/individual-id", DND_DRAG_TYPE_INDIVIDUAL_ID),
+  DRAG_TYPE ("text/x-individual-id", DND_DRAG_TYPE_INDIVIDUAL_ID),
   DRAG_TYPE ("text/plain", DND_DRAG_TYPE_STRING),
   DRAG_TYPE ("STRING", DND_DRAG_TYPE_STRING),
 };
 
 static const GtkTargetEntry drag_types_source[] = {
-  DRAG_TYPE ("text/persona-id", DND_DRAG_TYPE_PERSONA_ID),
+  DRAG_TYPE ("text/x-persona-id", DND_DRAG_TYPE_PERSONA_ID),
 };
 
 #undef DRAG_TYPE
 
 static GdkAtom drag_atoms_dest[G_N_ELEMENTS (drag_types_dest)];
-static GdkAtom drag_atoms_source[G_N_ELEMENTS (drag_types_source)];
 
 enum
 {
@@ -174,6 +173,7 @@ query_tooltip_cb (EmpathyPersonaView *self,
 {
   EmpathyPersonaViewPriv *priv = GET_PRIV (self);
   FolksPersona *persona;
+  TpContact *tp_contact;
   EmpathyContact *contact;
   GtkTreeModel *model;
   GtkTreeIter iter;
@@ -201,8 +201,14 @@ query_tooltip_cb (EmpathyPersonaView *self,
   if (persona == NULL)
     goto OUT;
 
-  contact = empathy_contact_dup_from_tp_contact (tpf_persona_get_contact (
-      TPF_PERSONA (persona)));
+  tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
+  if (tp_contact == NULL)
+    {
+      g_clear_object (&persona);
+      goto OUT;
+    }
+
+  contact = empathy_contact_dup_from_tp_contact (tp_contact);
 
   if (priv->tooltip_widget == NULL)
     {
@@ -354,14 +360,11 @@ individual_drag_received (EmpathyPersonaView *self,
     GdkDragContext *context,
     GtkSelectionData *selection)
 {
-  EmpathyPersonaViewPriv *priv;
   EmpathyIndividualManager *manager = NULL;
   FolksIndividual *individual;
   const gchar *individual_id;
   gboolean success = FALSE;
 
-  priv = GET_PRIV (self);
-
   individual_id = (const gchar *) gtk_selection_data_get_data (selection);
   manager = empathy_individual_manager_dup_singleton ();
   individual = empathy_individual_manager_lookup_member (manager,
@@ -410,14 +413,23 @@ drag_motion (GtkWidget *widget,
     guint time_)
 {
   EmpathyPersonaView *self = EMPATHY_PERSONA_VIEW (widget);
-  EmpathyPersonaViewPriv *priv;
   GdkAtom target;
-
-  priv = GET_PRIV (self);
+  guint i;
+  DndDragType drag_type = DND_DRAG_TYPE_UNKNOWN;
 
   target = gtk_drag_dest_find_target (GTK_WIDGET (self), context, NULL);
 
-  if (target == drag_atoms_dest[DND_DRAG_TYPE_INDIVIDUAL_ID])
+  /* Determine the DndDragType of the data */
+  for (i = 0; i < G_N_ELEMENTS (drag_atoms_dest); i++)
+    {
+      if (target == drag_atoms_dest[i])
+        {
+          drag_type = drag_types_dest[i].info;
+          break;
+        }
+    }
+
+  if (drag_type == DND_DRAG_TYPE_INDIVIDUAL_ID)
     {
       GtkTreePath *path;
 
@@ -452,21 +464,19 @@ drag_data_get (GtkWidget *widget,
     guint time_)
 {
   EmpathyPersonaView *self = EMPATHY_PERSONA_VIEW (widget);
-  EmpathyPersonaViewPriv *priv;
   FolksPersona *persona;
   const gchar *persona_uid;
 
   if (info != DND_DRAG_TYPE_PERSONA_ID)
     return;
 
-  priv = GET_PRIV (self);
-
   persona = empathy_persona_view_dup_selected (self);
   if (persona == NULL)
     return;
 
   persona_uid = folks_persona_get_uid (persona);
-  gtk_selection_data_set (selection, drag_atoms_source[info], 8,
+  gtk_selection_data_set (selection,
+      gdk_atom_intern ("text/x-persona-id", FALSE), 8,
       (guchar *) persona_uid, strlen (persona_uid) + 1);
 
   g_object_unref (persona);
@@ -614,9 +624,6 @@ constructed (GObject *object)
   /* Drag & Drop. */
   for (i = 0; i < G_N_ELEMENTS (drag_types_dest); ++i)
     drag_atoms_dest[i] = gdk_atom_intern (drag_types_dest[i].target, FALSE);
-
-  for (i = 0; i < G_N_ELEMENTS (drag_types_source); ++i)
-    drag_atoms_source[i] = gdk_atom_intern (drag_types_source[i].target, FALSE);
 }
 
 static void
@@ -707,7 +714,7 @@ empathy_persona_view_class_init (EmpathyPersonaViewClass *klass)
       G_SIGNAL_RUN_LAST,
       G_STRUCT_OFFSET (EmpathyPersonaViewClass, drag_individual_received),
       NULL, NULL,
-      _empathy_gtk_marshal_BOOLEAN__UINT_OBJECT,
+      g_cclosure_marshal_generic,
       G_TYPE_BOOLEAN, 2, G_TYPE_UINT, FOLKS_TYPE_INDIVIDUAL);
 
   /* We override the "model" property so that we can wrap it in a
@@ -779,7 +786,6 @@ empathy_persona_view_new (EmpathyPersonaStore *store,
 FolksPersona *
 empathy_persona_view_dup_selected (EmpathyPersonaView *self)
 {
-  EmpathyPersonaViewPriv *priv;
   GtkTreeSelection *selection;
   GtkTreeIter iter;
   GtkTreeModel *model;
@@ -787,8 +793,6 @@ empathy_persona_view_dup_selected (EmpathyPersonaView *self)
 
   g_return_val_if_fail (EMPATHY_IS_PERSONA_VIEW (self), NULL);
 
-  priv = GET_PRIV (self);
-
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self));
   if (!gtk_tree_selection_get_selected (selection, &model, &iter))
     return NULL;