kwin/src/keyboard_input.h
Vlad Zahorodnii b867f76d41 backends/wayland: Stop forwarding keymap and modifiers
These concepts are hard to map to InputDevice abstractions, so remove
them and let kwin use its own internal keymap instead (rather than
get it overridden by the host compositor's keymap) and track modifiers
based on the events it receives.

If the goal is to have these at any cost, I think the way out of it
would be to provide wayland backend specific signals. I would like to
avoid doing that though because it breaks encapsulation and we would
need some casts in kwin to wire in these events.
2022-11-24 09:34:53 +00:00

76 lines
1.6 KiB
C++

/*
KWin - the KDE window manager
This file is part of the KDE project.
SPDX-FileCopyrightText: 2013, 2016 Martin Gräßlin <mgraesslin@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef KWIN_KEYBOARD_INPUT_H
#define KWIN_KEYBOARD_INPUT_H
#include "input.h"
#include <QObject>
#include <QPointF>
#include <QPointer>
#include <KSharedConfig>
class QWindow;
struct xkb_context;
struct xkb_keymap;
struct xkb_state;
struct xkb_compose_table;
struct xkb_compose_state;
typedef uint32_t xkb_mod_index_t;
typedef uint32_t xkb_led_index_t;
typedef uint32_t xkb_keysym_t;
typedef uint32_t xkb_layout_index_t;
namespace KWin
{
class Window;
class InputDevice;
class InputRedirection;
class KeyboardLayout;
class ModifiersChangedSpy;
class Xkb;
class KWIN_EXPORT KeyboardInputRedirection : public QObject
{
Q_OBJECT
public:
explicit KeyboardInputRedirection(InputRedirection *parent);
~KeyboardInputRedirection() override;
void init();
void reconfigure();
void update();
/**
* @internal
*/
void processKey(uint32_t key, InputRedirection::KeyboardKeyState state, uint32_t time, InputDevice *device = nullptr);
Xkb *xkb() const;
Qt::KeyboardModifiers modifiers() const;
Qt::KeyboardModifiers modifiersRelevantForGlobalShortcuts() const;
Q_SIGNALS:
void ledsChanged(KWin::LEDs);
private:
InputRedirection *m_input;
bool m_inited = false;
std::unique_ptr<Xkb> m_xkb;
QMetaObject::Connection m_activeWindowSurfaceChangedConnection;
ModifiersChangedSpy *m_modifiersChangedSpy = nullptr;
KeyboardLayout *m_keyboardLayout = nullptr;
};
}
#endif