Add QWidgetPrivate::closestParentWidgetWithWindowHandle helper method
In contrast to nativeParentWidget(), we return the closest widget with a QWindow, even if this window has not been created yet. Pick-to: 6.7 6.6 6.5 Change-Id: Icac46297a6052a7a5698d752d4aa871bd5c2bdd8 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>bb10
parent
f517e85e90
commit
b571634172
|
|
@ -1029,6 +1029,23 @@ void QWidgetPrivate::createRecursively()
|
|||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\internal
|
||||
Returns the closest parent widget that has a QWindow window handle
|
||||
|
||||
\note This behavior is different from nativeParentWidget(), which
|
||||
returns the closest parent that has a QWindow window handle with
|
||||
a created QPlatformWindow, and hence native window (winId).
|
||||
*/
|
||||
QWidget *QWidgetPrivate::closestParentWidgetWithWindowHandle() const
|
||||
{
|
||||
Q_Q(const QWidget);
|
||||
QWidget *parent = q->parentWidget();
|
||||
while (parent && !parent->windowHandle())
|
||||
parent = parent->parentWidget();
|
||||
return parent;
|
||||
}
|
||||
|
||||
QWindow *QWidgetPrivate::windowHandle(WindowHandleMode mode) const
|
||||
{
|
||||
if (mode == WindowHandleMode::Direct || mode == WindowHandleMode::Closest) {
|
||||
|
|
@ -1038,6 +1055,7 @@ QWindow *QWidgetPrivate::windowHandle(WindowHandleMode mode) const
|
|||
}
|
||||
}
|
||||
if (mode == WindowHandleMode::Closest) {
|
||||
// FIXME: Use closestParentWidgetWithWindowHandle instead
|
||||
if (auto nativeParent = q_func()->nativeParentWidget()) {
|
||||
if (auto window = nativeParent->windowHandle())
|
||||
return window;
|
||||
|
|
|
|||
|
|
@ -635,6 +635,8 @@ public:
|
|||
|
||||
std::string flagsForDumping() const override;
|
||||
|
||||
QWidget *closestParentWidgetWithWindowHandle() const;
|
||||
|
||||
// Variables.
|
||||
// Regular pointers (keep them together to avoid gaps on 64 bit architectures).
|
||||
std::unique_ptr<QWExtra> extra;
|
||||
|
|
|
|||
Loading…
Reference in New Issue