KWin
Loading...
Searching...
No Matches
seat.h
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
3 SPDX-FileCopyrightText: 2021 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
4
5 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6*/
7#pragma once
8
9#include "kwin_export.h"
10
11#include <QMatrix4x4>
12#include <QObject>
13#include <QPoint>
14
15struct wl_client;
16struct wl_resource;
17
18namespace KWin
19{
20class AbstractDataSource;
21class AbstractDropHandler;
22class DragAndDropIcon;
23class DataDeviceInterface;
24class Display;
25class KeyboardInterface;
26class PointerInterface;
27class SeatInterfacePrivate;
28class SurfaceInterface;
29class TextInputV1Interface;
30class TextInputV2Interface;
31class TextInputV3Interface;
32class TouchInterface;
33class XdgToplevelDragV1Interface;
34
54 Unknown,
55 Wheel,
56 Finger,
59};
60
68
73enum class PointerButtonState : quint32 {
74 Released = 0,
75 Pressed = 1,
76};
77
82enum class KeyboardKeyState : quint32 {
83 Released = 0,
84 Pressed = 1,
85};
86
133class KWIN_EXPORT SeatInterface : public QObject
134{
135 Q_OBJECT
136public:
137 explicit SeatInterface(Display *display, QObject *parent = nullptr);
138 virtual ~SeatInterface();
139
140 Display *display() const;
141 QString name() const;
142 bool hasPointer() const;
143 bool hasKeyboard() const;
144 bool hasTouch() const;
145
146 void setName(const QString &name);
147 void setHasPointer(bool has);
148 void setHasKeyboard(bool has);
149 void setHasTouch(bool has);
150
151 void setTimestamp(std::chrono::microseconds time);
152 std::chrono::milliseconds timestamp() const;
153
158
165 bool isDrag() const;
171 bool isDragPointer() const;
177 bool isDragTouch() const;
182 QMatrix4x4 dragSurfaceTransformation() const;
188 SurfaceInterface *dragSurface() const;
193 AbstractDataSource *dragSource() const;
197 XdgToplevelDragV1Interface *xdgTopleveldrag() const;
198
205 void setDragTarget(AbstractDropHandler *dropTarget, SurfaceInterface *surface, const QPointF &globalPosition, const QMatrix4x4 &inputTransformation);
212 void setDragTarget(AbstractDropHandler *dropTarget, SurfaceInterface *surface, const QMatrix4x4 &inputTransformation = QMatrix4x4());
214
215 AbstractDropHandler *dropHandlerForSurface(SurfaceInterface *surface) const;
216
220 void cancelDrag();
221
226
231 void notifyPointerMotion(const QPointF &pos);
235 QPointF pointerPos() const;
262 void notifyPointerEnter(SurfaceInterface *surface, const QPointF &position, const QPointF &surfacePosition = QPointF());
286 void notifyPointerEnter(SurfaceInterface *surface, const QPointF &position, const QMatrix4x4 &transformation);
287 void notifyPointerLeave();
293 SurfaceInterface *focusedPointerSurface() const;
294 PointerInterface *pointer() const;
308 void setFocusedPointerSurfacePosition(const QPointF &surfacePosition);
314 QPointF focusedPointerSurfacePosition() const;
325 void setFocusedPointerSurfaceTransformation(const QMatrix4x4 &transformation);
330 QMatrix4x4 focusedPointerSurfaceTransformation() const;
334 void notifyPointerButton(quint32 button, PointerButtonState state);
338 void notifyPointerButton(Qt::MouseButton button, PointerButtonState state);
339 void notifyPointerFrame();
343 bool isPointerButtonPressed(quint32 button) const;
347 bool isPointerButtonPressed(Qt::MouseButton button) const;
351 quint32 pointerButtonSerial(quint32 button) const;
355 quint32 pointerButtonSerial(Qt::MouseButton button) const;
364 void notifyPointerAxis(Qt::Orientation orientation, qreal delta, qint32 deltaV120, PointerAxisSource source, PointerAxisRelativeDirection direction = PointerAxisRelativeDirection::Normal);
368 bool hasImplicitPointerGrab(quint32 serial) const;
369
403 void relativePointerMotion(const QPointF &delta, const QPointF &deltaNonAccelerated, std::chrono::microseconds timestamp);
404
426 void startPointerSwipeGesture(quint32 fingerCount);
427
436 void updatePointerSwipeGesture(const QPointF &delta);
437
445 void endPointerSwipeGesture();
446
453 void cancelPointerSwipeGesture();
454
476 void startPointerPinchGesture(quint32 fingerCount);
477
489 void updatePointerPinchGesture(const QPointF &delta, qreal scale, qreal rotation);
490
497 void endPointerPinchGesture();
498
505 void cancelPointerPinchGesture();
506
525 void startPointerHoldGesture(quint32 fingerCount);
526
532 void endPointerHoldGesture();
533
539 void cancelPointerHoldGesture();
541
552 void setFocusedKeyboardSurface(SurfaceInterface *surface);
553 SurfaceInterface *focusedKeyboardSurface() const;
554 KeyboardInterface *keyboard() const;
555 void notifyKeyboardKey(quint32 keyCode, KeyboardKeyState state);
556 void notifyKeyboardModifiers(quint32 depressed, quint32 latched, quint32 locked, quint32 group);
558
563 void setFocusedTouchSurface(SurfaceInterface *surface, const QPointF &surfacePosition = QPointF());
564 SurfaceInterface *focusedTouchSurface() const;
565 TouchInterface *touch() const;
566 void setFocusedTouchSurfacePosition(const QPointF &surfacePosition);
567 QPointF focusedTouchSurfacePosition() const;
568 void notifyTouchDown(qint32 id, const QPointF &globalPosition);
569 void notifyTouchUp(qint32 id);
570 void notifyTouchMotion(qint32 id, const QPointF &globalPosition);
571 void notifyTouchFrame();
572 void notifyTouchCancel();
573 bool isTouchSequence() const;
574 QPointF firstTouchPointPosition() const;
579 bool hasImplicitTouchGrab(quint32 serial) const;
581
586
603 void setFocusedTextInputSurface(SurfaceInterface *surface);
608 SurfaceInterface *focusedTextInputSurface() const;
609
610 TextInputV1Interface *textInputV1() const;
611
623 TextInputV2Interface *textInputV2() const;
624
625 TextInputV3Interface *textInputV3() const;
627
634 AbstractDataSource *selection() const;
635
648 void setSelection(AbstractDataSource *selection);
649
650 AbstractDataSource *primarySelection() const;
651 void setPrimarySelection(AbstractDataSource *selection);
652
653 void startDrag(AbstractDataSource *source, SurfaceInterface *sourceSurface, int dragSerial = -1, DragAndDropIcon *dragIcon = nullptr);
654
659 DragAndDropIcon *dragIcon() const;
660
661 static SeatInterface *get(wl_resource *native);
662
663Q_SIGNALS:
664 void nameChanged(const QString &);
667 void hasTouchChanged(bool);
668 void pointerPosChanged(const QPointF &pos);
669 void touchMoved(qint32 id, quint32 serial, const QPointF &globalPosition);
671
678
684
694 void dragEnded();
700
715
716private:
717 std::unique_ptr<SeatInterfacePrivate> d;
719};
720
721}
722
The AbstractDataSource class abstracts the data that can be transferred to another client.
Class holding the Wayland server display loop.
Definition display.h:34
Resource for the wl_keyboard interface.
Definition keyboard.h:25
Represents a Seat on the Wayland Display.
Definition seat.h:134
void focusedKeyboardSurfaceAboutToChange(SurfaceInterface *nextSurface)
void touchMoved(qint32 id, quint32 serial, const QPointF &globalPosition)
void focusedTextInputSurfaceChanged()
void hasTouchChanged(bool)
void hasKeyboardChanged(bool)
void selectionChanged(KWin::AbstractDataSource *)
void primarySelectionChanged(KWin::AbstractDataSource *)
void pointerPosChanged(const QPointF &pos)
void nameChanged(const QString &)
void hasPointerChanged(bool)
Resource representing a wl_surface.
Definition surface.h:80
Represents a generic Resource for a text input object.
Represents a generic Resource for a text input object.
Represents a generic Resource for a text input object.A TextInputV3Interface gets created by the Text...
Q_DECLARE_METATYPE(KWin::SwitchEvent::State)
PointerAxisSource
Definition seat.h:53
PointerButtonState
Definition seat.h:73
PointerAxisRelativeDirection
Definition seat.h:64
KeyboardKeyState
Definition seat.h:82
struct _XDisplay Display