Esempio n. 1
0
void
xdnd_send_position(DndClass *dnd, Window window, Window from, Atom action, 
   int x, int y, unsigned long time)
{
  XEvent xevent;

  memset (&xevent, 0, sizeof (xevent));

  xevent.xany.type = ClientMessage;
  xevent.xany.display = dnd->display;
  xevent.xclient.window = window;
  xevent.xclient.message_type = dnd->XdndPosition;
  xevent.xclient.format = 32;

  XDND_POSITION_SOURCE_WIN (&xevent) = from;
  XDND_POSITION_ROOT_SET (&xevent, x, y);
  if (dnd_version_at_least (dnd->dragging_version, 1))
    XDND_POSITION_TIME (&xevent) = time;
  if (dnd_version_at_least (dnd->dragging_version, 2))
    XDND_POSITION_ACTION (&xevent) = action;

  XSendEvent (dnd->display, window, 0, 0, &xevent);
}
Esempio n. 2
0
File: xdnd.cpp Progetto: eriser/es
void Dnd::handlePositionEvent(const XEvent& xEvent)
{
	XEvent  replyXEvent;

	m_DropPosX = XDND_POSITION_ROOT_X((&xEvent));
	m_DropPosY = XDND_POSITION_ROOT_Y((&xEvent));
	m_Time     = XDND_POSITION_TIME((&xEvent));

	memset (&replyXEvent, 0, sizeof(replyXEvent));
	replyXEvent.xany.type            = ClientMessage;
	replyXEvent.xany.display         = m_pDisplay;
	replyXEvent.xclient.window       = m_DragWindow;
	replyXEvent.xclient.message_type = XdndStatus;
	replyXEvent.xclient.format       = 32;

	XDND_STATUS_TARGET_WIN(&replyXEvent) = xEvent.xclient.window;
	XDND_STATUS_WILL_ACCEPT_SET(&replyXEvent, True);
	XDND_STATUS_WANT_POSITION_SET(&replyXEvent, True);
	XDND_STATUS_RECT_SET(&replyXEvent, m_DropPosX, m_DropPosY, 1, 1);
	XDND_STATUS_ACTION(&replyXEvent) = XDND_POSITION_ACTION(&xEvent);

	XSendEvent(m_pDisplay, m_DragWindow, 0, 0, &replyXEvent);
}