# HG changeset patch # User Dave Love # Date 963761263 0 # Node ID e99b2e89fa59f4aba844921a7f85424f35ce089d # Parent e5763b29928bf78c2da4f708a384d91b4ff1b4f7 (widget-specify-field, widget-specify-button): Allow non-string help-echo. (widget-types-convert-widget): Defsubst it. (widget-echo-help): Try to cope with a help-echo function of two possible sorts. diff -r e5763b29928b -r e99b2e89fa59 lisp/wid-edit.el --- a/lisp/wid-edit.el Sat Jul 15 15:33:46 2000 +0000 +++ b/lisp/wid-edit.el Sun Jul 16 15:27:43 2000 +0000 @@ -304,8 +304,7 @@ (overlay-put overlay 'keymap map) (overlay-put overlay 'face face) ;;(overlay-put overlay 'balloon-help help-echo) - (if (stringp help-echo) - (overlay-put overlay 'help-echo help-echo))) + (overlay-put overlay 'help-echo help-echo)) (widget-specify-secret widget)) (defun widget-specify-secret (field) @@ -338,8 +337,7 @@ (overlay-put overlay 'face face) (overlay-put overlay 'mouse-face widget-mouse-face)) ;;(overlay-put overlay 'balloon-help help-echo) - (if (stringp help-echo) - (overlay-put overlay 'help-echo help-echo)))) + (overlay-put overlay 'help-echo help-echo))) (defun widget-specify-sample (widget from to) "Specify sample for WIDGET between FROM and TO." @@ -1167,7 +1165,8 @@ found (widget-apply child :validate))) found)) -(defun widget-types-convert-widget (widget) +;; Made defsubst to speed up face editor creation. +(defsubst widget-types-convert-widget (widget) "Convert :args as widget types in WIDGET." (widget-put widget :args (mapcar 'widget-convert (widget-get widget :args))) widget) @@ -3367,12 +3366,24 @@ (let* ((widget (widget-at pos)) (help-echo (and widget (widget-get widget :help-echo)))) (if (or (stringp help-echo) - (and (symbolp help-echo) (fboundp help-echo) - (stringp (setq help-echo (funcall help-echo widget))))) + (and (functionp help-echo) + ;; Kluge: help-echo originally could be a function of + ;; one arg -- the widget. It is more useful in Emacs + ;; 21 to have it as a function usable also as a + ;; help-echo property, when it can sort out its own + ;; widget if necessary. Try both calling sequences + ;; (rather than messing around to get the function's + ;; arity). + (stringp + (setq help-echo + (condition-case nil + (funcall help-echo (current-buffer) (point)) + (error (funcall help-echo widget)))))) + (stringp (eval help-echo))) (message "%s" help-echo)))) ;;; The End: (provide 'wid-edit) -;; wid-edit.el ends here +;;; wid-edit.el ends here