//------------------------------------------------------------------------- // Change group callback if key is redirected //------------------------------------------------------------------------- // Activate key in group (simulate a key stroke) // The group is taken from the Keydef in case of redirection //------------------------------------------------------------------------- bool CKeyMap::Stroke(Tag grp,Tag kid) { //--- find the Key set --------------------------- CKeySet *ks = FindKeySetById (grp); if (0 == ks) return false; CKeyDefinition *kdf = ks->GetKeyByTag(kid); if (0 == kdf) return false; //--- Group Redirection -------------------------- Tag ngp = kdf->GetSet(); ks = FindKeySetById (ngp); KeyGroupCB cb = ks->GetCB(); return (cb)(kdf,kdf->GetCode()) ; }
//------------------------------------------------------------------------------ // Keyboard Key pressed //------------------------------------------------------------------------------ void CKeyMap::KeyPress (U_INT key, EKeyboardModifiers mod) { // Translate key and modifier into keycode int code = (mod << 16) + key; bool handled = false; //--- special detection mode ------------------------------ if(m_bKeyDetect && m_fKeyCallback) { /// \todo unbind if this key code is already asigned if (m_fKeyCallback(m_winID, code)) return; } //---Standard key ----------------------------------------- for (U_INT k=0; (k<oset.size()); k++) { CKeySet *ks = oset[k]; CKeyDefinition *kdf = ks->GetKeyByCode(code); if (0 == kdf) continue; //---Call the redirected group key callback ----------- Tag ngp = kdf->GetSet(); ks = FindKeySetById (ngp); KeyGroupCB cb = ks->GetCB(); handled = (cb)(kdf,code); if (handled) return; } return; }