Windows: Clear window under mouse in destruction of platform window.
Task-number: QTBUG-32042 Change-Id: I8aa5df84b7ca6deb47e0c3eff9a6a7d2c4793553 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
This commit is contained in:
parent
af96c6fed9
commit
88f4baf089
@ -582,6 +582,11 @@ QWindow *QWindowsContext::windowUnderMouse() const
|
|||||||
return d->m_mouseHandler.windowUnderMouse();
|
return d->m_mouseHandler.windowUnderMouse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QWindowsContext::clearWindowUnderMouse()
|
||||||
|
{
|
||||||
|
d->m_mouseHandler.clearWindowUnderMouse();
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Find a child window at a screen point.
|
\brief Find a child window at a screen point.
|
||||||
|
|
||||||
|
@ -166,6 +166,7 @@ public:
|
|||||||
unsigned cwex_flags) const;
|
unsigned cwex_flags) const;
|
||||||
|
|
||||||
QWindow *windowUnderMouse() const;
|
QWindow *windowUnderMouse() const;
|
||||||
|
void clearWindowUnderMouse();
|
||||||
|
|
||||||
inline bool windowsProc(HWND hwnd, UINT message,
|
inline bool windowsProc(HWND hwnd, UINT message,
|
||||||
QtWindows::WindowsEventType et,
|
QtWindows::WindowsEventType et,
|
||||||
|
@ -72,6 +72,7 @@ public:
|
|||||||
|
|
||||||
static Qt::MouseButtons queryMouseButtons();
|
static Qt::MouseButtons queryMouseButtons();
|
||||||
QWindow *windowUnderMouse() const { return m_windowUnderMouse.data(); }
|
QWindow *windowUnderMouse() const { return m_windowUnderMouse.data(); }
|
||||||
|
void clearWindowUnderMouse() { m_windowUnderMouse = 0; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline bool translateMouseWheelEvent(QWindow *window, HWND hwnd,
|
inline bool translateMouseWheelEvent(QWindow *window, HWND hwnd,
|
||||||
|
@ -871,6 +871,9 @@ void QWindowsWindow::destroyWindow()
|
|||||||
qDebug() << __FUNCTION__ << this << window() << m_data.hwnd;
|
qDebug() << __FUNCTION__ << this << window() << m_data.hwnd;
|
||||||
if (m_data.hwnd) { // Stop event dispatching before Window is destroyed.
|
if (m_data.hwnd) { // Stop event dispatching before Window is destroyed.
|
||||||
setFlag(WithinDestroy);
|
setFlag(WithinDestroy);
|
||||||
|
QWindowsContext *context = QWindowsContext::instance();
|
||||||
|
if (context->windowUnderMouse() == window())
|
||||||
|
context->clearWindowUnderMouse();
|
||||||
if (hasMouseCapture())
|
if (hasMouseCapture())
|
||||||
setMouseGrabEnabled(false);
|
setMouseGrabEnabled(false);
|
||||||
unregisterDropSite();
|
unregisterDropSite();
|
||||||
@ -893,7 +896,7 @@ void QWindowsWindow::destroyWindow()
|
|||||||
#endif // !Q_OS_WINCE
|
#endif // !Q_OS_WINCE
|
||||||
if (m_data.hwnd != GetDesktopWindow())
|
if (m_data.hwnd != GetDesktopWindow())
|
||||||
DestroyWindow(m_data.hwnd);
|
DestroyWindow(m_data.hwnd);
|
||||||
QWindowsContext::instance()->removeWindow(m_data.hwnd);
|
context->removeWindow(m_data.hwnd);
|
||||||
m_data.hwnd = 0;
|
m_data.hwnd = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user