diff libgui/src/main-window.cc @ 16570:d5ae5aa80d42

preserve pending command line input when running commands from GUI actions * QTerminal.h, QTerminal.cc (QTerminal::relay_command): Delete. * file-editor-tab.cc (file_editor_tab::run_file_callback): New argument, bp_info. Save pending command line input and execute command. (file_editor_tab::run_file): Use octave_link to execute file. * main-window.h, main-window.cc (main_window::execute_command_in_terminal): Rename from main_window::handle_command_double_clicked. Post event through octave_link to execute command. (main_window::construct_octave_qt_link): Connect _octave_qt_link::execute_command_in_terminal_signal to main_window::execute_command_in_terminal. (main_window::execute_command_callback): New function. (main_window::relay_command_signal): Delete signal. Remove all uses. * octave-qt-link.h, octave-qt-link.cc (octave_qt_link::do_execute_command_in_terminal): New function. (octave_qt_link::execute_command_in_terminal_signal): New signal. * terminal-dock-widget.h, terminal-dock-widget.cc (terminal_dock_widget::relay_command_signal): Delete signal. Remove all uses. * octave-link.h (octave_link::execute_command_in_terminal, octave_link::do_execute_command_in_terminal): New functions. * cmd-edit.h, cmd-edit.cc (command_editor::pre_input_hook_set): New variable. (gnu_readline::previous_pre_input_hook, command_editor::intial_input): New member variables. (command_editor::restore_pre_input_hook, command_editor::do_get_current_line, command_editor::do_replace_line, command_editor::set_pre_input_hook, gnu_readline::do_get_current_line, gnu_readline::do_replace_line, gnu_readline::set_pre_input_hook, command_editor::set_initial_input, gnu_readline::restore_pre_input_hook, default_command_editor::do_get_current_line, default_command_editor::do_replace_line, command_editor::insert_initial_input, command_editor::pre_input_handler, command_editor::get_current_line, command_editor::replace_line, command_editor::add_pre_input_hook, command_editor::do_insert_initial_input, command_editor::set_pre_input_hook, command_editor::restore_pre_input_hook): New functions. (command_editor::readline): Handle initial input. (command_editor::interrupt): Give argument a default value. * oct-rl-edit.h, oct-rl-edit.c (octave_rl_copy_line, octave_rl_replace_line, octave_rl_set_pre_input_hook, octave_rl_get_pre_input_hook): New functions. (rl_pre_input_hook_fcn_ptr): New typedef.
author John W. Eaton <jwe@octave.org>
date Thu, 25 Apr 2013 17:57:55 -0400
parents 662a712b8fd5
children 17941fedd4ce
line wrap: on
line diff
--- a/libgui/src/main-window.cc	Thu Apr 25 12:33:09 2013 -0400
+++ b/libgui/src/main-window.cc	Thu Apr 25 17:57:55 2013 -0400
@@ -188,11 +188,12 @@
 }
 
 void
-main_window::handle_command_double_clicked (const QString& command)
+main_window::execute_command_in_terminal (const QString& command)
 {
-  emit relay_command_signal (command);
+  octave_link::post_event (this, &main_window::execute_command_callback,
+                           command.toStdString ());
 
-  command_window->focus ();
+  focus_command_window ();
 }
 
 void
@@ -764,6 +765,10 @@
            this, SLOT (change_directory (QString)));
 
   connect (_octave_qt_link,
+           SIGNAL (execute_command_in_terminal_signal (QString)),
+           this, SLOT (execute_command_in_terminal (QString)));
+
+  connect (_octave_qt_link,
            SIGNAL (set_history_signal (const QStringList&)),
            history_window, SLOT (set_history (const QStringList&)));
 
@@ -1337,6 +1342,21 @@
 }
 
 void
+main_window::execute_command_callback (const std::string& command)
+{
+  std::string pending_input = command_editor::get_current_line ();
+
+  command_editor::set_initial_input (pending_input);
+
+  command_editor::replace_line (command);
+  command_editor::redisplay ();
+
+  // We are executing inside the command editor event loop.  Force
+  // the current line to be returned for processing.
+  command_editor::interrupt ();
+}
+
+void
 main_window::new_figure_callback (void)
 {
   Fbuiltin (ovl ("figure"));