ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexey Tourbin <at@altlinux.ru>
To: devel@altlinux.ru
Subject: [devel] Xvfb keyboard
Date: Thu, 21 Jul 2005 22:25:11 +0400
Message-ID: <20050721182511.GO24898@solemn.turbinal.org> (raw)
In-Reply-To: <20050713040654.GB10741@solemn.turbinal.org>


[-- Attachment #1.1: Type: text/plain, Size: 1077 bytes --]

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 клавиатурные события.

[-- Attachment #1.2: xkev.c --]
[-- Type: text/plain, Size: 992 bytes --]

// 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;
}

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

  reply	other threads:[~2005-07-21 18:25 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-06-18 16:36 [devel] RFC: test-aboutdialog (GUI) Alexey Tourbin
2005-06-18 18:26 ` [devel] " Konstantin A. Lepikhov
2005-06-18 19:02   ` Alexey Tourbin
2005-06-18 21:09     ` Konstantin A. Lepikhov
2005-06-18 22:10 ` Alexey Tourbin
2005-06-18 22:58   ` Alexey Tourbin
2005-07-13  4:06     ` Alexey Tourbin
2005-07-21 18:25       ` Alexey Tourbin [this message]
2005-06-20  7:25 ` [devel] " Sviataslau Svirydau
2005-06-20 12:14   ` [devel] " Alexey Tourbin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050721182511.GO24898@solemn.turbinal.org \
    --to=at@altlinux.ru \
    --cc=devel@altlinux.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git