diff options
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbintegration.cpp')
-rw-r--r-- | src/plugins/platforms/xcb/qxcbintegration.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index bf9eaacbb8..e9b36c48b8 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -69,12 +69,12 @@ #define register /* C++17 deprecated register */ #include <X11/Xlib.h> #undef register +#endif #if QT_CONFIG(xcb_native_painting) #include "qxcbnativepainting.h" #include "qpixmap_x11_p.h" #include "qbackingstore_x11_p.h" #endif -#endif #include <qpa/qplatforminputcontextfactory_p.h> #include <private/qgenericunixthemes_p.h> @@ -243,7 +243,8 @@ QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const { QXcbScreen *screen = static_cast<QXcbScreen *>(window->screen()->handle()); QXcbGlIntegration *glIntegration = screen->connection()->glIntegration(); - if (window->type() != Qt::Desktop) { + const bool isTrayIconWindow = window->objectName() == QLatin1String("QSystemTrayIconSysWindow"); + if (window->type() != Qt::Desktop && !isTrayIconWindow) { if (window->supportsOpenGL()) { if (glIntegration) { QXcbWindow *xcbWindow = glIntegration->createWindow(window); @@ -259,7 +260,7 @@ QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const } } - Q_ASSERT(window->type() == Qt::Desktop || !window->supportsOpenGL() + Q_ASSERT(window->type() == Qt::Desktop || isTrayIconWindow || !window->supportsOpenGL() || (!glIntegration && window->surfaceType() == QSurface::RasterGLSurface)); // for VNC QXcbWindow *xcbWindow = new QXcbWindow(window); xcbWindow->create(); @@ -286,6 +287,10 @@ QPlatformOpenGLContext *QXcbIntegration::createPlatformOpenGLContext(QOpenGLCont QPlatformBackingStore *QXcbIntegration::createPlatformBackingStore(QWindow *window) const { + const bool isTrayIconWindow = window->objectName() == QLatin1String("QSystemTrayIconSysWindow"); + if (isTrayIconWindow) + return new QXcbSystemTrayBackingStore(window); + #if QT_CONFIG(xcb_native_painting) if (nativePaintingEnabled()) return new QXcbNativeBackingStore(window); @@ -381,8 +386,17 @@ QPlatformClipboard *QXcbIntegration::clipboard() const #endif #if QT_CONFIG(draganddrop) +#include <private/qsimpledrag_p.h> QPlatformDrag *QXcbIntegration::drag() const { + static const bool useSimpleDrag = qEnvironmentVariableIsSet("QT_XCB_USE_SIMPLE_DRAG"); + if (Q_UNLIKELY(useSimpleDrag)) { // This is useful for testing purposes + static QSimpleDrag *simpleDrag = nullptr; + if (!simpleDrag) + simpleDrag = new QSimpleDrag(); + return simpleDrag; + } + return m_connections.at(0)->drag(); } #endif @@ -414,10 +428,7 @@ QPlatformServices *QXcbIntegration::services() const Qt::KeyboardModifiers QXcbIntegration::queryKeyboardModifiers() const { - int keybMask = 0; - QXcbConnection *conn = m_connections.at(0); - QXcbCursor::queryPointer(conn, 0, 0, &keybMask); - return conn->keyboard()->translateModifiers(keybMask); + return m_connections.at(0)->queryKeyboardModifiers(); } QList<int> QXcbIntegration::possibleKeys(const QKeyEvent *e) const |