void HotkeyMatcher::add_hotkeys (const KeyEventList &keys, int id) { for (KeyEventList::const_iterator it = keys.begin (); it != keys.end (); ++it) { if (!it->empty ()) m_impl->m_hotkeys [*it] = id; } }
bool ArrayInstance::match_key_event (const KeyEventList &keys, const KeyEvent &key) const { KeyEventList::const_iterator kit; for (kit = keys.begin (); kit != keys.end (); ++kit) { if (!key.is_key_release()) { if (key.code == kit->code) { int mask = key.mask; // we should ignore capslock and numlock mask &= ~SCIM_KEY_CapsLockMask; mask &= ~SCIM_KEY_NumLockMask; if (mask == kit->mask) return true; } } } return false; }
bool match_key_event (const KeyEventList &list, const KeyEvent &key, uint16 ignore_mask) { KeyEventList::const_iterator kit; for (kit = list.begin (); kit != list.end (); kit++) { uint16 mod1, mod2; mod1 = kit->mask; mod2 = key.mask; mod1 &= ~ignore_mask; mod2 &= ~ignore_mask; if (key.code == kit->code && mod1 == mod2) return true; } return false; }
void ScimConsoleImpl::slot_reload_config (const ConfigPointer &config) { scim_frontend_hotkey_matcher.load_hotkeys (scim_config); scim_imengine_hotkey_matcher.load_hotkeys (scim_config); panel_hotkey_matcher.clear (); vector<String> strings; KeyEventList hotkeys; hotkeys.clear (); if (config->read ("/FrontEnd/Console/Hotkeys/Menu", &strings)) { for (vector<String>::iterator i = strings.begin (); i != strings.end (); ++i) { const String &string = *i; KeyEventList keys; if (scim_string_to_key_list (keys, string)) { for (KeyEventList::iterator j = keys.begin (); j != keys.end (); ++j) { KeyEvent &key = *j; hotkeys.push_back (key); } } } } if (hotkeys.empty ()) { hotkeys.push_back (KeyEvent (SCIM_KEY_F2)); hotkeys.push_back (KeyEvent (SCIM_KEY_Menu)); } panel_hotkey_matcher.add_hotkeys (hotkeys, PANEL_HOTKEY_MENU); hotkeys.clear (); if (config->read ("/FrontEnd/Console/Hotkeys/Cancel", &strings)) { for (vector<String>::iterator i = strings.begin (); i != strings.end (); ++i) { const String &string = *i; KeyEventList keys; if (scim_string_to_key_list (keys, string)) { for (KeyEventList::iterator j = keys.begin (); j != keys.end (); ++j) { KeyEvent &key = *j; hotkeys.push_back (key); } } } } if (hotkeys.empty ()) { hotkeys.push_back (KeyEvent (SCIM_KEY_Escape)); hotkeys.push_back (KeyEvent (SCIM_KEY_BackSpace)); hotkeys.push_back (KeyEvent (SCIM_KEY_Delete)); } panel_hotkey_matcher.add_hotkeys (hotkeys, PANEL_HOTKEY_CANCEL); hotkeys.clear (); if (config->read ("/FrontEnd/Console/Hotkeys/OK", &strings)) { for (vector<String>::iterator i = strings.begin (); i != strings.end (); ++i) { const String &string = *i; KeyEventList keys; if (scim_string_to_key_list (keys, string)) { for (KeyEventList::iterator j = keys.begin (); j != keys.end (); ++j) { KeyEvent &key = *j; hotkeys.push_back (key); } } } } if (hotkeys.empty ()) { hotkeys.push_back (KeyEvent (SCIM_KEY_Return)); hotkeys.push_back (KeyEvent (SCIM_KEY_space)); } panel_hotkey_matcher.add_hotkeys (hotkeys, PANEL_HOTKEY_OK); hotkeys.clear (); if (config->read ("/FrontEnd/Console/Hotkeys/Previous", &strings)) { for (vector<String>::iterator i = strings.begin (); i != strings.end (); ++i) { const String &string = *i; KeyEventList keys; if (scim_string_to_key_list (keys, string)) { for (KeyEventList::iterator j = keys.begin (); j != keys.end (); ++j) { KeyEvent &key = *j; hotkeys.push_back (key); } } } } if (hotkeys.empty ()) { hotkeys.push_back (KeyEvent (SCIM_KEY_Left)); hotkeys.push_back (KeyEvent (SCIM_KEY_Up)); } panel_hotkey_matcher.add_hotkeys (hotkeys, PANEL_HOTKEY_PREVIOUS); hotkeys.clear (); if (config->read ("/FrontEnd/Console/Hotkeys/Next", &strings)) { for (vector<String>::iterator i = strings.begin (); i != strings.end (); ++i) { const String &string = *i; KeyEventList keys; if (scim_string_to_key_list (keys, string)) { for (KeyEventList::iterator j = keys.begin (); j != keys.end (); ++j) { KeyEvent &key = *j; hotkeys.push_back (key); } } } } if (hotkeys.empty ()) { hotkeys.push_back (KeyEvent (SCIM_KEY_Right)); hotkeys.push_back (KeyEvent (SCIM_KEY_Down)); } panel_hotkey_matcher.add_hotkeys (hotkeys, PANEL_HOTKEY_NEXT); // Get keyboard layout setting // Flush the global config first, in order to load the new configs from disk. scim_global_config_flush (); scim_keyboard_layout = scim_get_default_keyboard_layout (); }