X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dd4796139927cc1fbc3974ff17594c21f2f356d4..f5766910b6731eb03e82371416e9778203396ce7:/src/unix/utilsx11.cpp diff --git a/src/unix/utilsx11.cpp b/src/unix/utilsx11.cpp index 8371731242..aa349b3efc 100644 --- a/src/unix/utilsx11.cpp +++ b/src/unix/utilsx11.cpp @@ -30,6 +30,7 @@ #endif #include #include +#include #ifdef __VMS #pragma message enable nosimpint #endif @@ -803,15 +804,7 @@ bool wxGetKeyState(wxKeyCode key) wxASSERT_MSG(key != WXK_LBUTTON && key != WXK_RBUTTON && key != WXK_MBUTTON, wxT("can't use wxGetKeyState() for mouse buttons")); -#if defined(__WXX11__) - Display *pDisplay = (Display*) wxApp::GetDisplay(); -#elif defined(__WXGTK__) - Display *pDisplay = GDK_DISPLAY(); -#elif defined(__WXMOTIF__) - Display *pDisplay = (Display*) (wxTheApp ? wxTheApp->GetInitialDisplay() : NULL); -#else -#error Add code to get the DISPLAY for this platform -#endif + Display *pDisplay = (Display*) wxGetDisplay(); int iKey = wxCharCodeWXToX(key); int iKeyMask = 0; @@ -824,19 +817,21 @@ bool wxGetKeyState(wxKeyCode key) return false; if ( IsModifierKey(iKey) ) // If iKey is a modifier key, use a different method - { for (int i = 0; i < 8; ++i) { - if ( map->modifiermap[map->max_keypermod * i] == keyCode) + for (int i = 0; i < 8; ++i) { - iKeyMask = 1 << i; + if ( map->modifiermap[map->max_keypermod * i] == keyCode) + { + iKeyMask = 1 << i; + } } + + XQueryPointer(pDisplay, DefaultRootWindow(pDisplay), &wDummy1, &wDummy2, + &iDummy3, &iDummy4, &iDummy5, &iDummy6, &iMask ); + XFreeModifiermap(map); + return (iMask & iKeyMask) != 0; } - XQueryPointer(pDisplay, DefaultRootWindow(pDisplay), &wDummy1, &wDummy2, - &iDummy3, &iDummy4, &iDummy5, &iDummy6, &iMask ); - XFreeModifiermap(map); - return (iMask & iKeyMask) != 0; - } // From the XLib manual: // The XQueryKeymap() function returns a bit vector for the logical state of the keyboard, // where each bit set to 1 indicates that the corresponding key is currently pressed down.