tst_foreignwindow: Add basic test of foreign window reparenting
Pick-to: 6.6 Change-Id: I008fad0f6527503a13ded4818eec5cb280f65cf4 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This commit is contained in:
parent
f50e295680
commit
546d4c9d33
@ -23,6 +23,8 @@ private slots:
|
||||
|
||||
void fromWinId();
|
||||
void initialState();
|
||||
|
||||
void embedForeignWindow();
|
||||
};
|
||||
|
||||
void tst_ForeignWindow::fromWinId()
|
||||
@ -67,5 +69,22 @@ void tst_ForeignWindow::initialState()
|
||||
QCOMPARE(foreignWindow->geometry(), initialGeometry);
|
||||
}
|
||||
|
||||
void tst_ForeignWindow::embedForeignWindow()
|
||||
{
|
||||
// A foreign window embedded into a Qt UI requires that the rest of Qt
|
||||
// is to be able to treat the foreign child window as any other window
|
||||
// that it can show, hide, stack, and move around.
|
||||
|
||||
QWindow parentWindow;
|
||||
|
||||
NativeWindow nativeWindow;
|
||||
QVERIFY(nativeWindow);
|
||||
|
||||
// As a prerequisite to that, we must be able to reparent the foreign window
|
||||
std::unique_ptr<QWindow> foreignWindow(QWindow::fromWinId(nativeWindow));
|
||||
foreignWindow.release()->setParent(&parentWindow);
|
||||
QCOMPARE(nativeWindow.parentWinId(), parentWindow.winId());
|
||||
}
|
||||
|
||||
#include <tst_foreignwindow.moc>
|
||||
QTEST_MAIN(tst_ForeignWindow)
|
||||
|
@ -18,6 +18,7 @@ public:
|
||||
~NativeWindow();
|
||||
|
||||
operator WId() const { return reinterpret_cast<WId>(m_handle); }
|
||||
WId parentWinId() const;
|
||||
|
||||
void setGeometry(const QRect &rect);
|
||||
QRect geometry() const;
|
||||
@ -69,6 +70,11 @@ QRect NativeWindow::geometry() const
|
||||
return QRectF::fromCGRect(m_handle.frame).toRect();
|
||||
}
|
||||
|
||||
WId NativeWindow::parentWinId() const
|
||||
{
|
||||
return WId(m_handle.superview);
|
||||
}
|
||||
|
||||
#elif defined(Q_OS_WIN)
|
||||
|
||||
NativeWindow::NativeWindow()
|
||||
@ -107,6 +113,11 @@ QRect NativeWindow::geometry() const
|
||||
return {};
|
||||
}
|
||||
|
||||
WId NativeWindow::parentWinId() const
|
||||
{
|
||||
return WId(GetAncestor(m_handle, GA_PARENT));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif // NATIVEWINDOW_H
|
||||
|
Loading…
Reference in New Issue
Block a user