Client: Test for xdg toplevel min and max size

Change-Id: I60605f494eebfde9a7737911eefe69a93041ced5
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
This commit is contained in:
Johan Klokkhammer Helsing 2019-01-10 15:12:07 +01:00 committed by Johan Helsing
parent 3572bcb831
commit 8d23c3b5b8
3 changed files with 50 additions and 1 deletions

View File

@ -149,6 +149,7 @@ XdgToplevel::XdgToplevel(XdgSurface *xdgSurface, int id, int version)
: QtWaylandServer::xdg_toplevel(xdgSurface->resource()->client(), id, version)
, m_xdgSurface(xdgSurface)
{
connect(surface(), &Surface::commit, this, [this] { m_committed = m_pending; });
}
void XdgToplevel::sendConfigure(const QSize &size, const QVector<uint> &states)
@ -162,6 +163,22 @@ uint XdgToplevel::sendCompleteConfigure(const QSize &size, const QVector<uint> &
return m_xdgSurface->sendConfigure();
}
void XdgToplevel::xdg_toplevel_set_max_size(Resource *resource, int32_t width, int32_t height)
{
Q_UNUSED(resource);
QSize size(width, height);
QVERIFY(size.isValid());
m_pending.maxSize = size;
}
void XdgToplevel::xdg_toplevel_set_min_size(Resource *resource, int32_t width, int32_t height)
{
Q_UNUSED(resource);
QSize size(width, height);
QVERIFY(size.isValid());
m_pending.minSize = size;
}
XdgPopup::XdgPopup(XdgSurface *xdgSurface, int id, int version)
: QtWaylandServer::xdg_popup(xdgSurface->resource()->client(), id, version)
, m_xdgSurface(xdgSurface)

View File

@ -99,14 +99,24 @@ protected:
void xdg_surface_ack_configure(Resource *resource, uint32_t serial) override;
};
class XdgToplevel : public QtWaylandServer::xdg_toplevel
class XdgToplevel : public QObject, public QtWaylandServer::xdg_toplevel
{
Q_OBJECT
public:
explicit XdgToplevel(XdgSurface *xdgSurface, int id, int version = 1);
void sendConfigure(const QSize &size = {0, 0}, const QVector<uint> &states = {});
uint sendCompleteConfigure(const QSize &size = {0, 0}, const QVector<uint> &states = {});
Surface *surface() { return m_xdgSurface->m_surface; }
XdgSurface *m_xdgSurface = nullptr;
struct DoubleBufferedState {
QSize minSize = {0, 0};
QSize maxSize = {0, 0};
} m_pending, m_committed;
protected:
void xdg_toplevel_set_max_size(Resource *resource, int32_t width, int32_t height) override;
void xdg_toplevel_set_min_size(Resource *resource, int32_t width, int32_t height) override;
};
class XdgPopup : public QtWaylandServer::xdg_popup

View File

@ -43,6 +43,7 @@ private slots:
void configureStates();
void popup();
void pongs();
void minMaxSize();
};
void tst_xdgshell::showMinimized()
@ -265,5 +266,26 @@ void tst_xdgshell::pongs()
QCOMPARE(pongSpy.first().at(0).toUInt(), serial);
}
void tst_xdgshell::minMaxSize()
{
QRasterWindow window;
window.setMinimumSize(QSize(100, 100));
window.setMaximumSize(QSize(1000, 1000));
window.resize(400, 320);
window.show();
QCOMPOSITOR_TRY_VERIFY(xdgToplevel());
exec([=] { xdgToplevel()->sendCompleteConfigure(); });
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(100, 100));
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(1000, 1000));
window.setMaximumSize(QSize(500, 400));
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(500, 400));
window.setMinimumSize(QSize(50, 40));
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(50, 40));
}
QCOMPOSITOR_TEST_MAIN(tst_xdgshell)
#include "tst_xdgshell.moc"