Run custom-magic-reset in the customize buffer

If the user has navigated away from the customize buffer, then
clicking on a widget in the customize buffer applies changes in the
selected buffer rather than in the customize buffer.  Pass the
customize buffer to 'custom-magic-reset' to avoid this.

* lisp/cus-edit.el (custom-magic-reset): Add optional buffer argument,
apply changes in that buffer.
(custom-notify): Pass the buffer containing the widget to
'custom-magic-reset'.  (Bug#40788)
This commit is contained in:
Robert Pluim 2020-07-21 16:37:59 +02:00
parent 3c9c3f04de
commit 4db3235fd8

View file

@ -2102,11 +2102,12 @@ and `face'."
(insert " ")) (insert " "))
(widget-put widget :children children)))) (widget-put widget :children children))))
(defun custom-magic-reset (widget) (defun custom-magic-reset (widget &optional buffer)
"Redraw the :custom-magic property of WIDGET." "Redraw the :custom-magic property of WIDGET."
(let ((magic (widget-get widget :custom-magic))) (let ((magic (widget-get widget :custom-magic)))
(when magic (when magic
(widget-value-set magic (widget-value magic))))) (with-current-buffer (or buffer (current-buffer))
(widget-value-set magic (widget-value magic))))))
;;; The `custom' Widget. ;;; The `custom' Widget.
@ -2217,7 +2218,7 @@ and `face'."
;; commands like `M-u' (that work on a region in the buffer) ;; commands like `M-u' (that work on a region in the buffer)
;; will upcase the wrong part of the buffer, since more text has ;; will upcase the wrong part of the buffer, since more text has
;; been inserted before point. ;; been inserted before point.
(run-with-idle-timer 0.0 nil #'custom-magic-reset widget) (run-with-idle-timer 0.0 nil #'custom-magic-reset widget (current-buffer))
(apply 'widget-default-notify widget args)))) (apply 'widget-default-notify widget args))))
(defun custom-redraw (widget) (defun custom-redraw (widget)