+(defun riece-button-uninstall ()
+ (let ((buffers riece-buffer-list))
+ (save-excursion
+ (while buffers
+ (set-buffer (car buffers))
+ (remove-hook 'riece-update-buffer-functions
+ 'riece-button-update-buffer)
+ (if (local-variable-p 'riece-identity-button-map
+ (car buffers))
+ (kill-local-variable 'riece-identity-button-map))
+ (setq buffers (cdr buffers)))))
+ (remove-hook 'riece-channel-list-mode-hook
+ 'riece-button-channel-list-mode-hook)
+ (remove-hook 'riece-user-list-mode-hook
+ 'riece-button-user-list-mode-hook)
+ (remove-hook 'riece-dialogue-mode-hook
+ 'riece-button-dialogue-mode-hook)
+ (remove-hook 'riece-after-insert-functions
+ 'riece-button-add-identity-button))
+
+(defun riece-button-enable ()
+ (setq riece-button-enabled t)
+ (let ((pointer riece-buffer-list))
+ (while pointer
+ (with-current-buffer (car pointer)
+ (if (eq (derived-mode-class major-mode)
+ 'riece-dialogue-mode)
+ (riece-button-update-buffer)))
+ (setq pointer (cdr pointer)))
+ (if riece-current-channel
+ (riece-emit-signal 'user-list-changed riece-current-channel))
+ (riece-emit-signal 'channel-list-changed)))
+
+(defun riece-button-disable ()
+ (setq riece-button-enabled nil)
+ (save-excursion
+ (let ((pointer riece-buffer-list))
+ (while pointer
+ ;; On XEmacs, BUFFER arg of widget-map-buttons is ignored.
+ (set-buffer (car pointer))
+ (widget-map-buttons
+ (lambda (widget maparg)
+ (widget-leave-text widget)))
+ (setq pointer (cdr pointer))))))
+