From 300534fc214f2547a63594ce0891e9a54c8f33ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 31 Oct 2012 12:32:31 +0100 Subject: Added MultipleWindows platform capability. Several platform plugins, like eglfs, kms, etc don't support multiple windows as there's no system compositor, they're rendering directly to a single back buffer. By adding a platform capability we'll be able to provide better error reporting when an application tries to create multiple QWindows on a single-window platform. Also, QML apps can use this capability to figure out whether they should create a QWindow for dialogs / popups / menus, or whether to just create items in the same scene, that are shown on top of the rest of the content. Change-Id: I15b8d21ee2bc4568e9d705dbf32f872c2c25742b Reviewed-by: Andy Nichols --- src/gui/kernel/qplatformintegration.cpp | 4 ++++ src/gui/kernel/qplatformintegration.h | 11 ++++++----- src/plugins/platforms/cocoa/qcocoaintegration.mm | 1 + src/plugins/platforms/minimal/qminimalintegration.cpp | 1 + src/plugins/platforms/windows/qwindowsintegration.cpp | 2 ++ src/plugins/platforms/xcb/qxcbintegration.cpp | 1 + 6 files changed, 15 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/gui/kernel/qplatformintegration.cpp b/src/gui/kernel/qplatformintegration.cpp index cf55c59bab..5259ed9164 100644 --- a/src/gui/kernel/qplatformintegration.cpp +++ b/src/gui/kernel/qplatformintegration.cpp @@ -195,6 +195,10 @@ QPlatformServices *QPlatformIntegration::services() const \value BufferQueueingOpenGL The OpenGL implementation on the platform will queue up buffers when swapBuffers() is called and block only when its buffer pipeline is full, rather than block immediately. + + \value MultipleWindows The platform supports multiple QWindows, i.e. does some kind + of compositing either client or server side. Some platforms might only support a + single fullscreen window. */ diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h index 7e8888407c..b4c8ebff5a 100644 --- a/src/gui/kernel/qplatformintegration.h +++ b/src/gui/kernel/qplatformintegration.h @@ -83,11 +83,12 @@ class Q_GUI_EXPORT QPlatformIntegration public: enum Capability { ThreadedPixmaps = 1, - OpenGL = 2, - ThreadedOpenGL = 3, - SharedGraphicsCache = 4, - BufferQueueingOpenGL = 5, - WindowMasks = 6 + OpenGL, + ThreadedOpenGL, + SharedGraphicsCache, + BufferQueueingOpenGL, + WindowMasks, + MultipleWindows }; virtual ~QPlatformIntegration() { } diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm index 2fdb367c62..481055aae4 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.mm +++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm @@ -309,6 +309,7 @@ bool QCocoaIntegration::hasCapability(QPlatformIntegration::Capability cap) cons case ThreadedOpenGL: case BufferQueueingOpenGL: case WindowMasks: + case MultipleWindows: return true; default: return QPlatformIntegration::hasCapability(cap); diff --git a/src/plugins/platforms/minimal/qminimalintegration.cpp b/src/plugins/platforms/minimal/qminimalintegration.cpp index 6a2db91e34..e9fab6d87c 100644 --- a/src/plugins/platforms/minimal/qminimalintegration.cpp +++ b/src/plugins/platforms/minimal/qminimalintegration.cpp @@ -74,6 +74,7 @@ bool QMinimalIntegration::hasCapability(QPlatformIntegration::Capability cap) co { switch (cap) { case ThreadedPixmaps: return true; + case MultipleWindows: return true; default: return QPlatformIntegration::hasCapability(cap); } } diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index 3f030ffca7..a02f0cd494 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -338,6 +338,8 @@ bool QWindowsIntegration::hasCapability(QPlatformIntegration::Capability cap) co #endif // !QT_NO_OPENGL case WindowMasks: return true; + case MultipleWindows: + return true; default: return QPlatformIntegration::hasCapability(cap); } diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index a46d51127f..2ffe53c04b 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -216,6 +216,7 @@ bool QXcbIntegration::hasCapability(QPlatformIntegration::Capability cap) const #endif case ThreadedOpenGL: return false; case WindowMasks: return true; + case MultipleWindows: return true; default: return QPlatformIntegration::hasCapability(cap); } } -- cgit v1.2.3