[maemo-developers] hildon im to X key proxy
From: Austin Che maemo at austinche.nameDate: Mon Jan 21 05:36:55 EET 2008
- Previous message: Maemo UI improvements discussion blog.
- Next message: hildon im to X key proxy
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I've been trying to get something like the following to work: - I want to be able to press power, menu or something like that to bring up the on-screen keyboard - Then any keys I press should be sent as normal X key events (i.e. same as if I pressed them on a keyboard) - If I press a hardware key like the menu button, the next key pressed on the vkb is sent as a ctrl character instead Here's my current implementation: - I create a hidden window. I create a new hildon IM context and set the hidden window to be the client. - Keys pressed on the vkb are caught via the "commit" signal and converted to a unicode character. - I use gdk_unicode_to_keyval to convert it to a GDK keyval which I believe has a 1-to-1 mapping to X keysyms - XChangeKeyboardMapping is used to set an arbitrary unused keycode to map to the desired keysym - I then use XTest to generate a fake key of the given keycode It mostly works but there are some issues: - I cannot make a completely hidden window. The best I can do is a 1x1 pixel window that shows up as a white dot in the top left corner. Making it zero size, moving it off screen, or trying to make it transparent don't seem to work. - I set the hidden window to not accept-focus. This is so that when I use XTestFakeKeyEvent, the key is sent to the current top application. However, this also means the hidden window cannot directly get the hardware key presses. I can get it in other ways such as directly from the device file, but it seems like there should be a better solution. If I give the hidden proxy window the focus, I can't figure out how to lose the focus before sending the fake key. - When using it with something like the X terminal which normally pops up the vkb itself, it works for a couple characters (not repeatable how many characters) and then my proxy stops receiving keyboard events. I believe it's because the app realizes it has the focus and it resets the client window for the vkb to be itself. This problem doesn't exist when I use it with something that doesn't normally pop up the vkb (e.g. running emacs over X remotely). If there was some way to determine when the client window for the vkb has changed, that would probably be good enough to reset it back to the proxy window. - Normally, when the vkb pops up, the window underneath is automatically resized. But when doing the above, the top window is not resized so it ends up that the keyboard covers the bottom of the window. How can I force the window underneath to resize? - Is there some way to tell when the vkb has been hidden by the user? Any hints appreciated.
- Previous message: Maemo UI improvements discussion blog.
- Next message: hildon im to X key proxy
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]