Fix activation loss when hiding floating frame TLW in wxMSW

Generalize the fix of d6fb86a81c and
explicitly activate the parent when a TLW with wxFRAME_FLOAT_ON_PARENT
style is hidden or minimized and not only when it is destroyed.

Closes #18535.
This commit is contained in:
Vadim Zeitlin
2019-12-29 16:47:49 +01:00
parent 577faedb65
commit dda052d38a

View File

@@ -577,19 +577,6 @@ wxTopLevelWindowMSW::~wxTopLevelWindowMSW()
delete m_menuSystem;
SendDestroyEvent();
// after destroying an owned window, Windows activates the next top level
// window in Z order but it may be different from our owner (to reproduce
// this simply Alt-TAB to another application and back before closing the
// owned frame) whereas we always want to yield activation to our parent
if ( HasFlag(wxFRAME_FLOAT_ON_PARENT) )
{
wxWindow *parent = GetParent();
if ( parent )
{
::BringWindowToTop(GetHwndOf(parent));
}
}
}
// ----------------------------------------------------------------------------
@@ -598,6 +585,26 @@ wxTopLevelWindowMSW::~wxTopLevelWindowMSW()
void wxTopLevelWindowMSW::DoShowWindow(int nShowCmd)
{
// After hiding or minimizing an owned window, Windows activates the next
// top level window in Z order but it may be different from our owner (to
// reproduce this simply Alt-TAB to another application and back before
// closing the owned frame) whereas we always want to yield activation to
// our parent, so do it explicitly _before_ yielding activation.
switch ( nShowCmd )
{
case SW_HIDE:
case SW_MINIMIZE:
if ( HasFlag(wxFRAME_FLOAT_ON_PARENT) )
{
wxWindow *parent = GetParent();
if ( parent )
{
::BringWindowToTop(GetHwndOf(parent));
}
}
break;
}
::ShowWindow(GetHwnd(), nShowCmd);
#if wxUSE_TOOLTIPS