#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
#include <libempathy/empathy-debug.h>
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
{
{
EmpathyPersonaViewPriv *priv = GET_PRIV (self);
FolksPersona *persona;
+ TpContact *tp_contact;
EmpathyContact *contact;
GtkTreeModel *model;
GtkTreeIter iter;
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)
{
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,
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;
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);
/* 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
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
FolksPersona *
empathy_persona_view_dup_selected (EmpathyPersonaView *self)
{
- EmpathyPersonaViewPriv *priv;
GtkTreeSelection *selection;
GtkTreeIter iter;
GtkTreeModel *model;
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;