[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#24803: Redirection problem with separate minibuffer frame
From: |
Stefan Monnier |
Subject: |
bug#24803: Redirection problem with separate minibuffer frame |
Date: |
Wed, 26 Oct 2016 14:09:00 -0400 |
Package: Emacs
Version: 26.0.50
I'm seeing redirection problems in my Emacs setup (with separate
minibuffer-only frame). I suspect it comes from
commit 421c0512f76683e0b85ea5e1362291c2da4149ba
Author: Martin Rudalics <rudalics@gmx.at>
Date: Mon Oct 17 10:52:01 2016 +0200
Fix frame focus redirection with shared minibuffer windows (Bug#24500)
* src/frame.c (do_switch_frame): Redirect frame focus also when
the frame switched to has its minibuffer window on the selected
frame.
* src/window.c (candidate_window_p): To qualify as candidate
it's not sufficient for the window's frame to just share the
minibuffer window - it must be active as well.
I just managed to reliably reproduce one of the symptoms of the problem:
% emacs -Q --eval "(setq default-frame-alist '((minibuffer)))"
... place the minibuffer frame so that half of it covers the main frame ...
... now from the minibuffer frame, do
C-h f car RET
at this point, the stacking order has been changed: the main frame is above
the minibuffer-only frame. Then I move the mouse into the part of the
minibuffer frame still visible and I type
ffff
The first `f` should call `find-file` (according to
minibuffer-inactive-mode-map), but instead the `ffff` text gets inserted
into the *scratch* buffer because of some inappropriate focus redirection.
[ This recipe depends on using a window-manager with
focus-follows-mouse and it might also depend on other aspects of the
window manager's behavior. ]
A few years back, I had a problem with focus redirection which I tracked
with the patch below. I never removed the patch after fixing the bug,
so the first symptom of the new problem was that I started to see "Left
over focus redirection!" messages all the time. At first I thought it
was my patch at fault, so I disabled it, but since then I started to see
various odd behaviors, which I think all get down to the left over
redirection reproduced in the above recipe.
This said, I also noticed something else: ever since this redirection
problem appeared, I often see my cursor furiously blinking very rapidly
for a very short amount of time, every time I select another frame
(which happens all the time with my focus-follows-mouse WM). I used to
see this also back when I was tracking that old redirection problem, so
I suspect that we have a redisplay bug/inefficiency that's only
triggered when some redirection is in place.
Stefan
diff --git a/src/minibuf.c b/src/minibuf.c
index 57eea05..dcafc77 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -338,6 +338,18 @@ If the current buffer is not a minibuffer, return its
entire contents. */)
return make_buffer_string (prompt_end, PT, 1);
}
+static void
+check_no_redirected_focus (void)
+{
+ Lisp_Object tail, frame;
+ FOR_EACH_FRAME (tail, frame)
+ {
+ if (!NILP (FRAME_FOCUS_FRAME (XFRAME (frame)))
+ && !EQ (FRAME_FOCUS_FRAME (XFRAME (frame)), frame))
+ message ("Left over focus redirection!");
+ }
+}
+
/* Read from the minibuffer using keymap MAP and initial contents INITIAL,
putting point minus BACKUP_N bytes from the end of INITIAL,
@@ -380,6 +392,10 @@ read_minibuf (Lisp_Object map, Lisp_Object initial,
Lisp_Object prompt,
Lisp_Object empty_minibuf;
Lisp_Object dummy, frame;
+
+ if (minibuf_level == 0)
+ record_unwind_protect_void (check_no_redirected_focus);
+
specbind (Qminibuffer_default, defalt);
specbind (Qinhibit_read_only, Qnil);
- bug#24803: Redirection problem with separate minibuffer frame,
Stefan Monnier <=