Merge remote-tracking branch 'origin/5.6' into 5.7

Conflicts:
	src/client/qwaylandinputcontext_p.h
	src/hardwareintegration/client/brcm-egl/qwaylandbrcmglcontext.h
	src/hardwareintegration/client/wayland-egl/qwaylandglcontext.h
	src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxcontext.h

Change-Id: Iac517e1985e4e67d7ca00ca4c10dcda9dd9079f9
This commit is contained in:
Liang Qi 2016-06-30 08:10:08 +02:00 committed by Paul Olav Tvete
commit c32b30362d
19 changed files with 96 additions and 114 deletions

View File

@ -69,8 +69,8 @@ public:
QString serverBufferIntegration(); QString serverBufferIntegration();
protected: protected:
void hardware_integration_client_backend(const QString &name); void hardware_integration_client_backend(const QString &name) Q_DECL_OVERRIDE;
void hardware_integration_server_backend(const QString &name); void hardware_integration_server_backend(const QString &name) Q_DECL_OVERRIDE;
private: private:
QString m_client_buffer; QString m_client_buffer;

View File

@ -365,11 +365,11 @@ bool QWaylandBradientDecoration::handleMouse(QWaylandInputDevice *inputDevice, c
window()->setWindowState(Qt::WindowMinimized); window()->setWindowState(Qt::WindowMinimized);
} else if (local.y() <= margins().top()) { } else if (local.y() <= margins().top()) {
processMouseTop(inputDevice,local,b,mods); processMouseTop(inputDevice,local,b,mods);
} else if (local.y() > window()->height() - margins().bottom() + margins().top()) { } else if (local.y() > window()->height() + margins().top()) {
processMouseBottom(inputDevice,local,b,mods); processMouseBottom(inputDevice,local,b,mods);
} else if (local.x() <= margins().left()) { } else if (local.x() <= margins().left()) {
processMouseLeft(inputDevice,local,b,mods); processMouseLeft(inputDevice,local,b,mods);
} else if (local.x() > window()->width() - margins().right() + margins().left()) { } else if (local.x() > window()->width() + margins().left()) {
processMouseRight(inputDevice,local,b,mods); processMouseRight(inputDevice,local,b,mods);
} else { } else {
waylandWindow()->restoreMouseCursor(inputDevice); waylandWindow()->restoreMouseCursor(inputDevice);
@ -411,7 +411,7 @@ void QWaylandBradientDecoration::processMouseTop(QWaylandInputDevice *inputDevic
//top left bit //top left bit
waylandWindow()->setMouseCursor(inputDevice, Qt::SizeFDiagCursor); waylandWindow()->setMouseCursor(inputDevice, Qt::SizeFDiagCursor);
startResize(inputDevice,WL_SHELL_SURFACE_RESIZE_TOP_LEFT,b); startResize(inputDevice,WL_SHELL_SURFACE_RESIZE_TOP_LEFT,b);
} else if (local.x() > window()->width() - margins().right()) { } else if (local.x() > window()->width() + margins().left()) {
//top right bit //top right bit
waylandWindow()->setMouseCursor(inputDevice, Qt::SizeBDiagCursor); waylandWindow()->setMouseCursor(inputDevice, Qt::SizeBDiagCursor);
startResize(inputDevice,WL_SHELL_SURFACE_RESIZE_TOP_RIGHT,b); startResize(inputDevice,WL_SHELL_SURFACE_RESIZE_TOP_RIGHT,b);
@ -434,7 +434,7 @@ void QWaylandBradientDecoration::processMouseBottom(QWaylandInputDevice *inputDe
//bottom left bit //bottom left bit
waylandWindow()->setMouseCursor(inputDevice, Qt::SizeBDiagCursor); waylandWindow()->setMouseCursor(inputDevice, Qt::SizeBDiagCursor);
startResize(inputDevice, WL_SHELL_SURFACE_RESIZE_BOTTOM_LEFT,b); startResize(inputDevice, WL_SHELL_SURFACE_RESIZE_BOTTOM_LEFT,b);
} else if (local.x() > window()->width() - margins().right()) { } else if (local.x() > window()->width() + margins().left()) {
//bottom right bit //bottom right bit
waylandWindow()->setMouseCursor(inputDevice, Qt::SizeFDiagCursor); waylandWindow()->setMouseCursor(inputDevice, Qt::SizeFDiagCursor);
startResize(inputDevice, WL_SHELL_SURFACE_RESIZE_BOTTOM_RIGHT,b); startResize(inputDevice, WL_SHELL_SURFACE_RESIZE_BOTTOM_RIGHT,b);

View File

@ -49,7 +49,7 @@ class LibHybrisEglServerBufferPlugin : public QWaylandServerBufferIntegrationPlu
Q_OBJECT Q_OBJECT
Q_PLUGIN_METADATA(IID QWaylandServerBufferIntegrationFactoryInterface_iid FILE "libhybris-egl-server.json") Q_PLUGIN_METADATA(IID QWaylandServerBufferIntegrationFactoryInterface_iid FILE "libhybris-egl-server.json")
public: public:
QWaylandServerBufferIntegration *create(const QString&, const QStringList&); QWaylandServerBufferIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
}; };
QWaylandServerBufferIntegration *LibHybrisEglServerBufferPlugin::create(const QString& system, const QStringList& paramList) QWaylandServerBufferIntegration *LibHybrisEglServerBufferPlugin::create(const QString& system, const QStringList& paramList)

View File

@ -110,7 +110,10 @@ const QImage &QWaylandAbstractDecoration::contentImage()
if (d->m_isDirty) { if (d->m_isDirty) {
//Update the decoration backingstore //Update the decoration backingstore
d->m_decorationContentImage = QImage(window()->frameGeometry().size(), QImage::Format_ARGB32_Premultiplied); const int scale = waylandWindow()->scale();
const QSize imageSize = window()->frameGeometry().size() * scale;
d->m_decorationContentImage = QImage(imageSize, QImage::Format_ARGB32_Premultiplied);
d->m_decorationContentImage.setDevicePixelRatio(scale);
d->m_decorationContentImage.fill(Qt::transparent); d->m_decorationContentImage.fill(Qt::transparent);
this->paint(&d->m_decorationContentImage); this->paint(&d->m_decorationContentImage);

View File

@ -73,10 +73,10 @@ public:
QWaylandCursor(QWaylandScreen *screen); QWaylandCursor(QWaylandScreen *screen);
~QWaylandCursor(); ~QWaylandCursor();
void changeCursor(QCursor *cursor, QWindow *window); void changeCursor(QCursor *cursor, QWindow *window) Q_DECL_OVERRIDE;
void pointerEvent(const QMouseEvent &event); void pointerEvent(const QMouseEvent &event) Q_DECL_OVERRIDE;
QPoint pos() const; QPoint pos() const Q_DECL_OVERRIDE;
void setPos(const QPoint &pos); void setPos(const QPoint &pos) Q_DECL_OVERRIDE;
struct wl_cursor_image *cursorImage(Qt::CursorShape shape); struct wl_cursor_image *cursorImage(Qt::CursorShape shape);
QSharedPointer<QWaylandBuffer> cursorBitmapImage(const QCursor *cursor); QSharedPointer<QWaylandBuffer> cursorBitmapImage(const QCursor *cursor);

View File

@ -156,31 +156,29 @@ void QWaylandDataDevice::data_device_enter(uint32_t serial, wl_surface *surface,
m_dragWindow = QWaylandWindow::fromWlSurface(surface)->window(); m_dragWindow = QWaylandWindow::fromWlSurface(surface)->window();
m_dragPoint = calculateDragPosition(x, y, m_dragWindow); m_dragPoint = calculateDragPosition(x, y, m_dragWindow);
QDrag *drag = static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->currentDrag();
QMimeData *dragData = Q_NULLPTR; QMimeData *dragData = Q_NULLPTR;
Qt::DropActions supportedActions; Qt::DropActions supportedActions;
m_dragOffer.reset(static_cast<QWaylandDataOffer *>(wl_data_offer_get_user_data(id)));
QDrag *drag = static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->currentDrag();
if (drag) { if (drag) {
dragData = drag->mimeData(); dragData = drag->mimeData();
supportedActions = drag->supportedActions(); supportedActions = drag->supportedActions();
} else { } else if (m_dragOffer) {
m_dragOffer.reset(static_cast<QWaylandDataOffer *>(wl_data_offer_get_user_data(id))); dragData = m_dragOffer->mimeData();
if (m_dragOffer) { supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction;
dragData = m_dragOffer->mimeData();
supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction;
}
} }
const QPlatformDragQtResponse &response = QWindowSystemInterface::handleDrag(m_dragWindow, dragData, m_dragPoint, supportedActions); const QPlatformDragQtResponse &response = QWindowSystemInterface::handleDrag(m_dragWindow, dragData, m_dragPoint, supportedActions);
if (drag) { if (drag) {
static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->setResponse(response); static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->setResponse(response);
}
if (response.isAccepted()) {
wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData());
} else { } else {
if (response.isAccepted()) { wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, 0);
wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData());
} else {
wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, 0);
}
} }
} }
@ -219,12 +217,12 @@ void QWaylandDataDevice::data_device_motion(uint32_t time, wl_fixed_t x, wl_fixe
if (drag) { if (drag) {
static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->setResponse(response); static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->setResponse(response);
}
if (response.isAccepted()) {
wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData());
} else { } else {
if (response.isAccepted()) { wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, 0);
wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData());
} else {
wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, 0);
}
} }
} }

View File

@ -125,19 +125,8 @@ QWaylandWindowManagerIntegration *QWaylandDisplay::windowManagerIntegration() co
return mWindowManagerIntegration.data(); return mWindowManagerIntegration.data();
} }
QWaylandInputDevice *QWaylandDisplay::lastKeyboardFocusInputDevice() const
{
return mLastKeyboardFocusInputDevice;
}
void QWaylandDisplay::setLastKeyboardFocusInputDevice(QWaylandInputDevice *device)
{
mLastKeyboardFocusInputDevice = device;
}
QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration) QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration)
: mWaylandIntegration(waylandIntegration) : mWaylandIntegration(waylandIntegration)
, mLastKeyboardFocusInputDevice(0)
, mDndSelectionHandler(0) , mDndSelectionHandler(0)
, mWindowExtension(0) , mWindowExtension(0)
, mSubCompositor(0) , mSubCompositor(0)

View File

@ -140,9 +140,6 @@ public:
QWaylandInputDevice *defaultInputDevice() const; QWaylandInputDevice *defaultInputDevice() const;
QWaylandInputDevice *currentInputDevice() const { return defaultInputDevice(); } QWaylandInputDevice *currentInputDevice() const { return defaultInputDevice(); }
QWaylandInputDevice *lastKeyboardFocusInputDevice() const;
void setLastKeyboardFocusInputDevice(QWaylandInputDevice *device);
QWaylandDataDeviceManager *dndSelectionHandler() const { return mDndSelectionHandler.data(); } QWaylandDataDeviceManager *dndSelectionHandler() const { return mDndSelectionHandler.data(); }
QtWayland::qt_surface_extension *windowExtension() const { return mWindowExtension.data(); } QtWayland::qt_surface_extension *windowExtension() const { return mWindowExtension.data(); }
@ -200,7 +197,6 @@ private:
QList<QWaylandInputDevice *> mInputDevices; QList<QWaylandInputDevice *> mInputDevices;
QList<Listener> mRegistryListeners; QList<Listener> mRegistryListeners;
QWaylandIntegration *mWaylandIntegration; QWaylandIntegration *mWaylandIntegration;
QWaylandInputDevice *mLastKeyboardFocusInputDevice;
QScopedPointer<QWaylandDataDeviceManager> mDndSelectionHandler; QScopedPointer<QWaylandDataDeviceManager> mDndSelectionHandler;
QScopedPointer<QtWayland::qt_surface_extension> mWindowExtension; QScopedPointer<QtWayland::qt_surface_extension> mWindowExtension;
QScopedPointer<QtWayland::wl_subcompositor> mSubCompositor; QScopedPointer<QtWayland::wl_subcompositor> mSubCompositor;

View File

@ -656,7 +656,6 @@ void QWaylandInputDevice::Keyboard::focusCallback(void *data, struct wl_callback
self->mFocusCallback = 0; self->mFocusCallback = 0;
} }
self->mParent->mQDisplay->setLastKeyboardFocusInputDevice(self->mFocus ? self->mParent : 0);
QWindowSystemInterface::handleWindowActivated(self->mFocus ? self->mFocus->window() : 0); QWindowSystemInterface::handleWindowActivated(self->mFocus ? self->mFocus->window() : 0);
} }

View File

@ -234,7 +234,7 @@ public:
void pointer_enter(uint32_t serial, struct wl_surface *surface, void pointer_enter(uint32_t serial, struct wl_surface *surface,
wl_fixed_t sx, wl_fixed_t sy) Q_DECL_OVERRIDE; wl_fixed_t sx, wl_fixed_t sy) Q_DECL_OVERRIDE;
void pointer_leave(uint32_t time, struct wl_surface *surface); void pointer_leave(uint32_t time, struct wl_surface *surface) Q_DECL_OVERRIDE;
void pointer_motion(uint32_t time, void pointer_motion(uint32_t time,
wl_fixed_t sx, wl_fixed_t sy) Q_DECL_OVERRIDE; wl_fixed_t sx, wl_fixed_t sy) Q_DECL_OVERRIDE;
void pointer_button(uint32_t serial, uint32_t time, void pointer_button(uint32_t serial, uint32_t time,

View File

@ -72,37 +72,37 @@ public:
QWaylandIntegration(); QWaylandIntegration();
~QWaylandIntegration(); ~QWaylandIntegration();
bool hasCapability(QPlatformIntegration::Capability cap) const; bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
QPlatformWindow *createPlatformWindow(QWindow *window) const; QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
#ifndef QT_NO_OPENGL #ifndef QT_NO_OPENGL
QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const; QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE;
#endif #endif
QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const; QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
QAbstractEventDispatcher *createEventDispatcher() const; QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
void initialize(); void initialize() Q_DECL_OVERRIDE;
QPlatformFontDatabase *fontDatabase() const; QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
QPlatformNativeInterface *nativeInterface() const; QPlatformNativeInterface *nativeInterface() const Q_DECL_OVERRIDE;
QPlatformClipboard *clipboard() const; QPlatformClipboard *clipboard() const Q_DECL_OVERRIDE;
QPlatformDrag *drag() const; QPlatformDrag *drag() const Q_DECL_OVERRIDE;
QPlatformInputContext *inputContext() const; QPlatformInputContext *inputContext() const Q_DECL_OVERRIDE;
QVariant styleHint(StyleHint hint) const; QVariant styleHint(StyleHint hint) const Q_DECL_OVERRIDE;
QPlatformAccessibility *accessibility() const; QPlatformAccessibility *accessibility() const Q_DECL_OVERRIDE;
QPlatformServices *services() const; QPlatformServices *services() const Q_DECL_OVERRIDE;
QWaylandDisplay *display() const; QWaylandDisplay *display() const;
QStringList themeNames() const; QStringList themeNames() const Q_DECL_OVERRIDE;
QPlatformTheme *createPlatformTheme(const QString &name) const; QPlatformTheme *createPlatformTheme(const QString &name) const Q_DECL_OVERRIDE;
QWaylandInputDevice *createInputDevice(QWaylandDisplay *display, int version, uint32_t id); QWaylandInputDevice *createInputDevice(QWaylandDisplay *display, int version, uint32_t id);

View File

@ -67,17 +67,17 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandNativeInterface : public QPlatformNativeIn
{ {
public: public:
QWaylandNativeInterface(QWaylandIntegration *integration); QWaylandNativeInterface(QWaylandIntegration *integration);
void *nativeResourceForIntegration(const QByteArray &resource); void *nativeResourceForIntegration(const QByteArray &resource) Q_DECL_OVERRIDE;
void *nativeResourceForWindow(const QByteArray &resourceString, void *nativeResourceForWindow(const QByteArray &resourceString,
QWindow *window); QWindow *window) Q_DECL_OVERRIDE;
void *nativeResourceForScreen(const QByteArray &resourceString, void *nativeResourceForScreen(const QByteArray &resourceString,
QScreen *screen); QScreen *screen) Q_DECL_OVERRIDE;
void *nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context); void *nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context) Q_DECL_OVERRIDE;
QVariantMap windowProperties(QPlatformWindow *window) const; QVariantMap windowProperties(QPlatformWindow *window) const Q_DECL_OVERRIDE;
QVariant windowProperty(QPlatformWindow *window, const QString &name) const; QVariant windowProperty(QPlatformWindow *window, const QString &name) const Q_DECL_OVERRIDE;
QVariant windowProperty(QPlatformWindow *window, const QString &name, const QVariant &defaultValue) const; QVariant windowProperty(QPlatformWindow *window, const QString &name, const QVariant &defaultValue) const Q_DECL_OVERRIDE;
void setWindowProperty(QPlatformWindow *window, const QString &name, const QVariant &value); void setWindowProperty(QPlatformWindow *window, const QString &name, const QVariant &value) Q_DECL_OVERRIDE;
void emitWindowPropertyChanged(QPlatformWindow *window, const QString &name); void emitWindowPropertyChanged(QPlatformWindow *window, const QString &name);

View File

@ -72,25 +72,25 @@ public:
void init(); void init();
QWaylandDisplay *display() const; QWaylandDisplay *display() const;
QRect geometry() const; QRect geometry() const Q_DECL_OVERRIDE;
int depth() const; int depth() const Q_DECL_OVERRIDE;
QImage::Format format() const; QImage::Format format() const Q_DECL_OVERRIDE;
QSizeF physicalSize() const Q_DECL_OVERRIDE; QSizeF physicalSize() const Q_DECL_OVERRIDE;
QDpi logicalDpi() const Q_DECL_OVERRIDE; QDpi logicalDpi() const Q_DECL_OVERRIDE;
QList<QPlatformScreen *> virtualSiblings() const Q_DECL_OVERRIDE; QList<QPlatformScreen *> virtualSiblings() const Q_DECL_OVERRIDE;
void setOrientationUpdateMask(Qt::ScreenOrientations mask); void setOrientationUpdateMask(Qt::ScreenOrientations mask) Q_DECL_OVERRIDE;
Qt::ScreenOrientation orientation() const; Qt::ScreenOrientation orientation() const Q_DECL_OVERRIDE;
int scale() const; int scale() const;
qreal devicePixelRatio() const Q_DECL_OVERRIDE; qreal devicePixelRatio() const Q_DECL_OVERRIDE;
qreal refreshRate() const; qreal refreshRate() const Q_DECL_OVERRIDE;
QString name() const { return mOutputName; } QString name() const Q_DECL_OVERRIDE { return mOutputName; }
QPlatformCursor *cursor() const; QPlatformCursor *cursor() const Q_DECL_OVERRIDE;
QWaylandCursor *waylandCursor() const { return mWaylandCursor; }; QWaylandCursor *waylandCursor() const { return mWaylandCursor; };
uint32_t outputId() const { return m_outputId; } uint32_t outputId() const { return m_outputId; }

View File

@ -72,7 +72,7 @@ public:
QWaylandShmBuffer(QWaylandDisplay *display, QWaylandShmBuffer(QWaylandDisplay *display,
const QSize &size, QImage::Format format, int scale = 1); const QSize &size, QImage::Format format, int scale = 1);
~QWaylandShmBuffer(); ~QWaylandShmBuffer();
QSize size() const { return mImage.size(); } QSize size() const Q_DECL_OVERRIDE { return mImage.size(); }
int scale() const Q_DECL_OVERRIDE { return int(mImage.devicePixelRatio()); } int scale() const Q_DECL_OVERRIDE { return int(mImage.devicePixelRatio()); }
QImage *image() { return &mImage; } QImage *image() { return &mImage; }
@ -91,11 +91,11 @@ public:
~QWaylandShmBackingStore(); ~QWaylandShmBackingStore();
QPaintDevice *paintDevice(); QPaintDevice *paintDevice();
void flush(QWindow *window, const QRegion &region, const QPoint &offset); void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
void resize(const QSize &size, const QRegion &staticContents); void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
void resize(const QSize &size); void resize(const QSize &size);
void beginPaint(const QRegion &); void beginPaint(const QRegion &) Q_DECL_OVERRIDE;
void endPaint(); void endPaint() Q_DECL_OVERRIDE;
void hidden(); void hidden();
QWaylandAbstractDecoration *windowDecoration() const; QWaylandAbstractDecoration *windowDecoration() const;

View File

@ -64,8 +64,8 @@ public:
QWaylandShmWindow(QWindow *window); QWaylandShmWindow(QWindow *window);
~QWaylandShmWindow(); ~QWaylandShmWindow();
WindowType windowType() const; WindowType windowType() const Q_DECL_OVERRIDE;
QSurfaceFormat format() const { return QSurfaceFormat(); } QSurfaceFormat format() const Q_DECL_OVERRIDE { return QSurfaceFormat(); }
}; };
} }

View File

@ -110,16 +110,16 @@ public:
~QWaylandWindow(); ~QWaylandWindow();
virtual WindowType windowType() const = 0; virtual WindowType windowType() const = 0;
WId winId() const; WId winId() const Q_DECL_OVERRIDE;
void setVisible(bool visible); void setVisible(bool visible) Q_DECL_OVERRIDE;
void setParent(const QPlatformWindow *parent); void setParent(const QPlatformWindow *parent) Q_DECL_OVERRIDE;
void setWindowTitle(const QString &title); void setWindowTitle(const QString &title) Q_DECL_OVERRIDE;
inline QIcon windowIcon() const; inline QIcon windowIcon() const;
void setWindowIcon(const QIcon &icon); void setWindowIcon(const QIcon &icon) Q_DECL_OVERRIDE;
void setGeometry(const QRect &rect); void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
void configure(uint32_t edges, int32_t width, int32_t height); void configure(uint32_t edges, int32_t width, int32_t height);
@ -133,7 +133,7 @@ public:
void waitForFrameSync(); void waitForFrameSync();
QMargins frameMargins() const; QMargins frameMargins() const Q_DECL_OVERRIDE;
static QWaylandWindow *fromWlSurface(::wl_surface *surface); static QWaylandWindow *fromWlSurface(::wl_surface *surface);
@ -142,11 +142,11 @@ public:
QWaylandSubSurface *subSurfaceWindow() const; QWaylandSubSurface *subSurfaceWindow() const;
QWaylandScreen *screen() const { return mScreen; } QWaylandScreen *screen() const { return mScreen; }
void handleContentOrientationChange(Qt::ScreenOrientation orientation); void handleContentOrientationChange(Qt::ScreenOrientation orientation) Q_DECL_OVERRIDE;
void setOrientationMask(Qt::ScreenOrientations mask); void setOrientationMask(Qt::ScreenOrientations mask);
void setWindowState(Qt::WindowState state); void setWindowState(Qt::WindowState state) Q_DECL_OVERRIDE;
void setWindowFlags(Qt::WindowFlags flags); void setWindowFlags(Qt::WindowFlags flags) Q_DECL_OVERRIDE;
void raise() Q_DECL_OVERRIDE; void raise() Q_DECL_OVERRIDE;
void lower() Q_DECL_OVERRIDE; void lower() Q_DECL_OVERRIDE;
@ -182,7 +182,7 @@ public:
void doResize(); void doResize();
void setCanResize(bool canResize); void setCanResize(bool canResize);
bool setMouseGrabEnabled(bool grab); bool setMouseGrabEnabled(bool grab) Q_DECL_OVERRIDE;
static QWaylandWindow *mouseGrab() { return mMouseGrab; } static QWaylandWindow *mouseGrab() { return mMouseGrab; }
void sendProperty(const QString &name, const QVariant &value); void sendProperty(const QString &name, const QVariant &value);

View File

@ -77,10 +77,10 @@ public:
explicit QWaylandWindowManagerIntegration(QWaylandDisplay *waylandDisplay); explicit QWaylandWindowManagerIntegration(QWaylandDisplay *waylandDisplay);
virtual ~QWaylandWindowManagerIntegration(); virtual ~QWaylandWindowManagerIntegration();
QByteArray desktopEnvironment() const; QByteArray desktopEnvironment() const Q_DECL_OVERRIDE;
bool openUrl(const QUrl &url); bool openUrl(const QUrl &url) Q_DECL_OVERRIDE;
bool openDocument(const QUrl &url); bool openDocument(const QUrl &url) Q_DECL_OVERRIDE;
bool showIsFullScreen() const; bool showIsFullScreen() const;

View File

@ -62,7 +62,6 @@ QWaylandXdgSurface::QWaylandXdgSurface(struct ::xdg_surface *xdg_surface, QWayla
{ {
if (window->display()->windowExtension()) if (window->display()->windowExtension())
m_extendedWindow = new QWaylandExtendedSurface(window); m_extendedWindow = new QWaylandExtendedSurface(window);
m_size = m_window->window()->geometry().size();
} }
QWaylandXdgSurface::~QWaylandXdgSurface() QWaylandXdgSurface::~QWaylandXdgSurface()
@ -193,10 +192,7 @@ void QWaylandXdgSurface::xdg_surface_configure(int32_t width, int32_t height, st
aboutToFullScreen = true; aboutToFullScreen = true;
break; break;
case XDG_SURFACE_STATE_RESIZING: case XDG_SURFACE_STATE_RESIZING:
m_margins = m_window->frameMargins(); m_normalSize = QSize(width, height);
width -= m_margins.left() + m_margins.right();
height -= m_margins.top() + m_margins.bottom();
m_size = m_window->window()->geometry().size();
break; break;
case XDG_SURFACE_STATE_ACTIVATED: case XDG_SURFACE_STATE_ACTIVATED:
// TODO: here about the missing window activation // TODO: here about the missing window activation
@ -207,6 +203,8 @@ void QWaylandXdgSurface::xdg_surface_configure(int32_t width, int32_t height, st
} }
if (!m_fullscreen && aboutToFullScreen) { if (!m_fullscreen && aboutToFullScreen) {
if (!m_maximized)
m_normalSize = m_window->window()->frameGeometry().size();
m_fullscreen = true; m_fullscreen = true;
m_window->window()->showFullScreen(); m_window->window()->showFullScreen();
} else if (m_fullscreen && !aboutToFullScreen) { } else if (m_fullscreen && !aboutToFullScreen) {
@ -217,6 +215,8 @@ void QWaylandXdgSurface::xdg_surface_configure(int32_t width, int32_t height, st
m_window->window()->showNormal(); m_window->window()->showNormal();
} }
} else if (!m_maximized && aboutToMaximize) { } else if (!m_maximized && aboutToMaximize) {
if (!m_fullscreen)
m_normalSize = m_window->window()->frameGeometry().size();
m_maximized = true; m_maximized = true;
m_window->window()->showMaximized(); m_window->window()->showMaximized();
} else if (m_maximized && !aboutToMaximize) { } else if (m_maximized && !aboutToMaximize) {
@ -224,14 +224,11 @@ void QWaylandXdgSurface::xdg_surface_configure(int32_t width, int32_t height, st
m_window->window()->showNormal(); m_window->window()->showNormal();
} }
if (width == 0 || height == 0) { if (width <= 0 || height <= 0) {
width = m_size.width(); if (!m_normalSize.isEmpty())
height = m_size.height(); m_window->configure(0, m_normalSize.width(), m_normalSize.height());
} } else {
m_window->configure(0, width, height);
if (width > 0 && height > 0) {
m_margins = m_window->frameMargins();
m_window->configure(0, width + m_margins.left() + m_margins.right(), height + m_margins.top() + m_margins.bottom());
} }
ack_configure(serial); ack_configure(serial);

View File

@ -112,7 +112,7 @@ private:
bool m_maximized; bool m_maximized;
bool m_minimized; bool m_minimized;
bool m_fullscreen; bool m_fullscreen;
QSize m_size; QSize m_normalSize;
QMargins m_margins; QMargins m_margins;
QWaylandExtendedSurface *m_extendedWindow; QWaylandExtendedSurface *m_extendedWindow;