diff --git a/tabbox/tabbox.cpp b/tabbox/tabbox.cpp --- a/tabbox/tabbox.cpp +++ b/tabbox/tabbox.cpp @@ -935,34 +935,34 @@ for (int iKeySym = 0; iKeySym < nKeySyms; iKeySym++) { uint keySymX = keySyms[ iKeySym ]; - xcb_keycode_t *keyCodes = xcb_key_symbols_get_keycode(symbols.data(), keySymX); + QScopedPointer keyCodes( + xcb_key_symbols_get_keycode(symbols.data(), keySymX)); if (!keyCodes) { continue; } - xcb_keycode_t keyCodeX = keyCodes[0]; - free(keyCodes); - if (keyCodeX == XCB_NO_SYMBOL) { - continue; - } - int i = keyCodeX / 8; - char mask = 1 << (keyCodeX - (i * 8)); - - // Abort if bad index value, - if (i < 0 || i >= 32) - return false; + int j = 0; + while (keyCodes.data()[j] != XCB_NO_SYMBOL) { + xcb_keycode_t keyCodeX = keyCodes.data()[j++]; + int i = keyCodeX / 8; + char mask = 1 << (keyCodeX - (i * 8)); + + // Abort if bad index value, + if (i < 0 || i >= 32) + return false; - qCDebug(KWIN_TABBOX) << iKeySym << ": keySymX=0x" << QString::number(keySymX, 16) - << " i=" << i << " mask=0x" << QString::number(mask, 16) - << " keymap[i]=0x" << QString::number(keymap[i], 16); + qCDebug(KWIN_TABBOX) << iKeySym << ": keySymX=0x" << QString::number(keySymX, 16) + << " i=" << i << " mask=0x" << QString::number(mask, 16) + << " keymap[i]=0x" << QString::number(keymap[i], 16); - // If ALL keys passed need to be depressed, - if (bAll) { - if ((keymap[i] & mask) == 0) - return false; - } else { - // If we are looking for ANY key press, and this key is depressed, - if (keymap[i] & mask) - return true; + // If ALL keys passed need to be depressed, + if (bAll) { + if ((keymap[i] & mask) == 0) + return false; + } else { + // If we are looking for ANY key press, and this key is depressed, + if (keymap[i] & mask) + return true; + } } }