Ignoruj ​​automatyczne powtarzanie w aplikacjach X11

Jeśli naciśniesz i przytrzymasz klawisz w X11 podczasAutoRepeat jest włączony, ciągle otrzymujeszKeyPress iKeyRelease wydarzenia. wiem toAutoRepeat można wyłączyć za pomocą funkcjiXAutoRepeatOff (), ale zmienia to ustawienie całego serwera X. Czy istnieje sposób na wyłączenieAutoRepeat dla pojedynczej aplikacji lub zignorować powtarzające się naciśnięcia klawiszy?

To, czego szukam, to singielKeyPress zdarzenie po naciśnięciu klawisza i pojedynczymKeyRelease zdarzenie po zwolnieniu klucza, bez zakłócania działania serwera X.AutoRepeat oprawa.

Oto minimalny przykład, który ułatwi Ci przejście (głównie zSamouczek dla początkujących Xlib):

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

Display *dis;
Window win;
XEvent report;

int main ()
{
  dis = XOpenDisplay (NULL);
  // XAutoRepeatOn(dis);
  win = XCreateSimpleWindow (dis, RootWindow (dis, 0), 1, 1, 500, 500,
        0, BlackPixel (dis, 0), BlackPixel (dis, 0));
  XSelectInput (dis, win, KeyPressMask | KeyReleaseMask);
  XMapWindow (dis, win);
  XFlush (dis);

  while (1)
    {
      XNextEvent (dis, &report);
      switch (report.type)
 {
 case KeyPress:
   fprintf (stdout, "key #%ld was pressed.\n",
     (long) XLookupKeysym (&report.xkey, 0));
   break;
 case KeyRelease:
   fprintf (stdout, "key #%ld was released.\n",
     (long) XLookupKeysym (&report.xkey, 0));
   break;
 }
    }

  return (0);
}

questionAnswers(6)

yourAnswerToTheQuestion