changeset 29219:c2f3a0832cf0

fix possible glitch when interpreter is ready when main window is created * interpreter-qobject.cc (execute): connect ready signal to new slot interpreter_ready, * octave-qobject.cc (base_qobject): initialize new flag m_interpreter_ready, call handle_octave_ready in main_window if interpreter is ready; (interpreter_ready): new slot for signal of interpreter being ready * octave-qobject.h: new slot interpreter_ready, new flag m_interpreter_ready
author Torsten Lilge <ttl-octave@mailbox.org>
date Fri, 25 Dec 2020 17:13:14 +0100
parents 8469b3aad7ac
children ab8aa1bb3c2f
files libgui/src/interpreter-qobject.cc libgui/src/octave-qobject.cc libgui/src/octave-qobject.h
diffstat 3 files changed, 21 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/interpreter-qobject.cc	Wed Dec 23 11:23:44 2020 +0100
+++ b/libgui/src/interpreter-qobject.cc	Fri Dec 25 17:13:14 2020 +0100
@@ -55,6 +55,9 @@
     evmgr.connect_link (m_octave_qobj.get_qt_interpreter_events ());
     evmgr.enable ();
 
+    connect (this, SIGNAL (ready (void)),
+             &m_octave_qobj, SLOT (interpreter_ready (void)));
+
     int exit_status = 0;
 
     try
--- a/libgui/src/octave-qobject.cc	Wed Dec 23 11:23:44 2020 +0100
+++ b/libgui/src/octave-qobject.cc	Fri Dec 25 17:13:14 2020 +0100
@@ -165,7 +165,7 @@
       m_qt_interpreter_events (new qt_interpreter_events (*this)),
       m_interpreter_qobj (new interpreter_qobject (*this)),
       m_main_thread (new QThread ()), m_gui_app (gui_app),
-      m_main_window (nullptr)
+      m_main_window (nullptr), m_interpreter_ready (false)
   {
     std::string show_gui_msgs =
       sys::env::getenv ("OCTAVE_SHOW_GUI_MESSAGES");
@@ -230,8 +230,8 @@
       {
         m_main_window = new main_window (*this);
 
-        connect (m_interpreter_qobj, SIGNAL (ready (void)),
-                 m_main_window, SLOT (handle_octave_ready (void)));
+        if (m_interpreter_ready)
+          m_main_window->handle_octave_ready ();
 
         connect (qt_link (),
                  SIGNAL (focus_window_signal (const QString&)),
@@ -271,6 +271,17 @@
     string_vector::delete_c_str_vec (m_argv);
   }
 
+  void base_qobject::interpreter_ready (void)
+  {
+    // Slot for signal of interpreter being ready.
+    // If main window already exists, call initialization,
+    // otherwise store interpreter state
+    if (m_main_window)
+      m_main_window->handle_octave_ready ();
+    else
+      m_interpreter_ready = true;
+  }
+
   void base_qobject::config_translators (void)
   {
     if (m_translators_installed)
--- a/libgui/src/octave-qobject.h	Wed Dec 23 11:23:44 2020 +0100
+++ b/libgui/src/octave-qobject.h	Fri Dec 25 17:13:14 2020 +0100
@@ -142,6 +142,8 @@
 
   public slots:
 
+    void interpreter_ready (void);
+
     void handle_interpreter_execution_finished (int);
 
     void handle_interpreter_shutdown_finished (int);
@@ -185,6 +187,8 @@
     bool m_gui_app;
 
     main_window *m_main_window;
+
+    bool m_interpreter_ready;
   };
 }