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();
protected:
void hardware_integration_client_backend(const QString &name);
void hardware_integration_server_backend(const QString &name);
void hardware_integration_client_backend(const QString &name) Q_DECL_OVERRIDE;
void hardware_integration_server_backend(const QString &name) Q_DECL_OVERRIDE;
private:
QString m_client_buffer;

View File

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

View File

@ -49,7 +49,7 @@ class LibHybrisEglServerBufferPlugin : public QWaylandServerBufferIntegrationPlu
Q_OBJECT
Q_PLUGIN_METADATA(IID QWaylandServerBufferIntegrationFactoryInterface_iid FILE "libhybris-egl-server.json")
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)

View File

@ -110,7 +110,10 @@ const QImage &QWaylandAbstractDecoration::contentImage()
if (d->m_isDirty) {
//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);
this->paint(&d->m_decorationContentImage);

View File

@ -73,10 +73,10 @@ public:
QWaylandCursor(QWaylandScreen *screen);
~QWaylandCursor();
void changeCursor(QCursor *cursor, QWindow *window);
void pointerEvent(const QMouseEvent &event);
QPoint pos() const;
void setPos(const QPoint &pos);
void changeCursor(QCursor *cursor, QWindow *window) Q_DECL_OVERRIDE;
void pointerEvent(const QMouseEvent &event) Q_DECL_OVERRIDE;
QPoint pos() const Q_DECL_OVERRIDE;
void setPos(const QPoint &pos) Q_DECL_OVERRIDE;
struct wl_cursor_image *cursorImage(Qt::CursorShape shape);
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_dragPoint = calculateDragPosition(x, y, m_dragWindow);
QDrag *drag = static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->currentDrag();
QMimeData *dragData = Q_NULLPTR;
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) {
dragData = drag->mimeData();
supportedActions = drag->supportedActions();
} else {
m_dragOffer.reset(static_cast<QWaylandDataOffer *>(wl_data_offer_get_user_data(id)));
if (m_dragOffer) {
dragData = m_dragOffer->mimeData();
supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction;
}
} else if (m_dragOffer) {
dragData = m_dragOffer->mimeData();
supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction;
}
const QPlatformDragQtResponse &response = QWindowSystemInterface::handleDrag(m_dragWindow, dragData, m_dragPoint, supportedActions);
if (drag) {
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 {
if (response.isAccepted()) {
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);
}
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) {
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 {
if (response.isAccepted()) {
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);
}
wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, 0);
}
}

View File

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

View File

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

View File

@ -656,7 +656,6 @@ void QWaylandInputDevice::Keyboard::focusCallback(void *data, struct wl_callback
self->mFocusCallback = 0;
}
self->mParent->mQDisplay->setLastKeyboardFocusInputDevice(self->mFocus ? self->mParent : 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,
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,
wl_fixed_t sx, wl_fixed_t sy) Q_DECL_OVERRIDE;
void pointer_button(uint32_t serial, uint32_t time,

View File

@ -72,37 +72,37 @@ public:
QWaylandIntegration();
~QWaylandIntegration();
bool hasCapability(QPlatformIntegration::Capability cap) const;
QPlatformWindow *createPlatformWindow(QWindow *window) const;
bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
#ifndef QT_NO_OPENGL
QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const;
QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE;
#endif
QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;
QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
QAbstractEventDispatcher *createEventDispatcher() const;
void initialize();
QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
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;
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);

View File

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

View File

@ -72,25 +72,25 @@ public:
void init();
QWaylandDisplay *display() const;
QRect geometry() const;
int depth() const;
QImage::Format format() const;
QRect geometry() const Q_DECL_OVERRIDE;
int depth() const Q_DECL_OVERRIDE;
QImage::Format format() const Q_DECL_OVERRIDE;
QSizeF physicalSize() const Q_DECL_OVERRIDE;
QDpi logicalDpi() 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;
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; };
uint32_t outputId() const { return m_outputId; }

View File

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

View File

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

View File

@ -110,16 +110,16 @@ public:
~QWaylandWindow();
virtual WindowType windowType() const = 0;
WId winId() const;
void setVisible(bool visible);
void setParent(const QPlatformWindow *parent);
WId winId() const Q_DECL_OVERRIDE;
void setVisible(bool visible) Q_DECL_OVERRIDE;
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;
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);
@ -133,7 +133,7 @@ public:
void waitForFrameSync();
QMargins frameMargins() const;
QMargins frameMargins() const Q_DECL_OVERRIDE;
static QWaylandWindow *fromWlSurface(::wl_surface *surface);
@ -142,11 +142,11 @@ public:
QWaylandSubSurface *subSurfaceWindow() const;
QWaylandScreen *screen() const { return mScreen; }
void handleContentOrientationChange(Qt::ScreenOrientation orientation);
void handleContentOrientationChange(Qt::ScreenOrientation orientation) Q_DECL_OVERRIDE;
void setOrientationMask(Qt::ScreenOrientations mask);
void setWindowState(Qt::WindowState state);
void setWindowFlags(Qt::WindowFlags flags);
void setWindowState(Qt::WindowState state) Q_DECL_OVERRIDE;
void setWindowFlags(Qt::WindowFlags flags) Q_DECL_OVERRIDE;
void raise() Q_DECL_OVERRIDE;
void lower() Q_DECL_OVERRIDE;
@ -182,7 +182,7 @@ public:
void doResize();
void setCanResize(bool canResize);
bool setMouseGrabEnabled(bool grab);
bool setMouseGrabEnabled(bool grab) Q_DECL_OVERRIDE;
static QWaylandWindow *mouseGrab() { return mMouseGrab; }
void sendProperty(const QString &name, const QVariant &value);

View File

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

View File

@ -62,7 +62,6 @@ QWaylandXdgSurface::QWaylandXdgSurface(struct ::xdg_surface *xdg_surface, QWayla
{
if (window->display()->windowExtension())
m_extendedWindow = new QWaylandExtendedSurface(window);
m_size = m_window->window()->geometry().size();
}
QWaylandXdgSurface::~QWaylandXdgSurface()
@ -193,10 +192,7 @@ void QWaylandXdgSurface::xdg_surface_configure(int32_t width, int32_t height, st
aboutToFullScreen = true;
break;
case XDG_SURFACE_STATE_RESIZING:
m_margins = m_window->frameMargins();
width -= m_margins.left() + m_margins.right();
height -= m_margins.top() + m_margins.bottom();
m_size = m_window->window()->geometry().size();
m_normalSize = QSize(width, height);
break;
case XDG_SURFACE_STATE_ACTIVATED:
// 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_maximized)
m_normalSize = m_window->window()->frameGeometry().size();
m_fullscreen = true;
m_window->window()->showFullScreen();
} 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();
}
} else if (!m_maximized && aboutToMaximize) {
if (!m_fullscreen)
m_normalSize = m_window->window()->frameGeometry().size();
m_maximized = true;
m_window->window()->showMaximized();
} 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();
}
if (width == 0 || height == 0) {
width = m_size.width();
height = m_size.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());
if (width <= 0 || height <= 0) {
if (!m_normalSize.isEmpty())
m_window->configure(0, m_normalSize.width(), m_normalSize.height());
} else {
m_window->configure(0, width, height);
}
ack_configure(serial);

View File

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