]> git.eshelyaron.com Git - emacs.git/commitdiff
Select correct frame after enabling erc-nickbar-mode
authorF. Jason Park <jp@neverwas.me>
Tue, 4 Jun 2024 17:42:35 +0000 (10:42 -0700)
committerEshel Yaron <me@eshelyaron.com>
Thu, 6 Jun 2024 10:25:16 +0000 (12:25 +0200)
* lisp/erc/erc-speedbar.el (erc-speedbar--ensure): Re-select frame
originally selected when earlier calling `speedbar-frame-mode'.  Do
this because `speedbar-frame' may become the new selected frame when
multiple visible frames exist.
(erc-nickbar-disable): Don't expect the mode to have been enabled
previously.

(cherry picked from commit 99842876bfe15b97e39863ac926ef299e6085dce)

lisp/erc/erc-speedbar.el

index d4f91bb363a093ba997566bb15169fd3e0fb5161..3e8c110a31bd9ff92e892a2de436b3296a21934d 100644 (file)
@@ -517,7 +517,8 @@ associated with an ERC session."
                                              '(visibility . nil)
                                              '(no-other-frame . t)
                                              speedbar-frame-parameters))
-                 (speedbar-after-create-hook #'erc-speedbar--emulate-sidebar))
+                 (speedbar-after-create-hook #'erc-speedbar--emulate-sidebar)
+                 (original-frame (selected-frame)))
         (erc-install-speedbar-variables)
         ;; Run before toggling mode to prevent timer from being
         ;; created twice.
@@ -527,8 +528,8 @@ associated with an ERC session."
         ;; the frame with `window-main-window' will be raised and
         ;; steal focus if you switch away from Emacs in the meantime.
         (let ((frame speedbar-frame))
-          (cl-assert (not (eq speedbar-frame (selected-frame))))
-          (select-frame (setq speedbar-frame (selected-frame)))
+          (cl-assert (not (eq speedbar-frame original-frame)))
+          (select-frame (setq speedbar-frame original-frame))
           (delete-frame frame))
         ;; Allow deleting (our) `speedbar-frame' with the mouse.
         (with-current-buffer speedbar-buffer
@@ -602,19 +603,21 @@ For controlling whether the speedbar window is selectable with
      (setq erc-track--switch-fallback-blockers
            (remove '(derived-mode . speedbar-mode)
                    erc-track--switch-fallback-blockers)))
-   (cl-assert speedbar-buffer)
-   ;; Close associated windows and stop updating but leave timer.
-   (dolist (window (get-buffer-window-list speedbar-buffer nil t))
-     (unless (frame-root-window-p window)
-       (when erc-speedbar--hidden-speedbar-frame
-         (cl-assert (not (eq (window-frame window)
-                             erc-speedbar--hidden-speedbar-frame))))
-       (delete-window window)))
-   (with-current-buffer speedbar-buffer
-     (setq speedbar-update-flag nil)
-     (speedbar-set-mode-line-format)
-     (unless (eq erc--module-toggle-prefix-arg most-negative-fixnum)
-       (dframe-close-frame)))))
+   ;; `speedbar-buffer' may be nil if the mode was never enabled, such
+   ;; as when disabling the module through Customize after startup.
+   (when speedbar-buffer
+     ;; Close associated windows and stop updating but leave timer.
+     (dolist (window (get-buffer-window-list speedbar-buffer nil t))
+       (unless (frame-root-window-p window)
+         (when erc-speedbar--hidden-speedbar-frame
+           (cl-assert (not (eq (window-frame window)
+                               erc-speedbar--hidden-speedbar-frame))))
+         (delete-window window)))
+     (with-current-buffer speedbar-buffer
+       (setq speedbar-update-flag nil)
+       (speedbar-set-mode-line-format)
+       (unless (eq erc--module-toggle-prefix-arg most-negative-fixnum)
+         (dframe-close-frame))))))
 
 (defun erc-speedbar--get-timers ()
   (cl-remove #'dframe-timer-fn timer-idle-list