gtk+ r22522 - in trunk: . gdk/win32
- From: tml svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r22522 - in trunk: . gdk/win32
- Date: Wed, 11 Mar 2009 14:09:13 +0000 (UTC)
Author: tml
Date: Wed Mar 11 14:09:13 2009
New Revision: 22522
URL: http://svn.gnome.org/viewvc/gtk+?rev=22522&view=rev
Log:
2009-03-11 Tor Lillqvist <tml iki fi>
Bug 573067 - Intra-app dnd of text behavior on Windows is wrong
* gdk/win32/gdkdnd-win32.c (local_send_motion) (gdk_drag_motion):
The default action should be move, not copy. Tweak how the
GdkDragAction fields in GdkDragContexts are changed. Seems to help
the problem.
Add more debugging printout for --gdk-debug=dnd to many functions.
* gdk/win32/gdkmain-win32.c
* gdk/win32/gdkprivate-win32.h: (_gdk_win32_drag_protocol_to_string)
(_gdk_win32_drag_action_to_string): New functions for use in
debugging printouts.
Modified:
trunk/ChangeLog
trunk/gdk/win32/gdkdnd-win32.c
trunk/gdk/win32/gdkmain-win32.c
trunk/gdk/win32/gdkprivate-win32.h
Modified: trunk/gdk/win32/gdkdnd-win32.c
==============================================================================
--- trunk/gdk/win32/gdkdnd-win32.c (original)
+++ trunk/gdk/win32/gdkdnd-win32.c Wed Mar 11 14:09:13 2009
@@ -1080,6 +1080,10 @@
{
GdkEvent tmp_event;
+ GDK_NOTE (DND, g_print ("local_send_leave: context=%p current_dest_drag=%p\n",
+ context,
+ current_dest_drag));
+
if ((current_dest_drag != NULL) &&
(current_dest_drag->protocol == GDK_DRAG_PROTO_LOCAL) &&
(current_dest_drag->source_window == context->source_window))
@@ -1105,6 +1109,10 @@
GdkDragContextPrivateWin32 *private;
GdkDragContext *new_context;
+ GDK_NOTE (DND, g_print ("local_send_enter: context=%p current_dest_drag=%p\n",
+ context,
+ current_dest_drag));
+
private = PRIVATE_DATA (context);
if (current_dest_drag != NULL)
@@ -1149,6 +1157,10 @@
{
GdkEvent tmp_event;
+ GDK_NOTE (DND, g_print ("local_send_motion: context=%p current_dest_drag=%p\n",
+ context,
+ current_dest_drag));
+
if ((current_dest_drag != NULL) &&
(current_dest_drag->protocol == GDK_DRAG_PROTO_LOCAL) &&
(current_dest_drag->source_window == context->source_window))
@@ -1160,7 +1172,6 @@
tmp_event.dnd.time = time;
current_dest_drag->suggested_action = action;
- current_dest_drag->actions = current_dest_drag->suggested_action;
tmp_event.dnd.x_root = x_root;
tmp_event.dnd.y_root = y_root;
@@ -1179,7 +1190,11 @@
guint32 time)
{
GdkEvent tmp_event;
-
+
+ GDK_NOTE (DND, g_print ("local_send_drop: context=%p current_dest_drag=%p\n",
+ context,
+ current_dest_drag));
+
if ((current_dest_drag != NULL) &&
(current_dest_drag->protocol == GDK_DRAG_PROTO_LOCAL) &&
(current_dest_drag->source_window == context->source_window))
@@ -1417,11 +1432,36 @@
g_return_val_if_fail (context != NULL, FALSE);
- GDK_NOTE (DND, g_print ("gdk_drag_motion\n"));
+ context->actions = possible_actions;
+
+ GDK_NOTE (DND, g_print ("gdk_drag_motion: protocol=%s\n"
+ " suggested_action=%s, possible_actions=%s\n"
+ " context=%p:actions=%s, suggested_action=%s, action=%s\n",
+ _gdk_win32_drag_protocol_to_string (protocol),
+ _gdk_win32_drag_action_to_string (suggested_action),
+ _gdk_win32_drag_action_to_string (possible_actions),
+ context,
+ _gdk_win32_drag_action_to_string (context->actions),
+ _gdk_win32_drag_action_to_string (context->suggested_action),
+ _gdk_win32_drag_action_to_string (context->action)));
+
private = PRIVATE_DATA (context);
- if (context->dest_window != dest_window)
+ if (context->dest_window == dest_window)
+ {
+ GdkDragContext *dest_context;
+
+ dest_context = gdk_drag_context_find (FALSE,
+ context->source_window,
+ dest_window);
+
+ if (dest_context)
+ dest_context->actions = context->actions;
+
+ context->suggested_action = suggested_action;
+ }
+ else
{
GdkEvent temp_event;
@@ -1469,10 +1509,6 @@
gdk_event_put (&temp_event);
}
- else
- {
- context->suggested_action = suggested_action;
- }
/* Send a drag-motion event */
@@ -1498,9 +1534,23 @@
}
}
else
- return TRUE;
+ {
+ GDK_NOTE (DND, g_print (" returning TRUE\n"
+ " context=%p:actions=%s, suggested_action=%s, action=%s\n",
+ context,
+ _gdk_win32_drag_action_to_string (context->actions),
+ _gdk_win32_drag_action_to_string (context->suggested_action),
+ _gdk_win32_drag_action_to_string (context->action)));
+ return TRUE;
+ }
}
+ GDK_NOTE (DND, g_print (" returning FALSE\n"
+ " context=%p:actions=%s, suggested_action=%s, action=%s\n",
+ context,
+ _gdk_win32_drag_action_to_string (context->actions),
+ _gdk_win32_drag_action_to_string (context->suggested_action),
+ _gdk_win32_drag_action_to_string (context->action)));
return FALSE;
}
@@ -1558,6 +1608,14 @@
private = PRIVATE_DATA (context);
+ GDK_NOTE (DND, g_print ("gdk_drag_status: action=%s\n"
+ " context=%p:actions=%s, suggested_action=%s, action=%s\n",
+ _gdk_win32_drag_action_to_string (action),
+ context,
+ _gdk_win32_drag_action_to_string (context->actions),
+ _gdk_win32_drag_action_to_string (context->suggested_action),
+ _gdk_win32_drag_action_to_string (context->action)));
+
context->action = action;
src_context = gdk_drag_context_find (TRUE,
Modified: trunk/gdk/win32/gdkmain-win32.c
==============================================================================
--- trunk/gdk/win32/gdkmain-win32.c (original)
+++ trunk/gdk/win32/gdkmain-win32.c Wed Mar 11 14:09:13 2009
@@ -478,6 +478,26 @@
}
gchar *
+_gdk_win32_drag_protocol_to_string (GdkDragProtocol protocol)
+{
+ switch (protocol)
+ {
+#define CASE(x) case GDK_DRAG_PROTO_##x: return #x
+ CASE (MOTIF);
+ CASE (XDND);
+ CASE (ROOTWIN);
+ CASE (NONE);
+ CASE (WIN32_DROPFILES);
+ CASE (OLE2);
+ CASE (LOCAL);
+#undef CASE
+ default: return static_printf ("illegal_%d", protocol);
+ }
+ /* NOTREACHED */
+ return NULL;
+}
+
+gchar *
_gdk_win32_gcvalues_mask_to_string (GdkGCValuesMask mask)
{
gchar buf[400];
@@ -657,6 +677,30 @@
}
gchar *
+_gdk_win32_drag_action_to_string (GdkDragAction actions)
+{
+ gchar buf[100];
+ gchar *bufp = buf;
+ gchar *s = "";
+
+ buf[0] = '\0';
+
+#define BIT(x) \
+ if (actions & GDK_ACTION_ ## x) \
+ (bufp += sprintf (bufp, "%s" #x, s), s = "|")
+
+ BIT (DEFAULT);
+ BIT (COPY);
+ BIT (MOVE);
+ BIT (LINK);
+ BIT (PRIVATE);
+ BIT (ASK);
+#undef BIT
+
+ return static_printf ("%s", buf);
+}
+
+gchar *
_gdk_win32_rop2_to_string (int rop2)
{
switch (rop2)
Modified: trunk/gdk/win32/gdkprivate-win32.h
==============================================================================
--- trunk/gdk/win32/gdkprivate-win32.h (original)
+++ trunk/gdk/win32/gdkprivate-win32.h Wed Mar 11 14:09:13 2009
@@ -314,11 +314,13 @@
gchar *_gdk_win32_function_to_string (GdkFunction function);
gchar *_gdk_win32_join_style_to_string (GdkJoinStyle join_style);
gchar *_gdk_win32_line_style_to_string (GdkLineStyle line_style);
+gchar *_gdk_win32_drag_protocol_to_string (GdkDragProtocol protocol);
gchar *_gdk_win32_gcvalues_mask_to_string (GdkGCValuesMask mask);
gchar *_gdk_win32_window_state_to_string (GdkWindowState state);
gchar *_gdk_win32_window_style_to_string (LONG style);
gchar *_gdk_win32_window_exstyle_to_string (LONG style);
gchar *_gdk_win32_window_pos_bits_to_string (UINT flags);
+gchar *_gdk_win32_drag_action_to_string (GdkDragAction actions);
gchar *_gdk_win32_drawable_description (GdkDrawable *d);
gchar *_gdk_win32_rop2_to_string (int rop2);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]