Document expose event behavior

Document that "visible"-but-obscured windows may not
get expose events for various audiences: QTestLib
users, platform plugin authors and on the QExposeEvent
itself. QWindow::exposeEvent() already has this documented
and is not changed.

Task-number: QTBUG-50414
Change-Id: I91042e8b1c70e48f10e692b2e80367d242a8ccbe
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Morten Johan Sørvig 2016-01-21 10:33:45 +01:00 committed by Tor Arne Vestbø
parent a6991376cc
commit ecac1aeb29
3 changed files with 33 additions and 1 deletions

View File

@ -1525,7 +1525,11 @@ QMoveEvent::~QMoveEvent()
\ingroup events
Expose events are sent to windows when an area of the window is invalidated
or window visibility in the windowing system changes.
or window exposure in the windowing system changes.
A Window with a client area that is completely covered by another window, or
is otherwise not visible may be considered obscured by Qt and may in such
cases not receive expose events.
The event handler QWindow::exposeEvent() receives expose events.
*/

View File

@ -303,6 +303,23 @@ QWindowSystemInterfacePrivate::ExposeEvent::ExposeEvent(QWindow *window, const Q
{
}
/*! \internal
Handles an expose event.
The platform plugin sends expose events when an area of the window
is invalidated or window exposure changes. \a region is in window
local coordinates. An empty region indicates that the window is
obscured, but note that the exposed property of the QWindow will be set
based on what QPlatformWindow::isExposed() returns at the time of this call,
not based on what the region is. // FIXME: this should probably be fixed.
The platform plugin may omit sending expose events (or send obscure
events) for windows that are on screen but where the client area is
completely covered by other windows or otherwise not visible. Expose
event consumers can then use this to disable updates for such windows.
This is required behavior on platforms where OpenGL swapbuffers stops
blocking for obscured windows (like macOS).
*/
QT_DEFINE_QPA_EVENT_HANDLER(void, handleExposeEvent, QWindow *window, const QRegion &region)
{
QWindowSystemInterfacePrivate::ExposeEvent *e =

View File

@ -1084,6 +1084,10 @@
This is mainly useful for asynchronous systems like X11, where a window will be mapped to screen some
time after being asked to show itself on the screen.
Note that a window that is mapped to screen may still not be considered exposed if the window client
area is completely covered by other windows, or if the window is otherwise not visible. This function
will then time out when waiting for such a window.
\sa QTest::qWaitForWindowActive(), QWindow::isExposed()
*/
@ -1106,6 +1110,13 @@
This is mainly useful for asynchronous systems like X11, where a window will be mapped to screen some
time after being asked to show itself on the screen.
Note that a window that is mapped to screen may still not be considered exposed if the window client
area is completely covered by other windows, or if the window is otherwise not visible. This function
will then time out when waiting for such a window.
A specific configuration where this happens is when using QGLWidget as a viewport widget on macOS:
The viewport widget gets the expose event, not the parent widget.
\sa QTest::qWaitForWindowActive()
*/