lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] master 9bed27ea 1/2: Revert "Remove unnecessary vari


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 9bed27ea 1/2: Revert "Remove unnecessary variable from IllustrationView::OnCreate()"
Date: Wed, 15 Jun 2022 14:33:56 -0400 (EDT)

branch: master
commit 9bed27eacadc6f450a5ac4fb6c1e78c7bdb2c872
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Revert "Remove unnecessary variable from IllustrationView::OnCreate()"
    
    This reverts commit aeb44f515ffe13bf8ef474a9cfce50c336dabcc4.
    
    The immediately preceding commit 1ea88e72 will be reverted next.
    
    Reproducible test case:
      File | New | Illustration
      delete contents of "Current COI multiplier" [on "Group" tab]
      OK
---
 gpt_view.cpp          | 29 +++++++++++++++++++++--------
 illustration_view.cpp | 14 +++++++++-----
 mec_view.cpp          | 29 +++++++++++++++++++++--------
 3 files changed, 51 insertions(+), 21 deletions(-)

diff --git a/gpt_view.cpp b/gpt_view.cpp
index 0b85fbd0..bff097f1 100644
--- a/gpt_view.cpp
+++ b/gpt_view.cpp
@@ -113,22 +113,35 @@ char const* gpt_view::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 gpt_view::OnCreate(wxDocument* doc, long int flags)
 {
-    if(oe_mvc_dv_cancelled == edit_parameters())
+    bool has_view_been_created = false;
+    try
         {
-        return false;
-        }
+        if(oe_mvc_dv_cancelled == edit_parameters())
+            {
+            return has_view_been_created;
+            }
+
+        has_view_been_created = ViewEx::DoOnCreate(doc, flags);
+        if(!has_view_been_created)
+            {
+            return has_view_been_created;
+            }
 
-    if(!ViewEx::DoOnCreate(doc, flags))
+        Run();
+        }
+    catch(...)
         {
-        return false;
+        report_exception();
         }
 
-    Run();
-
-    return true;
+    return has_view_been_created;
 }
 
 wxPrintout* gpt_view::OnCreatePrintout()
diff --git a/illustration_view.cpp b/illustration_view.cpp
index 36979703..99abb1e0 100644
--- a/illustration_view.cpp
+++ b/illustration_view.cpp
@@ -148,25 +148,29 @@ char const* IllustrationView::menubar_xrc_resource() const
 
 bool IllustrationView::OnCreate(wxDocument* doc, long int flags)
 {
+    bool has_view_been_created = false;
+
     if(flags & LMI_WX_CHILD_DOCUMENT)
         {
         is_phony_ = true;
-        return ViewEx::DoOnCreate(doc, flags);
+        has_view_been_created = ViewEx::DoOnCreate(doc, flags);
+        return has_view_been_created;
         }
 
     if(oe_mvc_dv_cancelled == edit_parameters())
         {
-        return false;
+        return has_view_been_created;
         }
 
-    if(!ViewEx::DoOnCreate(doc, flags))
+    has_view_been_created = ViewEx::DoOnCreate(doc, flags);
+    if(!has_view_been_created)
         {
-        return false;
+        return has_view_been_created;
         }
 
     Run();
 
-    return true;
+    return has_view_been_created;
 }
 
 /// Place full illustration data on the clipboard as TSV.
diff --git a/mec_view.cpp b/mec_view.cpp
index 6932beea..582be30e 100644
--- a/mec_view.cpp
+++ b/mec_view.cpp
@@ -113,22 +113,35 @@ char const* mec_view::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 mec_view::OnCreate(wxDocument* doc, long int flags)
 {
-    if(oe_mvc_dv_cancelled == edit_parameters())
+    bool has_view_been_created = false;
+    try
         {
-        return false;
-        }
+        if(oe_mvc_dv_cancelled == edit_parameters())
+            {
+            return has_view_been_created;
+            }
+
+        has_view_been_created = ViewEx::DoOnCreate(doc, flags);
+        if(!has_view_been_created)
+            {
+            return has_view_been_created;
+            }
 
-    if(!ViewEx::DoOnCreate(doc, flags))
+        Run();
+        }
+    catch(...)
         {
-        return false;
+        report_exception();
         }
 
-    Run();
-
-    return true;
+    return has_view_been_created;
 }
 
 wxPrintout* mec_view::OnCreatePrintout()



reply via email to

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