On Wed, Jan 21, 2004 at 12:06:50PM +0600, Ivan Pascal wrote:
>  Hello,
>
>Mark Vojkovich wrote:
>> On Mon, 19 Jan 2004, David Dawes wrote:
>> 
>> > >Tests for XChangeKeyboardControl
>> > >Test   9:  FAIL
>> > >Test  10:  FAIL
>> > 
>> > That has been showing up for a while.  It should be followed up.
>> 
>>    That's been showing up for a couple years.  It's a regression.
>
>I think the tests are incorrect.  Both tests try to set keyboard LEDs (using
>XChangeKeyboardControl) then read the LEDs state (XGetKeyboardControl) and
>compare values.  The difference between the tests is that the first one tries
>to change some of LEDs (uses some mask) and the second one tries to set all
>LEDs together (without specifying a particular LED number).
>
>But some LEDs can be protected from their change by client application and
>reflect keyboard state only.
>
>The man about {Change|Get}KeyboardControl tells:
>XChangeKeyboardControl - "...the state of that leds is changed, if possible.."
>XGetKeyboardControl - "...each bit set to 1 in led_mask indicates an LED that
>is lit...".  (Note "if possible" and "an LED that is lit".)
>I understand it as Get returns the actual state of LEDs, those that are not
>protected and were changed by Change and those that are protected but are
>switched on reflecting the keyboard state.
>
>But the tests, obviously, are written in assumption that Get should return the
>LED state exactly as it was written into keyboard by Change call.  It means all
>LEDs should be unprotected (it is not by default) or the keyboard control
>structure keeps values written by XChangeKeyboardControl call(s) and at the
>XGetKeyboardControl request just returns this record instead of real state
>of LEDs.

Where does the LED state get resynced with the DDX? The only place that
I see the LED state synced with the DDX is at init time.  If I disable
XKB, 'xset q' doesn't report changes to the real LED state.

Those tests work OK for me now if I disable XKB.  I don't think it is
unreasonable to do the core protocol tests with XKB disabled.

>BTW, the "fix" for this "regression" is very simple.  We just have to remove
>one line in dix/devices.c where the LEDs mask field of the keyboard controls
>structure is being reloaded with the actual LEDs state.  The tests will be
>passed with success.  But there will not be any way (in the core protocol)
>to know the real state of LEDs.

It is being loaded with the XKB's LED state, isn't it?

>> > >Tests for XRebindKeysym
>> > >Test   1:  FAIL
>> > 
>> > The XRebindKeysym failure goes away if XKB is disabled.
>> 
>>    Yes, it's a XKB problem/feature.
>
>It is a feature. :)
>This problem can be fixed easy too with 'one word patch'.  But there is one
>unclear thing there.
>
>The RebindKeysym mechanism allows to tie any string to a keysym or a combination
>of keysym and a set of modifiers.  The binding itself works well, the problem
>is the modifiers set interpretation.
>For example, we have a key with two keysyms [a A] and want to bind two different
>strings to combiantions Alt+a and Alt+A.  How should we specify the second
>combination - Alt + 'A', Alt + Shift + 'a' or Alt + Shift + 'A'?
>
>The core protocol's assumes the third variant, i.e. takes the keysym figured
>out with taking in account the Shift modifier but also checks all modifiers
>obtained from the key event.
>
>But the XKB-aware XLookupString 'consumes' all modifiers used at the keysym
>choosing and hide them from the routine that checks string_to_key bindins,
>i.e. it expects that the combiantion is just Alt + 'A'.
>BTW, this behavour can be swithed on/off with a special 'client side XKB' flag
>but by default XLookupString 'eats' consumed modifiers.
>
>Thus the problem is what modifiers set should the bindings check routine use.
>Shoud it always be the original 'state' field from the key event or the
>consumed modifiers may be removed from a consideration.  If we require there
>a full compatibility with the core protocol the answer is obvious.  But some
>calls in XKB-aware Xlib already have differences from core protocol ones.
>And the first form of that combination seems to me more logical (IMHO,
>of course).
>
>Side note: I wonder if anybody (anything) uses this 'rebind keysym' feature
>anywhere.
>
>On the other hand the test itself could be changed.  One way is to make it
>XKB-aware and make it set the needed flag (that turns the XLookupString
>behavior to the 'core protocol like' one).  Another way is don't use the Shift
>modifier (that can be 'eaten' under some circumstance) there.  All other
>modifiers (except Caps) would be interpreted equaly in both (with/without XKB)
>cases.

That sounds reasonable to me.  It would also be nice to add some XKB tests
to the test suite.

David
-- 
David Dawes                                     X-Oz Technologies
www.XFree86.org/~dawes                          www.x-oz.com
_______________________________________________
Devel mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/devel

Reply via email to