X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Fdisplay.cc;h=bd6d2d05d1b31e0ba3cadfa4e217de3713b3b55b;hb=7bae794382c7a64a6427b16d1339b98120a5166f;hp=77111d3cbb4f5398d5f121ba896c138cc5986053;hpb=c4a1fac49da32250dc4567880b385feb7feaa908;p=chaz%2Fopenbox diff --git a/otk/display.cc b/otk/display.cc index 77111d3c..bd6d2d05 100644 --- a/otk/display.cc +++ b/otk/display.cc @@ -1,4 +1,4 @@ -// -*- mode: C++; indent-tabs-mode: nil; -*- +// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- #ifdef HAVE_CONFIG_H # include "../config.h" @@ -162,6 +162,8 @@ line argument.\n\n")); void OBDisplay::destroy() { delete _gccache; + while (_grab_count > 0) + ungrab(); XCloseDisplay(display); } @@ -227,5 +229,24 @@ void OBDisplay::ungrabButton(unsigned int button, unsigned int modifiers, grab_window); } +void OBDisplay::grabKey(unsigned int keycode, unsigned int modifiers, + Window grab_window, bool owner_events, + int pointer_mode, int keyboard_mode, + bool allow_scroll_lock) +{ + unsigned int length = (allow_scroll_lock) ? 8 / 2: + 8; + for (size_t cnt = 0; cnt < length; ++cnt) + XGrabKey(otk::OBDisplay::display, keycode, modifiers | _mask_list[cnt], + grab_window, owner_events, pointer_mode, keyboard_mode); +} + +void OBDisplay::ungrabKey(unsigned int keycode, unsigned int modifiers, + Window grab_window) +{ + for (size_t cnt = 0; cnt < 8; ++cnt) + XUngrabKey(otk::OBDisplay::display, keycode, modifiers | _mask_list[cnt], + grab_window); +} }