changeset 104211:c911628739b9

(gdb-control-all-threads) (gdb-control-current-thread): Interactive setters for `gdb-gud-control-all-threads' to use in menu. (gdb-show-run-p): Show ?Go? when process is not active. (gud-tool-bar-map): Add non-stop/A,T indicator. Uses gud/thread.xpm and gud/all.xpm.
author Dmitry Dzhus <dima@sphinx.net.ru>
date Sat, 08 Aug 2009 22:30:26 +0000
parents 9a7c820f16a3
children 28307c643e9f
files lisp/ChangeLog lisp/progmodes/gdb-mi.el
diffstat 2 files changed, 45 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sat Aug 08 22:17:05 2009 +0000
+++ b/lisp/ChangeLog	Sat Aug 08 22:30:26 2009 +0000
@@ -1,3 +1,12 @@
+2009-08-08  Dmitry Dzhus  <dima@sphinx.net.ru>
+
+	* progmodes/gdb-mi.el (gdb-control-all-threads)
+	(gdb-control-current-thread): Interactive setters for
+	`gdb-gud-control-all-threads' to use in menu.
+	(gdb-show-run-p): Show «Go» when process is not active.
+	(gud-tool-bar-map): Add non-stop/A,T indicator. Uses
+	gud/thread.xpm and gud/all.xpm.
+
 2009-08-08  Yoni Rabkin  <yoni@rabkins.net>
 
 	* net/net-utils.el (net-utils-font-lock-keywords): New var.
--- a/lisp/progmodes/gdb-mi.el	Sat Aug 08 22:17:05 2009 +0000
+++ b/lisp/progmodes/gdb-mi.el	Sat Aug 08 22:30:26 2009 +0000
@@ -519,6 +519,19 @@
   (message (format "Logging of transaction %sabled"
 		   (if gdb-enable-debug "en" "dis"))))
 
+;; These two are used for menu and toolbar
+(defun gdb-control-all-threads ()
+  "Switch to non-stop/A mode."
+  (interactive)
+  (setq gdb-gud-control-all-threads t)
+  (message "Now in non-stop/A mode."))
+
+(defun gdb-control-current-thread ()
+  "Switch to non-stop/T mode."
+  (interactive)
+  (setq gdb-gud-control-all-threads nil)
+  (message "Now in non-stop/T mode."))
+
 (defun gdb-find-watch-expression ()
   (let* ((var (nth (- (line-number-at-pos (point)) 2) gdb-var-list))
 	 (varnum (car var)) expr array)
@@ -1669,7 +1682,8 @@
 
 (defun gdb-show-run-p ()
   "Return t if \"Run/continue\" should be shown on the toolbar."
-  (or (and (or
+  (or (not gdb-active-process)
+      (and (or
             (not gdb-gud-control-all-threads)
             (not gdb-non-stop))
            (not gud-running))
@@ -3824,6 +3838,27 @@
   (define-key gud-menu-map [mi]
     `(menu-item "GDB-MI" ,menu :visible (eq gud-minor-mode 'gdbmi))))
 
+;; TODO Fit these into tool-bar-local-item-from-menu call in gud.el.
+;; GDB-MI menu will need to be moved to gud.el. We can't use
+;; tool-bar-local-item-from-menu here because it appends new buttons
+;; to toolbar from right to left while we want our A/T throttle to
+;; show up right before Run button.
+(define-key-after gud-tool-bar-map [all-threads]
+  '(menu-item "Switch to non-stop/A mode" gdb-control-all-threads
+              :image (find-image '((:type xpm :file "gud/thread.xpm")))
+              :visible (and (eq gud-minor-mode 'gdbmi)
+                            gdb-non-stop
+                            (not gdb-gud-control-all-threads)))
+  'run)
+
+(define-key-after gud-tool-bar-map [current-thread]
+  '(menu-item "Switch to non-stop/T mode" gdb-control-current-thread
+              :image (find-image '((:type xpm :file "gud/all.xpm")))
+              :visible (and (eq gud-minor-mode 'gdbmi)
+                            gdb-non-stop
+                            gdb-gud-control-all-threads))
+  'all-threads)
+
 (defun gdb-frame-gdb-buffer ()
   "Display GUD buffer in a new frame."
   (interactive)