|
Description
|
I notice on Solaris 10 that XkbSetDetectableAutoRepeat does not seem
to have any effect. I see this problem with both the Xsun and Xorg
Xservers.
I did some digging around in the Xkb protocol and noticed that the following
should make the KeyRelease event stop showing up when a key is enabled
via autorepeat:
rc = XkbSetDetectableAutoRepeat (GDK_DISPLAY_XDISPLAY (display), True,
&supported);
I wrote a program that makes this call and then listens for KeyPress and
KeyRelease events, but the XkbSetDetectableAutoRepeat call doesn't seem to
affect the behavior at all and both KeyPress and KeyRelease events are
still being generated over and over when I hold down a key. The rc and
supported values to the XkbSetDetectableAutoRepeat call are both
returning True, which should indicate that it should be working, I think.
Digging into the GDK code, I notice that in gtk+/gdk/x11/gdkdisplay-x11.c
that gdk_display_open() always calls XkbSetDetectableAutoRepeat the same
way if Xkb is available. With the dbx debugger I verified that when I
run any GTK+ based applications that it is being called and is also
returning "True" for supported. So this should mean that all GTK+ based
programs should have detectable autorepeat turned on. However, GTK+
based programs seem to be misbehaving in the same way.
This problem is breaking the keyboard gesture listener that GDM required
for accessible login. In Solaris 9 the gesture listeners worked and I believe
this is because XkbSetDetectableAutoRepeat is turned on for all
GTK+ programs.
Based on some similar problems we saw in Linux, I suspect that this
problem may be happening because of XEVIE. On Linux, we noticed that
XkbSetDetectableAutoRepeat stopped working when we enabled the XEVIE
extension. I've tried testing this on Solaris but can't figure out
how to disable XEVIE. I was told that by adding "-extension XEVIE"
when using the Xorg server should turn off XEVIE, but xdpyinfo tells
me it is still running.
Sorry, I've updated the attachment with a new version that should work.
Just deleting that function call is all that was necessary. The function
that wouldn't compile for you isn't needed in the code. The dialog
doesn't really say anything meaningful and clicking on the button
doesn't do anything. It's just there so the program has a window.
In order to get output to the syslog, the dialog has to have focus
when you press/release keys.
I built the code against the GNOME 2.12 libraries and that function
is a new function, but that function isn't needed to do the testing.
Sorry I didn't catch that.
Fix committed to X.Org community CVS - should be included in Xorg 6.9 Release Candidate 1:
CVSROOT: /cvs/xorg
Module name: xc
Changes by: xxxxx@xxxxx.org 05/10/06 10:55:55
Log message:
2005-10-06 Alan Coopersmith < xxxxx@xxxxx.com>
* programs/Xserver/Xext/xevie.c (doSendEvent):
Sun bug #6326551: xkbSetDetectableAutoRepeat broken when using XEvIE
<http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6326551>
(Derek Wang, Sun Microsystems)
Modified files:
./:
ChangeLog
xc/programs/Xserver/Xext/:
xevie.c
Revision Changes Path
1.1399 +7 -0 xc/ChangeLog
http://cvs.freedesktop.org/xorg/xc/ChangeLog
1.11 +4 -0 xc/programs/Xserver/Xext/xevie.c
http://cvs.freedesktop.org/xorg/xc/programs/Xserver/Xext/xevie.c
|