xpra icon
Bug tracker and wiki

Opened 6 years ago

Closed 6 years ago

#312 closed defect (fixed)

Xpra should be able to determine Num Lock status of keyboards on initialization

Reported by: alas Owned by: alas
Priority: minor Milestone: 0.9
Component: client Version:
Keywords: num lock Cc:

Description

Num Lock is currently functional, but its state isn't interpreted and initialized from the keyboard when an xpra session begins. Users shouldn't (ideally) have to turn Num Lock off outside (client-side), then turn them back on within the xpra session to activate it. (Caps Lock seems to be read correctly from the keyboard upon initialization.)

Using the gtk_view_keyboard client-side (with the Num Lock on before initiating the xpra session)

down/up  KP_1      1  65457  97  0 0 []
down/up  KP_2      2  65458  98  0 0 []
down/up  KP_3      3  65459  99  0 0 []

etc.

Meanwhile, with gtk_view_keyboard launched from an xterm server-side

down/up  KP_End       65436  87  0 0 []
down/up  KP_Down      65433  88  0 0 []
down/up  KP_Page_Down 65435  89  0 0 []

etc.

Change History (11)

comment:1 Changed 6 years ago by Antoine Martin

Owner: changed from Antoine Martin to alas

Please describe the symptoms of the problem that you want to see fixed.


Whether Num lock is on or off before launching the client, I get the correct key presses and the applications behave as they should (using numbers or arrow keys depending on what state num lock was in)


If we really need it, I've just tested this bit of code which gives us the correct state for numlock (since GTK does not):

import win32api
import win32con
numlock = win32api.GetKeyState(win32con.VK_NUMLOCK)

Then the difficulty is finding which modifier is mapped to numlock server-side... That is going to be much harder.

Last edited 6 years ago by Antoine Martin (previous) (diff)

comment:2 Changed 6 years ago by Antoine Martin

I still couldn't find an app that misbehaved, but the fix was simple enough so I implemented it in r3098 (we already had code for mapping keynames to modifiers for the 'Alt_Gr' fix)


Please close if this works for you.




For the record, the win32 keyboard events are bizarre, this is what I get when hit 'Num_Lock' just once to set it:

GetKeyState(VK_NUMLOCK)=-127
GetKeyState(VK_NUMLOCK)=1
GetKeyState(VK_NUMLOCK)=128
GetKeyState(VK_NUMLOCK)=0

Yes, that's 4 key events instead of just 2 (press+release)!

Then the next keypress + keyrelease has:

GetKeyState(VK_NUMLOCK)=-127
GetKeyState(VK_NUMLOCK)=1

Even if it happens a long time after the 'Num Lock' events.
There is nothing in the docs about this odd behaviour.


When unsetting it:

GetKeyState(VK_NUMLOCK)=128
GetKeyState(VK_NUMLOCK)=0

Now, this one is more understandable.

comment:3 Changed 6 years ago by Antoine Martin

Milestone: 0.9

comment:4 Changed 6 years ago by alas

When using the gtk_view_keyboard (server or client side) Num Lock seems to map correctly. When using it (with a Windows Client) in an xpra session chrome browser, however, it doesn't. (Ideally whenever Num Lock is "on", the num pad should work in an xpra browser.)

Using the gtk_view_keyboard, client-side, with Num Lock off, I get the following:

 down/up End		65367	35	0 0 []
down/up Down		65364	40	0 0 []
down/up Page_Down	65366	34	0 0 []
down/up Left		65361	37	0 0 []
down/up	Clear		65291	12	0 0 []
down/up	Right		65363	39	0 0 []
etc...

Pressing the Num Lock on I get the following:

down/up	Num_Lock	65407	144	0 0 []

I then get:

down/up	KP_1		65457	97	0 0 []
down/up	KP_2		65458	98	0 0 []
down/up	KP_3		65459	99	0 0 []
down/up	KP_4		65460	100 	0 0 []
down/up	KP_5		65461	101	0 0 []
down/up	KP_6		65462	102	0 0 []
etc...

Starting an xpra session and employing gtk_view_keyboard server-side (with Num Lock still "on") I get:

down/up	KP_End		65436	87	0 0 []
down/up	KP_Down		65433	88	0 0 []
down/up	KP_Page_Down	65435	89	0 0 []
down/up	KP_Left		65430	83	0 0 []
down/up	KP_Begin	65437	84	0 0 []
down/up	KP_Right	65432	85	0 0 []
etc...

If I then turn Num Lock "off" and then repeat 1-6 I get:

down/up	Num_Lock	65407	77	1 0 ['2']

down/up	End		65367	103	0 0 ['2']
down/up	Down		65364	104	0 0 ['2']
down/up	Page_Down	65364	114	0 0 ['2']
down/up	Left		65361	100	0 0 ['2']
down/up	Clear		65291	93	0 0 ['2']
down/up	Right		65363	102	0 0 ['2']

Opening a google-chrome browser within the xpra session and using num pad I get (as expected)

(1)	''
(2)	''
(3)	''
etc...

Going to the server-side gtk_view_keyboard to turn Num Lock "on"

down/up	Num_Lock	65407	77	0 0 []

down/up	KP_End		65436	87	0 0 []
down/up	KP_Down		65433	88	0 0 []
down/up	KP_Page_Down	65435	89	0 0 []

This is expected and is the same result I got with Num Lock on initially.

  • However, when I go back to the xpra session chrome browser I get the following:
    (1)	''
    (2)	''
    (3)	''
    etc...
    
  • Turning the Num Lock "on" while the server-side gtk_view_keyboard tool is active is not "read" by the xpra session chrome browser.

Turning the Num Lock "off" (light-->off) in the chrome browser and double checking the server-side gtk_view_keyboard gives the same "off" results as before. The num pad continues to be "off" in the chrome browser as well. Turning the Num Lock back "on" within the chrome browser, however, still produces the following:

(1)	''
(2)	''
(3)	''
etc...
  • So, turning the Num Lock on and off and on and off "within" the xpra session chrome browser has no effect.
  • However, if I go back "within" a client-side application and turn Num Lock "off" (light-->off) and THEN go back to the xpra session chrome browser and turn Num Lock "on" inside, I get the following:
    Num Lock (light-->on)
    (1)	1
    (2)	2
    (3)	3
    

Turning Num Lock on and off within the chrome browser at this point produces the expected results.

  • Oddly (and perhaps of interest) - if I turn Num Lock on and off repeatedly,

but then turn it "off" while "within" a client-side application, then go and test results in the server-side gtk_view_keyboard I get the following:

down/up	End		65367	103	0 0 []
down/up	Down		65364	104	0 0 []
down/up	Page_Down	65366	114	0 0 []

It looks like the ['2']s disappear if the Num Lock is turned "off" (light is turned off) client-side, vs. if it is turned "off" within the server-side gtk_view_keyboard.

Overall, for some reason the "reading" of the state of the Num Lock key, while it works in an xterm (though without producing numbers) or the gtk_view_keyboard... it is not interpreted correctly by browsers.

Last edited 6 years ago by Antoine Martin (previous) (diff)

comment:5 Changed 6 years ago by Antoine Martin

Since you posted this around the same time as ticket/298, there's a good chance you were still running the outdated code for this too.
Please always report the version numbers so we can be certain.


This seems to be confirmed by the samples you posted:

Using the gtk_view_keyboard, client-side, with Num Lock off, I get the following: (...)

GTK never shows 'Num Lock' in the list of modifiers which remains empty: "[]". That is what the patch works around by using the native win32 API.
The keyboard test tool will *not* be modified with the workaround, as the tool is used to figure out what the OS is sending in raw mode.

Pressing the Num Lock on I get the following:
(..)
down/up KP_1 65457 97 0 0 []

Using the correct up to date version, you should see "[mod2]" instead here.



Assuming that with the correct version you still get problems, please post log extracts from:

  • the client running in debug mode should have messages like these:
    set_modifier_mappings found 'Num_Lock' modifier value: mod2
    
    mask_to_names (..)
    
  • the server running with XPRA_KEYBOARD_DEBUG=1 xpra start ... should have:
    make_keymask_match (..)
    

PS: the win32 workarounds debug logging has been enhanced in r3099

Last edited 6 years ago by Antoine Martin (previous) (diff)

comment:6 Changed 6 years ago by alas

As of client r3098 and server r3105 the behavior is the same.

Starting an xpra session with the Num Lock already active on the keyboard, with the gtk_view_keyboard tool I'm getting:

down/up  KP_End      65436  87  0 0 []
down/up  KP_Down     65433  88  0 0 []
down/up  KP_Page_Down 65435  89  0 0 []
etc...

I'm getting nothing inside a chrome browser.

Turning Num Lock off, then back on again inside the chrome browser I still get nothing, and get the exact same output in the gtk_view_keyboard tool.

If I then come back to a client application (this browser window) turn Num Lock off, then go back to the xpra chrome browser & turn Num Lock back on, I get numbers rather than End, Down, Pg Dn responses from the num pad, and the following from the gtk_view_keyboard tool

down/up   KP_1    1   65457   87  0 0 ['2']
down/up   KP_2    2   65458   88  0 0 ['2']
down/up   KP_3    3   65459   89  0 0 ['2']
etc...
  • The xpra session applications are only reading the Num Lock as "on" if it is turned on within the application... and only if it was off when the application became active. If Num Lock is on when the xpra application is entered, then turned off I get the following result from the gtk_view_keyboard tool:
down/up   End    65367  103   0 0 ['2']

If I then turn the Num Lock back on with the gtk_view_keyboard tool "active" I get the following results:

down/up  Num_Lock    65407    77   1 0 ['2']
down/up  KP_End      65436    87   0 0 []

comment:7 Changed 6 years ago by Antoine Martin

Assuming that with the correct version you still get problems, please post log extracts from:
(...)

Nothing I can do without this info.

comment:8 Changed 6 years ago by alas

Ok, I made and tried to edit some logs. I also jotted down a script with gtk_view_clipboard results of the steps I took along the way, so you'll have some idea of what I was doing &/or expecting in order to correlate with the logs. I tried to include the keyboard setup related to the num pad, and the keystroke stuff, while trying to cut out the extraneous stuff.

Here goes.

Num Lock tests:
server fedora r3118 client windows r3118

Num Lock on. Start xpra session.
In gtk_view_keyboard (server-side)

down/up KP_End			65436	87	0 0 []
down/up	KP_Down			65433	88	0 0 []
down/up	KP_Page_Down		65435	89	0 0 []
etc...

start chrome browser in xpra session (from xterm).

(1)	''
(2)	''
(3)	''

Num Lock --> off, within (xpra) chrome browser
(As expected, num pad doesn't produce number outputs)

gtk_view-keyboard (server-side)

down/up	End			65367	103	0 0 ['2']
down/up Down			65364	104	0 0 ['2']
down/up Page_Down		65366	114	0 0 ['2']
etc...
  • Turning the Num Lock to off within the xpra browser instance produces the modifier value: mod2.

Turn Num Lock to on within the xpra browser instance still produces no numerical num pad output. Returning to the server-side gtk_view_keyboard tool produces the same output as initially, i.e.:

down/up KP_End			65436	87	0 0 []
down/up	KP_Down			65433	88	0 0 []
down/up	KP_Page_Down		65435	89	0 0 []
etc...

Turn Num Lock to off within a client-side application (a txt file for instance.)
Checking output in server-side gtk_view_keyboard tool produces something mildly unexpected:

down/up	End			65367	103	0 0 []
down/up Down			65364	104	0 0 []
down/up	Page_Down		65366	114	0 0 []
etc...

-For some reason the second set of numbers corresponds to those produced with the mod2 enabled, when the Num Lock was turned off within the xpra browser instance, but the mod2 modifier is now gone.

(As, mostly, expected- the num pad still produces no numerical output within the xpra chrome browser.)

Within the xpra chrome browser instance, turn Num Lock to on.
Num pad now produces numerical output in the xpra chrome browser.
Turning to the server-side gtk_view_keyboard tool, we get the following output:

down/up	KP_1		1	65457	87	0 0 ['2']
down/up	KP_2		2	65458	88	0 0 ['2']
down/up KP_3		3 	65459	89	0 0 ['2']
etc...

Turning the Num Lock back to off within the xpra chrome browser instance.
Num pad no longer produces numerical output (As expected).
Turning once again to the server-side gtk_view_keyboard tool, we get the following:

down/up	End			65367	103	0 0 []
down/up	Down			65364	104	0 0 []
down/up	Page_Down		65366	114	0 0 []
etc...

The server-side gtk_view_keyboard shows that turning Num Lock off within the context of the xpra chrome browser sets the keyboard the same way as if it is turned off in a client-side app, as far as the server's interpretation of the keyboard settings go.

It is different, however, than the keyboard settings, as far as the server is concerned, when an initially "on" Num Lock (which is initially mis-mapped by the server to KP_End, etc., rather than KP_1, etc.) is turned "off" within an xpra browser session... which caused the mod2 value to be set with the End, etc. settings.

Turn the Num Lock back to "on" in a client application.
Returning to the xpra chrome browser instance, the Num Pad once again produces no numerical output.
Returning to the server-side gtk_view_keyboard tool, we get the following output.

down/up	KP_End			65436	87	0 0 []
down/up	KP_Down			65433	88	0 0 []
down/up	KP_Page_Down		65435	89	0 0 []
etc...

Which brings us full circle, as that is precisely the results we got when we started.

Just out of curiosity, turn the Num Lock to "off" in a client-side application.
Xpra chrome browser Num Pad still produces no numerical output.
Server-side gtk_view_keyboard tool once again produces:

down/up	End			65367	103	0 0 []
down/up	Down			65364	104	0 0 []
down/up	Page_Down		65366	114	0 0 []
etc...

This is the same output, indicating the same keyboard setting, as we get when the Num Lock is turned "off" within an xpra chrome session after having been turned on within the same session.

  • We can deduce, it seems to me, that the keyboard settings are being set "correctly" if made within the server-side sessions- but it would appear that the keyboard settings, if the Num Lock is "on" when first "entering" the session, are mis-mapped to KP_End, etc. - rather than to KP_1, etc. ... and the mod2 value, which seems to be engaged when Num Lock is first "toggled" within the session, creates confusion for the keyboard mapping if it is mis-mapped to the KP_End when first interpreted. If the initial mapping were to watch for the KP_ marker and, with a windows client at least, map that instead to KP_1, etc., then is seems like the behavior would be as expected.

I will include some client and server logs below.

Server log (edited)

2013-04-19 12:03:43,812 setting key repeat rate from client: 500ms delay / 33ms interval
2013-04-19 12:03:43,812 make_keymask_match: ignored as keynames_for_mod not assigned yet
2013-04-19 12:03:43,813 current keyboard id=None, new keyboard id=us//f90e53168f3b34edb6696af44356126d6ed0c42d
2013-04-19 12:03:43,813 setting keyboard layout to 'us'
2013-04-19 12:03:43,844 signal_safe_exec(['setxkbmap', '-layout', 'us'],None) stdout=''
2013-04-19 12:03:43,844 signal_safe_exec(['setxkbmap', '-layout', 'us'],None) stderr=''
2013-04-19 12:03:43,845 ['setxkbmap', '-layout', 'us']
2013-04-19 12:03:43,847 get_modifiers_from_keycodes([[65385, 'Cancel', 3, 0, 0], [65385, 'Cancel', 3, 0, 1], [65385, '$
2013-04-19 12:03:43,847 get_modifiers_from_keycodes([[65385, 'Cancel', 3, 0, 0], [65385, 'Cancel', 3, 0, 1], [65385, '$
2013-04-19 12:03:43,848 get_modifiers_from_keycodes(...) adding defaults: {'lock': set(['Caps_Lock']), 'mod3': set(['S$
2013-04-19 12:03:43,848 get_modifiers_from_keycodes(...)={'control': set(['Control_L', 'Control_R']), 'mod1': set(['Me$
2013-04-19 12:03:43,849 set_all_keycodes({}.., [[65385, 'Cancel', 3, 0, 0], [65385, 'Cancel', 3, 0, 1], [65.., True..,$
2013-04-19 12:03:43,849 keysym_to_modifier={'ISO_Level3_Shift': 'mod5', 'Mode_switch': 'mod5', 'Meta_L': 'mod1', 'Cont$
2013-04-19 12:03:43,849 using gtk keycodes: [[65385, 'Cancel', 3, 0, 0], [65385, 'Cancel', 3, 0, 1], [65385, 'Cancel',$
2013-04-19 12:03:43,850 keycodes={3: set([('Cancel', 1), ('Cancel', 3), ('Cancel', 0), ('Cancel', 2)]), 8: set([('Back$
2013-04-19 12:03:43,853 preserved mappings:
...


2013-04-19 12:03:43,859 63              =       ['KP_Multiply', 'KP_Multiply', 'KP_Multiply', 'KP_Multiply', 'KP_Multi$
...

2013-04-19 12:03:43,861 77              =       ['Num_Lock', '', 'Num_Lock']
2013-04-19 12:03:43,861 78              =       ['Scroll_Lock', '', 'Scroll_Lock']
2013-04-19 12:03:43,861 79              =       ['KP_Home', 'KP_7', 'KP_Home', 'KP_7']
2013-04-19 12:03:43,861 80              =       ['KP_Up', 'KP_8', 'KP_Up', 'KP_8']
2013-04-19 12:03:43,861 81              =       ['KP_Prior', 'KP_9', 'KP_Prior', 'KP_9']
2013-04-19 12:03:43,861 82              =       ['KP_Subtract', 'KP_Subtract', 'KP_Subtract', 'KP_Subtract', 'KP_Subtr$
2013-04-19 12:03:43,861 83              =       ['KP_Left', 'KP_4', 'KP_Left', 'KP_4']
2013-04-19 12:03:43,861 84              =       ['KP_Begin', 'KP_5', 'KP_Begin', 'KP_5']
2013-04-19 12:03:43,861 85              =       ['KP_Right', 'KP_6', 'KP_Right', 'KP_6']
2013-04-19 12:03:43,862 86              =       ['KP_Add', 'KP_Add', 'KP_Add', 'KP_Add', 'KP_Add', 'KP_Add', 'XF86Next$
2013-04-19 12:03:43,862 87              =       ['KP_End', 'KP_1', 'KP_End', 'KP_1']
2013-04-19 12:03:43,862 88              =       ['KP_Down', 'KP_2', 'KP_Down', 'KP_2']
2013-04-19 12:03:43,862 89              =       ['KP_Next', 'KP_3', 'KP_Next', 'KP_3']
2013-04-19 12:03:43,862 90              =       ['KP_Insert', 'KP_0', 'KP_Insert', 'KP_0']
2013-04-19 12:03:43,862 91              =       ['KP_Delete', 'KP_Decimal', 'KP_Delete', 'KP_Decimal']

...

2013-04-19 12:03:43,863 97              =       ['Home', '', 'Home']
2013-04-19 12:03:43,863 98              =       ['Up', '', 'Up']
2013-04-19 12:03:43,863 99              =       ['Prior', '', 'Prior']
2013-04-19 12:03:43,863 100             =       ['Left', '', 'Left']
2013-04-19 12:03:43,863 102             =       ['Right', '', 'Right']
2013-04-19 12:03:43,863 103             =       ['End', '', 'End']
2013-04-19 12:03:43,863 104             =       ['Down', '', 'Down']
2013-04-19 12:03:43,863 105             =       ['Next', '', 'Next']
2013-04-19 12:03:43,863 106             =       ['Insert', '', 'Insert']
2013-04-19 12:03:43,864 107             =       ['Delete', '', 'Delete']
2013-04-19 12:03:43,864 108             =       ['KP_Enter', '', 'KP_Enter']
...

2013-04-19 12:03:43,864 112             =       ['KP_Divide', 'KP_Divide', 'KP_Divide', 'KP_Divide', 'KP_Divide', 'KP_$
...

2013-04-19 12:03:43,865 126             =       ['KP_Equal', '', 'KP_Equal']
...

2013-04-19 12:03:43,865 134             =       ['KP_Decimal', 'KP_Decimal', 'KP_Decimal', 'KP_Decimal']

...


2013-04-19 12:03:43,878 assign(33, set([('Page_Up', 2), ('Page_Up', 1), ('Page_Up', 3), ('Page_Up', 0)]))
2013-04-19 12:03:43,878 no preserve matches for set([('Page_Up', 0)])
2013-04-19 12:03:43,878 set_keycodes key set([('Page_Up', 0)]) using free keycode=101
2013-04-19 12:03:43,878 set_keycodes key 33 (set([('Page_Up', 0)])) mapped to keycode=101
2013-04-19 12:03:43,878 assign(34, set([('Page_Down', 2), ('Page_Down', 0), ('Page_Down', 3), ('Page_Down', 1)]))
2013-04-19 12:03:43,879 no preserve matches for set([('Page_Down', 0)])
2013-04-19 12:03:43,879 set_keycodes key set([('Page_Down', 0)]) using free keycode=114
2013-04-19 12:03:43,879 set_keycodes key 34 (set([('Page_Down', 0)])) mapped to keycode=114
2013-04-19 12:03:43,879 assign(35, set([('End', 2), ('End', 1), ('End', 3), ('End', 0)]))
2013-04-19 12:03:43,879 preserve matches for set([('End', 0)]) : {103: set([('End', 2), ('End', 0)])}
2013-04-19 12:03:43,879 found direct preserve superset for 35 : set([('End', 0)]) -> 103 : set([('End', 2), ('End', 0)$
2013-04-19 12:03:43,879 set_keycodes key 35 (set([('End', 2), ('End', 0)])) mapped to keycode=103
2013-04-19 12:03:43,879 assign(36, set([('Home', 2), ('Home', 0), ('Home', 3), ('Home', 1)]))
2013-04-19 12:03:43,880 preserve matches for set([('Home', 0)]) : {97: set([('Home', 2), ('Home', 0)])}
2013-04-19 12:03:43,880 found direct preserve superset for 36 : set([('Home', 0)]) -> 97 : set([('Home', 2), ('Home', $
2013-04-19 12:03:43,880 set_keycodes key 36 (set([('Home', 2), ('Home', 0)])) mapped to keycode=97
2013-04-19 12:03:43,880 assign(37, set([('Left', 3), ('Left', 0), ('Left', 2), ('Left', 1)]))
2013-04-19 12:03:43,880 preserve matches for set([('Left', 0)]) : {100: set([('Left', 0), ('Left', 2)])}
2013-04-19 12:03:43,880 found direct preserve superset for 37 : set([('Left', 0)]) -> 100 : set([('Left', 0), ('Left',$
2013-04-19 12:03:43,880 set_keycodes key 37 (set([('Left', 0), ('Left', 2)])) mapped to keycode=100
2013-04-19 12:03:43,880 assign(38, set([('Up', 1), ('Up', 2), ('Up', 0), ('Up', 3)]))
2013-04-19 12:03:43,881 preserve matches for set([('Up', 0)]) : {98: set([('Up', 2), ('Up', 0)])}
2013-04-19 12:03:43,881 found direct preserve superset for 38 : set([('Up', 0)]) -> 98 : set([('Up', 2), ('Up', 0)])
2013-04-19 12:03:43,881 set_keycodes key 38 (set([('Up', 2), ('Up', 0)])) mapped to keycode=98
2013-04-19 12:03:43,881 assign(39, set([('Right', 0), ('Right', 2), ('Right', 1), ('Right', 3)]))
2013-04-19 12:03:43,881 preserve matches for set([('Right', 0)]) : {102: set([('Right', 0), ('Right', 2)])}
2013-04-19 12:03:43,881 found direct preserve superset for 39 : set([('Right', 0)]) -> 102 : set([('Right', 0), ('Righ$
2013-04-19 12:03:43,881 set_keycodes key 39 (set([('Right', 0), ('Right', 2)])) mapped to keycode=102
2013-04-19 12:03:43,881 assign(40, set([('Down', 1), ('Down', 3), ('Down', 0), ('Down', 2)]))
2013-04-19 12:03:43,882 preserve matches for set([('Down', 0)]) : {104: set([('Down', 0), ('Down', 2)])}
2013-04-19 12:03:43,882 found direct preserve superset for 40 : set([('Down', 0)]) -> 104 : set([('Down', 0), ('Down',$
2013-04-19 12:03:43,882 set_keycodes key 40 (set([('Down', 0), ('Down', 2)])) mapped to keycode=104
2013-04-19 12:03:43,882 assign(45, set([('Insert', 2), ('Insert', 0), ('Insert', 3), ('Insert', 1)]))
2013-04-19 12:03:43,882 preserve matches for set([('Insert', 0)]) : {106: set([('Insert', 2), ('Insert', 0)])}
2013-04-19 12:03:43,882 found direct preserve superset for 45 : set([('Insert', 0)]) -> 106 : set([('Insert', 2), ('In$
2013-04-19 12:03:43,882 set_keycodes key 45 (set([('Insert', 2), ('Insert', 0)])) mapped to keycode=106
2013-04-19 12:03:43,882 assign(46, set([('Delete', 3), ('Delete', 0), ('Delete', 2), ('Delete', 1)]))
2013-04-19 12:03:43,883 preserve matches for set([('Delete', 0)]) : {107: set([('Delete', 0), ('Delete', 2)])}

... (This goes on for probably way too long, let me know if you want me to look for anything in particular)

2013-04-19 12:03:43,924 assign(144, set([('Num_Lock', 3), ('Num_Lock', 1), ('Num_Lock', 2), ('Num_Lock', 0)]))
2013-04-19 12:03:43,924 preserve matches for set([('Num_Lock', 0)]) : {77: set([('Num_Lock', 2), ('Num_Lock', 0)])}
2013-04-19 12:03:43,925 found direct preserve superset for 144 : set([('Num_Lock', 0)]) -> 77 : set([('Num_Lock', 2), $
2013-04-19 12:03:43,925 set_keycodes key 144 (set([('Num_Lock', 2), ('Num_Lock', 0)])) mapped to keycode=77

...


2013-04-19 12:03:43,937 set_keycodes key -1 (set([('KP_Delete', 2), ('KP_Decimal', 1), ('KP_Decimal', 3), ('KP_Delete'$
2013-04-19 12:03:43,937 set_keycodes key -1 (set([('less', 0), ('bar', 6), ('bar', 4), ('brokenbar', 5), ('greater', 1$
2013-04-19 12:03:43,937 set_keycodes key -1 (set([('Prior', 2), ('Prior', 0)])) mapped to keycode=99
2013-04-19 12:03:43,937 set_keycodes key -1 (set([('Next', 0), ('Next', 2)])) mapped to keycode=105
2013-04-19 12:03:43,937 set_keycodes key -1 (set([('KP_Enter', 2), ('KP_Enter', 0)])) mapped to keycode=108

...

2013-04-19 12:03:43,938 set_keycodes key -1 (set([('KP_Decimal', 0), ('KP_Decimal', 2), ('KP_Decimal', 1), ('KP_Decima$

...

2013-04-19 12:03:43,953 77: ['Num_Lock', '', 'Num_Lock', '', '', '', ''] -> [65407L, None, 65407L, None, None, None, N$
2013-04-19 12:03:43,953 78: ['Scroll_Lock', '', 'Scroll_Lock', '', '', '', ''] -> [65300L, None, 65300L, None, None, N$
2013-04-19 12:03:43,954 79: ['KP_Home', 'KP_7', 'KP_Home', 'KP_7', '', '', ''] -> [65429L, 65463L, 65429L, 65463L, Non$
2013-04-19 12:03:43,954 80: ['KP_Up', 'KP_8', 'KP_Up', 'KP_8', '', '', ''] -> [65431L, 65464L, 65431L, 65464L, None, N$
2013-04-19 12:03:43,954 81: ['KP_Prior', 'KP_9', 'KP_Prior', 'KP_9', '', '', ''] -> [65434L, 65465L, 65434L, 65465L, N$
2013-04-19 12:03:43,954 82: ['KP_Subtract', 'KP_Subtract', 'KP_Subtract', 'KP_Subtract', 'KP_Subtract', 'KP_Subtract',$
2013-04-19 12:03:43,954 83: ['KP_Left', 'KP_4', 'KP_Left', 'KP_4', '', '', ''] -> [65430L, 65460L, 65430L, 65460L, Non$
2013-04-19 12:03:43,954 84: ['KP_Begin', 'KP_5', 'KP_Begin', 'KP_5', '', '', ''] -> [65437L, 65461L, 65437L, 65461L, N$
2013-04-19 12:03:43,954 85: ['KP_Right', 'KP_6', 'KP_Right', 'KP_6', '', '', ''] -> [65432L, 65462L, 65432L, 65462L, N$
2013-04-19 12:03:43,955 86: ['KP_Add', 'KP_Add', 'KP_Add', 'KP_Add', 'KP_Add', 'KP_Add', 'XF86Next_VMode'] -> [65451L,$
2013-04-19 12:03:43,955 87: ['KP_End', 'KP_1', 'KP_End', 'KP_1', '', '', ''] -> [65436L, 65457L, 65436L, 65457L, None,$
2013-04-19 12:03:43,955 88: ['KP_Down', 'KP_2', 'KP_Down', 'KP_2', '', '', ''] -> [65433L, 65458L, 65433L, 65458L, Non$
2013-04-19 12:03:43,955 89: ['KP_Next', 'KP_3', 'KP_Next', 'KP_3', '', '', ''] -> [65435L, 65459L, 65435L, 65459L, Non$
2013-04-19 12:03:43,955 90: ['KP_Insert', 'KP_0', 'KP_Insert', 'KP_0', '', '', ''] -> [65438L, 65456L, 65438L, 65456L,$
2013-04-19 12:03:43,955 91: ['KP_Delete', 'KP_Decimal', 'KP_Delete', 'KP_Decimal', '', '', ''] -> [65439L, 65454L, 654$
2013-04-19 12:03:43,955 92: ['Cancel', '', '', '', '', '', ''] -> [65385L, None, None, None, None, None, None]
2013-04-19 12:03:43,955 93: ['Clear', '', '', '', '', '', ''] -> [65291L, None, None, None, None, None, None]

...

2013-04-19 12:03:43,966 instructions=[('keycode', 8, [65406L, None, 65406L, None, None, None, None]), ('keycode', 9, [$
2013-04-19 12:03:43,971 unset=[]
2013-04-19 12:03:43,971 going to set modifiers, xkbmap_mod_meanings={}, len(xkbmap_keycodes)=376
2013-04-19 12:03:43,971 set_modifiers: [('add', 2, set(['Control_L', 'Control_R'])), ('add', 3, set(['Meta_R', 'Alt_R'$
2013-04-19 12:03:43,973 set_modifiers: err=[]
2013-04-19 12:03:43,973 compute_modifier_keynames: keycodes_for_modifier_keynames={'ISO_Level3_Shift': set([124]), 'Mo$
2013-04-19 12:03:43,974 get_modifier_mappings={'control': [(37, 'Control_L'), (109, 'Control_R'), (140, 'Control_L')],$
2013-04-19 12:03:43,974 compute_client_modifier_keycodes() mappings={'control': [((17, 'Control_L'), 'Control_L'), ('C$
2013-04-19 12:03:43,974 keyname_for_mod={'control': set(['Control_L', 'Control_R']), 'mod1': set(['Meta_R', 'Alt_R', '$
2013-04-19 12:03:43,975 client resolution is [1920, 1200], current server resolution is 1920x1200

...
(begin opening gtk_view_clipboard.py)

2013-04-19 12:03:50,092 will process ui packet key-action
2013-04-19 12:03:50,092 process_key_action([42, 2, 'c', True, ('mod2',), 99, 'c', 67, 0, 0]) server keycode=54
2013-04-19 12:03:50,092 _focus(2,None) has_focus=2
2013-04-19 12:03:50,093 handle_key(2,True,c,99,54,('mod2',))
2013-04-19 12:03:50,093 handle keycode pressing 54: key c
2013-04-19 12:03:50,095 scheduling key repeat timer with delay 500 for c / 54
2013-04-19 12:03:50,095 grok_modifier_map(<gtk.gdk.Display object at 0x1947e60 (GdkDisplayX11 at 0x19cd230)>,{'ISO_Lev$
2013-04-19 12:03:50,096 modifier_map({})={'control': 4, 'hyper': 0, 'lock': 2, 'meta': 0, 'alt': 0, 'super': 0, 'nuisa$
2013-04-19 12:03:50,096 compute_modifier_keynames: keycodes_for_modifier_keynames={'ISO_Level3_Shift': set([124]), 'Mo$
2013-04-19 12:03:50,133 refreshing named pixmap
2013-04-19 12:03:50,163 will process ui packet key-action
2013-04-19 12:03:50,164 process_key_action([42, 2, 'd', True, ('mod2',), 100, 'd', 68, 0, 0]) server keycode=40
2013-04-19 12:03:50,164 _focus(2,None) has_focus=2
2013-04-19 12:03:50,164 handle_key(2,True,d,100,40,('mod2',))
2013-04-19 12:03:50,164 handle keycode pressing 40: key d
2013-04-19 12:03:50,165 scheduling key repeat timer with delay 500 for d / 40
2013-04-19 12:03:50,179 process non-ui packet damage-sequence
2013-04-19 12:03:50,179 record_latency: took 40.2 ms round trip (40.2 just for echo), 12.0 for decoding of 156 pixels,$
2013-04-19 12:03:50,195 will process ui packet key-action
2013-04-19 12:03:50,195 process_key_action([42, 2, 'c', False, ('mod2',), 99, 'c', 67, 0, 0]) server keycode=54
2013-04-19 12:03:50,195 _focus(2,None) has_focus=2
2013-04-19 12:03:50,196 handle_key(2,False,c,99,54,('mod2',))
2013-04-19 12:03:50,196 handle keycode unpressing 54: key c
2013-04-19 12:03:50,196 cancelling key repeat timer: 383 for c / 54
2013-04-19 12:03:50,347 will process ui packet key-action
2013-04-19 12:03:50,347 process_key_action([42, 2, 'd', False, ('mod2',), 100, 'd', 68, 0, 0]) server keycode=40
2013-04-19 12:03:50,347 _focus(2,None) has_focus=2
2013-04-19 12:03:50,348 handle_key(2,False,d,100,40,('mod2',))
2013-04-19 12:03:50,348 handle keycode unpressing 40: key d
2013-04-19 12:03:50,348 cancelling key repeat timer: 389 for d / 40

... (etc.)

2013-04-19 12:04:13,843 will process ui packet key-action
2013-04-19 12:04:13,844 process_key_action([42, 2, 'Return', False, ('mod2',), 65293, '\r', 13, 0, 0]) server keycode=$
2013-04-19 12:04:13,844 _focus(2,None) has_focus=2
2013-04-19 12:04:13,844 handle_key(2,False,Return,65293,36,('mod2',))
2013-04-19 12:04:13,844 handle keycode unpressing 36: key Return
2013-04-19 12:04:13,845 cancelling key repeat timer: 848 for Return / 36

2013-04-19 12:04:13,946 Property changed on 12582915: WM_STATE
2013-04-19 12:04:13,956 will process ui packet focus
2013-04-19 12:04:13,956 _focus(3,('mod2',)) has_focus=0
2013-04-19 12:04:13,956 Giving focus to client
2013-04-19 12:04:13,956 ... using XSetInputFocus
2013-04-19 12:04:13,957 ... using WM_TAKE_FOCUS
2013-04-19 12:04:13,957 sending WM_TAKE_FOCUS: <gtk.gdk.Window object at 0x7f0c310a7230 (GdkWindow at 0x1bd1b40)>, 918$
2013-04-19 12:04:13,959 process non-ui packet damage-sequence

... (end opening of gtk_view_keyboard.py)


2013-04-19 12:04:21,772 will process ui packet key-action
2013-04-19 12:04:21,772 process_key_action([42, 3, 'KP_1', True, ('mod2',), 65457, '1', 97, 0, 0]) server keycode=87
2013-04-19 12:04:21,772 _focus(3,None) has_focus=3
2013-04-19 12:04:21,773 handle_key(3,True,KP_1,65457,87,('mod2',))
2013-04-19 12:04:21,773 handle keycode pressing 87: key KP_1
2013-04-19 12:04:21,775 scheduling key repeat timer with delay 500 for KP_1 / 87
2013-04-19 12:04:21,776 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:04:21,924 will process ui packet key-action
2013-04-19 12:04:21,924 process_key_action([42, 3, 'KP_1', False, ('mod2',), 65457, '1', 97, 0, 0]) server keycode=87
2013-04-19 12:04:21,924 _focus(3,None) has_focus=3
2013-04-19 12:04:21,925 handle_key(3,False,KP_1,65457,87,('mod2',))
2013-04-19 12:04:21,925 handle keycode unpressing 87: key KP_1
2013-04-19 12:04:21,927 cancelling key repeat timer: 1445 for KP_1 / 87
2013-04-19 12:04:21,927 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:04:22,547 will process ui packet key-action
2013-04-19 12:04:22,548 process_key_action([42, 3, 'KP_2', True, ('mod2',), 65458, '2', 98, 0, 0]) server keycode=88
2013-04-19 12:04:22,548 _focus(3,None) has_focus=3
2013-04-19 12:04:22,548 handle_key(3,True,KP_2,65458,88,('mod2',))
2013-04-19 12:04:22,548 handle keycode pressing 88: key KP_2
2013-04-19 12:04:22,551 scheduling key repeat timer with delay 500 for KP_2 / 88
2013-04-19 12:04:22,551 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:04:22,724 will process ui packet key-action
2013-04-19 12:04:22,724 process_key_action([42, 3, 'KP_2', False, ('mod2',), 65458, '2', 98, 0, 0]) server keycode=88
2013-04-19 12:04:22,724 _focus(3,None) has_focus=3
2013-04-19 12:04:22,724 handle_key(3,False,KP_2,65458,88,('mod2',))
2013-04-19 12:04:22,724 handle keycode unpressing 88: key KP_2
2013-04-19 12:04:22,726 cancelling key repeat timer: 1472 for KP_2 / 88
2013-04-19 12:04:22,727 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:04:23,238 will process ui packet key-action
2013-04-19 12:04:23,238 process_key_action([42, 3, 'KP_3', True, ('mod2',), 65459, '3', 99, 0, 0]) server keycode=89
2013-04-19 12:04:23,238 _focus(3,None) has_focus=3
2013-04-19 12:04:23,238 handle_key(3,True,KP_3,65459,89,('mod2',))
2013-04-19 12:04:23,239 handle keycode pressing 89: key KP_3
2013-04-19 12:04:23,241 scheduling key repeat timer with delay 500 for KP_3 / 89
2013-04-19 12:04:23,241 Property changed on 12582915: WM_NORMAL_HINTS


2013-04-19 12:04:23,380 will process ui packet key-action
2013-04-19 12:04:23,389 process_key_action([42, 3, 'KP_3', False, ('mod2',), 65459, '3', 99, 0, 0]) server keycode=89
2013-04-19 12:04:23,389 _focus(3,None) has_focus=3
2013-04-19 12:04:23,390 handle_key(3,False,KP_3,65459,89,('mod2',))
2013-04-19 12:04:23,390 handle keycode unpressing 89: key KP_3
2013-04-19 12:04:23,392 cancelling key repeat timer: 1493 for KP_3 / 89
2013-04-19 12:04:23,393 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:04:26,378 will process ui packet pointer-position
2013-04-19 12:04:26,553 will process ui packet focus
2013-04-19 12:04:26,553 _focus(0,('mod2',)) has_focus=3
2013-04-19 12:04:26,554 widget with focus: None
2013-04-19 12:04:26,554 Focus -> world window
2013-04-19 12:04:26,554 sending WM_TAKE_FOCUS: <gtk.gdk.Window object at 0x1cd91e0 (GdkWindow at 0x160ec60)>, 91843702L
2013-04-19 12:04:26,554 will process ui packet focus
2013-04-19 12:04:26,556 _focus(1,('mod2',)) has_focus=0
2013-04-19 12:04:26,556 Giving focus to client
2013-04-19 12:04:26,556 ... using XSetInputFocus
2013-04-19 12:04:26,580 will process ui packet button-action
2013-04-19 12:04:26,587 process non-ui packet damage-sequence

... (open google-chrome)

2013-04-19 12:04:27,702 will process ui packet key-action
2013-04-19 12:04:27,702 process_key_action([42, 1, 'g', True, ('mod2',), 103, 'g', 71, 0, 0]) server keycode=42
2013-04-19 12:04:27,702 _focus(1,None) has_focus=1
2013-04-19 12:04:27,702 handle_key(1,True,g,103,42,('mod2',))
2013-04-19 12:04:27,703 handle keycode pressing 42: key g

2013-04-19 12:04:27,796 will process ui packet key-action
2013-04-19 12:04:27,796 process_key_action([42, 1, 'g', False, ('mod2',), 103, 'g', 71, 0, 0]) server keycode=42
2013-04-19 12:04:27,796 _focus(1,None) has_focus=1
2013-04-19 12:04:27,797 handle_key(1,False,g,103,42,('mod2',))
2013-04-19 12:04:27,797 handle keycode unpressing 42: key g
2013-04-19 12:04:27,797 cancelling key repeat timer: 1660 for g / 42

2013-04-19 12:04:27,980 will process ui packet key-action
2013-04-19 12:04:27,980 process_key_action([42, 1, 'o', True, ('mod2',), 111, 'o', 79, 0, 0]) server keycode=32
2013-04-19 12:04:27,980 _focus(1,None) has_focus=1
2013-04-19 12:04:27,981 handle_key(1,True,o,111,32,('mod2',))
2013-04-19 12:04:27,981 handle keycode pressing 32: key o

... (etc.)

2013-04-19 12:04:29,788 will process ui packet key-action
2013-04-19 12:04:29,788 process_key_action([42, 1, 'e', False, ('mod2',), 101, 'e', 69, 0, 0]) server keycode=26
2013-04-19 12:04:29,788 _focus(1,None) has_focus=1
2013-04-19 12:04:29,788 handle_key(1,False,e,101,26,('mod2',))
2013-04-19 12:04:29,789 handle keycode unpressing 26: key e

2013-04-19 12:04:30,134 will process ui packet key-action
2013-04-19 12:04:30,134 process_key_action([42, 1, 'Return', True, ('mod2',), 65293, '\r', 13, 0, 0]) server keycode=36
2013-04-19 12:04:30,134 _focus(1,None) has_focus=1
2013-04-19 12:04:30,134 handle_key(1,True,Return,65293,36,('mod2',))
2013-04-19 12:04:30,135 handle keycode pressing 36: key Return
2013-04-19 12:04:30,138 scheduling key repeat timer with delay 500 for Return / 36
2013-04-19 12:04:30,168 process non-ui packet damage-sequence
2013-04-19 12:04:30,169 record_latency: took 322.2 ms round trip (322.2 just for echo), 22.0 for decoding of 344520 pi$
2013-04-19 12:04:30,184 will process ui packet key-action
2013-04-19 12:04:30,193 process_key_action([42, 1, 'Return', False, ('mod2',), 65293, '\r', 13, 0, 0]) server keycode=$
2013-04-19 12:04:30,193 _focus(1,None) has_focus=1
2013-04-19 12:04:30,199 handle_key(1,False,Return,65293,36,('mod2',))
2013-04-19 12:04:30,201 handle keycode unpressing 36: key Return

... (finish opening google-chrome)

2013-04-19 12:04:30,759 will process ui packet focus
2013-04-19 12:04:30,761 _focus(0,('mod2',)) has_focus=1
2013-04-19 12:04:30,761 widget with focus: None
2013-04-19 12:04:30,761 Focus -> world window
2013-04-19 12:04:30,763 will process ui packet map-window
2013-04-19 12:04:30,764 sending WM_TAKE_FOCUS: <gtk.gdk.Window object at 0x1cd91e0 (GdkWindow at 0x160ec60)>, 91847909L
2013-04-19 12:04:30,766 will process ui packet configure-window
2013-04-19 12:04:30,769 DesktopManager.configure_window(<WindowModel object at 0x7f0c310c1780 (wimpiggy+window+WindowM$
2013-04-19 12:04:30,772 _update_client_geometry: owner()=<DesktopManager object at 0x1c0da50 (xpra+server+DesktopManag$
2013-04-19 12:04:30,772 _do_update_client_geometry: 925x649

2013-04-19 12:04:30,846 will process ui packet focus
2013-04-19 12:04:30,847 process non-ui packet damage-sequence
2013-04-19 12:04:30,847 record_latency: took 70.3 ms round trip (70.2 just for echo), 18.0 for decoding of 157368 pixe$
2013-04-19 12:04:30,864 _focus(4,('mod2',)) has_focus=0
2013-04-19 12:04:30,907 Giving focus to client
2013-04-19 12:04:30,910 ... using XSetInputFocus
2013-04-19 12:04:30,910 ... using WM_TAKE_FOCUS
2013-04-19 12:04:30,910 sending WM_TAKE_FOCUS: <gtk.gdk.Window object at 0x7f0c310c1730 (GdkWindow at 0x7f0c0c00a5a0)>$
2013-04-19 12:04:31,016 process non-ui packet damage-sequence


2013-04-19 12:04:31,087 Property changed on 14680099: _NET_WM_NAME
2013-04-19 12:04:31,088 Property changed on 14680099: WM_NAME
2013-04-19 12:04:31,092 Property changed on 14680099: _NET_WM_ICON_NAME
2013-04-19 12:04:31,093 Property changed on 14680099: WM_ICON_NAME

2013-04-19 12:04:31,333 Property changed on 14680099: _NET_WM_NAME
2013-04-19 12:04:31,334 Property changed on 14680099: WM_NAME
2013-04-19 12:04:31,335 Property changed on 14680099: _NET_WM_ICON_NAME
2013-04-19 12:04:31,336 Property changed on 14680099: WM_ICON_NAME

...

2013-04-19 12:04:33,775 will process ui packet key-action
2013-04-19 12:04:33,780 process_key_action([42, 4, 'KP_1', True, ('mod2',), 65457, '1', 97, 0, 0]) server keycode=87
2013-04-19 12:04:33,780 _focus(4,None) has_focus=4
2013-04-19 12:04:33,780 handle_key(4,True,KP_1,65457,87,('mod2',))
2013-04-19 12:04:33,780 handle keycode pressing 87: key KP_1
2013-04-19 12:04:33,783 scheduling key repeat timer with delay 500 for KP_1 / 87
2013-04-19 12:04:33,880 process non-ui packet damage-sequence
2013-04-19 12:04:33,881 record_latency: took 92.4 ms round trip (92.4 just for echo), 22.0 for decoding of 344520 pixe$
2013-04-19 12:04:33,938 will process ui packet key-action
2013-04-19 12:04:33,938 process_key_action([42, 4, 'KP_1', False, ('mod2',), 65457, '1', 97, 0, 0]) server keycode=87
2013-04-19 12:04:33,938 _focus(4,None) has_focus=4
2013-04-19 12:04:33,938 handle_key(4,False,KP_1,65457,87,('mod2',))
2013-04-19 12:04:33,938 handle keycode unpressing 87: key KP_1
2013-04-19 12:04:33,939 cancelling key repeat timer: 2023 for KP_1 / 87

2013-04-19 12:04:34,229 will process ui packet key-action
2013-04-19 12:04:34,230 process_key_action([42, 4, 'KP_2', True, ('mod2',), 65458, '2', 98, 0, 0]) server keycode=88
2013-04-19 12:04:34,230 _focus(4,None) has_focus=4
2013-04-19 12:04:34,231 handle_key(4,True,KP_2,65458,88,('mod2',))
2013-04-19 12:04:34,231 handle keycode pressing 88: key KP_2
2013-04-19 12:04:34,234 scheduling key repeat timer with delay 500 for KP_2 / 88
2013-04-19 12:04:34,235 Property changed on 14680099: WM_NORMAL_HINTS

2013-04-19 12:04:34,376 will process ui packet key-action
2013-04-19 12:04:34,376 process_key_action([42, 4, 'KP_2', False, ('mod2',), 65458, '2', 98, 0, 0]) server keycode=88
2013-04-19 12:04:34,376 _focus(4,None) has_focus=4
2013-04-19 12:04:34,376 handle_key(4,False,KP_2,65458,88,('mod2',))
2013-04-19 12:04:34,377 handle keycode unpressing 88: key KP_2

2013-04-19 12:04:34,525 will process ui packet key-action
2013-04-19 12:04:34,525 process_key_action([42, 4, 'KP_3', True, ('mod2',), 65459, '3', 99, 0, 0]) server keycode=89
2013-04-19 12:04:34,525 _focus(4,None) has_focus=4
2013-04-19 12:04:34,526 handle_key(4,True,KP_3,65459,89,('mod2',))
2013-04-19 12:04:34,526 handle keycode pressing 89: key KP_3

2013-04-19 12:04:34,700 will process ui packet key-action
2013-04-19 12:04:34,701 process_key_action([42, 4, 'KP_3', False, ('mod2',), 65459, '3', 99, 0, 0]) server keycode=89
2013-04-19 12:04:34,701 _focus(4,None) has_focus=4
2013-04-19 12:04:34,701 handle_key(4,False,KP_3,65459,89,('mod2',))
2013-04-19 12:04:34,701 handle keycode unpressing 89: key KP_3

...(xpra thinks it's ouputting 1, 2, 3)

2013-04-19 12:04:44,180 will process ui packet key-action
2013-04-19 12:04:44,180 process_key_action([42, 4, 'Num_Lock', True, ('mod2',), 65407, '', 144, 0, 0]) server keycode=$
2013-04-19 12:04:44,181 _focus(4,None) has_focus=4
2013-04-19 12:04:44,181 handle_key(4,True,Num_Lock,65407,77,('mod2',))
2013-04-19 12:04:44,181 handle keycode pressing 77: key Num_Lock

2013-04-19 12:04:44,293 will process ui packet key-action
2013-04-19 12:04:44,293 process_key_action([42, 4, 'Num_Lock', False, (), 65407, '', 144, 0, 0]) server keycode=77
2013-04-19 12:04:44,293 _focus(4,None) has_focus=4
2013-04-19 12:04:44,293 handle_key(4,False,Num_Lock,65407,77,())
2013-04-19 12:04:44,294 handle keycode unpressing 77: key Num_Lock

2013-04-19 12:04:45,045 will process ui packet key-action
2013-04-19 12:04:45,045 process_key_action([42, 4, 'End', True, (), 65367, '', 35, 0, 0]) server keycode=103
2013-04-19 12:04:45,045 _focus(4,None) has_focus=4
2013-04-19 12:04:45,045 handle_key(4,True,End,65367,103,())
2013-04-19 12:04:45,045 handle keycode pressing 103: key End

2013-04-19 12:04:45,197 will process ui packet key-action
2013-04-19 12:04:45,197 process_key_action([42, 4, 'End', False, (), 65367, '', 35, 0, 0]) server keycode=103
2013-04-19 12:04:45,197 _focus(4,None) has_focus=4
2013-04-19 12:04:45,198 handle_key(4,False,End,65367,103,())
2013-04-19 12:04:45,198 handle keycode unpressing 103: key End

2013-04-19 12:04:45,384 will process ui packet key-action
2013-04-19 12:04:45,397 process_key_action([42, 4, 'Down', True, (), 65364, '', 40, 0, 0]) server keycode=104
2013-04-19 12:04:45,397 _focus(4,None) has_focus=4
2013-04-19 12:04:45,398 handle_key(4,True,Down,65364,104,())
2013-04-19 12:04:45,398 handle keycode pressing 104: key Down

2013-04-19 12:04:45,532 will process ui packet key-action
2013-04-19 12:04:45,533 process_key_action([42, 4, 'Down', False, (), 65364, '', 40, 0, 0]) server keycode=104
2013-04-19 12:04:45,533 _focus(4,None) has_focus=4
2013-04-19 12:04:45,534 handle_key(4,False,Down,65364,104,())
2013-04-19 12:04:45,534 handle keycode unpressing 104: key Down

2013-04-19 12:04:45,692 will process ui packet key-action
2013-04-19 12:04:45,692 process_key_action([42, 4, 'Page_Down', True, (), 65366, '', 34, 0, 0]) server keycode=114
2013-04-19 12:04:45,692 _focus(4,None) has_focus=4
2013-04-19 12:04:45,692 handle_key(4,True,Page_Down,65366,114,())
2013-04-19 12:04:45,693 handle keycode pressing 114: key Page_Down

2013-04-19 12:04:45,882 will process ui packet key-action
2013-04-19 12:04:45,882 process_key_action([42, 4, 'Page_Down', False, (), 65366, '', 34, 0, 0]) server keycode=114
2013-04-19 12:04:45,882 _focus(4,None) has_focus=4
2013-04-19 12:04:45,882 handle_key(4,False,Page_Down,65366,114,())
2013-04-19 12:04:45,883 handle keycode unpressing 114: key Page_Down

...

2013-04-19 12:04:47,542 will process ui packet focus
2013-04-19 12:04:47,543 _focus(0,()) has_focus=4
2013-04-19 12:04:47,543 widget with focus: None
2013-04-19 12:04:47,543 Focus -> world window
2013-04-19 12:04:47,543 will process ui packet focus
2013-04-19 12:04:47,544 sending WM_TAKE_FOCUS: <gtk.gdk.Window object at 0x1cd91e0 (GdkWindow at 0x160ec60)>, 91864691L
2013-04-19 12:04:47,546 _focus(3,()) has_focus=0
2013-04-19 12:04:47,546 Giving focus to client
2013-04-19 12:04:47,547 ... using XSetInputFocus
2013-04-19 12:04:47,548 ... using WM_TAKE_FOCUS
2013-04-19 12:04:47,549 sending WM_TAKE_FOCUS: <gtk.gdk.Window object at 0x7f0c310a7230 (GdkWindow at 0x1bd1b40)>, 918$
2013-04-19 12:04:47,554 will process ui packet button-action

2013-04-19 12:04:48,860 will process ui packet key-action
2013-04-19 12:04:48,861 process_key_action([42, 3, 'End', True, (), 65367, '', 35, 0, 0]) server keycode=103
2013-04-19 12:04:48,861 _focus(3,None) has_focus=3
2013-04-19 12:04:48,861 handle_key(3,True,End,65367,103,())
2013-04-19 12:04:48,861 handle keycode pressing 103: key End
2013-04-19 12:04:48,864 scheduling key repeat timer with delay 500 for End / 103
2013-04-19 12:04:48,865 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:04:48,988 will process ui packet key-action
2013-04-19 12:04:48,988 process_key_action([42, 3, 'End', False, (), 65367, '', 35, 0, 0]) server keycode=103
2013-04-19 12:04:48,988 _focus(3,None) has_focus=3
2013-04-19 12:04:48,988 handle_key(3,False,End,65367,103,())
2013-04-19 12:04:48,989 handle keycode unpressing 103: key End

2013-04-19 12:04:49,797 will process ui packet key-action
2013-04-19 12:04:49,797 process_key_action([42, 3, 'Page_Down', True, (), 65366, '', 34, 0, 0]) server keycode=114
2013-04-19 12:04:49,797 _focus(3,None) has_focus=3
2013-04-19 12:04:49,798 handle_key(3,True,Page_Down,65366,114,())
2013-04-19 12:04:49,798 handle keycode pressing 114: key Page_Down

2013-04-19 12:04:49,949 process_key_action([42, 3, 'Page_Down', False, (), 65366, '', 34, 0, 0]) server keycode=114
2013-04-19 12:04:49,949 _focus(3,None) has_focus=3
2013-04-19 12:04:49,949 handle_key(3,False,Page_Down,65366,114,())
2013-04-19 12:04:49,949 handle keycode unpressing 114: key Page_Down

2013-04-19 12:04:52,943 will process ui packet focus
2013-04-19 12:04:52,943 _focus(0,()) has_focus=3
2013-04-19 12:04:52,944 widget with focus: None
2013-04-19 12:04:52,944 Focus -> world window
2013-04-19 12:04:52,944 sending WM_TAKE_FOCUS: <gtk.gdk.Window object at 0x1cd91e0 (GdkWindow at 0x160ec60)>, 91870092L
2013-04-19 12:04:52,985 process non-ui packet damage-sequence

2013-04-19 12:05:04,395 will process ui packet focus
2013-04-19 12:05:04,396 _focus(4,()) has_focus=0
2013-04-19 12:05:04,396 Giving focus to client
2013-04-19 12:05:04,396 ... using XSetInputFocus
2013-04-19 12:05:04,400 will process ui packet button-action
2013-04-19 12:05:04,400 ... using WM_TAKE_FOCUS

...

2013-04-19 12:05:05,809 will process ui packet key-action
2013-04-19 12:05:05,810 process_key_action([42, 4, 'Num_Lock', True, ('mod2',), 65407, '', 144, 0, 0]) server keycode=$
2013-04-19 12:05:05,810 _focus(4,None) has_focus=4
2013-04-19 12:05:05,810 handle_key(4,True,Num_Lock,65407,77,('mod2',))
2013-04-19 12:05:05,810 handle keycode pressing 77: key Num_Lock
2013-04-19 12:05:05,811 scheduling key repeat timer with delay 500 for Num_Lock / 77
2013-04-19 12:05:05,826 process non-ui packet damage-sequence
2013-04-19 12:05:05,826 record_latency: took 213.3 ms round trip (213.2 just for echo), 21.0 for decoding of 344520 pi$
2013-04-19 12:05:05,956 will process ui packet key-action
2013-04-19 12:05:05,957 process_key_action([42, 4, 'Num_Lock', False, ('mod2',), 65407, '', 144, 0, 0]) server keycode$
2013-04-19 12:05:05,957 _focus(4,None) has_focus=4
2013-04-19 12:05:05,957 handle_key(4,False,Num_Lock,65407,77,('mod2',))
2013-04-19 12:05:05,957 handle keycode unpressing 77: key Num_Lock


2013-04-19 12:05:06,549 will process ui packet key-action
2013-04-19 12:05:06,549 process_key_action([42, 4, 'KP_1', True, ('mod2',), 65457, '1', 97, 0, 0]) server keycode=87
2013-04-19 12:05:06,549 _focus(4,None) has_focus=4
2013-04-19 12:05:06,549 handle_key(4,True,KP_1,65457,87,('mod2',))
2013-04-19 12:05:06,549 handle keycode pressing 87: key KP_1
2013-04-19 12:05:06,551 scheduling key repeat timer with delay 500 for KP_1 / 87
2013-04-19 12:05:06,579 process non-ui packet damage-sequence
2013-04-19 12:05:06,579 record_latency: took 137.9 ms round trip (137.9 just for echo), 22.0 for decoding of 344520 pi$
2013-04-19 12:05:06,697 process non-ui packet damage-sequence
2013-04-19 12:05:06,697 record_latency: took 87.1 ms round trip (87.0 just for echo), 56.0 for decoding of 598752 pixe$
2013-04-19 12:05:06,714 process non-ui packet damage-sequence
2013-04-19 12:05:06,715 record_latency: took 95.6 ms round trip (95.6 just for echo), 24.0 for decoding of 344520 pixe$
2013-04-19 12:05:06,725 will process ui packet key-action
2013-04-19 12:05:06,725 process_key_action([42, 4, 'KP_1', False, ('mod2',), 65457, '1', 97, 0, 0]) server keycode=87
2013-04-19 12:05:06,726 _focus(4,None) has_focus=4
2013-04-19 12:05:06,726 handle_key(4,False,KP_1,65457,87,('mod2',))
2013-04-19 12:05:06,726 handle keycode unpressing 87: key KP_1
2013-04-19 12:05:06,727 cancelling key repeat timer: 3343 for KP_1 / 87
2013-04-19 12:05:06,938 will process ui packet key-action
2013-04-19 12:05:06,938 process_key_action([42, 4, 'KP_2', True, ('mod2',), 65458, '2', 98, 0, 0]) server keycode=88
2013-04-19 12:05:06,938 _focus(4,None) has_focus=4
2013-04-19 12:05:06,938 handle_key(4,True,KP_2,65458,88,('mod2',))
2013-04-19 12:05:06,939 handle keycode pressing 88: key KP_2
2013-04-19 12:05:06,942 scheduling key repeat timer with delay 500 for KP_2 / 88

2013-04-19 12:05:07,095 will process ui packet key-action
2013-04-19 12:05:07,096 process_key_action([42, 4, 'KP_2', False, ('mod2',), 65458, '2', 98, 0, 0]) server keycode=88
2013-04-19 12:05:07,096 _focus(4,None) has_focus=4
2013-04-19 12:05:07,096 handle_key(4,False,KP_2,65458,88,('mod2',))
2013-04-19 12:05:07,096 handle keycode unpressing 88: key KP_2
2013-04-19 12:05:07,097 cancelling key repeat timer: 3360 for KP_2 / 88

2013-04-19 12:05:07,433 will process ui packet key-action
2013-04-19 12:05:07,433 process_key_action([42, 4, 'KP_3', False, ('mod2',), 65459, '3', 99, 0, 0]) server keycode=89
2013-04-19 12:05:07,433 _focus(4,None) has_focus=4
2013-04-19 12:05:07,433 handle_key(4,False,KP_3,65459,89,('mod2',))
2013-04-19 12:05:07,433 handle keycode unpressing 89: key KP_3


2013-04-19 12:05:10,588 will process ui packet focus
2013-04-19 12:05:10,588 _focus(0,('mod2',)) has_focus=4
2013-04-19 12:05:10,588 widget with focus: None
2013-04-19 12:05:10,589 Focus -> world window
2013-04-19 12:05:10,589 sending WM_TAKE_FOCUS: <gtk.gdk.Window object at 0x1cd91e0 (GdkWindow at 0x160ec60)>, 91887737L
2013-04-19 12:05:10,592 will process ui packet focus
2013-04-19 12:05:10,593 will process ui packet button-action
2013-04-19 12:05:10,593 _focus(3,('mod2',)) has_focus=0
2013-04-19 12:05:10,594 Giving focus to client
2013-04-19 12:05:10,595 ... using XSetInputFocus
2013-04-19 12:05:10,595 ... using WM_TAKE_FOCUS

...

2013-04-19 12:05:11,557 will process ui packet key-action
2013-04-19 12:05:11,557 process_key_action([42, 3, 'KP_1', True, ('mod2',), 65457, '1', 97, 0, 0]) server keycode=87
2013-04-19 12:05:11,557 _focus(3,None) has_focus=3
2013-04-19 12:05:11,557 handle_key(3,True,KP_1,65457,87,('mod2',))
2013-04-19 12:05:11,558 handle keycode pressing 87: key KP_1
2013-04-19 12:05:11,561 scheduling key repeat timer with delay 500 for KP_1 / 87
2013-04-19 12:05:11,561 Property changed on 12582915: WM_NORMAL_HINTS


2013-04-19 12:05:11,695 will process ui packet key-action
2013-04-19 12:05:11,695 process_key_action([42, 3, 'KP_1', False, ('mod2',), 65457, '1', 97, 0, 0]) server keycode=87
2013-04-19 12:05:11,695 _focus(3,None) has_focus=3
2013-04-19 12:05:11,695 handle_key(3,False,KP_1,65457,87,('mod2',))
2013-04-19 12:05:11,695 handle keycode unpressing 87: key KP_1
2013-04-19 12:05:11,698 cancelling key repeat timer: 3615 for KP_1 / 87
2013-04-19 12:05:11,699 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:05:11,902 will process ui packet key-action
2013-04-19 12:05:11,903 process_key_action([42, 3, 'KP_2', True, ('mod2',), 65458, '2', 98, 0, 0]) server keycode=88
2013-04-19 12:05:11,903 _focus(3,None) has_focus=3
2013-04-19 12:05:11,903 handle_key(3,True,KP_2,65458,88,('mod2',))
2013-04-19 12:05:11,903 handle keycode pressing 88: key KP_2
2013-04-19 12:05:11,907 scheduling key repeat timer with delay 500 for KP_2 / 88
2013-04-19 12:05:11,908 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:05:12,053 will process ui packet key-action
2013-04-19 12:05:12,053 process_key_action([42, 3, 'KP_2', False, ('mod2',), 65458, '2', 98, 0, 0]) server keycode=88
2013-04-19 12:05:12,053 _focus(3,None) has_focus=3
2013-04-19 12:05:12,053 handle_key(3,False,KP_2,65458,88,('mod2',))
2013-04-19 12:05:12,053 handle keycode unpressing 88: key KP_2
2013-04-19 12:05:12,057 cancelling key repeat timer: 3627 for KP_2 / 88
2013-04-19 12:05:12,057 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:05:12,231 will process ui packet key-action
2013-04-19 12:05:12,231 process_key_action([42, 3, 'KP_3', True, ('mod2',), 65459, '3', 99, 0, 0]) server keycode=89
2013-04-19 12:05:12,231 _focus(3,None) has_focus=3
2013-04-19 12:05:12,232 handle_key(3,True,KP_3,65459,89,('mod2',))
2013-04-19 12:05:12,232 handle keycode pressing 89: key KP_3
2013-04-19 12:05:12,236 scheduling key repeat timer with delay 500 for KP_3 / 89
2013-04-19 12:05:12,237 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:05:12,380 will process ui packet key-action
2013-04-19 12:05:12,381 process_key_action([42, 3, 'KP_3', False, ('mod2',), 65459, '3', 99, 0, 0]) server keycode=89
2013-04-19 12:05:12,381 _focus(3,None) has_focus=3
2013-04-19 12:05:12,381 handle_key(3,False,KP_3,65459,89,('mod2',))
2013-04-19 12:05:12,381 handle keycode unpressing 89: key KP_3
2013-04-19 12:05:12,385 cancelling key repeat timer: 3641 for KP_3 / 89
2013-04-19 12:05:12,385 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:05:15,367 will process ui packet focus
2013-04-19 12:05:15,367 _focus(0,('mod2',)) has_focus=3
2013-04-19 12:05:15,368 widget with focus: None
2013-04-19 12:05:15,368 Focus -> world window

2013-04-19 12:08:25,156 will process ui packet focus
2013-04-19 12:08:25,156 _focus(3,()) has_focus=0
2013-04-19 12:08:25,156 Giving focus to client
2013-04-19 12:08:25,157 ... using XSetInputFocus
2013-04-19 12:08:25,157 ... using WM_TAKE_FOCUS

...

2013-04-19 12:08:27,152 will process ui packet key-action
2013-04-19 12:08:27,152 process_key_action([42, 3, 'End', True, (), 65367, '', 35, 0, 0]) server keycode=103
2013-04-19 12:08:27,152 _focus(3,None) has_focus=3
2013-04-19 12:08:27,153 handle_key(3,True,End,65367,103,())
2013-04-19 12:08:27,153 handle keycode pressing 103: key End
2013-04-19 12:08:27,156 scheduling key repeat timer with delay 500 for End / 103
2013-04-19 12:08:27,157 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:08:27,344 will process ui packet key-action
2013-04-19 12:08:27,344 process_key_action([42, 3, 'End', False, (), 65367, '', 35, 0, 0]) server keycode=103
2013-04-19 12:08:27,344 _focus(3,None) has_focus=3
2013-04-19 12:08:27,345 handle_key(3,False,End,65367,103,())
2013-04-19 12:08:27,345 handle keycode unpressing 103: key End
2013-04-19 12:08:27,348 cancelling key repeat timer: 7802 for End / 103
2013-04-19 12:08:27,349 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:08:27,344 will process ui packet key-action
2013-04-19 12:08:27,344 process_key_action([42, 3, 'End', False, (), 65367, '', 35, 0, 0]) server keycode=103
2013-04-19 12:08:27,344 _focus(3,None) has_focus=3
2013-04-19 12:08:27,345 handle_key(3,False,End,65367,103,())
2013-04-19 12:08:27,345 handle keycode unpressing 103: key End
2013-04-19 12:08:27,348 cancelling key repeat timer: 7802 for End / 103
2013-04-19 12:08:27,349 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:08:27,904 will process ui packet key-action
2013-04-19 12:08:27,904 process_key_action([42, 3, 'Down', True, (), 65364, '', 40, 0, 0]) server keycode=104
2013-04-19 12:08:27,904 _focus(3,None) has_focus=3
2013-04-19 12:08:27,905 handle_key(3,True,Down,65364,104,())
2013-04-19 12:08:27,905 handle keycode pressing 104: key Down
2013-04-19 12:08:27,908 scheduling key repeat timer with delay 500 for Down / 104
2013-04-19 12:08:27,909 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:08:28,064 will process ui packet key-action
2013-04-19 12:08:28,064 process_key_action([42, 3, 'Down', False, (), 65364, '', 40, 0, 0]) server keycode=104
2013-04-19 12:08:28,064 _focus(3,None) has_focus=3
2013-04-19 12:08:28,064 handle_key(3,False,Down,65364,104,())
2013-04-19 12:08:28,065 handle keycode unpressing 104: key Down
2013-04-19 12:08:28,068 cancelling key repeat timer: 7823 for Down / 104
2013-04-19 12:08:28,069 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:08:28,985 will process ui packet key-action
2013-04-19 12:08:28,986 process_key_action([42, 3, 'Page_Down', True, (), 65366, '', 34, 0, 0]) server keycode=114
2013-04-19 12:08:28,986 _focus(3,None) has_focus=3
2013-04-19 12:08:28,986 handle_key(3,True,Page_Down,65366,114,())
2013-04-19 12:08:28,986 handle keycode pressing 114: key Page_Down
2013-04-19 12:08:28,990 scheduling key repeat timer with delay 500 for Page_Down / 114
2013-04-19 12:08:28,990 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:08:29,176 will process ui packet key-action
2013-04-19 12:08:29,177 process_key_action([42, 3, 'Page_Down', False, (), 65366, '', 34, 0, 0]) server keycode=114
2013-04-19 12:08:29,177 _focus(3,None) has_focus=3
2013-04-19 12:08:29,177 handle_key(3,False,Page_Down,65366,114,())
2013-04-19 12:08:29,177 handle keycode unpressing 114: key Page_Down
2013-04-19 12:08:29,181 cancelling key repeat timer: 7856 for Page_Down / 114
2013-04-19 12:08:29,181 Property changed on 12582915: WM_NORMAL_HINTS

2013-04-19 12:08:34,659 will process ui packet focus
2013-04-19 12:08:34,659 _focus(0,()) has_focus=3
2013-04-19 12:08:34,659 widget with focus: None
2013-04-19 12:08:34,659 Focus -> world window

...

2013-04-19 12:11:58,775 will process ui packet key-action
2013-04-19 12:11:58,775 process_key_action([42, 4, 'End', False, (), 65367, '', 35, 0, 0]) server keycode=103
2013-04-19 12:11:58,775 _focus(4,None) has_focus=4
2013-04-19 12:11:58,776 handle_key(4,False,End,65367,103,())
2013-04-19 12:11:58,776 handle keycode unpressing 103: key End
2013-04-19 12:11:58,776 cancelling key repeat timer: 12461 for End / 103
2013-04-19 12:11:58,787 process non-ui packet damage-sequence
2013-04-19 12:11:58,787 record_latency: took 87.8 ms round trip (87.7 just for echo), 26.0 for decoding of 344520 pix$
2013-04-19 12:11:58,925 will process ui packet key-action
2013-04-19 12:11:58,925 process_key_action([42, 4, 'Down', True, (), 65364, '', 40, 0, 0]) server keycode=104
2013-04-19 12:11:58,925 _focus(4,None) has_focus=4
2013-04-19 12:11:58,925 handle_key(4,True,Down,65364,104,())
2013-04-19 12:11:58,925 handle keycode pressing 104: key Down
2013-04-19 12:11:58,928 scheduling key repeat timer with delay 500 for Down / 104

2013-04-19 12:11:59,059 will process ui packet key-action
2013-04-19 12:11:59,080 process_key_action([42, 4, 'Down', False, (), 65364, '', 40, 0, 0]) server keycode=104
2013-04-19 12:11:59,080 _focus(4,None) has_focus=4
2013-04-19 12:11:59,081 handle_key(4,False,Down,65364,104,())
2013-04-19 12:11:59,081 handle keycode unpressing 104: key Down
2013-04-19 12:11:59,081 cancelling key repeat timer: 12474 for Down / 104
2013-04-19 12:11:59,175 will process ui packet key-action
2013-04-19 12:11:59,176 process_key_action([42, 4, 'Page_Down', True, (), 65366, '', 34, 0, 0]) server keycode=114
2013-04-19 12:11:59,176 _focus(4,None) has_focus=4
2013-04-19 12:11:59,176 handle_key(4,True,Page_Down,65366,114,())
2013-04-19 12:11:59,176 handle keycode pressing 114: key Page_Down
2013-04-19 12:11:59,179 scheduling key repeat timer with delay 500 for Page_Down / 114

2013-04-19 12:11:59,322 will process ui packet key-action
2013-04-19 12:11:59,322 process_key_action([42, 4, 'Page_Down', False, (), 65366, '', 34, 0, 0]) server keycode=114
2013-04-19 12:11:59,322 _focus(4,None) has_focus=4
2013-04-19 12:11:59,323 handle_key(4,False,Page_Down,65366,114,())
2013-04-19 12:11:59,323 handle keycode unpressing 114: key Page_Down
2013-04-19 12:11:59,323 cancelling key repeat timer: 12491 for Page_Down / 114

2013-04-19 12:12:02,006 will process ui packet focus
2013-04-19 12:12:02,006 _focus(0,()) has_focus=4
2013-04-19 12:12:02,007 widget with focus: None
2013-04-19 12:12:02,007 Focus -> world window

...

2013-04-19 12:13:15,055 will process ui packet focus
2013-04-19 12:13:15,056 _focus(4,()) has_focus=0
2013-04-19 12:13:15,056 Giving focus to client
2013-04-19 12:13:15,057 ... using XSetInputFocus
2013-04-19 12:13:15,060 ... using WM_TAKE_FOCUS

2013-04-19 12:13:16,750 will process ui packet key-action
2013-04-19 12:13:16,751 process_key_action([42, 4, 'Num_Lock', False, ('mod2',), 65407, '', 144, 0, 0]) server keycod$
2013-04-19 12:13:16,751 _focus(4,None) has_focus=4
2013-04-19 12:13:16,751 handle_key(4,False,Num_Lock,65407,77,('mod2',))
2013-04-19 12:13:16,751 handle keycode unpressing 77: key Num_Lock
2013-04-19 12:13:16,752 cancelling key repeat timer: 14363 for Num_Lock / 77

2013-04-19 12:13:17,672 will process ui packet key-action
2013-04-19 12:13:17,677 process_key_action([42, 4, 'KP_1', True, ('mod2',), 65457, '1', 97, 0, 0]) server keycode=87
2013-04-19 12:13:17,677 _focus(4,None) has_focus=4
2013-04-19 12:13:17,677 handle_key(4,True,KP_1,65457,87,('mod2',))
2013-04-19 12:13:17,677 handle keycode pressing 87: key KP_1
2013-04-19 12:13:17,681 scheduling key repeat timer with delay 500 for KP_1 / 87

2013-04-19 12:13:17,871 process_key_action([42, 4, 'KP_1', False, ('mod2',), 65457, '1', 97, 0, 0]) server keycode=87
2013-04-19 12:13:17,871 _focus(4,None) has_focus=4
2013-04-19 12:13:17,872 handle_key(4,False,KP_1,65457,87,('mod2',))
2013-04-19 12:13:17,872 handle keycode unpressing 87: key KP_1
2013-04-19 12:13:17,872 cancelling key repeat timer: 14389 for KP_1 / 87

2013-04-19 12:13:18,318 will process ui packet key-action
2013-04-19 12:13:18,319 process_key_action([42, 4, 'KP_2', True, ('mod2',), 65458, '2', 98, 0, 0]) server keycode=88
2013-04-19 12:13:18,320 _focus(4,None) has_focus=4
2013-04-19 12:13:18,320 handle_key(4,True,KP_2,65458,88,('mod2',))
2013-04-19 12:13:18,320 handle keycode pressing 88: key KP_2
2013-04-19 12:13:18,324 scheduling key repeat timer with delay 500 for KP_2 / 88

2013-04-19 12:13:18,458 will process ui packet key-action
2013-04-19 12:13:18,459 process_key_action([42, 4, 'KP_2', False, ('mod2',), 65458, '2', 98, 0, 0]) server keycode=88
2013-04-19 12:13:18,459 _focus(4,None) has_focus=4
2013-04-19 12:13:18,460 handle_key(4,False,KP_2,65458,88,('mod2',))
2013-04-19 12:13:18,460 handle keycode unpressing 88: key KP_2
2013-04-19 12:13:18,460 cancelling key repeat timer: 14443 for KP_2 / 88

2013-04-19 12:13:18,966 will process ui packet key-action
2013-04-19 12:13:18,966 process_key_action([42, 4, 'KP_3', True, ('mod2',), 65459, '3', 99, 0, 0]) server keycode=89
2013-04-19 12:13:18,966 _focus(4,None) has_focus=4
2013-04-19 12:13:18,966 handle_key(4,True,KP_3,65459,89,('mod2',))
2013-04-19 12:13:18,967 handle keycode pressing 89: key KP_3
2013-04-19 12:13:18,971 scheduling key repeat timer with delay 500 for KP_3 / 89

2013-04-19 12:13:19,104 will process ui packet key-action
2013-04-19 12:13:19,104 process_key_action([42, 4, 'KP_3', False, ('mod2',), 65459, '3', 99, 0, 0]) server keycode=89
2013-04-19 12:13:19,104 _focus(4,None) has_focus=4
2013-04-19 12:13:19,105 handle_key(4,False,KP_3,65459,89,('mod2',))
2013-04-19 12:13:19,105 handle keycode unpressing 89: key KP_3
2013-04-19 12:13:19,105 cancelling key repeat timer: 14483 for KP_3 / 89

...

etc.
  • It looks like keystrokes that the gtk_view_keyboard is interpreting as KP_End, etc., the xpra thinks it is processing as KP_1, etc.

Client-side

...
2013-04-19 12:03:41,993 xkbmap_mod_meanings: {}
2013-04-19 12:03:41,993 do_keys_changed() modifier_map={'control': 4, 'mod1': 8, 'mod2': 16, 'mod3': 32, 'mod4': 64, 'mod5': 128, 'lock': 2, 'shift': 1}

2013-04-19 12:03:41,993 xkbmap_mod_meanings: {}
2013-04-19 12:03:41,993 do_keys_changed() modifier_map={'control': 4, 'mod1': 8, 'mod2': 16, 'mod3': 32, 'mod4': 64, 'mod5': 128, 'lock': 2, 'shift': 1}

2013-04-19 12:03:42,032 send_hello(None) packet={ ... , 'xkbmap_keycodes': ... (65365, 'Page_Up', 33, 0, 0), (65365, 'Page_Up', 33, 0, 1), (65365, 'Page_Up', 33, 1, 0), (65365, 'Page_Up', 33, 1, 1), (65366, 'Page_Down', 34, 0, 0), (65366, 'Page_Down', 34, 0, 1), (65366, 'Page_Down', 34, 1, 0), (65366, 'Page_Down', 34, 1, 1), (65367, 'End', 35, 0, 0), (65367, 'End', 35, 0, 1), (65367, 'End', 35, 1, 0), (65367, 'End', 35, 1, 1), (65360, 'Home', 36, 0, 0), (65360, 'Home', 36, 0, 1), (65360, 'Home', 36, 1, 0), (65360, 'Home', 36, 1, 1), (65361, 'Left', 37, 0, 0), (65361, 'Left', 37, 0, 1), (65361, 'Left', 37, 1, 0), (65361, 'Left', 37, 1, 1), (65362, 'Up', 38, 0, 0), (65362, 'Up', 38, 0, 1), (65362, 'Up', 38, 1, 0), (65362, 'Up', 38, 1, 1), (65363, 'Right', 39, 0, 0), (65363, 'Right', 39, 0, 1), (65363, 'Right', 39, 1, 0), (65363, 'Right', 39, 1, 1), (65364, 'Down', 40, 0, 0), (65364, 'Down', 40, 0, 1), (65364, 'Down', 40, 1, 0), (65364, 'Down', 40, 1, 1), (65379, 'Insert', 45, 0, 0), (65379, 'Insert', 45, 0, 1), (65379, 'Insert', 45, 1, 0), (65379, 'Insert', 45, 1, 1), (65535, 'Delete', 46, 0, 0), (65535, 'Delete', 46, 0, 1), (65535, 'Delete', 46, 1, 0), (65535, 'Delete', 46, 1, 1), ...  (65383, 'Menu', 93, 0, 0), (65383, 'Menu', 93, 0, 1), (65383, 'Menu', 93, 1, 0), (65383, 'Menu', 93, 1, 1), (65456, 'KP_0', 96, 0, 0), (65456, 'KP_0', 96, 0, 1), (65456, 'KP_0', 96, 1, 0), (65456, 'KP_0', 96, 1, 1), (65457, 'KP_1', 97, 0, 0), (65457, 'KP_1', 97, 0, 1), (65457, 'KP_1', 97, 1, 0), (65457, 'KP_1', 97, 1, 1), (65458, 'KP_2', 98, 0, 0), (65458, 'KP_2', 98, 0, 1), (65458, 'KP_2', 98, 1, 0), (65458, 'KP_2', 98, 1, 1), (65459, 'KP_3', 99, 0, 0), (65459, 'KP_3', 99, 0, 1), (65459, 'KP_3', 99, 1, 0), (65459, 'KP_3', 99, 1, 1), (65460, 'KP_4', 100, 0, 0), (65460, 'KP_4', 100, 0, 1), (65460, 'KP_4', 100, 1, 0), (65460, 'KP_4', 100, 1, 1), (65461, 'KP_5', 101, 0, 0), (65461, 'KP_5', 101, 0, 1), (65461, 'KP_5', 101, 1, 0), (65461, 'KP_5', 101, 1, 1), (65462, 'KP_6', 102, 0, 0), (65462, 'KP_6', 102, 0, 1), (65462, 'KP_6', 102, 1, 0), (65462, 'KP_6', 102, 1, 1), (65463, 'KP_7', 103, 0, 0), (65463, 'KP_7', 103, 0, 1), (65463, 'KP_7', 103, 1, 0), (65463, 'KP_7', 103, 1, 1), (65464, 'KP_8', 104, 0, 0), (65464, 'KP_8', 104, 0, 1), (65464, 'KP_8', 104, 1, 0), (65464, 'KP_8', 104, 1, 1), (65465, 'KP_9', 105, 0, 0), (65465, 'KP_9', 105, 0, 1), (65465, 'KP_9', 105, 1, 0), (65465, 'KP_9', 105, 1, 1), (65450, 'KP_Multiply', 106, 0, 0), (65450, 'KP_Multiply', 106, 0, 1), (65450, 'KP_Multiply', 106, 1, 0), (65450, 'KP_Multiply', 106, 1, 1), (65451, 'KP_Add', 107, 0, 0), (65451, 'KP_Add', 107, 0, 1), (65451, 'KP_Add', 107, 1, 0), (65451, 'KP_Add', 107, 1, 1), (65453, 'KP_Subtract', 109, 0, 0), (65453, 'KP_Subtract', 109, 0, 1), (65453, 'KP_Subtract', 109, 1, 0), (65453, 'KP_Subtract', 109, 1, 1), (46, 'period', 110, 0, 0), (46, 'period', 110, 0, 1), (65455, 'KP_Divide', 111, 0, 0), (65455, 'KP_Divide', 111, 0, 1), (65455, 'KP_Divide', 111, 1, 0), (65455, 'KP_Divide', 111, 1, 1),  ...}

2013-04-19 12:03:42,295 set_modifier_mappings({'control': (((17, 'Control_L'), 'Control_L'), ('Control_R', 'Control_R'), ((162, 'Control_L'), 'Control_L')), 'mod1': (((18, 'Alt_L'), 'Alt_L'), ((92, 'Alt_R'), 'Alt_R'), ((91, 'Alt_L'), 'Alt_L'), ('Alt_L', 'Alt_L'), ((164, 'Alt_L'), 'Alt_L'), ((165, 'Alt_R'), 'Alt_R'), ('Meta_L', 'Meta_L')), 'mod2': (('Num_Lock', 'Num_Lock'),), 'mod3': ((115, 'Super_L'), ('Super_R', 'Super_R'), ('Super_L', 'Super_L')), 'mod4': (('Hyper_L', 'Hyper_L'), ('Hyper_R', 'Hyper_R')), 'mod5': (('Mode_switch', 'Mode_switch'), ('ISO_Level3_Shift', 'ISO_Level3_Shift')), 'shift': (((16, 'Shift_L'), 'Shift_L'), ((161, 'Shift_R'), 'Shift_R'), ((160, 'Shift_L'), 'Shift_L')), 'lock': (('Caps_Lock', 'Caps_Lock'),)})
2013-04-19 12:03:42,296 modifier_keys={'ISO_Level3_Shift': 'mod5', 'Mode_switch': 'mod5', 'Meta_L': 'mod1', 'Control_R': 'control', 'Super_R': 'mod3', 'Alt_R': 'mod1', 'Hyper_L': 'mod4', 'Caps_Lock': 'lock', 'Hyper_R': 'mod4', 'Alt_L': 'mod1', 'Num_Lock': 'mod2', 'Super_L': 'mod3', 'Shift_R': 'shift', 'Shift_L': 'shift', 'Control_L': 'control'}
2013-04-19 12:03:42,296 modifier_keycodes={'ISO_Level3_Shift': ['ISO_Level3_Shift'], 'Mode_switch': ['Mode_switch'], 'Meta_L': ['Meta_L'], 'Control_R': ['Control_R'], 'Super_R': ['Super_R'], 'Alt_R': [(92, 'Alt_R'), (165, 'Alt_R')], 'Hyper_L': ['Hyper_L'], 'Caps_Lock': ['Caps_Lock'], 'Hyper_R': ['Hyper_R'], 'Alt_L': [(18, 'Alt_L'), (91, 'Alt_L'), 'Alt_L', (164, 'Alt_L')], 'Num_Lock': ['Num_Lock'], 'Super_L': [115, 'Super_L'], 'Shift_R': [(161, 'Shift_R')], 'Shift_L': [(16, 'Shift_L'), (160, 'Shift_L')], 'Control_L': [(17, 'Control_L'), (162, 'Control_L')]}
2013-04-19 12:03:42,298 set_modifier_mappings found 'Num_Lock' modifier value: mod2

2013-04-19 12:03:42,476 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:42,477 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']

2013-04-19 12:03:43,970 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:43,970 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']

2013-04-19 12:03:43,976 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:43,976 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']

2013-04-19 12:03:43,983 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:43,983 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:43,990 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:43,992 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:43,993 sound sink: adding 104 bytes, {}
2013-04-19 12:03:43,999 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:43,999 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,006 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,007 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,010 sound sink: adding 104 bytes, {}
2013-04-19 12:03:44,015 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,016 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,023 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,023 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,030 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,032 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,039 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,039 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,042 sound sink: adding 104 bytes, {}
2013-04-19 12:03:44,046 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,046 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,049 sound sink queue overrun
2013-04-19 12:03:44,055 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,055 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,061 sound sink: adding 104 bytes, {}
2013-04-19 12:03:44,062 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,062 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,071 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,071 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,078 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,078 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,086 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,086 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,091 sound sink: adding 104 bytes, {}
2013-04-19 12:03:44,095 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,095 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,102 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,102 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,111 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,111 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,118 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,118 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,121 sound sink: adding 104 bytes, {}
2013-04-19 12:03:44,127 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,127 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,131 new cursor at 4,8 with serial=2, dimensions: 9x16, len(pixels)=576
2013-04-19 12:03:44,135 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,135 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,142 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,142 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,145 sound sink: adding 104 bytes, {}
2013-04-19 12:03:44,148 sound sink queue overrun
2013-04-19 12:03:44,151 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,151 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,158 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,160 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,167 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,167 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,171 sound sink: adding 104 bytes, {}
2013-04-19 12:03:44,174 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,174 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,183 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,183 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,190 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,191 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,198 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,198 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,201 sound sink: adding 104 bytes, {}
2013-04-19 12:03:44,207 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,207 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,214 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,214 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,221 sound sink: adding 104 bytes, {}
2013-04-19 12:03:44,223 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,223 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,232 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,232 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,239 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,239 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:44,246 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:44,246 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']

2013-04-19 12:03:47,023 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,023 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']

2013-04-19 12:03:47,030 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,030 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,039 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,039 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,043 sound sink: adding 104 bytes, {}
2013-04-19 12:03:47,046 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,046 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,055 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,055 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,056 sound sink queue overrun
2013-04-19 12:03:47,062 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,062 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,071 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,071 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,073 sound sink: adding 104 bytes, {}
2013-04-19 12:03:47,078 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,078 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,086 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,086 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,094 sound sink: adding 104 bytes, {}
2013-04-19 12:03:47,095 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,095 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,102 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,102 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,111 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,111 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,118 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,119 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,124 sound sink: adding 104 bytes, {}
2013-04-19 12:03:47,134 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,134 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,151 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,151 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']

2013-04-19 12:03:47,382 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,382 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:47,385 sound sink: adding 104 bytes, {}
2013-04-19 12:03:47,391 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:47,391 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']

2013-04-19 12:03:48,401 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:48,401 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:48,401 send_key_action(2, c, True, ['mod2'], 99, c, 67, 0, 0)
2013-04-19 12:03:48,403 scheduling key repeat for c: delay=400, interval=5 (from 500 and 33)
2013-04-19 12:03:48,403 key repeat: starting timer for c / 67 with delay 400 and interval 5

2013-04-19 12:03:48,473 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:48,473 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:48,473 send_key_action(2, d, True, ['mod2'], 100, d, 68, 0, 0)
2013-04-19 12:03:48,473 scheduling key repeat for d: delay=400, interval=5 (from 500 and 33)
2013-04-19 12:03:48,474 key repeat: starting timer for d / 68 with delay 400 and interval 5

2013-04-19 12:03:48,505 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:48,505 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:48,506 send_key_action(2, c, False, ['mod2'], 99, c, 67, 0, 0)
2013-04-19 12:03:48,506 key repeat: clearing timer for c / 67
2013-04-19 12:03:48,563 sound sink queue overrun
2013-04-19 12:03:48,657 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:48,657 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:48,657 send_key_action(2, d, False, ['mod2'], 100, d, 68, 0, 0)
2013-04-19 12:03:48,657 key repeat: clearing timer for d / 68

2013-04-19 12:03:48,769 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:48,769 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:48,769 send_key_action(2, space, True, ['mod2'], 32,  , 32, 0, 0)
2013-04-19 12:03:48,769 scheduling key repeat for space: delay=400, interval=5 (from 500 and 33)
2013-04-19 12:03:48,770 key repeat: starting timer for space / 32 with delay 400 and interval 5

2013-04-19 12:03:48,897 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:48,897 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:48,898 send_key_action(2, space, False, ['mod2'], 32,  , 32, 0, 0)
2013-04-19 12:03:48,898 key repeat: clearing timer for space / 32

2013-04-19 12:03:50,040 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:50,040 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:50,042 send_key_action(2, slash, True, ['mod2'], 47, /, 191, 0, 0)
2013-04-19 12:03:50,042 scheduling key repeat for slash: delay=400, interval=5 (from 500 and 33)
2013-04-19 12:03:50,042 key repeat: starting timer for slash / 191 with delay 400 and interval 5

2013-04-19 12:03:50,128 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:50,128 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:50,128 send_key_action(2, slash, False, ['mod2'], 47, /, 191, 0, 0)
2013-04-19 12:03:50,130 key repeat: clearing timer for slash / 191

2013-04-19 12:03:50,408 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:50,408 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:50,410 send_key_action(2, u, True, ['mod2'], 117, u, 85, 0, 0)
2013-04-19 12:03:50,410 scheduling key repeat for u: delay=400, interval=5 (from 500 and 33)
2013-04-19 12:03:50,411 key repeat: starting timer for u / 85 with delay 400 and interval 5

2013-04-19 12:03:50,505 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:50,505 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:50,505 send_key_action(2, u, False, ['mod2'], 117, u, 85, 0, 0)
2013-04-19 12:03:50,506 key repeat: clearing timer for u / 85
2013-04-19 12:03:50,509 sound sink: adding 104 bytes, {}
2013-04-19 12:03:50,569 sound sink queue overrun
2013-04-19 12:03:50,601 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:50,601 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:50,601 send_key_action(2, s, True, ['mod2'], 115, s, 83, 0, 0)
2013-04-19 12:03:50,601 scheduling key repeat for s: delay=400, interval=5 (from 500 and 33)
2013-04-19 12:03:50,602 key repeat: starting timer for s / 83 with delay 400 and interval 5

2013-04-19 12:03:50,744 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:50,744 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:50,744 send_key_action(2, s, False, ['mod2'], 115, s, 83, 0, 0)
2013-04-19 12:03:50,746 key repeat: clearing timer for s / 83

2013-04-19 12:03:50,888 mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
2013-04-19 12:03:50,888 mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
2013-04-19 12:03:50,888 send_key_action(2, r, True, ['mod2'], 114, r, 82, 0, 0)
2013-04-19 12:03:50,890 scheduling key repeat for r: delay=400, interval=5 (from 500 and 33)
2013-04-19 12:03:50,891 key repeat: starting timer for r / 82 with delay 400 and interval 5

etc...

comment:9 Changed 6 years ago by Antoine Martin

(snip)
Thanks for trimming the output, but in the future please also attach the full log file in case it is needed.
Also, you should use shell redirection or the regular server log file mechanism to capture the output, it looks like you were using a DOS type of window which trims at 80 characters - there are much better tools, even on M$ Windows.

FYI:

xpra thinks it's ouputting 1, 2, 3

Strictly speaking, xpra cannot know which "character" will get printed when one presses a key using its keycode, ie: the keysyms KP_3 and KP_Next share the same keycode, what key event is passed to the application and what the application does with it depends on the state of the modifiers - which was the problem here with GTK not sending anything when "Num_Lock" is set.


mask_to_names(<flags 0 of type GdkModifierType>) GetKeyState(VK_NUMLOCK)=1
mask_to_names(<flags 0 of type GdkModifierType>)=['mod2']
send_key_action(2, r, True, ['mod2'], 114, r, 82, 0, 0)

shows that we are sending the correct modifier list from the client ('mod2' aka 'numlock' is included when we detect it via the new native calls), so the problem is definitely server-side.


From the server key events like this one:

will process ui packet key-action
process_key_action([42, 4, 'KP_3', True, ('mod2',), 65459, '3', 99, 0, 0]) server keycode=89
_focus(4,None) has_focus=4
handle_key(4,True,KP_3,65459,89,('mod2',))
handle keycode pressing 89: key KP_3

I was able to figure out why "mod2" was going missing.

Please try r3119 and close this ticket if that works for you.
Thank you for your patience.

comment:10 Changed 6 years ago by alas

Didn't get a chance to try r3119, but r3128 has definitely fixed the problem.

Closing the ticket. (And thank you for your patience.)

comment:11 Changed 6 years ago by alas

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.