+           if (patPtr->needMods != 0) {
+               int modMask = patPtr->needMods;
+
+               if (!dispPtr->metaModMask && !dispPtr->altModMask && !dispPtr->modeModMask) {
+                       int i, max;
+                       XModifierKeymap *modMapPtr;
+                       KeyCode *codePtr;
+                       KeySym keysym;
+
+                       modMapPtr = XGetModifierMapping(dispPtr->display);
+                       codePtr = modMapPtr->modifiermap;
+                       max = 8*modMapPtr->max_keypermod;
+
+                       for (i = 0; i < max; i++, codePtr++) {
+                               if (*codePtr == 0) {
+                                       continue;
+                               }
+                               keysym = XKeycodeToKeysym(dispPtr->display, *codePtr, 0);
+                               if (keysym == XK_Mode_switch) {
+                                       dispPtr->modeModMask |= ShiftMask << (i/modMapPtr->max_keypermod);
+                               }
+                               if ((keysym == XK_Meta_L) || (keysym == XK_Meta_R)) {
+                                       dispPtr->metaModMask |= ShiftMask << (i/modMapPtr->max_keypermod);
+                               }
+                               if ((keysym == XK_Alt_L) || (keysym == XK_Alt_R)) {
+                                       dispPtr->altModMask |= ShiftMask << (i/modMapPtr->max_keypermod);
+                               }
+                       }
+               }
+               if ((modMask & META_MASK) && (dispPtr->metaModMask != 0)) {
+                       modMask = (modMask & ~META_MASK) | dispPtr->metaModMask;
+               }
+               if ((modMask & ALT_MASK) && (dispPtr->altModMask != 0)) {
+                       modMask = (modMask & ~ALT_MASK) | dispPtr->altModMask;
+               }
+
+               if ((state & META_MASK) && (dispPtr->metaModMask != 0)) {
+                       state = (state & ~META_MASK) | dispPtr->metaModMask;
+               }
+               if ((state & ALT_MASK) && (dispPtr->altModMask != 0)) {
+                       state = (state & ~ALT_MASK) | dispPtr->altModMask;
+               }
+
+               if ((state & modMask) != modMask) {
+                       goto nextSequence;
+               }