Fix menu command re-entrancy crash (switch-buffer segfault)

ober

3cf9124f0b26998ced08f679482b21a91bac349f

diff --git a/src/jerboa-emacs/qt/menubar.ss b/src/jerboa-emacs/qt/menubar.ss
index d69716f..99195ed 100644
--- a/src/jerboa-emacs/qt/menubar.ss
+++ b/src/jerboa-emacs/qt/menubar.ss
@@ -7,6 +7,10 @@
         :jerboa-emacs/qt/sci-shim
         :jerboa-emacs/core)
 
+;; Re-entrancy guard: prevents menu actions from firing while a command
+;; is already running (e.g. narrowing minibuffer calling process-events).
+(def *menu-command-running?* #f)
+
 ;;;============================================================================
 ;;; Menu bar setup
 ;;;============================================================================
@@ -98,7 +102,16 @@
          (action (qt-action-create display-label win)))
     ;; Do NOT call qt-action-set-shortcut! — it conflicts with the custom keymap.
     (qt-on-triggered! action
-      (lambda () (execute-command! app command-name)))
+      (lambda ()
+        (unless *menu-command-running?*
+          (set! *menu-command-running?* #t)
+          (with-catch
+            (lambda (e)
+              (set! *menu-command-running?* #f)
+              (raise e))
+            (lambda ()
+              (execute-command! app command-name)
+              (set! *menu-command-running?* #f))))))
     (qt-menu-add-action! menu action)
     action))