[devel] Xvfb keyboard
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Чт Июл 21 22:25:11 MSD 2005
On Wed, Jul 13, 2005 at 08:06:54AM +0400, Alexey Tourbin wrote:
> > > Под Xvfb не работает XKeysymToKeycode() -- возвращает 0.
> > > Это в процессе запроса на нажатие Alt (keysym=65513).
[...]
> Проблема решилась так:
>
> --- X11-GUITest-0.20/GUITest.xs- 2004-01-16 23:41:42 +0000
> +++ X11-GUITest-0.20/GUITest.xs 2005-07-13 01:35:14 +0000
> @@ -213,6 +213,15 @@
> return( GetKeySym(key, sym) );
> }
>
> +/* Xvfb lacks XK_Alt_L; fall back to XK_Meta_L */
> +#define XKeysymToKeycode(display, sym) \
> +({ Display *d = (display); KeySym s = (sym); \
> + KeyCode kc = (XKeysymToKeycode)(d, s); \
> + if (kc == 0 && s == XK_Alt_L) \
> + kc = (XKeysymToKeycode)(d, XK_Meta_L); \
> + kc; \
> +})
> +
> /* Function: PressKeyImp
> * Description: Presses the key for the specified keysym. Lower-level
> * implementation.
По поводу клавиатуры у Xvfb меня одолевает нехорошее предчувствие:
XK_Meta_L он тоже плохо понимает. Всё чудесатее и чудесатее.
Вот пока программка, которая выдает на stderr клавиатурные события.
----------- следующая часть -----------
// gcc -o xkev -Wall xkev.c -L/usr/X11R6/lib -lX11
#include <stdio.h>
#include <assert.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
int main(int argc, char **argv)
{
Display *d = XOpenDisplay(NULL);
assert(d);
int s = XDefaultScreen(d);
Window w = XCreateSimpleWindow(d,
XRootWindow(d, s), 0, 0, 320, 240, 0,
XBlackPixel(d, s), XWhitePixel(d, s));
assert(w);
XTextProperty title;
XStringListToTextProperty(argv, 1, &title);
XSetWMName(d, w, &title);
XSetWMIconName(d, w, &title);
XFree(title.value);
XSelectInput(d, w, KeyPressMask | KeyReleaseMask);
XMapWindow(d, w);
while (1) {
XEvent ev;
XNextEvent(d, &ev);
XKeyEvent *evp = &ev.xkey;
assert(evp->type == KeyPress || evp->type == KeyRelease);
char *what = (evp->type == KeyPress) ? "press" : "release";
unsigned int kc = evp->keycode;
KeySym ks = XKeycodeToKeysym(d, kc, 0);
char *str = XKeysymToString(ks);
fprintf(stderr, "%s %s (kc=%u ks=%lu)\n",
what, str, kc, ks);
}
return 0;
}
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20050721/6fa18748/attachment-0001.bin>
Подробная информация о списке рассылки Devel