]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-individual-view.c
Merge branch 'folks-async-and-prepare'
[empathy.git] / libempathy-gtk / empathy-individual-view.c
index 3f8d1dd11ca51521a9174a134573ba057fda8337..7083b238b6973edbf10c846890173ada095e2159 100644 (file)
@@ -143,9 +143,6 @@ individual_view_is_visible_individual (EmpathyIndividualView *self,
   EmpathyIndividualViewPriv *priv = GET_PRIV (self);
   EmpathyLiveSearch *live = EMPATHY_LIVE_SEARCH (priv->search_widget);
   const gchar *str;
-  const gchar *p;
-  gchar *dup_str = NULL;
-  gboolean visible;
   GList *personas, *l;
 
   g_assert (live != NULL);
@@ -159,6 +156,10 @@ individual_view_is_visible_individual (EmpathyIndividualView *self,
   personas = folks_individual_get_personas (individual);
   for (l = personas; l; l = l->next)
     {
+      const gchar *p;
+      gchar *dup_str = NULL;
+      gboolean visible;
+
       str = folks_persona_get_uid (l->data);
       p = strstr (str, "@");
       if (p != NULL)
@@ -242,8 +243,7 @@ individual_view_tooltip_destroy_cb (GtkWidget *widget,
   if (priv->tooltip_widget != NULL)
     {
       DEBUG ("Tooltip destroyed");
-      g_object_unref (priv->tooltip_widget);
-      priv->tooltip_widget = NULL;
+      tp_clear_object (&priv->tooltip_widget);
     }
 }
 
@@ -319,6 +319,22 @@ OUT:
   return ret;
 }
 
+static void
+groups_change_group_cb (GObject *source,
+    GAsyncResult *result,
+    gpointer user_data)
+{
+  FolksGroups *groups = FOLKS_GROUPS (source);
+  GError *error = NULL;
+
+  folks_groups_change_group_finish (groups, result, &error);
+  if (error != NULL)
+    {
+      g_warning ("failed to change group: %s", error->message);
+      g_clear_error (&error);
+    }
+}
+
 static void
 individual_view_handle_drag (EmpathyIndividualView *self,
     FolksIndividual *individual,
@@ -349,10 +365,12 @@ individual_view_handle_drag (EmpathyIndividualView *self,
     }
 
   if (new_group != NULL)
-    folks_groups_change_group (FOLKS_GROUPS (individual), new_group, TRUE);
+    folks_groups_change_group (FOLKS_GROUPS (individual), new_group, TRUE,
+        groups_change_group_cb, NULL);
 
   if (old_group != NULL && action == GDK_ACTION_MOVE)
-    folks_groups_change_group (FOLKS_GROUPS (individual), old_group, FALSE);
+    folks_groups_change_group (FOLKS_GROUPS (individual), old_group, FALSE,
+        groups_change_group_cb, NULL);
 }
 
 static gboolean
@@ -625,12 +643,23 @@ individual_view_drag_motion (GtkWidget *widget,
          not groups.
        */
       FolksIndividual *individual;
+      EmpathyCapabilities caps = EMPATHY_CAPABILITIES_NONE;
+
       gtk_tree_model_get (model, &iter,
           EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual, -1);
+      if (individual != NULL)
+        {
+          EmpathyContact *contact = NULL;
+
+          contact = empathy_contact_dup_from_folks_individual (individual);
+          caps = empathy_contact_get_capabilities (contact);
+
+          tp_clear_object (&contact);
+        }
+
       if (individual != NULL &&
           folks_individual_is_online (individual) &&
-          (folks_individual_get_capabilities (individual) &
-              FOLKS_CAPABILITIES_FLAGS_FILE_TRANSFER))
+          (caps & EMPATHY_CAPABILITIES_FT))
         {
           gdk_drag_status (context, GDK_ACTION_COPY, time_);
           gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget),