[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()