extern "C" {
#include <X11/keysym.h>
+#ifdef XKB
+#include <X11/XKBlib.h>
+#endif // XKB
+
#ifdef SHAPE
#include <X11/extensions/shape.h>
#endif // SHAPE
Display *OBDisplay::display = (Display*) 0;
+bool OBDisplay::_xkb = false;
+int OBDisplay::_xkb_event_basep = 0;
bool OBDisplay::_shape = false;
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;
{
XGetErrorText(d, e->error_code, errtxt, 128);
printf("X Error: %s\n", errtxt);
+ if (e->error_code != BadWindow)
+ abort();
}
#else
(void)d;
}
// find the availability of X extensions we like to use
+#ifdef XKB
+ _xkb = XkbQueryExtension(display, &junk, &_xkb_event_basep, &junk, NULL,
+ NULL);
+#endif
+
#ifdef SHAPE
_shape = XShapeQueryExtension(display, &_shape_event_basep, &junk);
#endif
// 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) {
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];
}
}
_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));
}
+const ScreenInfo* OBDisplay::findScreen(Window root)
+{
+ ScreenInfoList::iterator it, end = _screenInfoList.end();
+ for (it = _screenInfoList.begin(); it != end; ++it)
+ if (it->rootWindow() == root)
+ return &(*it);
+ return 0;
+}
+
+
void OBDisplay::grab()
{
if (_grab_count == 0)