unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: 24803@debbugs.gnu.org
Subject: bug#24803: Redirection problem with separate minibuffer frame
Date: Wed, 26 Oct 2016 14:09:00 -0400	[thread overview]
Message-ID: <jwvpomn9e4j.fsf@iro.umontreal.ca> (raw)

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!");
+    }
+}
+
 \f
 /* 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);
 







             reply	other threads:[~2016-10-26 18:09 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-26 18:09 Stefan Monnier [this message]
2016-10-27 17:35 ` bug#24803: Redirection problem with separate minibuffer frame martin rudalics
2016-10-29 22:54   ` Stefan Monnier
2016-10-30  8:47     ` martin rudalics
2020-11-25  9:26       ` martin rudalics
2021-05-19  8:12         ` martin rudalics

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=jwvpomn9e4j.fsf@iro.umontreal.ca \
    --to=monnier@iro.umontreal.ca \
    --cc=24803@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).