Introduce QWindowSystemInterface::handleSynchronousCloseEvent

And use it from the Cocoa backend.

In general, for threaded GL rendering to work, any function that
affect the surface must be synchronous, so the implementor (such as
QQuickCanvas) can pick it up and block until the GL context has
released the surface. Otherwise, we will crash.

Change-Id: Id8484dac7452fe96fa80ade4ea321145f32124b4
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
bb10
Gunnar Sletta 2011-11-25 14:02:12 +01:00 committed by Qt by Nokia
parent 32ce1172ba
commit ac188d9582
3 changed files with 10 additions and 1 deletions

View File

@ -108,6 +108,14 @@ void QWindowSystemInterface::handleCloseEvent(QWindow *tlw)
}
}
void QWindowSystemInterface::handleSynchronousCloseEvent(QWindow *tlw)
{
if (tlw) {
QWindowSystemInterfacePrivate::CloseEvent e(tlw);
QGuiApplicationPrivate::processWindowSystemEvent(&e);
}
}
/*!
\a tlw == 0 means that \a ev is in global coords only

View File

@ -98,6 +98,7 @@ public:
static void handleGeometryChange(QWindow *w, const QRect &newRect);
static void handleSynchronousGeometryChange(QWindow *w, const QRect &newRect);
static void handleCloseEvent(QWindow *w);
static void handleSynchronousCloseEvent(QWindow *w);
static void handleEnterEvent(QWindow *w);
static void handleLeaveEvent(QWindow *w);
static void handleWindowActivated(QWindow *w);

View File

@ -233,7 +233,7 @@ void QCocoaWindow::windowDidResize()
void QCocoaWindow::windowWillClose()
{
QWindowSystemInterface::handleCloseEvent(window());
QWindowSystemInterface::handleSynchronousCloseEvent(window());
}
void QCocoaWindow::setCurrentContext(QCocoaGLContext *context)