Почему XWarpPointer работает только один раз (в цикле)? - PullRequest
2 голосов
/ 01 мая 2011

Почему XWarpPointer работает только один раз?

Когда я запускаю:

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>

int main()
{
  Display *dpy = XOpenDisplay(0);
  while (1) {
    Window root_window;
    root_window = XRootWindow(dpy, 0);
    XSelectInput(dpy, root_window, KeyReleaseMask);
    XWarpPointer(dpy, None, root_window, 0, 0, 0, 0, 100, 100);
    XSync(dpy, False);
  }
}

Мышь должна казаться заблокированной в одной позиции.Но она только перемещает мышь один раз, а затем позволяет мне перемещать ее, пока цикл все еще работает.Что вызывает запуск XWarpPointer только один раз?Это какая-то функция X11 для защиты пользователя от приложения?

К вашему сведению, я использую RHEL 5.2 на VMWare Fusion на Mac OSX 10.6.

Обновление:

  • При запуске двоичного файла компоненты, такие как кнопка или значок, мерцают, но визуальный курсор мыши остается там, где я его перемещаю.
  • После того, как один раз XWarpPointer работает, когда я перемещаю мышь, курсор переходитпочти до того места, где он был до того, как я его исказил.Это как если бы есть (last_x, last_y), который не обновляется.
  • Когда я меняю указатель с помощью OpenVMTools, кажется, что указатель больше привязывается к нужному месту, но визуальный указатель не меняется.

Спасибо, Ченц

Ответы [ 3 ]

1 голос
/ 01 мая 2011

У меня нет опыта, но что произойдет, если вы не откажетесь от событий в XSync? например XSync(dpy, True);

1 голос
/ 06 июня 2014

После

XWarpPointer(dpy, None, root_window, 0, 0, 0, 0, 100, 100);

Попробуйте

XFlush(dpy);

Это должно решить проблему.

0 голосов
/ 01 мая 2011

XWarpPointer только перемещает указатель в указанное место.это не мешает ему двигаться дальше.

...