changeset 16421:40d1ddca4db5

improve use of octave_link * octave-link.h, octave-link.cc (octave_link::connect_link): Rename from octave_link::connect. Change all uses. Allow link to be disconnected. Don't add object to singleton_cleanup_list. * main-window.h, main-window.cc (main_window::_octave_qt_link): New data member. (main_window::construct): Initialize it. (main_window::~main_window): Disconnect octave_link and delete _octave_qt_link.
author John W. Eaton <jwe@octave.org>
date Wed, 03 Apr 2013 23:35:33 -0400
parents 81ec95768520
children 436f6e0e4268
files libgui/src/main-window.cc libgui/src/main-window.h libinterp/interpfcn/octave-link.cc libinterp/interpfcn/octave-link.h
diffstat 4 files changed, 15 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/main-window.cc	Wed Apr 03 23:16:37 2013 -0400
+++ b/libgui/src/main-window.cc	Wed Apr 03 23:35:33 2013 -0400
@@ -42,7 +42,6 @@
 #include "file-editor.h"
 #endif
 #include "main-window.h"
-#include "octave-qt-link.h"
 #include "settings-dialog.h"
 
 #include "builtins.h"
@@ -71,6 +70,9 @@
   if (_octave_qt_event_listener)
     delete _octave_qt_event_listener;
 
+  octave_link::connect_link (0);
+  delete _octave_qt_link;
+
 #ifdef HAVE_QSCINTILLA
   if (_file_editor)
     delete _file_editor;
@@ -1210,7 +1212,9 @@
 
   // FIXME -- is it possible to eliminate the event_listenter?
 
-  octave_link::connect (new octave_qt_link ());
+  _octave_qt_link = new octave_qt_link ();
+
+  octave_link::connect_link (_octave_qt_link);
 
   octave_link::register_event_listener (_octave_qt_event_listener);
 }
--- a/libgui/src/main-window.h	Wed Apr 03 23:16:37 2013 -0400
+++ b/libgui/src/main-window.h	Wed Apr 03 23:35:33 2013 -0400
@@ -50,6 +50,7 @@
 #include "terminal-dockwidget.h"
 #include "documentation-dockwidget.h"
 #include "octave-qt-event-listener.h"
+#include "octave-qt-link.h"
 
 /**
  * \class MainWindow
@@ -178,6 +179,8 @@
 
   octave_qt_event_listener *_octave_qt_event_listener;
 
+  octave_qt_link *_octave_qt_link;
+
   // Flag for closing whole application
   bool                      _closing;
 };
--- a/libinterp/interpfcn/octave-link.cc	Wed Apr 03 23:16:37 2013 -0400
+++ b/libinterp/interpfcn/octave-link.cc	Wed Apr 03 23:35:33 2013 -0400
@@ -64,18 +64,17 @@
   octave_exit = octave_exit_hook;
 }
 
-// OBJ should be a new object of a class that is derived from
-// the base class octave_link.  It will be cleaned up by octave_link.
+// OBJ should be an object of a class that is derived from the base
+// class octave_link, or 0 to disconnect the link.  It is the
+// responsibility of the caller to delete obj.
 
 void
-octave_link::connect (octave_link* obj)
+octave_link::connect_link (octave_link* obj)
 {
-  if (instance)
+  if (obj && instance)
     ::error ("octave_link is already linked!");
   else
     instance = obj;
-
-  singleton_cleanup_list::add (cleanup_instance);
 }
 
 void
--- a/libinterp/interpfcn/octave-link.h	Wed Apr 03 23:16:37 2013 -0400
+++ b/libinterp/interpfcn/octave-link.h	Wed Apr 03 23:35:33 2013 -0400
@@ -162,7 +162,7 @@
     return instance_ok () ? instance->do_edit_file (file) : false;
   }
 
-  static void connect (octave_link *);
+  static void connect_link (octave_link *);
 
 private: