summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/BaseDisplay.cc46
-rw-r--r--src/BaseDisplay.hh5
-rw-r--r--src/Configmenu.cc16
-rw-r--r--src/Screen.cc12
-rw-r--r--src/Screen.hh6
-rw-r--r--src/Window.cc17
-rw-r--r--src/main.cc14
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