On 1 February 2010 06:34, Peter Hutterer <[email protected]> wrote: > On Sun, Jan 24, 2010 at 01:49:36PM +0100, Tom Cowell wrote: >> In my experiments, I didn't want to do what Glynn suggested because I >> will be repeatedly changing the grabbed keys during the lifetime of >> the program. All the calls to XGrabKey seemed like a lot of overhead >> to me. >> >> So I did something different: my program is, for other reasons, using >> the Xkb extension, and processing XkbStateNotifyEvent to track the >> state of modifier keys. When Ctrl is pressed I grab the keys I want >> with AnyModifier, and when it is released I release them. >> >> This works for me, but I don't like it, so I think I will probably try >> what Glynn has suggested. > > it has an inherent race condition in that the key is not grabbed in between > delivering the event and your client re-grabbing the key. Plus, there's the > issue that if another client has a grab on the same key you'll run into > issues with AnyModifier.
Thanks for replying Peter. My problem (nothing to do with the question that started the thread) is that I want to change the grabbed state of some keys repeatedly while the program is running. So, I think that there is no way to avoid this race condition - it is an inherent feature of what I'm trying to do. Sometimes my software wants every keystroke from the keys in question, and sometimes it wants only the keystrokes with the Ctrl modifier (and other keystrokes should be delivered to the program with the input focus). When I change between these two states (in response to user input) I think there is an inevitable window in which keystrokes may be lost. Cheers Tom _______________________________________________ xorg mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/xorg
