From a460d66533243eaedf0b91858d4aaab593cd9238 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 13 Mar 2008 16:12:46 +0000 Subject: [PATCH] From Melchoir Franz, Caps lock support under X11 --- include/osgViewer/api/X11/GraphicsWindowX11 | 4 +++- src/osgViewer/GraphicsWindowX11.cpp | 13 ++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/include/osgViewer/api/X11/GraphicsWindowX11 b/include/osgViewer/api/X11/GraphicsWindowX11 index c615edb83..15475dafa 100644 --- a/include/osgViewer/api/X11/GraphicsWindowX11 +++ b/include/osgViewer/api/X11/GraphicsWindowX11 @@ -45,7 +45,8 @@ class OSGVIEWER_EXPORT GraphicsWindowX11 : public osgViewer::GraphicsWindow _initialized(false), _realized(false), _timeOfLastCheckEvents(-1.0), - _lastEventType(0) + _lastEventType(0), + _lockMask(0) { _traits = traits; memset(_keyMap, 0, 32); @@ -183,6 +184,7 @@ class OSGVIEWER_EXPORT GraphicsWindowX11 : public osgViewer::GraphicsWindow double _timeOfLastCheckEvents; int _lastEventType; + int _lockMask; char _keyMap[32]; std::map _mouseCursorMap; diff --git a/src/osgViewer/GraphicsWindowX11.cpp b/src/osgViewer/GraphicsWindowX11.cpp index 608c1b337..11bd12c48 100644 --- a/src/osgViewer/GraphicsWindowX11.cpp +++ b/src/osgViewer/GraphicsWindowX11.cpp @@ -711,7 +711,7 @@ bool GraphicsWindowX11::createWindow() XSelectInput( _eventDisplay, _window, ExposureMask | StructureNotifyMask | KeyPressMask | KeyReleaseMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | - KeymapStateMask | FocusChangeMask ); + KeymapStateMask | FocusChangeMask | EnterWindowMask ); XFlush( _eventDisplay ); XSync( _eventDisplay, 0 ); @@ -1015,6 +1015,11 @@ void GraphicsWindowX11::checkEvents() break; } + case EnterNotify : + osg::notify(osg::INFO)<<"EnterNotify event received"<(relativeTime)*0.001; + _lockMask = ev.xkey.state & LockMask; keyMapSetKey(_keyMap, ev.xkey.keycode); int keySymbol = 0; adaptKey(ev.xkey, keySymbol); @@ -1199,7 +1205,8 @@ void GraphicsWindowX11::checkEvents() break; } } -#endif +#endif + _lockMask = ev.xkey.state & LockMask; keyMapClearKey(_keyMap, ev.xkey.keycode); int keySymbol = 0; adaptKey(ev.xkey, keySymbol); @@ -1312,7 +1319,7 @@ void GraphicsWindowX11::forceKey(int key, double time, bool state) event.y = 0; event.x_root = 0; event.y_root = 0; - event.state = getModifierMask(); + event.state = getModifierMask() | _lockMask; event.keycode = key; event.same_screen = True;