xdgshell: wrap v3 of xdgshell protocol
This commit is contained in:
parent
9641aa42ec
commit
4fe4a50aa4
3 changed files with 75 additions and 1 deletions
|
@ -17,7 +17,7 @@
|
||||||
namespace KWaylandServer
|
namespace KWaylandServer
|
||||||
{
|
{
|
||||||
|
|
||||||
static const int s_version = 2;
|
static const int s_version = 3;
|
||||||
|
|
||||||
XdgShellInterfacePrivate::XdgShellInterfacePrivate(XdgShellInterface *shell)
|
XdgShellInterfacePrivate::XdgShellInterfacePrivate(XdgShellInterface *shell)
|
||||||
: q(shell)
|
: q(shell)
|
||||||
|
@ -705,6 +705,13 @@ void XdgPopupInterfacePrivate::xdg_popup_grab(Resource *resource, ::wl_resource
|
||||||
emit q->grabRequested(seat, serial);
|
emit q->grabRequested(seat, serial);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XdgPopupInterfacePrivate::xdg_popup_reposition(Resource *resource, ::wl_resource *positionerResource, uint32_t token)
|
||||||
|
{
|
||||||
|
Q_UNUSED(resource)
|
||||||
|
positioner = XdgPositioner::get(positionerResource);
|
||||||
|
emit q->repositionRequested(token);
|
||||||
|
}
|
||||||
|
|
||||||
XdgPopupInterface::XdgPopupInterface(XdgSurfaceInterface *surface,
|
XdgPopupInterface::XdgPopupInterface(XdgSurfaceInterface *surface,
|
||||||
SurfaceInterface *parentSurface,
|
SurfaceInterface *parentSurface,
|
||||||
const XdgPositioner &positioner,
|
const XdgPositioner &positioner,
|
||||||
|
@ -763,6 +770,12 @@ void XdgPopupInterface::sendPopupDone()
|
||||||
d->send_popup_done();
|
d->send_popup_done();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XdgPopupInterface::sendRepositioned(quint32 token)
|
||||||
|
{
|
||||||
|
Q_ASSERT(d->resource()->version() >= XDG_POPUP_REPOSITIONED_SINCE_VERSION);
|
||||||
|
d->send_repositioned(token);
|
||||||
|
}
|
||||||
|
|
||||||
XdgPopupInterface *XdgPopupInterface::get(::wl_resource *resource)
|
XdgPopupInterface *XdgPopupInterface::get(::wl_resource *resource)
|
||||||
{
|
{
|
||||||
if (auto popupPrivate = resource_cast<XdgPopupInterfacePrivate *>(resource)) {
|
if (auto popupPrivate = resource_cast<XdgPopupInterfacePrivate *>(resource)) {
|
||||||
|
@ -852,6 +865,24 @@ void XdgPositionerPrivate::xdg_positioner_set_anchor(Resource *resource, uint32_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XdgPositionerPrivate::xdg_positioner_set_parent_size(Resource *resource, int32_t width, int32_t height)
|
||||||
|
{
|
||||||
|
Q_UNUSED(resource)
|
||||||
|
data->parentSize = QSize(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void XdgPositionerPrivate::xdg_positioner_set_reactive(Resource *resource)
|
||||||
|
{
|
||||||
|
Q_UNUSED(resource)
|
||||||
|
data->isReactive = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void XdgPositionerPrivate::xdg_positioner_set_parent_configure(Resource *resource, uint32_t serial)
|
||||||
|
{
|
||||||
|
Q_UNUSED(resource)
|
||||||
|
data->parentConfigure = serial;
|
||||||
|
}
|
||||||
|
|
||||||
void XdgPositionerPrivate::xdg_positioner_set_gravity(Resource *resource, uint32_t gravity)
|
void XdgPositionerPrivate::xdg_positioner_set_gravity(Resource *resource, uint32_t gravity)
|
||||||
{
|
{
|
||||||
if (gravity > gravity_bottom_right) {
|
if (gravity > gravity_bottom_right) {
|
||||||
|
@ -1003,6 +1034,21 @@ QPoint XdgPositioner::offset() const
|
||||||
return d->offset;
|
return d->offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QSize XdgPositioner::parentSize() const
|
||||||
|
{
|
||||||
|
return d->parentSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool XdgPositioner::isReactive() const
|
||||||
|
{
|
||||||
|
return d->isReactive;
|
||||||
|
}
|
||||||
|
|
||||||
|
quint32 XdgPositioner::parentConfigure() const
|
||||||
|
{
|
||||||
|
return d->parentConfigure;
|
||||||
|
}
|
||||||
|
|
||||||
XdgPositioner XdgPositioner::get(::wl_resource *resource)
|
XdgPositioner XdgPositioner::get(::wl_resource *resource)
|
||||||
{
|
{
|
||||||
XdgPositionerPrivate *xdgPositionerPrivate = XdgPositionerPrivate::get(resource);
|
XdgPositionerPrivate *xdgPositionerPrivate = XdgPositionerPrivate::get(resource);
|
||||||
|
|
|
@ -453,6 +453,21 @@ public:
|
||||||
*/
|
*/
|
||||||
QPoint offset() const;
|
QPoint offset() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the surface should respond to movements in its parent window.
|
||||||
|
*/
|
||||||
|
bool isReactive() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the parent size to use when positioning the popup.
|
||||||
|
*/
|
||||||
|
QSize parentSize() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the serial of the configure event for the parent window.
|
||||||
|
*/
|
||||||
|
quint32 parentConfigure() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the current state of the xdg positioner object identified by \a resource.
|
* Returns the current state of the xdg positioner object identified by \a resource.
|
||||||
*/
|
*/
|
||||||
|
@ -521,6 +536,11 @@ public:
|
||||||
*/
|
*/
|
||||||
void sendPopupDone();
|
void sendPopupDone();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a popup repositioned event to the client.
|
||||||
|
*/
|
||||||
|
void sendRepositioned(quint32 token);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the XdgPopupInterface for the specified wayland resource object \a resource.
|
* Returns the XdgPopupInterface for the specified wayland resource object \a resource.
|
||||||
*/
|
*/
|
||||||
|
@ -533,6 +553,7 @@ Q_SIGNALS:
|
||||||
*/
|
*/
|
||||||
void initializeRequested();
|
void initializeRequested();
|
||||||
void grabRequested(SeatInterface *seat, quint32 serial);
|
void grabRequested(SeatInterface *seat, quint32 serial);
|
||||||
|
void repositionRequested(quint32 token);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QScopedPointer<XdgPopupInterfacePrivate> d;
|
QScopedPointer<XdgPopupInterfacePrivate> d;
|
||||||
|
|
|
@ -56,6 +56,9 @@ public:
|
||||||
QPoint offset;
|
QPoint offset;
|
||||||
QSize size;
|
QSize size;
|
||||||
QRect anchorRect;
|
QRect anchorRect;
|
||||||
|
bool isReactive;
|
||||||
|
QSize parentSize;
|
||||||
|
quint32 parentConfigure;
|
||||||
};
|
};
|
||||||
|
|
||||||
class XdgPositionerPrivate : public QtWaylandServer::xdg_positioner
|
class XdgPositionerPrivate : public QtWaylandServer::xdg_positioner
|
||||||
|
@ -76,6 +79,9 @@ protected:
|
||||||
void xdg_positioner_set_gravity(Resource *resource, uint32_t gravity) override;
|
void xdg_positioner_set_gravity(Resource *resource, uint32_t gravity) override;
|
||||||
void xdg_positioner_set_constraint_adjustment(Resource *resource, uint32_t constraint_adjustment) override;
|
void xdg_positioner_set_constraint_adjustment(Resource *resource, uint32_t constraint_adjustment) override;
|
||||||
void xdg_positioner_set_offset(Resource *resource, int32_t x, int32_t y) override;
|
void xdg_positioner_set_offset(Resource *resource, int32_t x, int32_t y) override;
|
||||||
|
void xdg_positioner_set_reactive(Resource *resource) override;
|
||||||
|
void xdg_positioner_set_parent_size(Resource *resource, int32_t width, int32_t height) override;
|
||||||
|
void xdg_positioner_set_parent_configure(Resource *resource, uint32_t serial) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class XdgSurfaceInterfacePrivate : public QtWaylandServer::xdg_surface
|
class XdgSurfaceInterfacePrivate : public QtWaylandServer::xdg_surface
|
||||||
|
@ -178,6 +184,7 @@ protected:
|
||||||
void xdg_popup_destroy_resource(Resource *resource) override;
|
void xdg_popup_destroy_resource(Resource *resource) override;
|
||||||
void xdg_popup_destroy(Resource *resource) override;
|
void xdg_popup_destroy(Resource *resource) override;
|
||||||
void xdg_popup_grab(Resource *resource, ::wl_resource *seat, uint32_t serial) override;
|
void xdg_popup_grab(Resource *resource, ::wl_resource *seat, uint32_t serial) override;
|
||||||
|
void xdg_popup_reposition(Resource *resource, struct ::wl_resource *positioner, uint32_t token) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace KWaylandServer
|
} // namespace KWaylandServer
|
||||||
|
|
Loading…
Reference in a new issue