diff options
author | Elliot Lee <sopwith@src.gnome.org> | 1998-03-10 02:48:02 +0000 |
---|---|---|
committer | Elliot Lee <sopwith@src.gnome.org> | 1998-03-10 02:48:02 +0000 |
commit | 990bddfe1688861332443d89a4796a710e18ae39 (patch) | |
tree | 059823ad33a112308f6b4146e50b65aa14bd896d /gdk | |
parent | 239a12d0d140ad98ac7c85f7aa46411291250dda (diff) | |
download | gtk+-990bddfe1688861332443d89a4796a710e18ae39.tar.gz |
Miguel, try this - I think it should do what you need. Hurry hurry :)
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/gdk.c | 7 | ||||
-rw-r--r-- | gdk/gdkglobals.c | 2 | ||||
-rw-r--r-- | gdk/gdkprivate.h | 1 | ||||
-rw-r--r-- | gdk/gdktypes.h | 3 | ||||
-rw-r--r-- | gdk/gdkwindow.c | 4 | ||||
-rw-r--r-- | gdk/x11/gdkglobals-x11.c | 2 | ||||
-rw-r--r-- | gdk/x11/gdkmain-x11.c | 7 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 4 |
8 files changed, 24 insertions, 6 deletions
@@ -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 ec1ecf3122..e6644bb600 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 0d0054b45e..481811ef0c 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 8d82f599d1..931fdf78b0 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 5a1524470b..579b9703b1 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 ec1ecf3122..e6644bb600 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 0d69a33ea7..5f97e03472 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 5a1524470b..579b9703b1 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)) |