[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master cf327909 2/2: Revert "Remove unneeded try/cat
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master cf327909 2/2: Revert "Remove unneeded try/catch from IllustrationView::OnCreate()" |
Date: |
Wed, 15 Jun 2022 14:33:56 -0400 (EDT) |
branch: master
commit cf32790965c5db83f2ecadc390e7293261dd980e
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Revert "Remove unneeded try/catch from IllustrationView::OnCreate()"
This reverts commit 1ea88e721065c67be1b7d6b8350e2ec8316507b3.
See preceding commit for reason.
---
illustration_view.cpp | 37 ++++++++++++++++++++++++-------------
1 file changed, 24 insertions(+), 13 deletions(-)
diff --git a/illustration_view.cpp b/illustration_view.cpp
index 99abb1e0..3eda390f 100644
--- a/illustration_view.cpp
+++ b/illustration_view.cpp
@@ -145,31 +145,42 @@ char const* IllustrationView::menubar_xrc_resource() const
}
/// Pop up an input dialog; iff it's not cancelled, create a view.
+///
+/// Trap exceptions to ensure that this function returns 'false' on
+/// failure, lest wx's doc-view framework create a zombie view. See:
+/// https://lists.nongnu.org/archive/html/lmi/2008-12/msg00017.html
bool IllustrationView::OnCreate(wxDocument* doc, long int flags)
{
bool has_view_been_created = false;
- if(flags & LMI_WX_CHILD_DOCUMENT)
+ try
{
- is_phony_ = true;
+ if(flags & LMI_WX_CHILD_DOCUMENT)
+ {
+ is_phony_ = true;
+ has_view_been_created = ViewEx::DoOnCreate(doc, flags);
+ return has_view_been_created;
+ }
+
+ if(oe_mvc_dv_cancelled == edit_parameters())
+ {
+ return has_view_been_created;
+ }
+
has_view_been_created = ViewEx::DoOnCreate(doc, flags);
- return has_view_been_created;
- }
+ if(!has_view_been_created)
+ {
+ return has_view_been_created;
+ }
- if(oe_mvc_dv_cancelled == edit_parameters())
- {
- return has_view_been_created;
+ Run();
}
-
- has_view_been_created = ViewEx::DoOnCreate(doc, flags);
- if(!has_view_been_created)
+ catch(...)
{
- return has_view_been_created;
+ report_exception();
}
- Run();
-
return has_view_been_created;
}