Add QWaylandWindowFunctions
Allow the control of the subsurface sync mode Change-Id: I19f35261313282873f57228487a63a8f6a780b0c Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
This commit is contained in:
parent
b8fc07100b
commit
cf514c46a9
@ -34,6 +34,7 @@
|
||||
#include "qwaylandnativeinterface_p.h"
|
||||
#include "qwaylanddisplay_p.h"
|
||||
#include "qwaylandwindow_p.h"
|
||||
#include "qwaylandsubsurface_p.h"
|
||||
#include "qwaylandextendedsurface_p.h"
|
||||
#include "qwaylandintegration_p.h"
|
||||
#include "qwaylanddisplay_p.h"
|
||||
@ -43,6 +44,8 @@
|
||||
#include <QtGui/QScreen>
|
||||
#include <QtWaylandClient/private/qwaylandclientbufferintegration_p.h>
|
||||
|
||||
#include <QtPlatformHeaders/qwaylandwindowfunctions.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
namespace QtWaylandClient {
|
||||
@ -141,6 +144,44 @@ void QWaylandNativeInterface::emitWindowPropertyChanged(QPlatformWindow *window,
|
||||
emit windowPropertyChanged(window,name);
|
||||
}
|
||||
|
||||
QFunctionPointer QWaylandNativeInterface::platformFunction(const QByteArray &resource) const
|
||||
{
|
||||
if (resource == QWaylandWindowFunctions::setSyncIdentifier()) {
|
||||
return QFunctionPointer(setSync);
|
||||
} else if (resource == QWaylandWindowFunctions::setDeSyncIdentifier()) {
|
||||
return QFunctionPointer(setDeSync);
|
||||
} else if (resource == QWaylandWindowFunctions::isSyncIdentifier()) {
|
||||
return QFunctionPointer(isSync);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void QWaylandNativeInterface::setSync(QWindow *window)
|
||||
{
|
||||
QWaylandWindow *ww = static_cast<QWaylandWindow*>(window->handle());
|
||||
if (ww->subSurfaceWindow()) {
|
||||
ww->subSurfaceWindow()->setSync();
|
||||
}
|
||||
}
|
||||
|
||||
void QWaylandNativeInterface::setDeSync(QWindow *window)
|
||||
{
|
||||
QWaylandWindow *ww = static_cast<QWaylandWindow*>(window->handle());
|
||||
if (ww->subSurfaceWindow()) {
|
||||
ww->subSurfaceWindow()->setDeSync();
|
||||
}
|
||||
}
|
||||
|
||||
bool QWaylandNativeInterface::isSync(QWindow *window)
|
||||
{
|
||||
QWaylandWindow *ww = static_cast<QWaylandWindow*>(window->handle());
|
||||
if (ww->subSurfaceWindow()) {
|
||||
return ww->subSurfaceWindow()->isSync();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -75,9 +75,15 @@ public:
|
||||
|
||||
void emitWindowPropertyChanged(QPlatformWindow *window, const QString &name);
|
||||
|
||||
QFunctionPointer platformFunction(const QByteArray &resource) const Q_DECL_OVERRIDE;
|
||||
|
||||
private:
|
||||
QWaylandIntegration *m_integration;
|
||||
QHash<QPlatformWindow*, QVariantMap> m_windowProperties;
|
||||
|
||||
static void setSync(QWindow *window);
|
||||
static void setDeSync(QWindow *window);
|
||||
static bool isSync(QWindow *window);
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -45,9 +45,10 @@ QWaylandSubSurface::QWaylandSubSurface(QWaylandWindow *window, QWaylandWindow *p
|
||||
: QtWayland::wl_subsurface(sub_surface)
|
||||
, m_window(window)
|
||||
, m_parent(parent)
|
||||
, m_synchronized(false)
|
||||
{
|
||||
m_parent->mChildren << this;
|
||||
set_desync();
|
||||
setDeSync();
|
||||
}
|
||||
|
||||
QWaylandSubSurface::~QWaylandSubSurface()
|
||||
@ -55,6 +56,28 @@ QWaylandSubSurface::~QWaylandSubSurface()
|
||||
m_parent->mChildren.removeOne(this);
|
||||
}
|
||||
|
||||
void QWaylandSubSurface::setSync()
|
||||
{
|
||||
QWaylandSubSurface::set_sync();
|
||||
}
|
||||
|
||||
void QWaylandSubSurface::setDeSync()
|
||||
{
|
||||
QWaylandSubSurface::set_desync();
|
||||
}
|
||||
|
||||
void QWaylandSubSurface::set_sync()
|
||||
{
|
||||
m_synchronized = true;
|
||||
QtWayland::wl_subsurface::set_sync();
|
||||
}
|
||||
|
||||
void QWaylandSubSurface::set_desync()
|
||||
{
|
||||
m_synchronized = false;
|
||||
QtWayland::wl_subsurface::set_desync();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -68,9 +68,20 @@ public:
|
||||
QWaylandWindow *window() const { return m_window; }
|
||||
QWaylandWindow *parent() const { return m_parent; }
|
||||
|
||||
void setSync();
|
||||
void setDeSync();
|
||||
bool isSync() const { return m_synchronized; }
|
||||
|
||||
private:
|
||||
|
||||
// Intentionally hide public methods from ::wl_subsurface
|
||||
// to keep track of the sync state
|
||||
void set_sync();
|
||||
void set_desync();
|
||||
QWaylandWindow *m_window;
|
||||
QWaylandWindow *m_parent;
|
||||
bool m_synchronized;
|
||||
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
Loading…
x
Reference in New Issue
Block a user