summaryrefslogtreecommitdiff
path: root/lisp/button.el
diff options
context:
space:
mode:
authorKévin Le Gouguec <kevin.legouguec@gmail.com>2025-02-20 22:37:13 +0100
committerKévin Le Gouguec <kevin.legouguec@gmail.com>2025-03-08 17:29:34 +0100
commitf23ee932509e0a67aaafc499f0cd6b25535e4b95 (patch)
tree4d9127f6b4b6813c11d9c95c461af30c41e66f37 /lisp/button.el
parent269d337f9191cb58e70f93f8aae47a9bd8d635f9 (diff)
Prevent button.el from clearing help-echo strings
In order to fix one of the issues discussed in bug#61413, i.e. 'buttonize' clobbering the help-echo property set by 'icon-string'. This is a reasonable interpretation of the button.el docstrings - "if HELP-ECHO, use that as the `help-echo' property"; conversely, if not HELP-ECHO, then do not do anything, preserving existing values for that property. * lisp/button.el (button--properties): Only add a help-echo property if HELP-ECHO is non-nil. Add an additional property for bookkeeping. (unbuttonize-region): Check for that bookkeeping property before clearing help-echo. * test/lisp/button-tests.el (button--preserve-help-echo): Validate these changes.
Diffstat (limited to 'lisp/button.el')
-rw-r--r--lisp/button.el32
1 files changed, 21 insertions, 11 deletions
diff --git a/lisp/button.el b/lisp/button.el
index 674de1bb4fa..58f00c4c2ad 100644
--- a/lisp/button.el
+++ b/lisp/button.el
@@ -652,15 +652,19 @@ Also see `buttonize-region'."
string))
(defun button--properties (callback data help-echo)
- (list 'font-lock-face 'button
- 'mouse-face 'highlight
- 'help-echo help-echo
- 'button t
- 'follow-link t
- 'category t
- 'button-data data
- 'keymap button-map
- 'action callback))
+ (append
+ (list 'font-lock-face 'button
+ 'mouse-face 'highlight
+ 'button t
+ 'follow-link t
+ 'category t
+ 'button-data data
+ 'keymap button-map
+ 'action callback)
+ (and help-echo
+ (list 'help-echo help-echo
+ ;; Record that button.el is responsible for this property.
+ 'help-echo-button t))))
(defun buttonize-region (start end callback &optional data help-echo)
"Make the region between START and END into a button.
@@ -681,8 +685,14 @@ This removes both text-property and overlay based buttons."
(when (overlay-get o 'button)
(delete-overlay o)))
(with-silent-modifications
- (remove-text-properties start end
- (button--properties nil nil nil))
+ (remove-text-properties
+ start end
+ (append
+ (button--properties nil nil nil)
+ ;; Only remove help-echo if it was added by button.el.
+ (and (get-text-property start 'help-echo-button)
+ (list 'help-echo nil
+ 'help-echo-button nil))))
(add-face-text-property start end
'button nil)))