lmi-commits
[Top][All Lists]
Advanced

[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;
 }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]