Пример #1
0
void
xdnd_send_enter(DndClass *dnd, Window window, Window from, Atom *typelist)
{
  XEvent xevent;
  int n, i;

  n = array_length (typelist);

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

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

  XDND_ENTER_SOURCE_WIN (&xevent) = from;
  XDND_ENTER_THREE_TYPES_SET (&xevent, n > XDND_THREE);
  XDND_ENTER_VERSION_SET (&xevent, dnd->version);
  for (i = 0; i < n && i < XDND_THREE; i++)
    {
      XDND_ENTER_TYPE (&xevent, i) = typelist[i];
    }

  XSendEvent (dnd->display, window, 0, 0, &xevent);
}
Пример #2
0
Файл: xdnd.cpp Проект: eriser/es
bool Dnd::handleEnterEvent(const XEvent& xEvent)
{
	m_DragWindow = XDND_ENTER_SOURCE_WIN(&xEvent);

	CArray<Atom> typeList;

	if (XDND_STATUS_WILL_ACCEPT(&xEvent) == 0)
	{
		//cout << "Only three types" << endl;
		for (int i = 0; i < XDND_THREE; i++)
		{
			if (XDND_ENTER_TYPE(&xEvent, i) != 0)
			{
				typeList.Append(XDND_ENTER_TYPE(&xEvent, i));
			}
		}

		for ( unsigned int i = 0; i < typeList.GetSize(); i++)
		{
			Atom atom = XInternAtom(m_pDisplay, "text/uri-list", False);
			if (typeList[i] == atom)
			{
				m_DesiredType = atom;
			}
		}
	}
	else
	{
		//cout << "More than three types - getting list" << endl;

		generateTypeList(XDND_STATUS_TARGET_WIN(&xEvent), typeList);
		if (!typeList.GetSize())
		{
			for ( unsigned int i = 0; i < typeList.GetSize(); i++)
			{
				Atom atom = XInternAtom(m_pDisplay, "text/uri-list", False);
				if (typeList[i] == atom)
				{
					m_DesiredType = atom;
				}
			}
		}
	}
	return false;
}