From f5f41b9bbed9ccdcdc6fbb47c4ae0067ee71e7a5 Mon Sep 17 00:00:00 2001 From: Sam Spilsbury Date: Fri, 11 Feb 2011 20:23:39 +0800 Subject: [PATCH] Convert modifier masks from virtual to real ones before grabbing button. Also skip ignored modifier if it is also in the cleared ignored bits --- src/window.cpp | 31 ++++++++++++++++++------------- 1 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index c40d5da..e0cdd16 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -4725,23 +4725,28 @@ PrivateWindow::updatePassiveButtonGrabs () /* Grab only we have bindings on */ foreach (PrivateScreen::ButtonGrab &bind, screen->priv->buttonGrabs) { + unsigned int mods = modHandler->virtualToRealModMask (bind.modifiers); + + if (mods & CompNoMask) + continue; + for (unsigned int ignore = 0; ignore <= modHandler->ignoredModMask (); ignore++) { if (ignore & ~modHandler->ignoredModMask ()) - { - XGrabButton (screen->priv->dpy, - bind.button, - bind.modifiers | ignore, - frame, - false, - ButtonPressMask | ButtonReleaseMask | - ButtonMotionMask, - GrabModeSync, - GrabModeAsync, - None, - None); - } + continue; + + XGrabButton (screen->priv->dpy, + bind.button, + mods | ignore, + frame, + false, + ButtonPressMask | ButtonReleaseMask | + ButtonMotionMask, + GrabModeSync, + GrabModeAsync, + None, + None); } } } -- 1.7.2.3