+#ifdef WIN32
+ switch(event.msg)
+ {
+ case WM_KEYDOWN:
+ case WM_KEYUP:
+ set_button_state(key_from_sys(event.wparam), event.msg==WM_KEYDOWN, true);
+ break;
+ case WM_CHAR:
+ signal_character.emit(event.wparam);
+ break;
+ }
+#else
+ switch(event.xevent.type)
+ {
+ case KeyPress:
+ case KeyRelease:
+ {
+ KeySym keysym = XKeycodeToKeysym(window.get_display().get_private().display, event.xevent.xkey.keycode, 0);
+ if(keysym!=NoSymbol)
+ set_button_state(key_from_sys(keysym), event.xevent.type==KeyPress, true);
+ if(event.xevent.type==KeyPress)
+ {
+ char ch;
+ if(XLookupString(const_cast<XKeyEvent *>(&event.xevent.xkey), &ch, 1, 0, 0))
+ // XLookupString always returns Latin-1
+ signal_character.emit(static_cast<unsigned char>(ch));
+ }
+ }
+ break;
+ }
+#endif