branch: externals/bufferlo
commit 385a726715a8a47b0fe5e85827c9dd39fff0f965
Author: shipmints <shipmi...@gmail.com>
Commit: shipmints <shipmi...@gmail.com>

    Correct bufferlo--bookmark-frame-handler frame selection
    
    Restored frame must be selected and raised outside the context of
    with-selected-frame which restores the frame from before its
    invocation.
---
 bufferlo.el | 86 +++++++++++++++++++++++++++++++------------------------------
 1 file changed, 44 insertions(+), 42 deletions(-)

diff --git a/bufferlo.el b/bufferlo.el
index 2205365d76..fc9ce80b79 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -2213,48 +2213,50 @@ the message after successfully restoring the bookmark."
 
       ;; Do the real work with the target frame selected (current or newly 
created)
       ;; NOTE: No :abort throws after this point
-      (with-selected-frame (if new-frame-p
-                               (with-temp-buffer (make-frame))
-                             (selected-frame))
-        ;; Clear existing tabs unless merging
-        (unless (eq load-policy 'merge)
-          (if (>= emacs-major-version 28)
-              (tab-bar-tabs-set nil)
-            (set-frame-parameter nil 'tabs nil)))
-
-        ;; Load tabs
-        (let ((first (if (eq load-policy 'merge) nil t))
-              (tab-bar-new-tab-choice t))
-          (mapc
-           (lambda (tbm)
-             (if first
-                 (setq first nil)
-               (tab-bar-new-tab-to))
-             (bufferlo--bookmark-tab-handler tbm t 'embedded-tab)
-             (when-let* ((tab-name (alist-get 'tab-name tbm)))
-               (tab-bar-rename-tab tab-name)))
-           (alist-get 'tabs bookmark)))
-        (tab-bar-select-tab (alist-get 'current bookmark))
-
-        ;; Handle duplicate frame bookmark
-        (pcase duplicate-policy
-          ;; Do nothing for 'allow or nil
-          ('clear
-           (setq fbm nil))
-          ('clear-warn
-           (setq fbm nil)
-           (funcall msg-append "cleared frame bookmark")))
-
-        (set-frame-parameter nil 'bufferlo-bookmark-frame-name fbm)
-
-        ;; Restore geometry
-        (when (and new-frame-p
-                   (display-graphic-p)
-                   (eq bufferlo-bookmark-frame-load-make-frame 
'restore-geometry))
-          (when-let* ((fg (alist-get 'bufferlo--frame-geometry bookmark)))
-            (bufferlo--set-frame-geometry fg)))
-
-        (raise-frame))
+      (let ((frame (if new-frame-p
+                       (with-temp-buffer (make-frame))
+                     (selected-frame))))
+        (with-selected-frame frame
+          ;; Clear existing tabs unless merging
+          (unless (eq load-policy 'merge)
+            (if (>= emacs-major-version 28)
+                (tab-bar-tabs-set nil)
+              (set-frame-parameter nil 'tabs nil)))
+
+          ;; Load tabs
+          (let ((first (if (eq load-policy 'merge) nil t))
+                (tab-bar-new-tab-choice t))
+            (mapc
+             (lambda (tbm)
+               (if first
+                   (setq first nil)
+                 (tab-bar-new-tab-to))
+               (bufferlo--bookmark-tab-handler tbm t 'embedded-tab)
+               (when-let* ((tab-name (alist-get 'tab-name tbm)))
+                 (tab-bar-rename-tab tab-name)))
+             (alist-get 'tabs bookmark)))
+          (tab-bar-select-tab (alist-get 'current bookmark))
+
+          ;; Handle duplicate frame bookmark
+          (pcase duplicate-policy
+            ;; Do nothing for 'allow or nil
+            ('clear
+             (setq fbm nil))
+            ('clear-warn
+             (setq fbm nil)
+             (funcall msg-append "cleared frame bookmark")))
+
+          (set-frame-parameter nil 'bufferlo-bookmark-frame-name fbm)
+
+          ;; Restore geometry
+          (when (and new-frame-p
+                     (display-graphic-p)
+                     (eq bufferlo-bookmark-frame-load-make-frame 
'restore-geometry))
+            (when-let* ((fg (alist-get 'bufferlo--frame-geometry bookmark)))
+              (bufferlo--set-frame-geometry fg))))
+
+        ;; Select and raise the restored frame outside the context of 
with-selected-frame
+        (select-frame-set-input-focus frame))
 
       ;; Log message
       (unless (or no-message bufferlo--bookmark-handler-no-message)

Reply via email to