A far more elegant solution, and one that allows the problem to be solved after a crash by restarting and exiting

This commit is contained in:
Sean Burke
2005-03-16 05:23:20 +00:00
parent c45c229995
commit 37c6621bd7
@@ -8,8 +8,6 @@
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/keysym.h> #include <X11/keysym.h>
XKeyboardState prev_state;
static RageKeySym XSymToKeySym( int key ) static RageKeySym XSymToKeySym( int key )
{ {
#define KEY_INV KEY_INVALID #define KEY_INV KEY_INVALID
@@ -113,19 +111,18 @@ static RageKeySym XSymToKeySym( int key )
InputHandler_X11::InputHandler_X11() InputHandler_X11::InputHandler_X11()
{ {
XKeyboardControl new_state; XKeyboardControl state;
new_state.auto_repeat_mode = AutoRepeatModeOff; state.auto_repeat_mode = AutoRepeatModeOff;
XChangeKeyboardControl(X11Helper::Dpy,KBAutoRepeatMode,&state);
X11Helper::Go(); X11Helper::Go();
X11Helper::OpenMask(KeyPressMask); X11Helper::OpenMask(KeyReleaseMask); X11Helper::OpenMask(KeyPressMask); X11Helper::OpenMask(KeyReleaseMask);
XGetKeyboardControl(X11Helper::Dpy,&prev_state);
XChangeKeyboardControl(X11Helper::Dpy,KBAutoRepeatMode,&new_state);
} }
InputHandler_X11::~InputHandler_X11() InputHandler_X11::~InputHandler_X11()
{ {
XKeyboardControl end_state; XKeyboardControl state;
end_state.auto_repeat_mode = prev_state.global_auto_repeat; state.auto_repeat_mode = AutoRepeatModeDefault;
XChangeKeyboardControl(X11Helper::Dpy,KBAutoRepeatMode,&end_state); XChangeKeyboardControl(X11Helper::Dpy,KBAutoRepeatMode,&state);
X11Helper::CloseMask(KeyPressMask); X11Helper::CloseMask(KeyReleaseMask); X11Helper::CloseMask(KeyPressMask); X11Helper::CloseMask(KeyReleaseMask);
X11Helper::Stop(); X11Helper::Stop();
} }