12 : m_configWatcher(KConfigWatcher::create(KSharedConfig::openConfig(
"kaccessrc")))
14 const QLatin1String groupName(
"Keyboard");
15 connect(m_configWatcher.get(), &KConfigWatcher::configChanged,
this, [
this, groupName](
const KConfigGroup &group) {
16 if (group.name() == groupName) {
20 loadConfig(m_configWatcher->config()->group(groupName));
22 for (
int mod : std::as_const(m_modifiers)) {
23 m_keyStates[mod] = None;
29 if (key == Qt::Key_Shift) {
30 return Qt::ShiftModifier;
31 }
else if (key == Qt::Key_Alt) {
32 return Qt::AltModifier;
33 }
else if (key == Qt::Key_Control) {
34 return Qt::ControlModifier;
35 }
else if (key == Qt::Key_AltGr) {
36 return Qt::GroupSwitchModifier;
37 }
else if (key == Qt::Key_Meta) {
38 return Qt::MetaModifier;
41 return Qt::NoModifier;
44void StickyKeysFilter::loadConfig(
const KConfigGroup &group)
48 m_lockKeys = group.readEntry<
bool>(
"StickyKeysLatch",
true);
52 for (
auto it = m_keyStates.keyValueBegin(); it != m_keyStates.keyValueEnd(); ++it) {
60 if (group.readEntry<
bool>(
"StickyKeys",
false)) {
64 for (
auto it = m_keyStates.keyValueBegin(); it != m_keyStates.keyValueEnd(); ++it) {
75 if (m_modifiers.contains(event->key())) {
77 auto keyState = m_keyStates.find(event->key());
79 if (keyState != m_keyStates.end()) {
80 if (event->type() == QKeyEvent::KeyPress) {
82 if (keyState.value() ==
None) {
87 else if (keyState.value() ==
Latched && m_lockKeys) {
92 else if (keyState.value() ==
Locked && m_lockKeys) {
93 keyState.value() =
None;
98 }
else if (event->type() == QKeyEvent::KeyPress) {
100 for (
auto it = m_keyStates.keyValueBegin(); it != m_keyStates.keyValueEnd(); ++it) {
102 if (it->second ==
Locked) {
115#include "moc_stickykeys.cpp"
void setModifierLocked(Qt::KeyboardModifier mod, bool locked)
void setModifierLatched(Qt::KeyboardModifier mod, bool latched)
bool keyEvent(KWin::KeyEvent *event) override
InputRedirection * input()
Qt::KeyboardModifier keyToModifier(Qt::Key key)