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:
parent
a6991376cc
commit
ecac1aeb29
@ -1525,7 +1525,11 @@ QMoveEvent::~QMoveEvent()
|
|||||||
\ingroup events
|
\ingroup events
|
||||||
|
|
||||||
Expose events are sent to windows when an area of the window is invalidated
|
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.
|
The event handler QWindow::exposeEvent() receives expose events.
|
||||||
*/
|
*/
|
||||||
|
@ -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 ®ion)
|
QT_DEFINE_QPA_EVENT_HANDLER(void, handleExposeEvent, QWindow *window, const QRegion ®ion)
|
||||||
{
|
{
|
||||||
QWindowSystemInterfacePrivate::ExposeEvent *e =
|
QWindowSystemInterfacePrivate::ExposeEvent *e =
|
||||||
|
@ -1084,6 +1084,10 @@
|
|||||||
This is mainly useful for asynchronous systems like X11, where a window will be mapped to screen some
|
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.
|
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()
|
\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
|
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.
|
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()
|
\sa QTest::qWaitForWindowActive()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user