aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy-gtk/empathy-contact-list-view.c18
-rw-r--r--libempathy-gtk/empathy-individual-view.c37
-rw-r--r--libempathy-gtk/empathy-persona-view.c28
3 files changed, 43 insertions, 40 deletions
diff --git a/libempathy-gtk/empathy-contact-list-view.c b/libempathy-gtk/empathy-contact-list-view.c
index 0b7cabd91..dace4f909 100644
--- a/libempathy-gtk/empathy-contact-list-view.c
+++ b/libempathy-gtk/empathy-contact-list-view.c
@@ -112,9 +112,6 @@ static const GtkTargetEntry drag_types_source[] = {
{ "text/contact-id", 0, DND_DRAG_TYPE_CONTACT_ID },
};
-static GdkAtom drag_atoms_dest[G_N_ELEMENTS (drag_types_dest)];
-static GdkAtom drag_atoms_source[G_N_ELEMENTS (drag_types_source)];
-
enum {
DRAG_CONTACT_RECEIVED,
LAST_SIGNAL
@@ -761,7 +758,8 @@ contact_list_view_drag_data_get (GtkWidget *widget,
str = g_strconcat (account_id, ":", contact_id, NULL);
if (info == DND_DRAG_TYPE_CONTACT_ID) {
- gtk_selection_data_set (selection, drag_atoms_source[info], 8,
+ gtk_selection_data_set (selection,
+ gdk_atom_intern ("text/contact-id", FALSE), 8,
(guchar *) str, strlen (str) + 1);
}
@@ -1506,7 +1504,6 @@ contact_list_view_constructed (GObject *object)
EmpathyContactListViewPriv *priv = GET_PRIV (view);
GtkCellRenderer *cell;
GtkTreeViewColumn *col;
- guint i;
priv->filter = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (
GTK_TREE_MODEL (priv->store), NULL));
@@ -1638,17 +1635,6 @@ contact_list_view_constructed (GObject *object)
/* Actually add the column now we have added all cell renderers */
gtk_tree_view_append_column (GTK_TREE_VIEW (view), col);
-
- /* 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
diff --git a/libempathy-gtk/empathy-individual-view.c b/libempathy-gtk/empathy-individual-view.c
index 634c391a8..aad46c5bf 100644
--- a/libempathy-gtk/empathy-individual-view.c
+++ b/libempathy-gtk/empathy-individual-view.c
@@ -116,13 +116,14 @@ enum
/* TODO: re-add DRAG_TYPE_CONTACT_ID, for the case that we're dragging around
* specific EmpathyContacts (between/in/out of Individuals) */
-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_URI_LIST,
DND_DRAG_TYPE_STRING,
-};
+} DndDragType;
#define DRAG_TYPE(T,I) \
{ (gchar *) T, 0, I }
@@ -143,7 +144,6 @@ static const GtkTargetEntry drag_types_source[] = {
#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
{
@@ -598,6 +598,8 @@ individual_view_drag_motion (GtkWidget *widget,
gboolean cleanup = TRUE;
gboolean retval = TRUE;
GtkAllocation allocation;
+ guint i;
+ DndDragType drag_type = DND_DRAG_TYPE_UNKNOWN;
priv = GET_PRIV (EMPATHY_INDIVIDUAL_VIEW (widget));
model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
@@ -649,8 +651,18 @@ individual_view_drag_motion (GtkWidget *widget,
target = gtk_drag_dest_find_target (widget, context, NULL);
gtk_tree_model_get_iter (model, &iter, path);
- if (target == drag_atoms_dest[DND_DRAG_TYPE_URI_LIST] ||
- target == drag_atoms_dest[DND_DRAG_TYPE_STRING])
+ /* 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_URI_LIST ||
+ drag_type == DND_DRAG_TYPE_STRING)
{
/* This is a file drag, and it can only be dropped on contacts,
* not groups.
@@ -695,10 +707,10 @@ individual_view_drag_motion (GtkWidget *widget,
if (individual != NULL)
g_object_unref (individual);
}
- else if ((target == drag_atoms_dest[DND_DRAG_TYPE_INDIVIDUAL_ID] &&
+ else if ((drag_type == DND_DRAG_TYPE_INDIVIDUAL_ID &&
(priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_CHANGE ||
priv->drag_row == NULL)) ||
- (target == drag_atoms_dest[DND_DRAG_TYPE_PERSONA_ID] &&
+ (drag_type == DND_DRAG_TYPE_PERSONA_ID &&
priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_PERSONA_DROP))
{
/* If target != GDK_NONE, then we have a contact (individual or persona)
@@ -843,7 +855,8 @@ individual_view_drag_data_get (GtkWidget *widget,
if (info == DND_DRAG_TYPE_INDIVIDUAL_ID)
{
- gtk_selection_data_set (selection, drag_atoms_source[info], 8,
+ gtk_selection_data_set (selection,
+ gdk_atom_intern ("text/individual-id", FALSE), 8,
(guchar *) individual_id, strlen (individual_id) + 1);
}
@@ -1923,12 +1936,6 @@ individual_view_constructed (GObject *object)
{
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
diff --git a/libempathy-gtk/empathy-persona-view.c b/libempathy-gtk/empathy-persona-view.c
index 289f6fac9..6d1629651 100644
--- a/libempathy-gtk/empathy-persona-view.c
+++ b/libempathy-gtk/empathy-persona-view.c
@@ -84,12 +84,13 @@ 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 }
@@ -107,7 +108,6 @@ static const GtkTargetEntry drag_types_source[] = {
#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
{
@@ -408,10 +408,22 @@ drag_motion (GtkWidget *widget,
{
EmpathyPersonaView *self = EMPATHY_PERSONA_VIEW (widget);
GdkAtom target;
+ 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;
@@ -457,7 +469,8 @@ drag_data_get (GtkWidget *widget,
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/persona-id", FALSE), 8,
(guchar *) persona_uid, strlen (persona_uid) + 1);
g_object_unref (persona);
@@ -605,9 +618,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