changeset 68992:dccdda472b02

(gud-speedbar-buttons): Update properly for shadow face. Don't provide binding to edit variable when it is out of scope.
author Nick Roberts <nickrob@snap.net.nz>
date Sat, 18 Feb 2006 22:57:05 +0000
parents f648ed5b429a
children 3d9e09ba3ace
files lisp/progmodes/gud.el
diffstat 1 files changed, 36 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/gud.el	Sat Feb 18 22:55:09 2006 +0000
+++ b/lisp/progmodes/gud.el	Sat Feb 18 22:57:05 2006 +0000
@@ -453,46 +453,55 @@
 	  (insert "Watch Expressions:\n")
 	  (if gdb-speedbar-auto-raise
 	      (raise-frame speedbar-frame))
-	  (let ((var-list gdb-var-list))
+	  (let ((var-list gdb-var-list) parent)
 	    (while var-list
-	      (let* (char (depth 0) (start 0)
-		     (var (car var-list)) (varnum (nth 1 var)))
+	      (let* (char (depth 0) (start 0) (var (car var-list))
+			  (varnum (nth 1 var)) (status (nth 5 var)))
 		(while (string-match "\\." varnum start)
 		  (setq depth (1+ depth)
 			start (1+ (match-beginning 0))))
+		(if (eq depth 0) (setq parent nil))
 		(if (or (equal (nth 2 var) "0")
 			(and (equal (nth 2 var) "1")
 			     (string-match "char \\*$" (nth 3 var))))
-		    (speedbar-make-tag-line 'bracket ?? nil nil
-					    (concat (car var) "\t" (nth 4 var))
-					    'gdb-edit-value
-					    nil
-		       (if gdb-show-changed-values
-			   (case (nth 5 var)
-				 (changed 'font-lock-warning-face)
-				 (out-of-scope 'shadow)
-				 (nil nil))
-			 nil) depth)
+		    (speedbar-make-tag-line
+		     'bracket ?? nil nil
+		     (concat (car var) "\t" (nth 4 var))
+		     (if (or parent (eq status 'out-of-scope))
+			 nil 'gdb-edit-value)
+		     nil
+		     (if gdb-show-changed-values
+			 (or parent (case status
+				      (changed 'font-lock-warning-face)
+				      (out-of-scope 'shadow)
+				      (nil nil)))
+		       nil) depth)
+		  (if (eq status 'out-of-scope) (setq parent 'shadow))
 		  (if (and (cadr var-list)
 			   (string-match (concat varnum "\\.")
 					 (cadr (cadr var-list))))
 		      (setq char ?-)
 		    (setq char ?+))
 		  (if (string-match "\\*$" (nth 3 var))
-		      (speedbar-make-tag-line 'bracket char
-					      'gdb-speedbar-expand-node varnum
-					      (concat (car var) "\t"
-						      (nth 3 var)"\t"
-						      (nth 4 var))
-					      'gdb-edit-value nil
-					      (if (and (nth 5 var)
-						       gdb-show-changed-values)
-						  'font-lock-warning-face
-						nil) depth)
-		  (speedbar-make-tag-line 'bracket char
-					  'gdb-speedbar-expand-node varnum
-					  (concat (car var) "\t" (nth 3 var))
-					  nil nil nil depth))))
+		      (speedbar-make-tag-line
+		       'bracket char
+		       'gdb-speedbar-expand-node varnum
+		       (concat (car var) "\t"
+			       (nth 3 var)"\t"
+			       (nth 4 var))
+		       (if (or parent status 'out-of-scope)
+			 nil 'gdb-edit-value)
+		       nil
+		       (if (and status gdb-show-changed-values)
+			   'shadow nil)
+		       depth)
+		    (speedbar-make-tag-line
+		     'bracket char
+		     'gdb-speedbar-expand-node varnum
+		     (concat (car var) "\t" (nth 3 var))
+		     nil nil
+		     (if (and (nth 5 var) gdb-show-changed-values) 'shadow nil)
+		     depth))))
 	      (setq var-list (cdr var-list))))
 	  (setq gdb-var-changed nil)))
        (t (unless (and (save-excursion