depot/third_party/nixpkgs/pkgs/development/libraries/wxwidgets/patches/0001-fix-assertion-using-hide-in-destroy.patch
Default email 8e65f7f0cc Project import generated by Copybara.
GitOrigin-RevId: 062a0c5437b68f950b081bbfc8a699d57a4ee026
2022-03-05 17:20:37 +01:00

43 lines
1.8 KiB
Diff

commit 56a60ee50122613d3a356ce74b4bd77b5e7be235
Author: Tim Kosse <tim.kosse@filezilla-project.org>
Date: Sat Aug 26 15:37:30 2017 +0200
If a wxTopLevelWindow has been instanced, but Create has not been called, calling Destroy on the window results in an assertion in Show(false), at least under wxGTK. Fix this by only hiding a top level window during destruction if it is actually shown.
diff --git a/src/common/toplvcmn.cpp b/src/common/toplvcmn.cpp
index ef693690c5..8d07812031 100644
--- a/src/common/toplvcmn.cpp
+++ b/src/common/toplvcmn.cpp
@@ -122,19 +122,21 @@ bool wxTopLevelWindowBase::Destroy()
// any more as no events will be sent to the hidden window and without idle
// events we won't prune wxPendingDelete list and the application won't
// terminate
- for ( wxWindowList::const_iterator i = wxTopLevelWindows.begin(),
- end = wxTopLevelWindows.end();
- i != end;
- ++i )
- {
- wxTopLevelWindow * const win = static_cast<wxTopLevelWindow *>(*i);
- if ( win != this && win->IsShown() )
+ if ( IsShown() ) {
+ for ( wxWindowList::const_iterator i = wxTopLevelWindows.begin(),
+ end = wxTopLevelWindows.end();
+ i != end;
+ ++i )
{
- // there remains at least one other visible TLW, we can hide this
- // one
- Hide();
+ wxTopLevelWindow * const win = static_cast<wxTopLevelWindow *>(*i);
+ if ( win != this && win->IsShown() )
+ {
+ // there remains at least one other visible TLW, we can hide this
+ // one
+ Hide();
- break;
+ break;
+ }
}
}