summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliot Lee <sopwith@src.gnome.org>1998-03-10 02:48:02 +0000
committerElliot Lee <sopwith@src.gnome.org>1998-03-10 02:48:02 +0000
commit990bddfe1688861332443d89a4796a710e18ae39 (patch)
tree059823ad33a112308f6b4146e50b65aa14bd896d
parent239a12d0d140ad98ac7c85f7aa46411291250dda (diff)
downloadgtk+-990bddfe1688861332443d89a4796a710e18ae39.tar.gz
Miguel, try this - I think it should do what you need. Hurry hurry :)
-rw-r--r--gdk/gdk.c7
-rw-r--r--gdk/gdkglobals.c2
-rw-r--r--gdk/gdkprivate.h1
-rw-r--r--gdk/gdktypes.h3
-rw-r--r--gdk/gdkwindow.c4
-rw-r--r--gdk/x11/gdkglobals-x11.c2
-rw-r--r--gdk/x11/gdkmain-x11.c7
-rw-r--r--gdk/x11/gdkwindow-x11.c4
8 files changed, 24 insertions, 6 deletions
diff --git a/gdk/gdk.c b/gdk/gdk.c
index 0d69a33ea7..5f97e03472 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 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))