/* Track the current mouse position. */ static enum XdndState dndOutMotion(enum XdndState state, XMotionEvent *evt) { Window currentWindow= None; int versionReturn= 0; if ((XdndStateOutTracking != state) && (XdndStateOutAccepted != state)) return state; currentWindow= dndAwareWindow(evt->root, evt->root, &versionReturn); if (DndWindow == currentWindow) /* Cursor is on myself */ { xdndOutTarget= None; return XdndStateOutTracking; } updateCursor(XdndStateOutAccepted == state); if ((XdndVersion > versionReturn) /* Target's version is too low. */ || (None == currentWindow)) /* I can't find XdndAware window. */ { xdndOutTarget= None; return XdndStateOutTracking; } fdebugf((stderr, "Receive MotionNotify (output) root: 0x%lx awareWindow: 0x%lx\n", evt->root, currentWindow)); if (currentWindow != xdndOutTarget) { sendLeave(xdndOutTarget, DndWindow); sendEnter(currentWindow, DndWindow); } sendPosition(currentWindow, DndWindow, evt->x_root, evt->y_root, evt->time); xdndOutTarget= currentWindow; return state; }
void KeyboardInterface::Private::focusChildSurface(const QPointer<SurfaceInterface> &childSurface, quint32 serial) { if (focusedChildSurface == childSurface) { return; } sendLeave(focusedChildSurface.data(), serial); focusedChildSurface = childSurface; sendEnter(focusedChildSurface.data(), serial); }
/* The mouse button was released. */ static enum XdndState dndOutRelease(enum XdndState state, XButtonEvent *evt) { if (XdndStateIdle == state) return XdndStateIdle; fdebugf((stderr, "Receive ButtonRelease (output) window: 0x%lx\n", evt->window)); if (XdndStateOutAccepted == state) { sendDrop(xdndOutTarget, DndWindow, evt->time); return XdndStateOutAccepted; } sendLeave(xdndOutTarget, DndWindow); return XdndStateIdle; }
/* A status message to know accept or not is received. */ static enum XdndState dndOutStatus(enum XdndState state, XClientMessageEvent *evt) { long *ldata= evt->data.l; fdebugf((stderr, "Receive XdndStatus (output) status: 0x%lx target: 0x%lx\n", ldata[1], ldata[0])); if ((XdndStateOutTracking != state) && (XdndStateOutAccepted != state)) { /*printf("%i is not expected in XdndStatus\n", state);*/ sendLeave(ldata[0], DndWindow); return state; } if (xdndOutTarget != ldata[0]) return state; if (ldata[1] && 0x1UL) return XdndStateOutAccepted; else return XdndStateOutTracking; }