Win QPA: Pass in the top level setting instead of relying on isTopLevel()

When updateDropSite() is called then most of the time calling
window()->isTopLevel() is enough. But in a case like while the window is
being reparented it cannot be trusted. So we pass it as a variable so that
it is possible to give it the correct information when it is being called.

Task-number: QTBUG-39739
Change-Id: I77a7ceeaf78e89b1f65a10d60df86088b35e0fe5
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
bb10
Andy Shaw 2015-03-06 11:08:04 +01:00
parent 143350c876
commit a9a41961c6
2 changed files with 6 additions and 6 deletions

View File

@ -933,7 +933,7 @@ QWindowsWindow::QWindowsWindow(QWindow *aWindow, const QWindowsWindowData &data)
setFlag(OpenGL_ES2);
}
#endif // QT_NO_OPENGL
updateDropSite();
updateDropSite(window()->isTopLevel());
#ifndef Q_OS_WINCE
if ((QWindowsContext::instance()->systemInfo() & QWindowsContext::SI_SupportsTouch)
@ -1020,10 +1020,10 @@ void QWindowsWindow::destroyWindow()
}
}
void QWindowsWindow::updateDropSite()
void QWindowsWindow::updateDropSite(bool topLevel)
{
bool enabled = false;
if (window()->isTopLevel()) {
if (topLevel) {
switch (window()->type()) {
case Qt::Window:
case Qt::Dialog:
@ -1306,7 +1306,7 @@ void QWindowsWindow::setParent_sys(const QPlatformWindow *parent)
if (wasTopLevel != isTopLevel) {
setDropSiteEnabled(false);
setWindowFlags_sys(window()->flags(), unsigned(isTopLevel ? WindowCreationData::ForceTopLevel : WindowCreationData::ForceChild));
updateDropSite();
updateDropSite(isTopLevel);
}
}
}
@ -1561,7 +1561,7 @@ void QWindowsWindow::setWindowFlags(Qt::WindowFlags flags)
m_data.flags = flags;
if (m_data.hwnd) {
m_data = setWindowFlags_sys(flags);
updateDropSite();
updateDropSite(window()->isTopLevel());
}
}
// When switching to a frameless window, geometry

View File

@ -274,7 +274,7 @@ private:
void destroyWindow();
inline bool isDropSiteEnabled() const { return m_dropTarget != 0; }
void setDropSiteEnabled(bool enabled);
void updateDropSite();
void updateDropSite(bool topLevel);
void handleGeometryChange();
void handleWindowStateChange(Qt::WindowState state);
inline void destroyIcon();