LINUX.ORG.RU

Grab


0

0

Хочу в X-ах заграбить клаву и пропускать только нажатия некоторых клавиш. Делаю 
XGrabKeyboard (dpy, w, True, GrabModeAsync, GrabModeAsync, CurrentTime);

а затем в цикле
while (XPending (dpy)) {
  XNextEvent (dpy, &evt);

  switch (evt.type) {
  case KeyPress:
  case KeyRelease:
    ...
    if (keyEnabled (evt.xkey.keycode)) { // функция, определяющая пропускать ли клавишу
      int stat = XSendEvent (dpy, PointerWindow, True, 0, &evt);
      XSync (dpy, True);
      ....
    }
  }
}

XSendEvent правильный ??? Не работает. Нажатия ловятся и в лог у меня пишется это дело, но в окне ввода, куда я их ввожу, буковки не появляются :) Я не очень шарю в программировании под X, но срочно надо, помогите...
anonymous

Re: Grab

задача это не так решается немного ..

1) грабишь кейборду в синхронной моде
2) фрозешь ее с помощью AllowEvents (mode = Sync) 
3) ждешь event
4) получаешь event
  a) если !keyEnabled(не пропускать) то прыгаешь на 2)
  b) если keyEnabled (пропустить клавишу) то делаешь AllowEvents с модой
     ReplayKeyboard и прыгаешь опять на 2)

удачи

lg ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.