xcb: Do not crash with VNC
When having a vnc server with pixel format bgr888, we may not have a working GL integration. (we may not have one regardless of the pixel format in fact) We should still keep on attempting to create a regular SHM window for RasterGLSurface windows too, to keep regular widgets apps working. Task-number: QTBUG-42776 Change-Id: Idbf8de29694613b240bd27affcc3d80810ce1460 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
This commit is contained in:
parent
0599ffd5d6
commit
bc6e92bd2e
@ -1137,7 +1137,7 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!handled)
|
if (!handled && m_glIntegration)
|
||||||
handled = m_glIntegration->handleXcbEvent(event, response_type);
|
handled = m_glIntegration->handleXcbEvent(event, response_type);
|
||||||
|
|
||||||
if (handled)
|
if (handled)
|
||||||
|
@ -186,9 +186,9 @@ QXcbIntegration::~QXcbIntegration()
|
|||||||
|
|
||||||
QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const
|
QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const
|
||||||
{
|
{
|
||||||
|
QXcbScreen *screen = static_cast<QXcbScreen *>(window->screen()->handle());
|
||||||
|
QXcbGlIntegration *glIntegration = screen->connection()->glIntegration();
|
||||||
if (window->type() != Qt::Desktop) {
|
if (window->type() != Qt::Desktop) {
|
||||||
QXcbScreen *screen = static_cast<QXcbScreen *>(window->screen()->handle());
|
|
||||||
QXcbGlIntegration *glIntegration = screen->connection()->glIntegration();
|
|
||||||
if (glIntegration) {
|
if (glIntegration) {
|
||||||
QXcbWindow *xcbWindow = glIntegration->createWindow(window);
|
QXcbWindow *xcbWindow = glIntegration->createWindow(window);
|
||||||
xcbWindow->create();
|
xcbWindow->create();
|
||||||
@ -196,7 +196,8 @@ QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_ASSERT(window->type() == Qt::Desktop || !window->supportsOpenGL());
|
Q_ASSERT(window->type() == Qt::Desktop || !window->supportsOpenGL()
|
||||||
|
|| (!glIntegration && window->surfaceType() == QSurface::RasterGLSurface)); // for VNC
|
||||||
QXcbWindow *xcbWindow = new QXcbWindow(window);
|
QXcbWindow *xcbWindow = new QXcbWindow(window);
|
||||||
xcbWindow->create();
|
xcbWindow->create();
|
||||||
return xcbWindow;
|
return xcbWindow;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user