Mercurial > octave
changeset 27697:5e8891dceec7
backout changesets cdb681adc85a and b3401292e101 (bug #56952)
Oops. These are probably not the proper changes to fix the
crash-on-exit problem reported in bug #56952.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 15 Nov 2019 18:06:28 -0500 |
parents | cf231bc5876f |
children | f65b1666e650 |
files | libgui/src/interpreter-qobject.cc libgui/src/interpreter-qobject.h libgui/src/module.mk |
diffstat | 3 files changed, 12 insertions(+), 92 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/interpreter-qobject.cc Fri Nov 15 20:38:21 2019 +0100 +++ b/libgui/src/interpreter-qobject.cc Fri Nov 15 18:06:28 2019 -0500 @@ -25,29 +25,19 @@ # include "config.h" #endif -#include <QApplication> -#include <QMetaType> -#include <QThread> - -#include "QtHandlesUtils.h" #include "interpreter-qobject.h" #include "octave-qobject.h" #include "qt-application.h" -#include "qt-graphics-toolkit.h" #include "qt-interpreter-events.h" -#include "unwind-prot.h" - -#include "graphics.h" -#include "gtk-manager.h" +#include "graphics-init.h" #include "input.h" #include "interpreter.h" namespace octave { interpreter_qobject::interpreter_qobject (base_qobject& oct_qobj) - : QObject (), m_octave_qobj (oct_qobj), m_interpreter (nullptr), - m_graphics_toolkit (nullptr) + : QObject (), m_octave_qobj (oct_qobj), m_interpreter (nullptr) { } void interpreter_qobject::execute (void) @@ -56,9 +46,6 @@ qt_application& app_context = m_octave_qobj.app_context (); - // The application context will own the interpreter. It is - // responsible for cleaning it up when the application exits. - interpreter& interp = app_context.create_interpreter (); event_manager& evmgr = interp.get_event_manager (); @@ -84,22 +71,14 @@ if (interp.initialized ()) { - // The interpreter should be completely ready at this point - // so let the GUI know. + // The interpreter should be completely ready at this point so let + // the GUI know. m_interpreter = &interp; emit octave_ready_signal (); - graphics_init (); - - // We created the Qt graphics toolkit and interperter here. - // Disable and delete it when the interpreter is done - // executing commands for us. Use an unwind_action to - // ensure that it is disabled and deleted even if we exit - // this code block becuase an exception is thrown. - - unwind_action ([this] (void) { graphics_fini (); }); + graphics_init (interp, m_octave_qobj); // Start executing commands in the command window. @@ -115,65 +94,12 @@ m_interpreter = nullptr; - emit octave_finished_signal (exit_status); - } - - interpreter_qobject::~interpreter_qobject (void) - { - delete m_graphics_toolkit; - } - - void interpreter_qobject::graphics_init (void) - { -#if defined (HAVE_QT_GRAPHICS) - - if (! m_interpreter) - return; - - gh_manager& gh_mgr = m_interpreter->get_gh_manager (); - - autolock guard (gh_mgr.graphics_lock ()); - - qRegisterMetaType<graphics_object> ("graphics_object"); - - gh_mgr.enable_event_processing (true); - - QtHandles::qt_graphics_toolkit *qt_gtk - = new QtHandles::qt_graphics_toolkit (*m_interpreter, m_octave_qobj); - - if (QThread::currentThread () - != QApplication::instance ()->thread ()) - qt_gtk->moveToThread (QApplication::instance ()->thread ()); + // Whether or not initialization succeeds we need to clean up the + // interpreter once we are done with it. - m_graphics_toolkit = new graphics_toolkit (qt_gtk); - - octave::gtk_manager& gtk_mgr = m_interpreter->get_gtk_manager (); - - gtk_mgr.register_toolkit ("qt"); - - gtk_mgr.load_toolkit (*m_graphics_toolkit); - -#endif - } - - void interpreter_qobject::graphics_fini (void) - { -#if defined (HAVE_QT_GRAPHICS) + app_context.delete_interpreter (); - if (! m_interpreter) - return; - - octave::gtk_manager& gtk_mgr = m_interpreter->get_gtk_manager (); - - gtk_mgr.unregister_toolkit ("qt"); - - gtk_mgr.unload_toolkit ("qt"); - - delete m_graphics_toolkit; - - m_graphics_toolkit = nullptr; - -#endif + emit octave_finished_signal (exit_status); } void interpreter_qobject::interpreter_event (const fcn_callback& fcn)
--- a/libgui/src/interpreter-qobject.h Fri Nov 15 20:38:21 2019 +0100 +++ b/libgui/src/interpreter-qobject.h Fri Nov 15 18:06:28 2019 -0500 @@ -28,8 +28,6 @@ #include "qt-interpreter-events.h" -class graphics_toolkit; - namespace octave { class interpreter; @@ -44,11 +42,7 @@ interpreter_qobject (base_qobject& oct_qobj); - ~interpreter_qobject (void); - - void graphics_init (void); - - void graphics_fini (void); + ~interpreter_qobject (void) = default; qt_interpreter_events * qt_link (void); @@ -91,8 +85,6 @@ base_qobject& m_octave_qobj; interpreter *m_interpreter; - - graphics_toolkit *m_graphics_toolkit; }; }
--- a/libgui/src/module.mk Fri Nov 15 20:38:21 2019 +0100 +++ b/libgui/src/module.mk Fri Nov 15 18:06:28 2019 -0500 @@ -204,6 +204,7 @@ %reldir%/gui-settings.h \ %reldir%/external-editor-interface.h \ %reldir%/files-dock-widget.h \ + %reldir%/graphics-init.h \ %reldir%/history-dock-widget.h \ %reldir%/interpreter-qobject.h \ %reldir%/m-editor/file-editor-interface.h \ @@ -242,6 +243,7 @@ %reldir%/dw-main-window.cc \ %reldir%/external-editor-interface.cc \ %reldir%/files-dock-widget.cc \ + %reldir%/graphics-init.cc \ %reldir%/gui-settings.cc \ %reldir%/history-dock-widget.cc \ %reldir%/interpreter-qobject.cc \