client: Move device initialization to device constructor

The typical pattern throughout QtWayland is for wrapping clients to be
entirely responsible for the lifespan of underlying proxy objects.

InputDevices previously had a subtly different pattern with proxy object
initialization being called externally.

Change-Id: I2e018bff38628b636d0f485d810521f8e00291f3
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
This commit is contained in:
David Edmundson 2023-05-11 10:55:47 +03:00
parent 5b2524c57d
commit 6d1b95ac8b

View File

@ -63,6 +63,7 @@ static const int MaxTouchPoints = 10;
QWaylandInputDevice::Keyboard::Keyboard(QWaylandInputDevice *p) QWaylandInputDevice::Keyboard::Keyboard(QWaylandInputDevice *p)
: mParent(p) : mParent(p)
{ {
init(p->get_keyboard());
mRepeatTimer.callOnTimeout([&]() { mRepeatTimer.callOnTimeout([&]() {
if (!focusWindow()) { if (!focusWindow()) {
// We destroyed the keyboard focus surface, but the server didn't get the message yet... // We destroyed the keyboard focus surface, but the server didn't get the message yet...
@ -124,6 +125,7 @@ QWaylandWindow *QWaylandInputDevice::Keyboard::focusWindow() const
QWaylandInputDevice::Pointer::Pointer(QWaylandInputDevice *seat) QWaylandInputDevice::Pointer::Pointer(QWaylandInputDevice *seat)
: mParent(seat) : mParent(seat)
{ {
init(seat->get_pointer());
#if QT_CONFIG(cursor) #if QT_CONFIG(cursor)
mCursor.frameTimer.setSingleShot(true); mCursor.frameTimer.setSingleShot(true);
mCursor.frameTimer.callOnTimeout([&]() { mCursor.frameTimer.callOnTimeout([&]() {
@ -364,6 +366,7 @@ void QWaylandInputDevice::Pointer::cursorFrameCallback()
QWaylandInputDevice::Touch::Touch(QWaylandInputDevice *p) QWaylandInputDevice::Touch::Touch(QWaylandInputDevice *p)
: mParent(p) : mParent(p)
{ {
init(p->get_touch());
} }
QWaylandInputDevice::Touch::~Touch() QWaylandInputDevice::Touch::~Touch()
@ -423,14 +426,12 @@ void QWaylandInputDevice::seat_capabilities(uint32_t caps)
if (caps & WL_SEAT_CAPABILITY_KEYBOARD && !mKeyboard) { if (caps & WL_SEAT_CAPABILITY_KEYBOARD && !mKeyboard) {
mKeyboard.reset(createKeyboard(this)); mKeyboard.reset(createKeyboard(this));
mKeyboard->init(get_keyboard());
} else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && mKeyboard) { } else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && mKeyboard) {
mKeyboard.reset(); mKeyboard.reset();
} }
if (caps & WL_SEAT_CAPABILITY_POINTER && !mPointer) { if (caps & WL_SEAT_CAPABILITY_POINTER && !mPointer) {
mPointer.reset(createPointer(this)); mPointer.reset(createPointer(this));
mPointer->init(get_pointer());
auto *pointerGestures = mQDisplay->pointerGestures(); auto *pointerGestures = mQDisplay->pointerGestures();
if (pointerGestures) { if (pointerGestures) {
@ -453,7 +454,6 @@ void QWaylandInputDevice::seat_capabilities(uint32_t caps)
if (caps & WL_SEAT_CAPABILITY_TOUCH && !mTouch) { if (caps & WL_SEAT_CAPABILITY_TOUCH && !mTouch) {
mTouch.reset(createTouch(this)); mTouch.reset(createTouch(this));
mTouch->init(get_touch());
if (!mTouchDevice) { if (!mTouchDevice) {
// TODO number of touchpoints, actual name and ID // TODO number of touchpoints, actual name and ID