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)
{
{
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)
{
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);
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;
GdkRectangle dnd_drag_dropzone;
GdkWindowPrivate *real_sw;
Window dnd_drag_curwin;
+ Time last_drop_time; /* An incredible hack, sosumi miguel */
};
typedef struct _GdkDndGlobals GdkDndGlobals;
GdkPoint drop_coords;
gchar *data_type;
+ guint32 timestamp;
};
struct _GdkEventDragBegin
gchar *data_type; /* MIME type */
gulong data_numbytes;
gpointer data;
+ guint32 timestamp;
+ GdkPoint coords;
};
struct _GdkEventClient
(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))
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;
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)
{
{
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)
{
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);
(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))