Add support for loading theme plugins.
[profile/ivi/qtwayland.git] / src / plugins / platforms / wayland / qwaylandintegration.cpp
index 57baa57..9606f7c 100644 (file)
@@ -1,8 +1,7 @@
 /****************************************************************************
 **
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
 **
 ** This file is part of the config.tests of the Qt Toolkit.
 **
@@ -35,6 +34,7 @@
 **
 **
 **
+**
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
 
 #include "QtPlatformSupport/private/qgenericunixfontdatabase_p.h"
 #include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtPlatformSupport/private/qgenericunixthemes_p.h>
 
 #include <QtGui/private/qguiapplication_p.h>
 
 #include <QtGui/QWindowSystemInterface>
-#include <QtGui/QPlatformCursor>
+#include <qpa/qplatformcursor.h>
 #include <QtGui/QSurfaceFormat>
 #include <QtGui/QOpenGLContext>
 
-#include <private/qplatforminputcontextfactory_qpa_p.h>
-#include <qplatforminputcontext_qpa.h>
+#include <qpa/qplatforminputcontextfactory_p.h>
+#include <qpa/qplatformaccessibility.h>
+#include <qpa/qplatforminputcontext.h>
 
 #ifdef QT_WAYLAND_GL_SUPPORT
 #include "gl_integration/qwaylandglintegration.h"
 #endif
 
+#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
+#include "windowmanager_integration/qwaylandwindowmanagerintegration.h"
+#endif
+
 QWaylandIntegration::QWaylandIntegration()
     : mFontDb(new QGenericUnixFontDatabase())
     , mEventDispatcher(createUnixEventDispatcher())
-    , mNativeInterface(new QWaylandNativeInterface)
+    , mNativeInterface(new QWaylandNativeInterface(this))
+    , mAccessibility(new QPlatformAccessibility())
 {
     QGuiApplicationPrivate::instance()->setEventDispatcher(mEventDispatcher);
     mDisplay = new QWaylandDisplay();
+    mClipboard = new QWaylandClipboard(mDisplay);
+    mDrag = new QWaylandDrag(mDisplay);
 
     foreach (QPlatformScreen *screen, mDisplay->screens())
         screenAdded(screen);
@@ -79,6 +88,15 @@ QWaylandIntegration::QWaylandIntegration()
     mInputContext = QPlatformInputContextFactory::create();
 }
 
+QWaylandIntegration::~QWaylandIntegration()
+{
+    delete mDrag;
+    delete mClipboard;
+    delete mAccessibility;
+    delete mNativeInterface;
+    delete mDisplay;
+}
+
 QPlatformNativeInterface * QWaylandIntegration::nativeInterface() const
 {
     return mNativeInterface;
@@ -95,7 +113,13 @@ bool QWaylandIntegration::hasCapability(QPlatformIntegration::Capability cap) co
         return false;
 #endif
     case ThreadedOpenGL:
-        return hasCapability(OpenGL);
+#ifdef QT_WAYLAND_GL_SUPPORT
+        return mDisplay->eglIntegration()->supportsThreadedOpenGL();
+#else
+        return false;
+#endif
+    case BufferQueueingOpenGL:
+        return true;
     default: return QPlatformIntegration::hasCapability(cap);
     }
 }
@@ -114,8 +138,7 @@ QPlatformOpenGLContext *QWaylandIntegration::createPlatformOpenGLContext(QOpenGL
 #ifdef QT_WAYLAND_GL_SUPPORT
     return mDisplay->eglIntegration()->createPlatformOpenGLContext(context->format(), context->shareHandle());
 #else
-    Q_UNUSED(glFormat);
-    Q_UNUSED(share);
+    Q_UNUSED(context);
     return 0;
 #endif
 }
@@ -137,15 +160,53 @@ QPlatformFontDatabase *QWaylandIntegration::fontDatabase() const
 
 QPlatformClipboard *QWaylandIntegration::clipboard() const
 {
-    return QWaylandClipboard::instance(mDisplay);
+    return mClipboard;
 }
 
 QPlatformDrag *QWaylandIntegration::drag() const
 {
-    return QWaylandDrag::instance(mDisplay);
+    return mDrag;
 }
 
 QPlatformInputContext *QWaylandIntegration::inputContext() const
 {
     return mInputContext;
 }
+
+QVariant QWaylandIntegration::styleHint(StyleHint hint) const
+{
+#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
+    if (hint == ShowIsFullScreen && mDisplay->windowManagerIntegration())
+        return mDisplay->windowManagerIntegration()->showIsFullScreen();
+#endif
+    return QPlatformIntegration::styleHint(hint);
+}
+
+QPlatformAccessibility *QWaylandIntegration::accessibility() const
+{
+    return mAccessibility;
+}
+
+QPlatformServices *QWaylandIntegration::services() const
+{
+#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
+    return mDisplay->windowManagerIntegration();
+#else
+    return QWaylandIntegration::services();
+#endif
+}
+
+QWaylandDisplay *QWaylandIntegration::display() const
+{
+    return mDisplay;
+}
+
+QStringList QWaylandIntegration::themeNames() const
+{
+    return QGenericUnixTheme::themeNames();
+}
+
+QPlatformTheme *QWaylandIntegration::createPlatformTheme(const QString &name) const
+{
+    return QGenericUnixTheme::createUnixTheme(name);
+}