81 Keystroke(int32_t group,
bool absolute,
bool restore);
217 KeyModifierMask desiredMask,
bool isAutoRepeat,
const std::string &lang
335 using KeyEntryList = std::vector<KeyItemList>;
338 int32_t findNumGroups()
const;
341 void setModifierKeys();
349 const KeyItem *mapCommandKey(
351 KeyModifierMask desiredMask,
bool isAutoRepeat,
const std::string &lang
357 const KeyItem *mapCharacterKey(
359 KeyModifierMask desiredMask,
bool isAutoRepeat,
const std::string &lang
363 const KeyItem *mapModifierKey(
365 KeyModifierMask desiredMask,
bool isAutoRepeat,
const std::string &lang
371 int32_t findBestKey(
const KeyEntryList &entryList,
KeyModifierMask desiredState)
const;
376 const KeyItem *keyForModifier(
KeyButton button, int32_t group, int32_t modifierBit)
const;
385 const std::string &lang
392 bool keysToRestoreModifiers(
402 bool keysForModifierState(
419 static void initKeyNameMaps();
422 using KeyGroupTable = std::vector<KeyEntryList>;
424 void addGroupToKeystroke(
Keystrokes &keys, int32_t &group,
const std::string &lang)
const;
426 int32_t getLanguageGroupID(int32_t group,
const std::string &lang)
const;
428 getKeyItemList(
const KeyGroupTable &keyGroupTable, int32_t group,
KeyModifierMask desiredMask)
const;
436 using KeyIDMap = std::map<KeyID, KeyGroupTable>;
439 using ModifierKeyItemList = std::vector<const KeyItem *>;
442 using ModifierToKeyTable = std::vector<ModifierKeyItemList>;
445 using KeySet = std::set<KeyID>;
448 using KeyButtonSet = std::set<KeyButton>;
451 using NameToKeyMap = std::map<std::string, KeyID, deskflow::string::CaselessCmp>;
452 using NameToModifierMap = std::map<std::string, KeyModifierMask, deskflow::string::CaselessCmp>;
453 using KeyToNameMap = std::map<KeyID, std::string>;
454 using ModifierToNameMap = std::map<KeyModifierMask, std::string>;
459 ModifierToKeyTable m_modifierKeys;
462 bool m_composeAcrossGroups;
465 KeyButtonSet m_halfDuplex;
466 KeySet m_halfDuplexMods;
469 KeyItem m_modifierKeyItem;
472 std::vector<std::string> m_keyboardLayouts;
475 static NameToKeyMap *s_nameToKeyMap;
476 static NameToModifierMap *s_nameToModifierMap;
477 static KeyToNameMap *s_keyToNameMap;
478 static ModifierToNameMap *s_modifierToNameMap;
static int type
Definition ArchNetworkWinsock.cpp:44
int key
Definition KeySequence.cpp:15
uint32_t KeyID
Key ID.
Definition KeyTypes.h:22
uint16_t KeyButton
Key Code.
Definition KeyTypes.h:35
uint32_t KeyModifierMask
Modifier key mask.
Definition KeyTypes.h:45
EType
Definition KeyMap.h:75
@ kGroup
Set new group.
Definition KeyMap.h:77
@ kButton
Synthesize button.
Definition KeyMap.h:76
Data m_data
Definition KeyMap.h:107
Keystroke(KeyButton, bool press, bool repeat, uint32_t clientData)
Definition KeyMap.cpp:1234
EType m_type
Definition KeyMap.h:106
Key map.
Definition KeyMap.h:24
virtual void foreachKey(ForeachKeyCallback cb, void *userData)
Iterate over all added keys items.
Definition KeyMap.cpp:212
void addKeyAliasEntry(KeyID targetID, int32_t group, KeyModifierMask targetRequired, KeyModifierMask targetSensitive, KeyID sourceID, KeyModifierMask sourceRequired, KeyModifierMask sourceSensitive)
Add an alias key entry.
Definition KeyMap.cpp:96
virtual const KeyItem * mapKey(Keystrokes &keys, KeyID id, int32_t group, ModifierToKeys &activeModifiers, KeyModifierMask ¤tState, KeyModifierMask desiredMask, bool isAutoRepeat, const std::string &lang) const
Map key press/repeat to keystrokes.
Definition KeyMap.cpp:228
static std::string formatKey(KeyID key, KeyModifierMask)
Get string for a key and modifier mask.
Definition KeyMap.cpp:1079
void allowGroupSwitchDuringCompose()
Enable composition across groups.
Definition KeyMap.cpp:179
static KeyID getDeadKey(KeyID key)
Get corresponding dead key.
Definition KeyMap.cpp:1021
std::map< KeyButton, const KeyItem * > ButtonToKeyMap
A set of buttons.
Definition KeyMap.h:117
static bool isDeadKey(KeyID key)
Test for a dead key.
Definition KeyMap.cpp:1016
std::multimap< KeyModifierMask, KeyItem > ModifierToKeys
A mapping of a modifier to keys for that modifier.
Definition KeyMap.h:114
void clearHalfDuplexModifiers()
Remove all half-duplex modifiers.
Definition KeyMap.cpp:189
virtual void swap(KeyMap &) noexcept
Swap with another KeyMap.
Definition KeyMap.cpp:38
void(*)(KeyID, int32_t group, KeyItem &, void *userData) ForeachKeyCallback
Callback type for foreachKey.
Definition KeyMap.h:120
std::vector< Keystroke > Keystrokes
A sequence of keystrokes.
Definition KeyMap.h:111
static void collectButtons(const ModifierToKeys &modifiers, ButtonToKeyMap &keys)
Get buttons from modifier map.
Definition KeyMap.cpp:365
static bool parseModifiers(std::string &, KeyModifierMask &)
Parse a string into a modifier mask.
Definition KeyMap.cpp:1141
void setLanguageData(std::vector< std::string > layouts)
Definition KeyMap.cpp:297
static bool parseKey(const std::string &, KeyID &)
Parse a string into a key.
Definition KeyMap.cpp:1109
std::vector< KeyItem > KeyItemList
The KeyButtons needed to synthesize a KeyID.
Definition KeyMap.h:68
void addHalfDuplexButton(KeyButton button)
Add a half-duplex button.
Definition KeyMap.cpp:184
friend class KeyMapTests
Definition KeyMap.h:27
static void initModifierKey(KeyItem &item)
Set modifier key state.
Definition KeyMap.cpp:373
void addKeyEntry(const KeyItem &item)
Add a key entry.
Definition KeyMap.cpp:52
bool addKeyCombinationEntry(KeyID id, int32_t group, const KeyID *keys, uint32_t numKeys)
Add a key sequence entry.
Definition KeyMap.cpp:120
KeyMap()
Definition KeyMap.cpp:25
bool isCommand(KeyModifierMask mask) const
Test if modifiers indicate a command.
Definition KeyMap.cpp:352
virtual void addHalfDuplexModifier(KeyID key)
Add a half-duplex modifier.
Definition KeyMap.cpp:194
virtual ~KeyMap()=default
virtual bool isHalfDuplex(KeyID key, KeyButton button) const
Test if modifier is half-duplex.
Definition KeyMap.cpp:347
virtual void finish()
Finish adding entries.
Definition KeyMap.cpp:199
KeyModifierMask getCommandModifiers() const
Definition KeyMap.cpp:357
int32_t getNumGroups() const
Get number of groups.
Definition KeyMap.cpp:316
const KeyItemList * findCompatibleKey(KeyID id, int32_t group, KeyModifierMask required, KeyModifierMask sensitive) const
Find key entry compatible with modifiers.
Definition KeyMap.cpp:327
int32_t getEffectiveGroup(int32_t group, int32_t offset) const
Compute a group number.
Definition KeyMap.cpp:321
Definition EventTypes.h:11
KeyID synthesis info.
Definition KeyMap.h:42
int32_t m_group
Group for key.
Definition KeyMap.h:45
KeyModifierMask m_generates
Modifiers key is mapped to.
Definition KeyMap.h:49
uint32_t m_client
Client data.
Definition KeyMap.h:52
bool m_lock
true if this locks a modifier
Definition KeyMap.h:51
KeyModifierMask m_sensitive
Modifiers key is sensitive to.
Definition KeyMap.h:48
KeyButton m_button
Button to generate KeyID.
Definition KeyMap.h:46
bool operator==(const KeyItem &) const
Definition KeyMap.cpp:1221
KeyModifierMask m_required
Modifiers required for KeyID.
Definition KeyMap.h:47
bool m_dead
true if this is a dead KeyID
Definition KeyMap.h:50
KeyID m_id
KeyID.
Definition KeyMap.h:44
int32_t m_group
Group/offset to change to/by.
Definition KeyMap.h:95
bool m_absolute
true iff change to, else by
Definition KeyMap.h:96
bool m_restore
true iff for restoring state
Definition KeyMap.h:97
Button m_button
Definition KeyMap.h:102
Group m_group
Definition KeyMap.h:103