diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/BaseDisplay.cc | 46 | ||||
| -rw-r--r-- | src/BaseDisplay.hh | 5 | ||||
| -rw-r--r-- | src/Configmenu.cc | 16 | ||||
| -rw-r--r-- | src/Screen.cc | 12 | ||||
| -rw-r--r-- | src/Screen.hh | 6 | ||||
| -rw-r--r-- | src/Window.cc | 17 | ||||
| -rw-r--r-- | src/main.cc | 14 |
7 files changed, 60 insertions, 56 deletions
diff --git a/src/BaseDisplay.cc b/src/BaseDisplay.cc index aa2d974e..6bf290e2 100644 --- a/src/BaseDisplay.cc +++ b/src/BaseDisplay.cc @@ -238,7 +238,6 @@ BaseDisplay::BaseDisplay(const char *app_name, const char *dpy_name) { for (int i = 0; i < ScreenCount(display); ++i) screenInfoList.push_back(ScreenInfo(this, i)); -#ifndef NOCLOBBER NumLockMask = ScrollLockMask = 0; const XModifierKeymap* const modmap = XGetModifierMapping(display); @@ -268,20 +267,16 @@ BaseDisplay::BaseDisplay(const char *app_name, const char *dpy_name) { MaskList[0] = 0; MaskList[1] = LockMask; MaskList[2] = NumLockMask; - MaskList[3] = ScrollLockMask; - MaskList[4] = LockMask | NumLockMask; - MaskList[5] = NumLockMask | ScrollLockMask; - MaskList[6] = LockMask | ScrollLockMask; - MaskList[7] = LockMask | NumLockMask | ScrollLockMask; + MaskList[3] = LockMask | NumLockMask; + MaskList[4] = ScrollLockMask; + MaskList[5] = ScrollLockMask | LockMask; + MaskList[6] = ScrollLockMask | NumLockMask; + MaskList[7] = ScrollLockMask | LockMask | NumLockMask; MaskListLength = sizeof(MaskList) / sizeof(MaskList[0]); if (modmap) XFreeModifiermap(const_cast<XModifierKeymap*>(modmap)); -#else // NOCLOBBER - NumLockMask = 0; - ScrollLockMask = 0; -#endif // NOCLOBBER - gccache = 0; + gccache = (BGCCache *) 0; } @@ -359,36 +354,32 @@ void BaseDisplay::removeTimer(BTimer *timer) { /* * Grabs a button, but also grabs the button in every possible combination * with the keyboard lock keys, so that they do not cancel out the event. + + * if allow_scroll_lock is true then only the top half of the lock mask + * table is used and scroll lock is ignored. This value defaults to false. */ void BaseDisplay::grabButton(unsigned int button, unsigned int modifiers, Window grab_window, bool owner_events, unsigned int event_mask, int pointer_mode, int keyboard_mode, Window confine_to, - Cursor cursor) const { -#ifndef NOCLOBBER - for (size_t cnt = 0; cnt < MaskListLength; ++cnt) + Cursor cursor, bool allow_scroll_lock) const { + unsigned int length = (allow_scroll_lock) ? MaskListLength / 2: + MaskListLength; + for (size_t cnt = 0; cnt < length; ++cnt) XGrabButton(display, button, modifiers | MaskList[cnt], grab_window, owner_events, event_mask, pointer_mode, keyboard_mode, confine_to, cursor); -#else // NOCLOBBER - XGrabButton(display, button, modifiers, grab_window, - owner_events, event_mask, pointer_mode, keyboard_mode, - confine_to, cursor); -#endif // NOCLOBBER } + /* * Releases the grab on a button, and ungrabs all possible combinations of the * keyboard lock keys. */ void BaseDisplay::ungrabButton(unsigned int button, unsigned int modifiers, Window grab_window) const { -#ifndef NOCLOBBER for (size_t cnt = 0; cnt < MaskListLength; ++cnt) XUngrabButton(display, button, modifiers | MaskList[cnt], grab_window); -#else // NOCLOBBER - XUngrabButton(display, button, modifiers, grab_window); -#endif // NOCLOBBER } @@ -399,10 +390,11 @@ const ScreenInfo* BaseDisplay::getScreenInfo(unsigned int s) const { } -BGCCache *BaseDisplay::gcCache(void) const -{ - if (! gccache) gccache = new BGCCache(this); - return gccache; +BGCCache* BaseDisplay::gcCache(void) const { + if (! gccache) + gccache = new BGCCache(this); + + return gccache; } diff --git a/src/BaseDisplay.hh b/src/BaseDisplay.hh index 921f6ecd..3ebe6e61 100644 --- a/src/BaseDisplay.hh +++ b/src/BaseDisplay.hh @@ -77,10 +77,8 @@ private: }; BShape shape; -#ifndef NOCLOBBER unsigned int MaskList[8]; size_t MaskListLength; -#endif // NOCLOBBER enum RunState { STARTUP, RUNNING, SHUTDOWN }; RunState run_state; @@ -139,7 +137,8 @@ public: void grabButton(unsigned int button, unsigned int modifiers, Window grab_window, bool owner_events, unsigned int event_mask, int pointer_mode, - int keyboard_mode, Window confine_to, Cursor cursor) const; + int keyboard_mode, Window confine_to, Cursor cursor, + bool allow_scroll_lock) const; void ungrabButton(unsigned int button, unsigned int modifiers, Window grab_window) const; diff --git a/src/Configmenu.cc b/src/Configmenu.cc index e73ae327..c5c58d91 100644 --- a/src/Configmenu.cc +++ b/src/Configmenu.cc @@ -57,8 +57,10 @@ Configmenu::Configmenu(BScreen *scr) : Basemenu(scr) { "Window-To-Window Snapping"), 6); insert(i18n(ConfigmenuSet, ConfigmenuWindowCornerSnap, "Window Corner Snapping"), 7); + insert(i18n(ConfigmenuSet, ConfigmenuDisableBindings, + "Disable Mouse with Scroll Lock"), 8); insert(i18n(ConfigmenuSet, ConfigmenuHideToolbar, - "Hide Toolbar"), 8); + "Hide Toolbar"), 9); update(); setValues(); } @@ -75,7 +77,8 @@ void Configmenu::setValues(void) { setItemSelected(8, getScreen()->getWindowCornerSnap()); setItemEnabled(8, getScreen()->getWindowToWindowSnap()); - setItemSelected(9, getScreen()->doHideToolbar()); + setItemSelected(9, getScreen()->allowScrollLock()); + setItemSelected(10, getScreen()->doHideToolbar()); } @@ -84,6 +87,7 @@ Configmenu::~Configmenu(void) { delete placementmenu; } + void Configmenu::itemSelected(int button, unsigned int index) { if (button != 1) return; @@ -130,7 +134,13 @@ void Configmenu::itemSelected(int button, unsigned int index) { setItemSelected(index, getScreen()->getWindowCornerSnap()); break; - case 8: // hide toolbar + case 8: // disable mouse bindings with Scroll Lock + getScreen()->saveAllowScrollLock(! getScreen()->allowScrollLock()); + setItemSelected(index, getScreen()->allowScrollLock()); + getScreen()->reconfigure(); + break; + + case 9: // hide toolbar getScreen()->saveHideToolbar(! getScreen()->doHideToolbar()); setItemSelected(index, getScreen()->doHideToolbar()); break; diff --git a/src/Screen.cc b/src/Screen.cc index f1ba429c..6b895644 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -526,6 +526,13 @@ void BScreen::savePlaceIgnoreMaximized(bool i) { } +void BScreen::saveAllowScrollLock(bool a) { + resource.allow_scroll_lock = a; + config->setValue(screenstr + "disableBindingsWithScrollLock", + resource.allow_scroll_lock); +} + + void BScreen::save_rc(void) { saveSloppyFocus(resource.sloppy_focus); saveAutoRaise(resource.auto_raise); @@ -552,6 +559,7 @@ void BScreen::save_rc(void) { #endif // HAVE_STRFTIME savePlaceIgnoreShaded(resource.ignore_shaded); savePlaceIgnoreMaximized(resource.ignore_maximized); + saveAllowScrollLock(resource.allow_scroll_lock); toolbar->save_rc(); slit->save_rc(); @@ -686,6 +694,10 @@ void BScreen::load_rc(void) { if (! config->getValue(screenstr + "placementIgnoreMaximized", resource.ignore_maximized)) resource.ignore_maximized = true; + + if (! config->getValue(screenstr + "disableBindingsWithScrollLock", + resource.allow_scroll_lock)) + resource.allow_scroll_lock = false; } diff --git a/src/Screen.hh b/src/Screen.hh index f17c6f54..c16bd077 100644 --- a/src/Screen.hh +++ b/src/Screen.hh @@ -144,8 +144,8 @@ private: bool sloppy_focus, auto_raise, auto_edge_balance, ordered_dither, opaque_move, full_max, focus_new, focus_last, click_raise, - hide_toolbar, window_to_window_snap, window_corner_snap, aa_fonts, - ignore_shaded, ignore_maximized; + allow_scroll_lock, hide_toolbar, window_to_window_snap, + window_corner_snap, aa_fonts, ignore_shaded, ignore_maximized; BColor border_color; unsigned int workspaces; @@ -214,6 +214,7 @@ public: { return resource.window_to_window_snap; } inline bool getWindowCornerSnap(void) const { return resource.window_corner_snap; } + inline bool allowScrollLock(void) const { return resource.allow_scroll_lock; } inline const GC &getOpGC(void) const { return opGC; } @@ -285,6 +286,7 @@ public: void saveResizeZones(unsigned int z); void savePlaceIgnoreShaded(bool i); void savePlaceIgnoreMaximized(bool i); + void saveAllowScrollLock(bool a); inline void iconUpdate(void) { iconmenu->update(); } #ifdef HAVE_STRFTIME diff --git a/src/Window.cc b/src/Window.cc index 8899ff16..316bbf1a 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -819,24 +819,27 @@ void BlackboxWindow::reconfigure(void) { void BlackboxWindow::grabButtons(void) { - if ((! screen->isSloppyFocus()) || screen->doClickRaise()) + if (! screen->isSloppyFocus() || screen->doClickRaise()) // grab button 1 for changing focus/raising blackbox->grabButton(Button1, 0, frame.plate, True, ButtonPressMask, - GrabModeSync, GrabModeSync, frame.plate, None); - + GrabModeSync, GrabModeSync, frame.plate, None, + screen->allowScrollLock()); + if (functions & Func_Move) blackbox->grabButton(Button1, Mod1Mask, frame.window, True, ButtonReleaseMask | ButtonMotionMask, GrabModeAsync, - GrabModeAsync, frame.window, - blackbox->getMoveCursor()); + GrabModeAsync, frame.window, None, + screen->allowScrollLock()); if (functions & Func_Resize) blackbox->grabButton(Button3, Mod1Mask, frame.window, True, ButtonReleaseMask | ButtonMotionMask, GrabModeAsync, - GrabModeAsync, frame.window, None); + GrabModeAsync, frame.window, None, + screen->allowScrollLock()); // alt+middle lowers the window blackbox->grabButton(Button2, Mod1Mask, frame.window, True, ButtonReleaseMask, GrabModeAsync, GrabModeAsync, - frame.window, None); + frame.window, None, + screen->allowScrollLock()); } diff --git a/src/main.cc b/src/main.cc index c06543a1..47debac1 100644 --- a/src/main.cc +++ b/src/main.cc @@ -77,8 +77,6 @@ static void showHelp(int exitval) { "Compile time options:\n" " Debugging:\t\t\t%s\n" " Shape:\t\t\t%s\n" - " Slit:\t\t\t\t%s\n" - " Event Clobbering:\t\t%s\n" " 8bpp Ordered Dithering:\t%s\n\n"), #ifdef DEBUG i18n(CommonSet, CommonYes, "yes"), @@ -92,18 +90,6 @@ static void showHelp(int exitval) { i18n(CommonSet, CommonNo, "no"), #endif // SHAPE -#ifdef SLIT - i18n(CommonSet, CommonYes, "yes"), -#else // !SLIT - i18n(CommonSet, CommonNo, "no"), -#endif // SLIT - -#ifndef NOCLOBBER - i18n(CommonSet, CommonYes, "yes"), -#else // !NOCLOBBER - i18n(CommonSet, CommonNo, "no"), -#endif // NOCLOBBER - #ifdef ORDEREDPSEUDO i18n(CommonSet, CommonYes, "yes") #else // !ORDEREDPSEUDO |
