summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-06 06:02:22 +0000
committerDana Jansens <danakj@orodu.net>2003-01-06 06:02:22 +0000
commitf3865bb12c2b3506e181f15f09b8429a59a618f8 (patch)
tree47cfc570cccb295b30e720a83c35e66167798892
parentdbf077a59afa5c7f920d8cc598a26175c9dc612e (diff)
ignore num/caps/scroll lock in events
-rw-r--r--otk/display.cc19
-rw-r--r--otk/display.hh9
-rw-r--r--otk/eventdispatcher.cc18
-rw-r--r--otk/otk_wrap.cc30
4 files changed, 64 insertions, 12 deletions
diff --git a/otk/display.cc b/otk/display.cc
index bd6d2d05..3a15ff22 100644
--- a/otk/display.cc
+++ b/otk/display.cc
@@ -49,6 +49,8 @@ int OBDisplay::_shape_event_basep = 0;
bool OBDisplay::_xinerama = false;
int OBDisplay::_xinerama_event_basep = 0;
unsigned int OBDisplay::_mask_list[8];
+unsigned int OBDisplay::_scrollLockMask = 0;
+unsigned int OBDisplay::_numLockMask = 0;
OBDisplay::ScreenInfoList OBDisplay::_screenInfoList;
BGCCache *OBDisplay::_gccache = (BGCCache*) 0;
int OBDisplay::_grab_count = 0;
@@ -113,7 +115,6 @@ line argument.\n\n"));
// get lock masks that are defined by the display (not constant)
XModifierKeymap *modmap;
- unsigned int NumLockMask = 0, ScrollLockMask = 0;
modmap = XGetModifierMapping(display);
if (modmap && modmap->max_keypermod > 0) {
@@ -133,9 +134,9 @@ line argument.\n\n"));
if (! modmap->modifiermap[cnt]) continue;
if (num_lock == modmap->modifiermap[cnt])
- NumLockMask = mask_table[cnt / modmap->max_keypermod];
+ _numLockMask = mask_table[cnt / modmap->max_keypermod];
if (scroll_lock == modmap->modifiermap[cnt])
- ScrollLockMask = mask_table[cnt / modmap->max_keypermod];
+ _scrollLockMask = mask_table[cnt / modmap->max_keypermod];
}
}
@@ -143,12 +144,12 @@ line argument.\n\n"));
_mask_list[0] = 0;
_mask_list[1] = LockMask;
- _mask_list[2] = NumLockMask;
- _mask_list[3] = LockMask | NumLockMask;
- _mask_list[4] = ScrollLockMask;
- _mask_list[5] = ScrollLockMask | LockMask;
- _mask_list[6] = ScrollLockMask | NumLockMask;
- _mask_list[7] = ScrollLockMask | LockMask | NumLockMask;
+ _mask_list[2] = _numLockMask;
+ _mask_list[3] = LockMask | _numLockMask;
+ _mask_list[4] = _scrollLockMask;
+ _mask_list[5] = _scrollLockMask | LockMask;
+ _mask_list[6] = _scrollLockMask | _numLockMask;
+ _mask_list[7] = _scrollLockMask | LockMask | _numLockMask;
// Get information on all the screens which are available.
_screenInfoList.reserve(ScreenCount(display));
diff --git a/otk/display.hh b/otk/display.hh
index 0ebd4140..0fbf2b34 100644
--- a/otk/display.hh
+++ b/otk/display.hh
@@ -42,6 +42,12 @@ private:
//! A list of all possible combinations of keyboard lock masks
static unsigned int _mask_list[8];
+ //! The value of the mask for the NumLock modifier
+ static unsigned int _numLockMask;
+
+ //! The value of the mask for the ScrollLock modifier
+ static unsigned int _scrollLockMask;
+
//! The number of requested grabs on the display
static int _grab_count;
@@ -97,6 +103,9 @@ public:
//! Returns if the display has the xinerama extention available
inline static bool xinerama() { return _xinerama; }
+ inline static unsigned int numLockMask() { return _numLockMask; }
+ inline static unsigned int scrollLockMask() { return _scrollLockMask; }
+
//! Grabs the display
static void grab();
diff --git a/otk/eventdispatcher.cc b/otk/eventdispatcher.cc
index 51e2251e..62335781 100644
--- a/otk/eventdispatcher.cc
+++ b/otk/eventdispatcher.cc
@@ -56,13 +56,25 @@ void OtkEventDispatcher::dispatchEvents(void)
printf("Event %d window %lx\n", e.type, e.xany.window);
#endif
- // grab the lasttime
+ printf("num=%u scroll=%u\n", OBDisplay::numLockMask(), OBDisplay::scrollLockMask());
+
+ // grab the lasttime and hack up the modifiers
switch (e.type) {
case ButtonPress:
case ButtonRelease:
- _lasttime = e.xbutton.time; break;
+ _lasttime = e.xbutton.time;
+ e.xbutton.state &= ~(LockMask | OBDisplay::numLockMask() |
+ OBDisplay::scrollLockMask());
+ break;
+ case KeyPress:
+ e.xkey.state &= ~(LockMask | OBDisplay::numLockMask() |
+ OBDisplay::scrollLockMask());
+ break;
case MotionNotify:
- _lasttime = e.xmotion.time; break;
+ _lasttime = e.xmotion.time;
+ e.xmotion.state &= ~(LockMask | OBDisplay::numLockMask() |
+ OBDisplay::scrollLockMask());
+ break;
case PropertyNotify:
_lasttime = e.xproperty.time; break;
case EnterNotify:
diff --git a/otk/otk_wrap.cc b/otk/otk_wrap.cc
index f3951d49..dc49a85b 100644
--- a/otk/otk_wrap.cc
+++ b/otk/otk_wrap.cc
@@ -5539,6 +5539,34 @@ static PyObject *_wrap_OBDisplay_xinerama(PyObject *self, PyObject *args) {
}
+static PyObject *_wrap_OBDisplay_numLockMask(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ unsigned int result;
+
+ if(!PyArg_ParseTuple(args,(char *)":OBDisplay_numLockMask")) goto fail;
+ result = (unsigned int)otk::OBDisplay::numLockMask();
+
+ resultobj = PyInt_FromLong((long)result);
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
+static PyObject *_wrap_OBDisplay_scrollLockMask(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ unsigned int result;
+
+ if(!PyArg_ParseTuple(args,(char *)":OBDisplay_scrollLockMask")) goto fail;
+ result = (unsigned int)otk::OBDisplay::scrollLockMask();
+
+ resultobj = PyInt_FromLong((long)result);
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
static PyObject *_wrap_OBDisplay_grab(PyObject *self, PyObject *args) {
PyObject *resultobj;
@@ -13041,6 +13069,8 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"OBDisplay_shape", _wrap_OBDisplay_shape, METH_VARARGS },
{ (char *)"OBDisplay_shapeEventBase", _wrap_OBDisplay_shapeEventBase, METH_VARARGS },
{ (char *)"OBDisplay_xinerama", _wrap_OBDisplay_xinerama, METH_VARARGS },
+ { (char *)"OBDisplay_numLockMask", _wrap_OBDisplay_numLockMask, METH_VARARGS },
+ { (char *)"OBDisplay_scrollLockMask", _wrap_OBDisplay_scrollLockMask, METH_VARARGS },
{ (char *)"OBDisplay_grab", _wrap_OBDisplay_grab, METH_VARARGS },
{ (char *)"OBDisplay_ungrab", _wrap_OBDisplay_ungrab, METH_VARARGS },
{ (char *)"OBDisplay_grabButton", _wrap_OBDisplay_grabButton, METH_VARARGS },