fix XModifierKeymap memory leak (patch 1683137)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44894 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -811,13 +811,15 @@ bool wxGetKeyState(wxKeyCode key)
|
|||||||
Window wDummy1, wDummy2;
|
Window wDummy1, wDummy2;
|
||||||
int iDummy3, iDummy4, iDummy5, iDummy6;
|
int iDummy3, iDummy4, iDummy5, iDummy6;
|
||||||
unsigned int iMask;
|
unsigned int iMask;
|
||||||
XModifierKeymap* map = XGetModifierMapping(pDisplay);
|
|
||||||
KeyCode keyCode = XKeysymToKeycode(pDisplay,iKey);
|
KeyCode keyCode = XKeysymToKeycode(pDisplay,iKey);
|
||||||
if (keyCode == NoSymbol)
|
if (keyCode == NoSymbol)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ( IsModifierKey(iKey) ) // If iKey is a modifier key, use a different method
|
if ( IsModifierKey(iKey) ) // If iKey is a modifier key, use a different method
|
||||||
{
|
{
|
||||||
|
XModifierKeymap *map = XGetModifierMapping(pDisplay);
|
||||||
|
wxCHECK_MSG( map, false, _T("failed to get X11 modifiers map") );
|
||||||
|
|
||||||
for (int i = 0; i < 8; ++i)
|
for (int i = 0; i < 8; ++i)
|
||||||
{
|
{
|
||||||
if ( map->modifiermap[map->max_keypermod * i] == keyCode)
|
if ( map->modifiermap[map->max_keypermod * i] == keyCode)
|
||||||
@@ -833,13 +835,13 @@ bool wxGetKeyState(wxKeyCode key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// From the XLib manual:
|
// From the XLib manual:
|
||||||
// The XQueryKeymap() function returns a bit vector for the logical state of the keyboard,
|
// 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.
|
// where each bit set to 1 indicates that the corresponding key is currently pressed down.
|
||||||
// The vector is represented as 32 bytes. Byte N (from 0) contains the bits for keys 8N to 8N + 7
|
// The vector is represented as 32 bytes. Byte N (from 0) contains the bits for keys 8N to 8N + 7
|
||||||
// with the least-significant bit in the byte representing key 8N.
|
// with the least-significant bit in the byte representing key 8N.
|
||||||
char key_vector[32];
|
char key_vector[32];
|
||||||
XQueryKeymap(pDisplay, key_vector);
|
XQueryKeymap(pDisplay, key_vector);
|
||||||
return key_vector[keyCode >> 3] & (1 << (keyCode & 7));
|
return key_vector[keyCode >> 3] & (1 << (keyCode & 7));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // __WXX11__ || __WXGTK__ || __WXMOTIF__
|
#endif // __WXX11__ || __WXGTK__ || __WXMOTIF__
|
||||||
|
Reference in New Issue
Block a user