From 990bddfe1688861332443d89a4796a710e18ae39 Mon Sep 17 00:00:00 2001 From: Elliot Lee Date: Tue, 10 Mar 1998 02:48:02 +0000 Subject: [PATCH] Miguel, try this - I think it should do what you need. Hurry hurry :) --- gdk/gdk.c | 7 +++++++ gdk/gdkglobals.c | 2 +- gdk/gdkprivate.h | 1 + gdk/gdktypes.h | 3 +++ gdk/gdkwindow.c | 4 ++-- gdk/x11/gdkglobals-x11.c | 2 +- gdk/x11/gdkmain-x11.c | 7 +++++++ gdk/x11/gdkwindow-x11.c | 4 ++-- 8 files changed, 24 insertions(+), 6 deletions(-) diff --git a/gdk/gdk.c b/gdk/gdk.c index 0d69a33ea..5f97e0347 100644 --- 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); diff --git a/gdk/gdkglobals.c b/gdk/gdkglobals.c index ec1ecf312..e6644bb60 100644 --- a/gdk/gdkglobals.c +++ b/gdk/gdkglobals.c @@ -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; diff --git a/gdk/gdkprivate.h b/gdk/gdkprivate.h index 0d0054b45..481811ef0 100644 --- a/gdk/gdkprivate.h +++ b/gdk/gdkprivate.h @@ -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; diff --git a/gdk/gdktypes.h b/gdk/gdktypes.h index 8d82f599d..931fdf78b 100644 --- a/gdk/gdktypes.h +++ b/gdk/gdktypes.h @@ -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 diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 5a1524470..579b9703b 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -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)) diff --git a/gdk/x11/gdkglobals-x11.c b/gdk/x11/gdkglobals-x11.c index ec1ecf312..e6644bb60 100644 --- a/gdk/x11/gdkglobals-x11.c +++ b/gdk/x11/gdkglobals-x11.c @@ -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; diff --git a/gdk/x11/gdkmain-x11.c b/gdk/x11/gdkmain-x11.c index 0d69a33ea..5f97e0347 100644 --- a/gdk/x11/gdkmain-x11.c +++ b/gdk/x11/gdkmain-x11.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); diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index 5a1524470..579b9703b 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -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)) -- 2.43.2