fix Linux modifier keys
This commit is contained in:
@@ -154,9 +154,9 @@ typedef Status (*PFNXGETWINDOWATTRIBUTES) (Display* a,Window b,XWindowAttributes
|
|||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
MY_ALT = 1,
|
MY_X11_ALT_KEY = 1,
|
||||||
MY_SHIFT = 2,
|
MY_X11_SHIFT_KEY = 2,
|
||||||
MY_CONTROL = 4
|
MY_X11_CONTROL_KEY = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InternalData2
|
struct InternalData2
|
||||||
@@ -734,7 +734,7 @@ int X11OpenGLWindow::getAsciiCodeFromVirtualKeycode(int keycode)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool X11OpenGLWindow::isModifiedKeyPressed(int key)
|
bool X11OpenGLWindow::isModifierKeyPressed(int key)
|
||||||
{
|
{
|
||||||
bool isPressed = false;
|
bool isPressed = false;
|
||||||
|
|
||||||
@@ -742,17 +742,17 @@ bool X11OpenGLWindow::isModifiedKeyPressed(int key)
|
|||||||
{
|
{
|
||||||
case B3G_ALT:
|
case B3G_ALT:
|
||||||
{
|
{
|
||||||
isPressed = ((m_data->m_modifierFlags && MY_ALT)!=0);
|
isPressed = ((m_data->m_modifierFlags & MY_X11_ALT_KEY)!=0);
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
case B3G_SHIFT:
|
case B3G_SHIFT:
|
||||||
{
|
{
|
||||||
isPressed = ((m_data->m_modifierFlags && MY_SHIFT)!=0);
|
isPressed = ((m_data->m_modifierFlags & MY_X11_SHIFT_KEY)!=0);
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
case B3G_CONTROL:
|
case B3G_CONTROL:
|
||||||
{
|
{
|
||||||
isPressed = ((m_data->m_modifierFlags && MY_CONTROL )!=0);
|
isPressed = ((m_data->m_modifierFlags & MY_X11_CONTROL_KEY )!=0);
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -778,9 +778,24 @@ void X11OpenGLWindow::pumpMessage()
|
|||||||
{
|
{
|
||||||
case KeyPress:
|
case KeyPress:
|
||||||
{
|
{
|
||||||
|
int keycode = getAsciiCodeFromVirtualKeycode(m_data->m_xev.xkey.keycode);
|
||||||
|
switch (keycode)
|
||||||
|
{
|
||||||
|
case B3G_ALT:
|
||||||
|
m_data->m_modifierFlags |= MY_X11_ALT_KEY;
|
||||||
|
break;
|
||||||
|
case B3G_SHIFT:
|
||||||
|
m_data->m_modifierFlags |= MY_X11_SHIFT_KEY;
|
||||||
|
break;
|
||||||
|
case B3G_CONTROL:
|
||||||
|
m_data->m_modifierFlags |= MY_X11_CONTROL_KEY;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{}
|
||||||
|
};
|
||||||
if (m_data->m_keyboardCallback)
|
if (m_data->m_keyboardCallback)
|
||||||
{
|
{
|
||||||
int keycode = getAsciiCodeFromVirtualKeycode(m_data->m_xev.xkey.keycode);
|
|
||||||
int state = 1;
|
int state = 1;
|
||||||
(*m_data->m_keyboardCallback)(keycode,state);
|
(*m_data->m_keyboardCallback)(keycode,state);
|
||||||
// printf("keycode %d",keycode);
|
// printf("keycode %d",keycode);
|
||||||
@@ -793,6 +808,21 @@ void X11OpenGLWindow::pumpMessage()
|
|||||||
case KeyRelease:
|
case KeyRelease:
|
||||||
{
|
{
|
||||||
// fflush(stdout);
|
// fflush(stdout);
|
||||||
|
int keycode = getAsciiCodeFromVirtualKeycode( m_data->m_xev.xkey.keycode);
|
||||||
|
switch (keycode)
|
||||||
|
{
|
||||||
|
case B3G_ALT:
|
||||||
|
m_data->m_modifierFlags &= ~MY_X11_ALT_KEY;
|
||||||
|
break;
|
||||||
|
case B3G_SHIFT:
|
||||||
|
m_data->m_modifierFlags &= ~MY_X11_SHIFT_KEY;
|
||||||
|
break;
|
||||||
|
case B3G_CONTROL:
|
||||||
|
m_data->m_modifierFlags &= ~MY_X11_CONTROL_KEY;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
if (m_data->m_keyboardCallback)
|
if (m_data->m_keyboardCallback)
|
||||||
{
|
{
|
||||||
@@ -817,7 +847,6 @@ void X11OpenGLWindow::pumpMessage()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
int keycode = getAsciiCodeFromVirtualKeycode( m_data->m_xev.xkey.keycode);
|
|
||||||
int state = 0;
|
int state = 0;
|
||||||
(*m_data->m_keyboardCallback)(keycode,state);
|
(*m_data->m_keyboardCallback)(keycode,state);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include "../CommonInterfaces/CommonWindowInterface.h"
|
#include "../CommonInterfaces/CommonWindowInterface.h"
|
||||||
|
|
||||||
class X11OpenGLWindow : public b3gWindowInterface
|
class X11OpenGLWindow : public CommonWindowInterface
|
||||||
{
|
{
|
||||||
|
|
||||||
struct InternalData2* m_data;
|
struct InternalData2* m_data;
|
||||||
@@ -47,7 +47,7 @@ public:
|
|||||||
virtual bool requestedExit() const;
|
virtual bool requestedExit() const;
|
||||||
virtual void setRequestExit() ;
|
virtual void setRequestExit() ;
|
||||||
|
|
||||||
virtual bool isModifiedKeyPressed(int key);
|
virtual bool isModifierKeyPressed(int key);
|
||||||
|
|
||||||
virtual void setMouseMoveCallback(b3MouseMoveCallback mouseCallback);
|
virtual void setMouseMoveCallback(b3MouseMoveCallback mouseCallback);
|
||||||
virtual void setMouseButtonCallback(b3MouseButtonCallback mouseCallback);
|
virtual void setMouseButtonCallback(b3MouseButtonCallback mouseCallback);
|
||||||
|
|||||||
Reference in New Issue
Block a user