[empathy: 2/4] DnD: add a new text/path-list target in chat window



commit c7085dce8076c1e98049adc7dbcb593b16ac5df8
Author: Olivier Le Thanh Duong <olivier lethanh be>
Date:   Fri Mar 5 00:45:01 2010 +0100

    DnD: add a new text/path-list target in chat window
    
    add a new text/path-list drop target to the chat window, it act like
    the text/uri-list target but is prioritized over it. This is mainly to
    circumvent Tomboy returning note:// uri in its uri-list.

 src/empathy-chat-window.c |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)
---
diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c
index 8a5d503..7419a72 100644
--- a/src/empathy-chat-window.c
+++ b/src/empathy-chat-window.c
@@ -119,6 +119,7 @@ static const GtkTargetEntry drag_types_dest[] = {
 	{ "text/contact-id", 0, DND_DRAG_TYPE_CONTACT_ID },
 	{ "GTK_NOTEBOOK_TAB", GTK_TARGET_SAME_APP, DND_DRAG_TYPE_TAB },
 	{ "text/uri-list", 0, DND_DRAG_TYPE_URI_LIST },
+	{ "text/path-list", 0, DND_DRAG_TYPE_URI_LIST },
 };
 
 static const GtkTargetEntry drag_types_dest_contact[] = {
@@ -126,6 +127,9 @@ static const GtkTargetEntry drag_types_dest_contact[] = {
 };
 
 static const GtkTargetEntry drag_types_dest_file[] = {
+	/* must be first to be prioritized, in order to receive the
+	 * note's file path from Tomboy instead of an URI */
+	{ "text/path-list", 0, DND_DRAG_TYPE_URI_LIST },
 	{ "text/uri-list", 0, DND_DRAG_TYPE_URI_LIST },
 };
 
@@ -1537,15 +1541,18 @@ chat_window_drag_drop (GtkWidget        *widget,
 			 int               x,
 			 int               y,
 			 guint             time_,
-			 gpointer          user_data)
+			 EmpathyChatWindow *window)
 {
-	GdkAtom target, uri_target, contact_target;
+	GdkAtom target;
+	EmpathyChatWindowPriv *priv;
 
-	target = gtk_drag_dest_find_target (widget, context, NULL);
-	uri_target = gdk_atom_intern_static_string ("text/uri-list");
-	contact_target = gdk_atom_intern_static_string ("text/contact-id");
+	priv = GET_PRIV (window);
 
-	if (target == uri_target || target == contact_target) {
+	target = gtk_drag_dest_find_target (widget, context, priv->file_targets);
+	if (target == GDK_NONE)
+		target = gtk_drag_dest_find_target (widget, context, priv->contact_targets);
+
+	if (target != GDK_NONE) {
 		gtk_drag_get_data (widget, context, target, time_);
 		return TRUE;
 	}



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