summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliot Lee <sopwith@src.gnome.org>1998-03-06 05:14:09 +0000
committerElliot Lee <sopwith@src.gnome.org>1998-03-06 05:14:09 +0000
commit3033d6b47acd2e77a36999b94a4268d6eac07a1c (patch)
tree60bf976437b34bd21cdea55b6586e5269b5d40ae
parent2a4c36a73d3a12466bfebdc4dca1b8f31bd8695b (diff)
downloadgtk+-3033d6b47acd2e77a36999b94a4268d6eac07a1c.tar.gz
This commit moves dnd variables around a bit, and has a try at using hints for the shape dragging (this is for quartic)
-rw-r--r--gdk/gdk.c105
-rw-r--r--gdk/gdkglobals.c4
-rw-r--r--gdk/gdkprivate.h5
-rw-r--r--gdk/x11/gdkglobals-x11.c4
-rw-r--r--gdk/x11/gdkmain-x11.c105
5 files changed, 119 insertions, 104 deletions
diff --git a/gdk/gdk.c b/gdk/gdk.c
index 10714aa143..fe94fbe49e 100644
--- a/gdk/gdk.c
+++ b/gdk/gdk.c
@@ -1668,11 +1668,6 @@ gdk_event_translate (GdkEvent *event,
gint return_val;
/* Are static variables used for this purpose thread-safe? */
- static GdkPoint dnd_drag_start = {0,0},
- dnd_drag_oldpos = {0,0};
- static GdkRectangle dnd_drag_dropzone = {0,0,0,0};
- static GdkWindowPrivate *real_sw = NULL;
- static Window dnd_drag_curwin = None;
return_val = FALSE;
@@ -1913,9 +1908,9 @@ gdk_event_translate (GdkEvent *event,
&& !gdk_dnd.drag_really)
{
gdk_dnd.drag_perhaps = 1;
- dnd_drag_start.x = xevent->xbutton.x_root;
- dnd_drag_start.y = xevent->xbutton.y_root;
- real_sw = window_private;
+ gdk_dnd.dnd_drag_start.x = xevent->xbutton.x_root;
+ gdk_dnd.dnd_drag_start.y = xevent->xbutton.y_root;
+ gdk_dnd.real_sw = window_private;
if(gdk_dnd.drag_startwindows)
{
@@ -1938,7 +1933,8 @@ gdk_event_translate (GdkEvent *event,
window_private->dnd_drag_savedeventmask = dnd_winattr.your_event_mask;
dnd_setwinattr.event_mask =
- window_private->dnd_drag_eventmask = ButtonMotionMask | EnterWindowMask | LeaveWindowMask;
+ window_private->dnd_drag_eventmask = ButtonMotionMask |
+ EnterWindowMask | LeaveWindowMask;
XChangeWindowAttributes(gdk_display, window_private->xwindow,
CWEventMask, &dnd_setwinattr);
}
@@ -1982,8 +1978,8 @@ gdk_event_translate (GdkEvent *event,
XSetWindowAttributes attrs;
/* Reset event mask to pre-drag value, assuming event_mask
doesn't change during drag */
- attrs.event_mask = real_sw->dnd_drag_savedeventmask;
- XChangeWindowAttributes(gdk_display, real_sw->xwindow,
+ attrs.event_mask = gdk_dnd.real_sw->dnd_drag_savedeventmask;
+ XChangeWindowAttributes(gdk_display, gdk_dnd.real_sw->xwindow,
CWEventMask, &attrs);
}
@@ -2013,14 +2009,14 @@ gdk_event_translate (GdkEvent *event,
gdk_dnd.drag_startwindows = NULL;
}
- real_sw = NULL;
+ gdk_dnd.real_sw = NULL;
}
gdk_dnd.drag_perhaps = 0;
- dnd_drag_start.x = dnd_drag_start.y = 0;
- dnd_drag_dropzone.x = dnd_drag_dropzone.y = 0;
- dnd_drag_dropzone.width = dnd_drag_dropzone.height = 0;
- dnd_drag_curwin = None;
+ gdk_dnd.dnd_drag_start.x = gdk_dnd.dnd_drag_start.y = 0;
+ gdk_dnd.dnd_drag_dropzone.x = gdk_dnd.dnd_drag_dropzone.y = 0;
+ gdk_dnd.dnd_drag_dropzone.width = gdk_dnd.dnd_drag_dropzone.height = 0;
+ gdk_dnd.dnd_drag_curwin = None;
return_val = window_private?TRUE:FALSE;
} else
return_val = window_private && !window_private->destroyed;
@@ -2056,12 +2052,13 @@ gdk_event_translate (GdkEvent *event,
event->motion.source = GDK_SOURCE_MOUSE;
event->motion.deviceid = GDK_CORE_POINTER;
-#define IS_IN_ZONE(cx, cy) (cx >= dnd_drag_dropzone.x \
- && cy >= dnd_drag_dropzone.y \
- && cx < (dnd_drag_dropzone.x + dnd_drag_dropzone.width) \
- && cy < (dnd_drag_dropzone.y + dnd_drag_dropzone.height))
+#define IS_IN_ZONE(cx, cy) (cx >= gdk_dnd.dnd_drag_dropzone.x \
+ && cy >= gdk_dnd.dnd_drag_dropzone.y \
+ && cx < (gdk_dnd.dnd_drag_dropzone.x + gdk_dnd.dnd_drag_dropzone.width) \
+ && cy < (gdk_dnd.dnd_drag_dropzone.y + gdk_dnd.dnd_drag_dropzone.height))
- if(gdk_dnd.drag_perhaps && gdk_dnd.drag_really)
+ if(gdk_dnd.drag_perhaps && gdk_dnd.drag_really
+ /* && event->motion.is_hint */ /* HINTME */)
{
/* First, we have to find what window the motion was in... */
/* XXX there has to be a better way to do this, perhaps with
@@ -2095,37 +2092,37 @@ gdk_event_translate (GdkEvent *event,
}
GDK_NOTE (DND,
g_print("Drag is now in window %#lx, lastwin was %#lx, ddc = %#lx\n",
- curwin, lastwin, dnd_drag_curwin));
- if(curwin != dnd_drag_curwin && curwin != lastwin)
+ curwin, lastwin, gdk_dnd.dnd_drag_curwin));
+ if(curwin != gdk_dnd.dnd_drag_curwin && curwin != lastwin)
{
/* We have left one window and entered another
(do leave & enter bits) */
- if(dnd_drag_curwin != None)
- gdk_dnd_drag_leave(dnd_drag_curwin);
- dnd_drag_curwin = curwin;
- gdk_dnd_drag_enter(dnd_drag_curwin);
- dnd_drag_dropzone.x = dnd_drag_dropzone.y = 0;
- dnd_drag_dropzone.width = dnd_drag_dropzone.height = 0;
+ if(gdk_dnd.dnd_drag_curwin != None)
+ gdk_dnd_drag_leave(gdk_dnd.dnd_drag_curwin);
+ gdk_dnd.dnd_drag_curwin = curwin;
+ gdk_dnd_drag_enter(gdk_dnd.dnd_drag_curwin);
+ gdk_dnd.dnd_drag_dropzone.x = gdk_dnd.dnd_drag_dropzone.y = 0;
+ gdk_dnd.dnd_drag_dropzone.width = gdk_dnd.dnd_drag_dropzone.height = 0;
gdk_dnd.dnd_drag_target = None;
GDK_NOTE (DND,
g_print("curwin = %#lx, lastwin = %#lx, dnd_drag_curwin = %#lx\n",
- curwin, lastwin, dnd_drag_curwin));
+ curwin, lastwin, gdk_dnd.dnd_drag_curwin));
gdk_dnd_display_drag_cursor(xevent->xmotion.x_root,
xevent->xmotion.y_root,
FALSE, TRUE);
}
- else if(dnd_drag_dropzone.width > 0
- && dnd_drag_dropzone.height > 0
- && curwin == dnd_drag_curwin)
+ else if(gdk_dnd.dnd_drag_dropzone.width > 0
+ && gdk_dnd.dnd_drag_dropzone.height > 0
+ && curwin == gdk_dnd.dnd_drag_curwin)
{
/* Handle all that dropzone stuff - thanks John ;-) */
if (gdk_dnd.dnd_drag_target != None)
{
gboolean in_zone = IS_IN_ZONE(xevent->xmotion.x_root,
xevent->xmotion.y_root);
- gboolean old_in_zone = IS_IN_ZONE(dnd_drag_oldpos.x,
- dnd_drag_oldpos.y);
+ gboolean old_in_zone = IS_IN_ZONE(gdk_dnd.dnd_drag_oldpos.x,
+ gdk_dnd.dnd_drag_oldpos.y);
if (!in_zone && old_in_zone)
{
@@ -2141,8 +2138,8 @@ gdk_event_translate (GdkEvent *event,
/* We were outside drop zone but in the window
- have to send enter events */
gdk_dnd_drag_enter(curwin);
- dnd_drag_curwin = curwin;
- dnd_drag_dropzone.x = dnd_drag_dropzone.y = 0;
+ gdk_dnd.dnd_drag_curwin = curwin;
+ gdk_dnd.dnd_drag_dropzone.x = gdk_dnd.dnd_drag_dropzone.y = 0;
gdk_dnd.dnd_drag_target = None;
}
}
@@ -2209,12 +2206,12 @@ gdk_event_translate (GdkEvent *event,
{
g_print("We may[%d] have a drag into %#lx = %#lx\n",
gdk_dnd.drag_really,
- xevent->xcrossing.window, real_sw->xwindow);
+ xevent->xcrossing.window, gdk_dnd.real_sw->xwindow);
}
#endif /* G_ENABLE_DEBUG */
if (gdk_dnd.drag_perhaps && gdk_dnd.drag_really &&
- (xevent->xcrossing.window == real_sw->xwindow))
+ (xevent->xcrossing.window == gdk_dnd.real_sw->xwindow))
{
gdk_dnd.drag_really = 0;
@@ -2280,19 +2277,25 @@ gdk_event_translate (GdkEvent *event,
{
g_print("We may[%d] have a drag out of %#lx = %#lx\n",
gdk_dnd.drag_really,
- xevent->xcrossing.window, real_sw->xwindow);
+ xevent->xcrossing.window, gdk_dnd.real_sw->xwindow);
}
#endif /* G_ENABLE_DEBUG */
if (gdk_dnd.drag_perhaps && !gdk_dnd.drag_really &&
- (xevent->xcrossing.window == real_sw->xwindow))
+ (xevent->xcrossing.window == gdk_dnd.real_sw->xwindow))
{
- gdk_dnd_drag_addwindow((GdkWindow *) real_sw);
- gdk_dnd_drag_begin((GdkWindow *) real_sw);
- XGrabPointer(gdk_display, real_sw->xwindow, False,
- ButtonMotionMask |
+ gboolean xgpret;
+ gdk_dnd_drag_addwindow((GdkWindow *) gdk_dnd.real_sw);
+ gdk_dnd_drag_begin((GdkWindow *) gdk_dnd.real_sw);
+ xgpret =
+ XGrabPointer(gdk_display, gdk_dnd.real_sw->xwindow, False,
+ ButtonMotionMask | PointerMotionMask |
+ /* PointerMotionHintMask | */ /* HINTME */
ButtonPressMask | ButtonReleaseMask,
GrabModeAsync, GrabModeAsync, gdk_root_window,
None, CurrentTime);
+#ifdef G_ENABLE_DEBUG
+ GDK_NOTE(DND, g_print("xgpret = %d\n", xgpret));
+#endif
gdk_dnd.dnd_grabbed = TRUE;
gdk_dnd.drag_really = 1;
gdk_dnd_display_drag_cursor(xevent->xmotion.x_root,
@@ -2751,7 +2754,7 @@ gdk_event_translate (GdkEvent *event,
return_val = FALSE;
if (window && gdk_dnd.drag_really &&
- xevent->xclient.data.l[0] == dnd_drag_curwin &&
+ xevent->xclient.data.l[0] == gdk_dnd.dnd_drag_curwin &&
event->dragrequest.u.flags.sendreply == 0)
{
/* Got request - do we need to ask user? */
@@ -2775,14 +2778,14 @@ gdk_event_translate (GdkEvent *event,
window_private->dnd_drag_data_type =
xevent->xclient.data.l[4];
- gdk_dnd.dnd_drag_target = dnd_drag_curwin;
+ gdk_dnd.dnd_drag_target = gdk_dnd.dnd_drag_curwin;
gdk_dnd_display_drag_cursor(-1, -1, TRUE, TRUE);
}
- dnd_drag_dropzone.x = xevent->xclient.data.l[2] & 65535;
- dnd_drag_dropzone.y =
+ gdk_dnd.dnd_drag_dropzone.x = xevent->xclient.data.l[2] & 65535;
+ gdk_dnd.dnd_drag_dropzone.y =
(xevent->xclient.data.l[2] >> 16) & 65535;
- dnd_drag_dropzone.width = xevent->xclient.data.l[3] & 65535;
- dnd_drag_dropzone.height =
+ gdk_dnd.dnd_drag_dropzone.width = xevent->xclient.data.l[3] & 65535;
+ gdk_dnd.dnd_drag_dropzone.height =
(xevent->xclient.data.l[3] >> 16) & 65535;
}
}
diff --git a/gdk/gdkglobals.c b/gdk/gdkglobals.c
index 0fcbef3fc2..ec1ecf3122 100644
--- a/gdk/gdkglobals.c
+++ b/gdk/gdkglobals.c
@@ -43,7 +43,9 @@ GdkDndGlobals gdk_dnd = {None,None,None,
0,
FALSE, FALSE, FALSE,
None,
- {0,0}};
+ {0,0},
+ {0,0}, {0,0},
+ {0,0,0,0}, NULL, None};
gchar *gdk_progname = NULL;
gchar *gdk_progclass = NULL;
gint gdk_error_code;
diff --git a/gdk/gdkprivate.h b/gdk/gdkprivate.h
index ee8456fb12..70a02a2067 100644
--- a/gdk/gdkprivate.h
+++ b/gdk/gdkprivate.h
@@ -160,6 +160,11 @@ struct _GdkDndGlobals {
gboolean drag_really, drag_perhaps, dnd_grabbed;
Window dnd_drag_target;
GdkPoint drag_dropcoords;
+
+ GdkPoint dnd_drag_start, dnd_drag_oldpos;
+ GdkRectangle dnd_drag_dropzone;
+ GdkWindowPrivate *real_sw;
+ Window dnd_drag_curwin;
};
typedef struct _GdkDndGlobals GdkDndGlobals;
diff --git a/gdk/x11/gdkglobals-x11.c b/gdk/x11/gdkglobals-x11.c
index 0fcbef3fc2..ec1ecf3122 100644
--- a/gdk/x11/gdkglobals-x11.c
+++ b/gdk/x11/gdkglobals-x11.c
@@ -43,7 +43,9 @@ GdkDndGlobals gdk_dnd = {None,None,None,
0,
FALSE, FALSE, FALSE,
None,
- {0,0}};
+ {0,0},
+ {0,0}, {0,0},
+ {0,0,0,0}, NULL, None};
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 10714aa143..fe94fbe49e 100644
--- a/gdk/x11/gdkmain-x11.c
+++ b/gdk/x11/gdkmain-x11.c
@@ -1668,11 +1668,6 @@ gdk_event_translate (GdkEvent *event,
gint return_val;
/* Are static variables used for this purpose thread-safe? */
- static GdkPoint dnd_drag_start = {0,0},
- dnd_drag_oldpos = {0,0};
- static GdkRectangle dnd_drag_dropzone = {0,0,0,0};
- static GdkWindowPrivate *real_sw = NULL;
- static Window dnd_drag_curwin = None;
return_val = FALSE;
@@ -1913,9 +1908,9 @@ gdk_event_translate (GdkEvent *event,
&& !gdk_dnd.drag_really)
{
gdk_dnd.drag_perhaps = 1;
- dnd_drag_start.x = xevent->xbutton.x_root;
- dnd_drag_start.y = xevent->xbutton.y_root;
- real_sw = window_private;
+ gdk_dnd.dnd_drag_start.x = xevent->xbutton.x_root;
+ gdk_dnd.dnd_drag_start.y = xevent->xbutton.y_root;
+ gdk_dnd.real_sw = window_private;
if(gdk_dnd.drag_startwindows)
{
@@ -1938,7 +1933,8 @@ gdk_event_translate (GdkEvent *event,
window_private->dnd_drag_savedeventmask = dnd_winattr.your_event_mask;
dnd_setwinattr.event_mask =
- window_private->dnd_drag_eventmask = ButtonMotionMask | EnterWindowMask | LeaveWindowMask;
+ window_private->dnd_drag_eventmask = ButtonMotionMask |
+ EnterWindowMask | LeaveWindowMask;
XChangeWindowAttributes(gdk_display, window_private->xwindow,
CWEventMask, &dnd_setwinattr);
}
@@ -1982,8 +1978,8 @@ gdk_event_translate (GdkEvent *event,
XSetWindowAttributes attrs;
/* Reset event mask to pre-drag value, assuming event_mask
doesn't change during drag */
- attrs.event_mask = real_sw->dnd_drag_savedeventmask;
- XChangeWindowAttributes(gdk_display, real_sw->xwindow,
+ attrs.event_mask = gdk_dnd.real_sw->dnd_drag_savedeventmask;
+ XChangeWindowAttributes(gdk_display, gdk_dnd.real_sw->xwindow,
CWEventMask, &attrs);
}
@@ -2013,14 +2009,14 @@ gdk_event_translate (GdkEvent *event,
gdk_dnd.drag_startwindows = NULL;
}
- real_sw = NULL;
+ gdk_dnd.real_sw = NULL;
}
gdk_dnd.drag_perhaps = 0;
- dnd_drag_start.x = dnd_drag_start.y = 0;
- dnd_drag_dropzone.x = dnd_drag_dropzone.y = 0;
- dnd_drag_dropzone.width = dnd_drag_dropzone.height = 0;
- dnd_drag_curwin = None;
+ gdk_dnd.dnd_drag_start.x = gdk_dnd.dnd_drag_start.y = 0;
+ gdk_dnd.dnd_drag_dropzone.x = gdk_dnd.dnd_drag_dropzone.y = 0;
+ gdk_dnd.dnd_drag_dropzone.width = gdk_dnd.dnd_drag_dropzone.height = 0;
+ gdk_dnd.dnd_drag_curwin = None;
return_val = window_private?TRUE:FALSE;
} else
return_val = window_private && !window_private->destroyed;
@@ -2056,12 +2052,13 @@ gdk_event_translate (GdkEvent *event,
event->motion.source = GDK_SOURCE_MOUSE;
event->motion.deviceid = GDK_CORE_POINTER;
-#define IS_IN_ZONE(cx, cy) (cx >= dnd_drag_dropzone.x \
- && cy >= dnd_drag_dropzone.y \
- && cx < (dnd_drag_dropzone.x + dnd_drag_dropzone.width) \
- && cy < (dnd_drag_dropzone.y + dnd_drag_dropzone.height))
+#define IS_IN_ZONE(cx, cy) (cx >= gdk_dnd.dnd_drag_dropzone.x \
+ && cy >= gdk_dnd.dnd_drag_dropzone.y \
+ && cx < (gdk_dnd.dnd_drag_dropzone.x + gdk_dnd.dnd_drag_dropzone.width) \
+ && cy < (gdk_dnd.dnd_drag_dropzone.y + gdk_dnd.dnd_drag_dropzone.height))
- if(gdk_dnd.drag_perhaps && gdk_dnd.drag_really)
+ if(gdk_dnd.drag_perhaps && gdk_dnd.drag_really
+ /* && event->motion.is_hint */ /* HINTME */)
{
/* First, we have to find what window the motion was in... */
/* XXX there has to be a better way to do this, perhaps with
@@ -2095,37 +2092,37 @@ gdk_event_translate (GdkEvent *event,
}
GDK_NOTE (DND,
g_print("Drag is now in window %#lx, lastwin was %#lx, ddc = %#lx\n",
- curwin, lastwin, dnd_drag_curwin));
- if(curwin != dnd_drag_curwin && curwin != lastwin)
+ curwin, lastwin, gdk_dnd.dnd_drag_curwin));
+ if(curwin != gdk_dnd.dnd_drag_curwin && curwin != lastwin)
{
/* We have left one window and entered another
(do leave & enter bits) */
- if(dnd_drag_curwin != None)
- gdk_dnd_drag_leave(dnd_drag_curwin);
- dnd_drag_curwin = curwin;
- gdk_dnd_drag_enter(dnd_drag_curwin);
- dnd_drag_dropzone.x = dnd_drag_dropzone.y = 0;
- dnd_drag_dropzone.width = dnd_drag_dropzone.height = 0;
+ if(gdk_dnd.dnd_drag_curwin != None)
+ gdk_dnd_drag_leave(gdk_dnd.dnd_drag_curwin);
+ gdk_dnd.dnd_drag_curwin = curwin;
+ gdk_dnd_drag_enter(gdk_dnd.dnd_drag_curwin);
+ gdk_dnd.dnd_drag_dropzone.x = gdk_dnd.dnd_drag_dropzone.y = 0;
+ gdk_dnd.dnd_drag_dropzone.width = gdk_dnd.dnd_drag_dropzone.height = 0;
gdk_dnd.dnd_drag_target = None;
GDK_NOTE (DND,
g_print("curwin = %#lx, lastwin = %#lx, dnd_drag_curwin = %#lx\n",
- curwin, lastwin, dnd_drag_curwin));
+ curwin, lastwin, gdk_dnd.dnd_drag_curwin));
gdk_dnd_display_drag_cursor(xevent->xmotion.x_root,
xevent->xmotion.y_root,
FALSE, TRUE);
}
- else if(dnd_drag_dropzone.width > 0
- && dnd_drag_dropzone.height > 0
- && curwin == dnd_drag_curwin)
+ else if(gdk_dnd.dnd_drag_dropzone.width > 0
+ && gdk_dnd.dnd_drag_dropzone.height > 0
+ && curwin == gdk_dnd.dnd_drag_curwin)
{
/* Handle all that dropzone stuff - thanks John ;-) */
if (gdk_dnd.dnd_drag_target != None)
{
gboolean in_zone = IS_IN_ZONE(xevent->xmotion.x_root,
xevent->xmotion.y_root);
- gboolean old_in_zone = IS_IN_ZONE(dnd_drag_oldpos.x,
- dnd_drag_oldpos.y);
+ gboolean old_in_zone = IS_IN_ZONE(gdk_dnd.dnd_drag_oldpos.x,
+ gdk_dnd.dnd_drag_oldpos.y);
if (!in_zone && old_in_zone)
{
@@ -2141,8 +2138,8 @@ gdk_event_translate (GdkEvent *event,
/* We were outside drop zone but in the window
- have to send enter events */
gdk_dnd_drag_enter(curwin);
- dnd_drag_curwin = curwin;
- dnd_drag_dropzone.x = dnd_drag_dropzone.y = 0;
+ gdk_dnd.dnd_drag_curwin = curwin;
+ gdk_dnd.dnd_drag_dropzone.x = gdk_dnd.dnd_drag_dropzone.y = 0;
gdk_dnd.dnd_drag_target = None;
}
}
@@ -2209,12 +2206,12 @@ gdk_event_translate (GdkEvent *event,
{
g_print("We may[%d] have a drag into %#lx = %#lx\n",
gdk_dnd.drag_really,
- xevent->xcrossing.window, real_sw->xwindow);
+ xevent->xcrossing.window, gdk_dnd.real_sw->xwindow);
}
#endif /* G_ENABLE_DEBUG */
if (gdk_dnd.drag_perhaps && gdk_dnd.drag_really &&
- (xevent->xcrossing.window == real_sw->xwindow))
+ (xevent->xcrossing.window == gdk_dnd.real_sw->xwindow))
{
gdk_dnd.drag_really = 0;
@@ -2280,19 +2277,25 @@ gdk_event_translate (GdkEvent *event,
{
g_print("We may[%d] have a drag out of %#lx = %#lx\n",
gdk_dnd.drag_really,
- xevent->xcrossing.window, real_sw->xwindow);
+ xevent->xcrossing.window, gdk_dnd.real_sw->xwindow);
}
#endif /* G_ENABLE_DEBUG */
if (gdk_dnd.drag_perhaps && !gdk_dnd.drag_really &&
- (xevent->xcrossing.window == real_sw->xwindow))
+ (xevent->xcrossing.window == gdk_dnd.real_sw->xwindow))
{
- gdk_dnd_drag_addwindow((GdkWindow *) real_sw);
- gdk_dnd_drag_begin((GdkWindow *) real_sw);
- XGrabPointer(gdk_display, real_sw->xwindow, False,
- ButtonMotionMask |
+ gboolean xgpret;
+ gdk_dnd_drag_addwindow((GdkWindow *) gdk_dnd.real_sw);
+ gdk_dnd_drag_begin((GdkWindow *) gdk_dnd.real_sw);
+ xgpret =
+ XGrabPointer(gdk_display, gdk_dnd.real_sw->xwindow, False,
+ ButtonMotionMask | PointerMotionMask |
+ /* PointerMotionHintMask | */ /* HINTME */
ButtonPressMask | ButtonReleaseMask,
GrabModeAsync, GrabModeAsync, gdk_root_window,
None, CurrentTime);
+#ifdef G_ENABLE_DEBUG
+ GDK_NOTE(DND, g_print("xgpret = %d\n", xgpret));
+#endif
gdk_dnd.dnd_grabbed = TRUE;
gdk_dnd.drag_really = 1;
gdk_dnd_display_drag_cursor(xevent->xmotion.x_root,
@@ -2751,7 +2754,7 @@ gdk_event_translate (GdkEvent *event,
return_val = FALSE;
if (window && gdk_dnd.drag_really &&
- xevent->xclient.data.l[0] == dnd_drag_curwin &&
+ xevent->xclient.data.l[0] == gdk_dnd.dnd_drag_curwin &&
event->dragrequest.u.flags.sendreply == 0)
{
/* Got request - do we need to ask user? */
@@ -2775,14 +2778,14 @@ gdk_event_translate (GdkEvent *event,
window_private->dnd_drag_data_type =
xevent->xclient.data.l[4];
- gdk_dnd.dnd_drag_target = dnd_drag_curwin;
+ gdk_dnd.dnd_drag_target = gdk_dnd.dnd_drag_curwin;
gdk_dnd_display_drag_cursor(-1, -1, TRUE, TRUE);
}
- dnd_drag_dropzone.x = xevent->xclient.data.l[2] & 65535;
- dnd_drag_dropzone.y =
+ gdk_dnd.dnd_drag_dropzone.x = xevent->xclient.data.l[2] & 65535;
+ gdk_dnd.dnd_drag_dropzone.y =
(xevent->xclient.data.l[2] >> 16) & 65535;
- dnd_drag_dropzone.width = xevent->xclient.data.l[3] & 65535;
- dnd_drag_dropzone.height =
+ gdk_dnd.dnd_drag_dropzone.width = xevent->xclient.data.l[3] & 65535;
+ gdk_dnd.dnd_drag_dropzone.height =
(xevent->xclient.data.l[3] >> 16) & 65535;
}
}