11#include <config-kwin.h>
27#if KWIN_BUILD_SCREENLOCKER
28#include <KScreenLocker/KsldApp>
31#include <KGlobalAccel>
43 , m_xkb(new
Xkb(kwinApp()->followLocale1()))
60 return m_xkb->modifiers();
65 return m_xkb->modifiersRelevantForGlobalShortcuts();
78 if (event->isAutoRepeat()) {
99 if (event->isAutoRepeat()) {
102 const Qt::KeyboardModifiers mods =
event->modifiers();
103 if (mods == m_modifiers) {
112 Qt::KeyboardModifiers m_modifiers;
119 const auto config = kwinApp()->kxkbConfig();
120 m_xkb->setNumLockConfig(kwinApp()->inputConfig());
121 m_xkb->setConfig(config);
129 m_keyboardLayout->
init();
141 connect(
workspace(), &QObject::destroyed,
this, [
this] {
148 disconnect(m_activeWindowSurfaceChangedConnection);
149 if (
auto window =
workspace()->activeWindow()) {
152 m_activeWindowSurfaceChangedConnection = QMetaObject::Connection();
156#if KWIN_BUILD_SCREENLOCKER
171 const auto config = kwinApp()->inputConfig()->group(QStringLiteral(
"Keyboard"));
172 const int delay = config.readEntry(
"RepeatDelay", 660);
173 const int rate = std::ceil(config.readEntry(
"RepeatRate", 25.0));
174 const QString repeatMode = config.readEntry(
"KeyRepeat",
"repeat");
177 const bool enabled = repeatMode == QLatin1String(
"accent") || repeatMode == QLatin1String(
"repeat");
193 if (!stacking.isEmpty()) {
194 auto it = stacking.end();
210 }
while (it != stacking.begin());
212 }
else if (!
input()->isSelectingWindow()) {
215 if (found && found->
surface()) {
216 if (found->
surface() != seat->focusedKeyboardSurface()) {
217 seat->setFocusedKeyboardSurface(found->
surface());
220 seat->setFocusedKeyboardSurface(
nullptr);
227 bool autoRepeat =
false;
233 type = QEvent::KeyPress;
236 type = QEvent::KeyRelease;
242 const quint32 previousLayout = m_xkb->currentLayout();
244 m_xkb->updateKey(key, state);
248 const Qt::KeyboardModifiers globalShortcutsModifiers = m_xkb->modifiersRelevantForGlobalShortcuts(key);
250 m_xkb->toQtKey(keySym, key, globalShortcutsModifiers ? Qt::ControlModifier : Qt::KeyboardModifiers()),
254 m_xkb->toString(keySym),
267 m_xkb->forwardModifiers();
268 if (
auto *inputmethod = kwinApp()->inputMethod()) {
272 if (event.modifiersRelevantForGlobalShortcuts() == Qt::KeyboardModifier::NoModifier &&
type != QEvent::KeyRelease) {
279#include "moc_keyboard_input.cpp"
void setModifiersRelevantForGlobalShortcuts(const Qt::KeyboardModifiers &mods)
void keyEvent(KeyEvent *event) override
KeyStateChangedSpy(InputRedirection *input)
void setRepeatInfo(qint32 charactersPerSecond, qint32 delay)
void checkLayoutChange(uint previousLayout)
void keyRepeat(quint32 key, std::chrono::microseconds time)
void keyEvent(KeyEvent *event) override
ModifiersChangedSpy(InputRedirection *input)
void setHasKeyboard(bool has)
KeyboardInterface * keyboard() const
bool hasScreenLockerIntegration() const
SeatInterface * seat() const
SurfaceInterface * surface() const
bool readyForPainting() const
virtual bool isLockScreen() const
Window * activeWindow() const
const QList< Window * > & stackingOrder() const
void windowActivated(KWin::Window *)
static Workspace * self()
void ledsChanged(const LEDs &leds)
WaylandServer * waylandServer()
InputRedirection * input()