changeset 16438:a971d8bdaadc

use signals instead of event queue for entering/leaving debug mode * file-editor-interface.h (file_editor_interface::handle_enter_debug_mode): Rename from file_editor_interface::handle_entered_debug_mode. Change all uses. (file_editor_interface::handle_exit_debug_mode): Rename from file_editor_interface::handle_quit_debug_mode. Change all uses. * file_editor.h, file_editor.cc (file_editor::handle_enter_debug_mode): Rename from file_editor::handle_entered_debug_mode. Change all uses. (file_editor::handle_exit_debug_mode): Rename from file_editor::handle_quit_debug_mode. Change all uses. * main-window.h, main-window.cc (main_window::handle_enter_debugger): Rename from main_window::handle_entered_debug_mode. Change all uses. (main_window::handle_exit_debugger): Rename from main_window::handle_quit_debug_mode. Change all uses. (main_window::construct): Delete signal connection from _octave_qt_event_listener::entered_debug_mode_signal to main_window::handle_entered_debug_mode. Delete signal connection from _octave_qt_event_listener::quit_debug_mode_signal to main_window::handle_quit_debug_mode. Connect _octave_qt_link::enter_debugger_signal signal to main_window::handle_enter_debugger. Connect _octave_qt_link::exit_debugger_signal signal to main_window::handle_exit_debugger. * octave-qt-event-listener.h, octave-qt-event-listener.cc (octave_qt_event_listener::entered_debug_mode, octave_qt_event_listener::quit_debug_mode): Delete. (octave_qt_event_listener::entered_debug_mode_signal, octave_qt_event_listener::quit_debug_mode_signal): Delete signals. * octave-qt-link.h, octave-qt-link.cc (octave_qt_link::do_enter_debugger_event): Emit enter_debugger_signal. (octave_qt_link::do_execute_in_debugger_event): New function. (octave_qt_link::do_exit_debugger_event): Emit exit_debugger_signal. (octave_qt_link::enter_debugger_signal, octave_qt_link::exit_debugger_signal): New signals. * octave-event-listener.h (octave_event_listener::entered_debug_mode, octave_event_listener::quit_debug_mode): Delete. * input.cc (octave_base_reader::octave_gets): Call octave_link::exit_debugger_event if not debugging. (execute_in_debugger_handler): Rename from exit_debugger_handler. Change all uses. Call octave_link::execute_in_debugger_event instead of octave_link::exit_debugger_event. * octave-link.h, octave-link.cc (octave_link::do_generate_events): Don't call debugging mode functions here. (octave_link::enter_debugger_event): Set instance->debugging to true. (octave_link::execute_in_debugger_event): New function. (octave_link::exit_debugger_event): Don't do anything unless instance->debugging is true. Toggle instance->debugging.
author John W. Eaton <jwe@octave.org>
date Fri, 05 Apr 2013 03:04:56 -0400
parents 919796a440c6
children 7762d56dbc8a
files libgui/src/m-editor/file-editor-interface.h libgui/src/m-editor/file-editor.cc libgui/src/m-editor/file-editor.h libgui/src/main-window.cc libgui/src/main-window.h libgui/src/octave-qt-event-listener.cc libgui/src/octave-qt-event-listener.h libgui/src/octave-qt-link.cc libgui/src/octave-qt-link.h libinterp/interp-core/octave-event-listener.h libinterp/interpfcn/input.cc libinterp/interpfcn/octave-link.cc libinterp/interpfcn/octave-link.h
diffstat 13 files changed, 64 insertions(+), 61 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/m-editor/file-editor-interface.h	Fri Apr 05 00:40:12 2013 -0400
+++ b/libgui/src/m-editor/file-editor-interface.h	Fri Apr 05 03:04:56 2013 -0400
@@ -44,8 +44,8 @@
   virtual QMenu *debug_menu () = 0;
   virtual QToolBar *toolbar () = 0;
 
-  virtual void handle_entered_debug_mode () = 0;
-  virtual void handle_quit_debug_mode () = 0;
+  virtual void handle_enter_debug_mode (void) = 0;
+  virtual void handle_exit_debug_mode (void) = 0;
 
   virtual void
   handle_insert_debugger_pointer_request (const QString& file, int line) = 0;
--- a/libgui/src/m-editor/file-editor.cc	Fri Apr 05 00:40:12 2013 -0400
+++ b/libgui/src/m-editor/file-editor.cc	Fri Apr 05 03:04:56 2013 -0400
@@ -100,13 +100,13 @@
 }
 
 void
-file_editor::handle_entered_debug_mode ()
+file_editor::handle_enter_debug_mode (void)
 {
   _run_action->setEnabled (false);
 }
 
 void
-file_editor::handle_quit_debug_mode ()
+file_editor::handle_exit_debug_mode (void)
 {
   _run_action->setEnabled (true);
 }
--- a/libgui/src/m-editor/file-editor.h	Fri Apr 05 00:40:12 2013 -0400
+++ b/libgui/src/m-editor/file-editor.h	Fri Apr 05 03:04:56 2013 -0400
@@ -57,8 +57,8 @@
   QToolBar *        toolbar ();
 
   void set_focus ();
-  void handle_entered_debug_mode ();
-  void handle_quit_debug_mode ();
+  void handle_enter_debug_mode (void);
+  void handle_exit_debug_mode (void);
 
 signals:
   void fetab_settings_changed (const QSettings *settings);
--- a/libgui/src/main-window.cc	Fri Apr 05 00:40:12 2013 -0400
+++ b/libgui/src/main-window.cc	Fri Apr 05 03:04:56 2013 -0400
@@ -476,30 +476,34 @@
 }
 
 void
-main_window::handle_entered_debug_mode ()
+main_window::handle_enter_debugger (void)
 {
   setWindowTitle ("Octave (Debugging)");
+
   _debug_continue->setEnabled (true);
   _debug_step_into->setEnabled (true);
   _debug_step_over->setEnabled (true);
   _debug_step_out->setEnabled (true);
   _debug_quit->setEnabled (true);
+
 #ifdef HAVE_QSCINTILLA
-  _file_editor->handle_entered_debug_mode ();
+  _file_editor->handle_enter_debug_mode ();
 #endif
 }
 
 void
-main_window::handle_quit_debug_mode ()
+main_window::handle_exit_debugger (void)
 {
   setWindowTitle ("Octave");
+
   _debug_continue->setEnabled (false);
   _debug_step_into->setEnabled (false);
   _debug_step_over->setEnabled (false);
   _debug_step_out->setEnabled (false);
   _debug_quit->setEnabled (false);
+
 #ifdef HAVE_QSCINTILLA
-  _file_editor->handle_quit_debug_mode ();
+  _file_editor->handle_exit_debug_mode ();
 #endif
 }
 
@@ -1148,16 +1152,6 @@
            this,
            SLOT (update_workspace ()));
 
-  connect (_octave_qt_event_listener,
-           SIGNAL (entered_debug_mode_signal ()),
-           this,
-           SLOT(handle_entered_debug_mode ()));
-
-  connect (_octave_qt_event_listener,
-           SIGNAL (quit_debug_mode_signal ()),
-           this,
-           SLOT (handle_quit_debug_mode ()));
-
   // FIXME -- is it possible to eliminate the event_listenter?
 
   _octave_qt_link = new octave_qt_link ();
@@ -1177,6 +1171,12 @@
            SIGNAL (clear_history_signal (void)),
            _history_dock_widget, SLOT (clear_history (void)));
 
+  connect (_octave_qt_link, SIGNAL (enter_debugger_signal ()),
+           this, SLOT (handle_enter_debugger ()));
+
+  connect (_octave_qt_link, SIGNAL (exit_debugger_signal ()),
+           this, SLOT (handle_exit_debugger ()));
+
   connect (_octave_qt_link,
            SIGNAL (update_dbstop_marker_signal (bool, const QString&, int)),
            _file_editor,
--- a/libgui/src/main-window.h	Fri Apr 05 00:40:12 2013 -0400
+++ b/libgui/src/main-window.h	Fri Apr 05 03:04:56 2013 -0400
@@ -106,8 +106,8 @@
   void handle_editor_visible (bool);
   void handle_documentation_visible (bool);
 
-  void handle_entered_debug_mode ();
-  void handle_quit_debug_mode ();
+  void handle_enter_debugger (void);
+  void handle_exit_debugger (void);
   void debug_continue ();
   void debug_step_into ();
   void debug_step_over ();
--- a/libgui/src/octave-qt-event-listener.cc	Fri Apr 05 00:40:12 2013 -0400
+++ b/libgui/src/octave-qt-event-listener.cc	Fri Apr 05 03:04:56 2013 -0400
@@ -52,12 +52,3 @@
 {
   qApp->quit ();
 }
-
-void
-octave_qt_event_listener::entered_debug_mode ()
-{ emit entered_debug_mode_signal (); }
-
-void
-octave_qt_event_listener::quit_debug_mode ()
-{ emit quit_debug_mode_signal (); }
-
--- a/libgui/src/octave-qt-event-listener.h	Fri Apr 05 00:40:12 2013 -0400
+++ b/libgui/src/octave-qt-event-listener.h	Fri Apr 05 03:04:56 2013 -0400
@@ -38,14 +38,9 @@
   void update_workspace (void);
   void about_to_exit ();
 
-  void entered_debug_mode ();
-  void quit_debug_mode ();
-
 signals:
   void current_directory_has_changed_signal (const QString& directory);
   void update_workspace_signal (void);
-  void entered_debug_mode_signal ();
-  void quit_debug_mode_signal ();
 };
 
 #endif // OCTAVEQTEVENTLISTENER_H
--- a/libgui/src/octave-qt-link.cc	Fri Apr 05 00:40:12 2013 -0400
+++ b/libgui/src/octave-qt-link.cc	Fri Apr 05 03:04:56 2013 -0400
@@ -98,15 +98,23 @@
 octave_qt_link::do_enter_debugger_event (const std::string& file, int line)
 {
   do_insert_debugger_pointer (file, line);
+
+  emit enter_debugger_signal ();
 }
 
 void
-octave_qt_link::do_exit_debugger_event (const std::string& file, int line)
+octave_qt_link::do_execute_in_debugger_event (const std::string& file, int line)
 {
   do_delete_debugger_pointer (file, line);
 }
 
 void
+octave_qt_link::do_exit_debugger_event (void)
+{
+  emit exit_debugger_signal ();
+}
+
+void
 octave_qt_link::do_update_breakpoint (bool insert,
                                       const std::string& file, int line)
 {
--- a/libgui/src/octave-qt-link.h	Fri Apr 05 00:40:12 2013 -0400
+++ b/libgui/src/octave-qt-link.h	Fri Apr 05 03:04:56 2013 -0400
@@ -65,7 +65,8 @@
   void do_post_input_event (void);
 
   void do_enter_debugger_event (const std::string& file, int line);
-  void do_exit_debugger_event (const std::string& file, int line);
+  void do_execute_in_debugger_event (const std::string& file, int line);
+  void do_exit_debugger_event (void);
 
   void do_update_breakpoint (bool insert, const std::string& file, int line);
 
@@ -94,6 +95,9 @@
   void append_history_signal (const QString& hist_entry);
   void clear_history_signal (void);
 
+  void enter_debugger_signal (void);
+  void exit_debugger_signal (void);
+
   void update_dbstop_marker_signal (bool insert, const QString& file, int line);
 
   void edit_file_signal (const QString& file);
--- a/libinterp/interp-core/octave-event-listener.h	Fri Apr 05 00:40:12 2013 -0400
+++ b/libinterp/interp-core/octave-event-listener.h	Fri Apr 05 03:04:56 2013 -0400
@@ -35,9 +35,6 @@
     update_workspace (void) = 0;
 
     virtual void about_to_exit () = 0;
-
-    virtual void entered_debug_mode () = 0;
-    virtual void quit_debug_mode () = 0;
 };
 
 #endif // OCTAVEEVENTLISTENER_H
--- a/libinterp/interpfcn/input.cc	Fri Apr 05 00:40:12 2013 -0400
+++ b/libinterp/interpfcn/input.cc	Fri Apr 05 03:04:56 2013 -0400
@@ -212,7 +212,12 @@
   // printing the prompt.
 
   if (interactive || forced_interactive)
-    octave_link::pre_input_event ();
+    {
+      if (! Vdebugging)
+        octave_link::exit_debugger_event ();
+
+      octave_link::pre_input_event ();
+    }
 
   bool history_skip_auto_repeated_debugging_command = false;
 
@@ -460,9 +465,9 @@
 }
 
 static void
-exit_debugger_handler (const std::pair<std::string, int>& arg)
+execute_in_debugger_handler (const std::pair<std::string, int>& arg)
 {
-  octave_link::exit_debugger_event (arg.first, arg.second);
+  octave_link::execute_in_debugger_event (arg.first, arg.second);
 }
 
 static void
@@ -514,7 +519,7 @@
             {
               octave_link::enter_debugger_event (nm, curr_debug_line);
 
-              frame.add_fcn (exit_debugger_handler,
+              frame.add_fcn (execute_in_debugger_handler,
                              std::pair<std::string, int> (nm, curr_debug_line));
 
               std::string line_buf
--- a/libinterp/interpfcn/octave-link.cc	Fri Apr 05 00:40:12 2013 -0400
+++ b/libinterp/interpfcn/octave-link.cc	Fri Apr 05 03:04:56 2013 -0400
@@ -86,18 +86,6 @@
 void
 octave_link::do_generate_events (void)
 {
-  if (debugging != Vdebugging)
-    {
-      debugging = Vdebugging;
-
-      if (event_listener)
-        {
-          if (debugging)
-            event_listener->entered_debug_mode ();
-          else
-            event_listener->quit_debug_mode ();
-        }
-    }
 }
 
 void
--- a/libinterp/interpfcn/octave-link.h	Fri Apr 05 00:40:12 2013 -0400
+++ b/libinterp/interpfcn/octave-link.h	Fri Apr 05 03:04:56 2013 -0400
@@ -153,13 +153,27 @@
   static void enter_debugger_event (const std::string& file, int line)
   {
     if (instance_ok ())
-      instance->do_enter_debugger_event (file, line);
+      {
+        instance->debugging = true;
+
+        instance->do_enter_debugger_event (file, line);
+      }
   }
 
-  static void exit_debugger_event (const std::string& file, int line)
+  static void execute_in_debugger_event (const std::string& file, int line)
   {
     if (instance_ok ())
-      instance->do_exit_debugger_event (file, line);
+      instance->do_execute_in_debugger_event (file, line);
+  }
+
+  static void exit_debugger_event (void)
+  {
+    if (instance_ok () && instance->debugging)
+      {
+        instance->debugging = false;
+
+        instance->do_exit_debugger_event ();
+      }
   }
 
   static void
@@ -243,7 +257,8 @@
   virtual void do_post_input_event (void) = 0;
 
   virtual void do_enter_debugger_event (const std::string& file, int line) = 0;
-  virtual void do_exit_debugger_event (const std::string& file, int line) = 0;
+  virtual void do_execute_in_debugger_event (const std::string& file, int line) = 0;
+  virtual void do_exit_debugger_event (void) = 0;
 
   virtual void do_update_breakpoint (bool insert,
                                      const std::string& file, int line) = 0;