]> Pileus Git - ~andy/gtk/commitdiff
Miguel, try this - I think it should do what you need. Hurry hurry :)
authorElliot Lee <sopwith@src.gnome.org>
Tue, 10 Mar 1998 02:48:02 +0000 (02:48 +0000)
committerElliot Lee <sopwith@src.gnome.org>
Tue, 10 Mar 1998 02:48:02 +0000 (02:48 +0000)
gdk/gdk.c
gdk/gdkglobals.c
gdk/gdkprivate.h
gdk/gdktypes.h
gdk/gdkwindow.c
gdk/x11/gdkglobals-x11.c
gdk/x11/gdkmain-x11.c
gdk/x11/gdkwindow-x11.c

index 0d69a33ea70531a9154faa2ce993fe2729bd61ed..5f97e034726963fe737d6d4b830a2203e8413b95 100644 (file)
--- a/gdk/gdk.c
+++ b/gdk/gdk.c
@@ -1976,6 +1976,7 @@ gdk_event_translate (GdkEvent *event,
       event->button.source = GDK_SOURCE_MOUSE;
       event->button.deviceid = GDK_CORE_POINTER;
 
+      gdk_dnd.last_drop_time = xevent->xbutton.time;
       if(gdk_dnd.drag_perhaps)
        {
          {
@@ -2806,6 +2807,11 @@ gdk_event_translate (GdkEvent *event,
            g_print("GDK_DROP_DATA_AVAIL\n");
 #endif   
            event->dropdataavailable.u.allflags = xevent->xclient.data.l[1];
+           event->dropdataavailable.timestamp = xevent->xclient.data.l[4];
+           event->dropdataavailable.coords.x =
+                       xevent->xclient.data.l[3] & 0xffff;
+           event->dropdataavailable.coords.y =
+                       (xevent->xclient.data.l[3] >> 16) & 0xffff;
            if(window
               /* No preview of data ATM */
               && event->dropdataavailable.u.flags.isdrop)
@@ -3769,6 +3775,7 @@ gdk_dnd_drag_end (Window     dest,
        {
          tev.window = (GdkWindow *) wp;
          tev.u.flags.delete_data = wp->dnd_drag_destructive_op;
+          tev.timestamp = gdk_dnd.last_drop_time;
          tev.data_type = 
                gdk_atom_name(wp->dnd_drag_data_type);
 
index ec1ecf31226d37f66fdfd06d430231e25e6824a5..e6644bb6005c72c4e8960f2b5c06f58cdf63d8a8 100644 (file)
@@ -45,7 +45,7 @@ GdkDndGlobals     gdk_dnd = {None,None,None,
                             None,
                             {0,0},
                             {0,0}, {0,0},
-                            {0,0,0,0}, NULL, None};
+                            {0,0,0,0}, NULL, None, 0};
 gchar            *gdk_progname = NULL;
 gchar            *gdk_progclass = NULL;
 gint              gdk_error_code;
index 0d0054b45e815b3e6ed7630ce2674a643487277b..481811ef0c06dbabdb03aeee61d59bd4df8b491f 100644 (file)
@@ -165,6 +165,7 @@ struct _GdkDndGlobals {
   GdkRectangle dnd_drag_dropzone;
   GdkWindowPrivate *real_sw;
   Window dnd_drag_curwin;
+  Time last_drop_time; /* An incredible hack, sosumi miguel */
 };
 typedef struct _GdkDndGlobals GdkDndGlobals;
 
index 8d82f599d1bd27976a7403210389f866e573f885..931fdf78b0e6949bb77b7f4af5073a38bb2e58f5 100644 (file)
@@ -1064,6 +1064,7 @@ struct _GdkEventDragRequest
 
   GdkPoint drop_coords;
   gchar *data_type;
+  guint32 timestamp;
 };
 
 struct _GdkEventDragBegin
@@ -1129,6 +1130,8 @@ struct _GdkEventDropDataAvailable
   gchar *data_type; /* MIME type */
   gulong data_numbytes;
   gpointer data;
+  guint32 timestamp;
+  GdkPoint coords;
 };
 
 struct _GdkEventClient
index 5a1524470be723a45d5f841882281c45d48613fb..579b9703b113d2298ea21d52d540fbdc10db8f0f 100644 (file)
@@ -1549,8 +1549,8 @@ gdk_window_dnd_data_set (GdkWindow       *window,
       (event->dragrequest.drop_coords.y << 16);
   else
     sev.xclient.data.l[3] = 0;
-  
-  sev.xclient.data.l[4] = 0;
+
+  sev.xclient.data.l[4] = event->dragrequest.timestamp;
 
   if (!gdk_send_xevent (event->dragrequest.requestor, False,
                       NoEventMask, &sev))
index ec1ecf31226d37f66fdfd06d430231e25e6824a5..e6644bb6005c72c4e8960f2b5c06f58cdf63d8a8 100644 (file)
@@ -45,7 +45,7 @@ GdkDndGlobals     gdk_dnd = {None,None,None,
                             None,
                             {0,0},
                             {0,0}, {0,0},
-                            {0,0,0,0}, NULL, None};
+                            {0,0,0,0}, NULL, None, 0};
 gchar            *gdk_progname = NULL;
 gchar            *gdk_progclass = NULL;
 gint              gdk_error_code;
index 0d69a33ea70531a9154faa2ce993fe2729bd61ed..5f97e034726963fe737d6d4b830a2203e8413b95 100644 (file)
@@ -1976,6 +1976,7 @@ gdk_event_translate (GdkEvent *event,
       event->button.source = GDK_SOURCE_MOUSE;
       event->button.deviceid = GDK_CORE_POINTER;
 
+      gdk_dnd.last_drop_time = xevent->xbutton.time;
       if(gdk_dnd.drag_perhaps)
        {
          {
@@ -2806,6 +2807,11 @@ gdk_event_translate (GdkEvent *event,
            g_print("GDK_DROP_DATA_AVAIL\n");
 #endif   
            event->dropdataavailable.u.allflags = xevent->xclient.data.l[1];
+           event->dropdataavailable.timestamp = xevent->xclient.data.l[4];
+           event->dropdataavailable.coords.x =
+                       xevent->xclient.data.l[3] & 0xffff;
+           event->dropdataavailable.coords.y =
+                       (xevent->xclient.data.l[3] >> 16) & 0xffff;
            if(window
               /* No preview of data ATM */
               && event->dropdataavailable.u.flags.isdrop)
@@ -3769,6 +3775,7 @@ gdk_dnd_drag_end (Window     dest,
        {
          tev.window = (GdkWindow *) wp;
          tev.u.flags.delete_data = wp->dnd_drag_destructive_op;
+          tev.timestamp = gdk_dnd.last_drop_time;
          tev.data_type = 
                gdk_atom_name(wp->dnd_drag_data_type);
 
index 5a1524470be723a45d5f841882281c45d48613fb..579b9703b113d2298ea21d52d540fbdc10db8f0f 100644 (file)
@@ -1549,8 +1549,8 @@ gdk_window_dnd_data_set (GdkWindow       *window,
       (event->dragrequest.drop_coords.y << 16);
   else
     sev.xclient.data.l[3] = 0;
-  
-  sev.xclient.data.l[4] = 0;
+
+  sev.xclient.data.l[4] = event->dragrequest.timestamp;
 
   if (!gdk_send_xevent (event->dragrequest.requestor, False,
                       NoEventMask, &sev))