diff libgui/src/terminal-dock-widget.cc @ 29787:b4d2fa28d1d4

allow terminal window to be opened from command line * command-widget.h, command-widget.cc (command_widget::update_prompt): New slot. (command_widget::insert_interpreter_output): Now public. (command_widget::command_widget): Don't connect to signals from parent object here. * octave-qobject.h, octave-qobject.cc (base_qobject::m_terminal_widget): New data member. (base_qobject::terminal_widget): New function. Make (command_widget, QTerminal)/base_qobject signal/slot connections here instead of in main_window constructor. (base_qobject::show_terminal_window): New slot. (base_qobject::base_qobject): Connect qt_interpreter_events::show_terminal_window_signal to base_qobject::show_terminal_window slot. (base_qobject::~base_qobject): Close and delete terminal widget. * main-window.h, main-window.cc (main_window::main_window): Acquire m_command_window from base_qobject instead of constructing here. * terminal-dock-widget.cc (terminal_dock_widget::terminal_dock_widget): Make dock widget/terminal widget signal/slot connections here instead of in main window constructor. Call make_window if parent object is nullptr. * event-manager.h, event-manager.cc (F__event_manager_show_terminal_window__): New function. (interpreter_events::show_terminal_window): New virtual function. (event_manager::show_terminal_window): New function. * qt-interpreter-events.h, qt-interpreter-events.cc (qt_interpreter_events::show_terminal_window): New signal (qt_interpreter_events::show_terminal_window): New function.
author John W. Eaton <jwe@octave.org>
date Sat, 19 Jun 2021 14:34:07 -0400
parents 5154c91e0d98
children 796f54d4ddbf
line wrap: on
line diff
--- a/libgui/src/terminal-dock-widget.cc	Sat Jun 19 10:33:37 2021 -0400
+++ b/libgui/src/terminal-dock-widget.cc	Sat Jun 19 14:34:07 2021 -0400
@@ -51,9 +51,34 @@
     // FIXME: we could do this in a better way, but improving it doesn't
     // matter much if we will eventually be removing the old terminal.
     if (m_experimental_terminal_widget)
-      m_terminal = new command_widget (oct_qobj, this);
+      {
+        command_widget *widget = new command_widget (oct_qobj, this);
+
+        connect (this, &terminal_dock_widget::settings_changed,
+                 widget, &command_widget::notice_settings);
+
+        connect (this, &terminal_dock_widget::update_prompt_signal,
+                 widget, &command_widget::update_prompt);
+
+        connect (this, &terminal_dock_widget::interpreter_output_signal,
+                 widget, &command_widget::insert_interpreter_output);
+
+        m_terminal = widget;
+      }
     else
-      m_terminal = QTerminal::create (oct_qobj, this);
+      {
+        QTerminal *widget = QTerminal::create (oct_qobj, this);
+
+        connect (this, &terminal_dock_widget::settings_changed,
+                 widget, &QTerminal::notice_settings);
+
+        // Connect the visibility signal to the terminal for
+        // dis-/enabling timers.
+        connect (this, &terminal_dock_widget::visibilityChanged,
+                 widget, &QTerminal::handle_visibility_changed);
+
+        m_terminal = widget;
+      }
 
     m_terminal->setObjectName ("OctaveTerminal");
     m_terminal->setFocusPolicy (Qt::StrongFocus);
@@ -91,6 +116,9 @@
       win_y = max_y;
 
     setGeometry (0, 0, win_x, win_y);
+
+    if (! p)
+      make_window ();
   }
 
   bool terminal_dock_widget::has_focus (void) const