changeset 14016:8feb25ecddaf

close all graphics toolkits before exit * graphics.h (graphics_toolkit::close_all_toolkits): Move here from graphics.cc. Ensure that the toolkit is closed and deleted properly. * toplev.cc (clean_up_and_exit): Call graphics_toolkit::close_all_toolkits.
author John W. Eaton <jwe@octave.org>
date Thu, 08 Dec 2011 17:22:57 -0500
parents 77adde2e79ac
children 0b94080d2b0f
files src/graphics.cc src/graphics.h.in src/toplev.cc
diffstat 3 files changed, 19 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/graphics.cc	Thu Dec 08 11:01:52 2011 -0500
+++ b/src/graphics.cc	Thu Dec 08 17:22:57 2011 -0500
@@ -2890,19 +2890,6 @@
   return available_toolkits["gnuplot"];
 }
 
-void
-graphics_toolkit::close_all_toolkits (void)
-{
-  while (! available_toolkits.empty ())
-    {
-      available_toolkits_iterator p = available_toolkits.begin ();
-
-      p->second.close ();
-
-      available_toolkits.erase (p);
-    }
-}
-
 std::map<std::string, graphics_toolkit> graphics_toolkit::available_toolkits;
 
 // ---------------------------------------------------------------------
--- a/src/graphics.h.in	Thu Dec 08 11:01:52 2011 -0500
+++ b/src/graphics.h.in	Thu Dec 08 17:22:57 2011 -0500
@@ -2236,8 +2236,6 @@
   // Close the graphics toolkit.
   void close (void) { rep->close (); }
 
-  void close_all_toolkits (void);
-
   OCTINTERP_API static graphics_toolkit default_toolkit (void);
 
   static void register_toolkit (const graphics_toolkit& b)
@@ -2269,6 +2267,23 @@
     return m;
   }
 
+  static void close_all_toolkits (void)
+  {
+    while (! available_toolkits.empty ())
+      {
+        available_toolkits_iterator p = available_toolkits.begin ();
+
+        std::string name = p->first;
+
+        p->second.close ();
+
+        // The toolkit may have unregistered itself.  If not, we'll do
+        // it here.
+        if (available_toolkits.find (name) != available_toolkits.end ())
+          unregister_toolkit (name);
+      }
+  }
+
 private:
   base_graphics_toolkit *rep;
 
--- a/src/toplev.cc	Thu Dec 08 11:01:52 2011 -0500
+++ b/src/toplev.cc	Thu Dec 08 17:22:57 2011 -0500
@@ -671,6 +671,8 @@
 
   OCTAVE_SAFE_CALL (gh_manager::close_all_figures, ());
 
+  OCTAVE_SAFE_CALL (graphics_toolkit::close_all_toolkits, ());
+
   OCTAVE_SAFE_CALL (symbol_table::cleanup, ());
 
   OCTAVE_SAFE_CALL (cleanup_parser, ());