Files
sloposk/src/window/FloatingWindow.h
T
ericek111andClaude Opus 5.5 cdef9b4ad0 Spike: KWin input-method backend with floating layer-shell window
Registers as KWin's virtual keyboard (input-method-unstable-v1), shows a
non-focusable layer-shell overlay, and commits Unicode text. Verified in a
nested headless KWin with the textprobe tool.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:43:44 +02:00

40 lines
1.0 KiB
C++

#pragma once
#include <QObject>
#include <QPoint>
class QWindow;
namespace LayerShellQt { class Window; }
// Places a keyboard window as a free-floating overlay that never takes focus.
// On Wayland: a layer-shell surface anchored top-left, positioned via margins.
// On X11: a frameless, non-focusable, always-on-top tool window.
class FloatingWindow : public QObject
{
Q_OBJECT
Q_PROPERTY(QPoint position READ position WRITE setPosition NOTIFY positionChanged)
public:
// Must be called before the window is shown for the first time.
explicit FloatingWindow(QWindow *window, QObject *parent = nullptr);
QPoint position() const { return m_position; }
void setPosition(QPoint position);
Q_INVOKABLE void moveBy(qreal dx, qreal dy);
Q_INVOKABLE void show();
Q_INVOKABLE void hide();
Q_SIGNALS:
void positionChanged();
private:
QPoint clamped(QPoint position) const;
QPoint defaultPosition() const;
void apply();
QWindow *m_window;
LayerShellQt::Window *m_layerSurface = nullptr;
QPoint m_position;
};