From 03cbcab18471c02878b0207e2a59976ffa76caa5 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 16 Feb 2012 14:39:51 +0100 Subject: xcb: avoid use of statically-sized QList MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change the use of QList> to a simple C array of xcb_keycode_t*s. This is possible since the number of elements in the container is statically known. I have not measured speedup; this is just preventing premature pessimisation. Change-Id: I8855fc8a4e7ee840d8b7497ec4166074da7d8ea8 Reviewed-by: Samuel Rødal --- src/plugins/platforms/xcb/qxcbkeyboard.cpp | 33 ++++++++++++++---------------- 1 file changed, 15 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp index 8c86d43f17..1b874e345c 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp +++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp @@ -939,38 +939,35 @@ void QXcbKeyboard::setupModifiers() return; } - // Figure out the modifier mapping, ICCCM 6.6 - typedef QPair SymCodes; - QList modKeyCodes; - // for Alt and Meta L and R are the same - modKeyCodes << SymCodes(XK_Alt_L, xcb_key_symbols_get_keycode(m_key_symbols, XK_Alt_L)); - modKeyCodes << SymCodes(XK_Meta_L, xcb_key_symbols_get_keycode(m_key_symbols, XK_Meta_L)); - modKeyCodes << SymCodes(XK_Super_L, xcb_key_symbols_get_keycode(m_key_symbols, XK_Super_L)); - modKeyCodes << SymCodes(XK_Super_R, xcb_key_symbols_get_keycode(m_key_symbols, XK_Super_R)); - modKeyCodes << SymCodes(XK_Hyper_L, xcb_key_symbols_get_keycode(m_key_symbols, XK_Hyper_L)); - modKeyCodes << SymCodes(XK_Hyper_R, xcb_key_symbols_get_keycode(m_key_symbols, XK_Hyper_R)); - modKeyCodes << SymCodes(XK_Num_Lock, xcb_key_symbols_get_keycode(m_key_symbols, XK_Num_Lock)); - modKeyCodes << SymCodes(XK_Mode_switch, xcb_key_symbols_get_keycode(m_key_symbols, XK_Mode_switch)); - modKeyCodes << SymCodes(XK_Caps_Lock, xcb_key_symbols_get_keycode(m_key_symbols, XK_Caps_Lock)); + static const xcb_keysym_t symbols[] = { + XK_Alt_L, XK_Meta_L, XK_Super_L, XK_Super_R, + XK_Hyper_L, XK_Hyper_R, XK_Num_Lock, XK_Mode_switch, XK_Caps_Lock, + }; + static const size_t numSymbols = sizeof symbols / sizeof *symbols; + + // Figure out the modifier mapping, ICCCM 6.6 + xcb_keycode_t* modKeyCodes[numSymbols]; + for (size_t i = 0; i < numSymbols; ++i) + modKeyCodes[i] = xcb_key_symbols_get_keycode(m_key_symbols, symbols[i]); xcb_keycode_t *modMap = xcb_get_modifier_mapping_keycodes(modMapReply); const int w = modMapReply->keycodes_per_modifier; - for (int i = 0; i < modKeyCodes.count(); ++i) { + for (size_t i = 0; i < numSymbols; ++i) { for (int bit = 0; bit < 8; ++bit) { uint mask = 1 << bit; for (int x = 0; x < w; ++x) { xcb_keycode_t keyCode = modMap[x + bit * w]; - xcb_keycode_t *itk = modKeyCodes.at(i).second; + xcb_keycode_t *itk = modKeyCodes[i]; while (itk && *itk != XCB_NO_SYMBOL) if (*itk++ == keyCode) - setMask(modKeyCodes.at(i).first, mask); + setMask(symbols[i], mask); } } } - for (int i = 0; i < modKeyCodes.count(); ++i) - free(modKeyCodes.at(i).second); + for (size_t i = 0; i < numSymbols; ++i) + free(modKeyCodes[i]); free(modMapReply); } -- cgit v1.2.3