all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: martin rudalics <rudalics@gmx.at>
To: Helmut Eller <eller.helmut@gmail.com>
Cc: 745@emacsbugs.donarmstrong.com
Subject: bug#745: pop-to-buffer, frames, and input focus
Date: Sat, 23 Aug 2008 14:05:58 +0200	[thread overview]
Message-ID: <48AFFD26.3040204@gmx.at> (raw)
In-Reply-To: <m2abf4qffb.fsf@gmail.com>

 > The problematic cases are
 >
 >   (let ((pop-up-frames t)) (display-buffer ...))
 >
 > for display-buffer, if the buffer was not visible before.  In this case
 > a new frame appears, which (wrongly) has the input focus.

Rather "which (wrongly) has the input focus for window managers able to
handle mapping a new frame without giving input focus to it" because
IIUC with certain settings (focus-follows-mouse) some window managers
automatically do give focus to the new frame.  I also suppose that the
only means to take focus away from the new frame is by giving focus to
the previously selected frame (though we can't even be sure that frame
had focus or was risen).

 > (If the
 > buffer is already visible in some frame, that frame is raised but the
 > focus is not moved to that frame.  This is IMO correct.)

I think so.  But what happens in the `pop-to-buffer' case when a _new_
frame gets displayed.  Should we give it input-focus?  I suppose so from
your situation B comments below.  So in all cases where situation A has
Y (that is `display-buffer' fails TDTRT) `pop-to-buffer' DTRT?

 > For pop-to-buffer:
 >
 >   (let ((display-buffer-reuse-frames t)) (pop-to-buffer ...))
 >
 > if the buffer is already visible in a frame which has not the input
 > focus.  This should move input focus to that frame, but it currently
 > doesn't.  (If the frame has already the focus, pop-to-buffer works as it
 > should.)

Do we agree on the general rule that

- `display-buffer' should never try to move input focus to another (new
   or existing) frame, while

- `pop-to-buffer' should try to give input focus to the frame where
   BUFFER is displayed (this could be the selected frame as well).

 > Let's call the display-buffer case, situation A and the pop-to-buffer
 > case, situation B.
[...]
 > OK, here is what I see:
 >
 > A  B  WM         WM focus mode
 > ---------------------------------------
 > Y  N  Sawfish    follow-mouse (enter-only + focus-window-when-mapped)
 > N  N  Sawfish    follow-mouse (enter-only + !focus-window-when-mapped)
 > Y  N  Sawfish    follow-mouse (enter-exit + focus-window-when-mapped)
 > N  N  Sawfish    follow-mouse (enter-exit + !focus-window-when-mapped)
 > Y  N  Sawfish    click-to-focus (click + focus-window-when-mapped)
 > N  N  Sawfish    click-to-focus (click + !focus-window-when-mapped)
 > Y  N  Sawfish    click-to-focus (click + focus-window-when-mapped + focus-click-through)
 > N  N  Sawfish    click-to-focus (click + !focus-window-when-mapped + focus-click-through)

I'm completely ignorant WRT to focus-window-when-mapped: Does this mean
that a window that is not risen can get focus?  Note in this context
that `select-frame-set-input-focus' always raises the frame.

 > ?  N  Metacity   follow-mouse (mouse)
 > ?  N  Metacity   follow-mouse (sloppy)
 > ?  N  Metacity   click-to-focus (click)

Does Metacity respect `select-frame-set-input-focus' at all?

 > Y  N  KWin       follow-mouse
 > Y  N  KWin       click-to-focus
 > Y  M  FluxBox    follow-mouse (Sloppy Focus)
 > Y  M  FluxBox    follow-mouse (Auto Raise)

For the M cases `raise-frame' could move the mouse pointer to that frame
which seems to call for yet another option.

 > Y  N  FluxBox    click-to-focus
 > Y  Y  IceWM      click-to-focus

So IceWM is the only window manager to handle situation B.  IIUC it does
so because do_switch-frame manages to get Fredirect_frame_focus through
to redirect input to that frame.  Or do you have another explanation?
Could you try to GDB do_switch_frame for IceWM and one of the others to
see they do differently?

 > Y  N  Twm        follow-mouse (new frames need mouse click for placement)
 >
 > A and B are the scenarios described above.
 > Y means: Yes, does switch focus.
 > N means: No, doesn't switch focus.
 > ? means: sometimes (probably depending on mouse and window positions)
 > M means: No, doesn't switch focus, except when raising the frame
 >          also moves the mouse pointer into the frame.
 >
 > I set Emacs' focus-follows-mouse according to the WM focus mode (except
 > when I forgot it :-)
 >
 > The Ys for Sawfish are apparently directly related to the
 > focus-window-when-mapped option.  So, it's probably not Emacs that
 > switches the focus in the A scenario, but the window managers.

Can we conclucde that the other window managers implicitly focus a frame
when mapping it?

 > The docstring for select-window could perhaps
 > also state a bit more prominently that the "selected window" and the
 > "input focus" are different things

... if the implementation is bogus this will hardly help ...

 > or at least refer to
 > select-frame-set-input-focus.

That function lumps together too many things.  At least `raise-frame'
should probably be optional there.

 > BTW, below is a proof of concept implementation for the
 > update-focus-lazily idea.

Would this work with `redirect-frame-focus'?  I haven't studied it in
detail.

martin







  reply	other threads:[~2008-08-23 12:05 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <48C8C046.50203@gmx.at>
2008-08-20  7:35 ` bug#745: pop-to-buffer, frames, and input focus Helmut Eller
2008-08-20 14:50   ` martin rudalics
2008-08-20 18:42     ` Helmut Eller
2008-08-20 20:42       ` David Reitter
2008-08-20 20:56       ` martin rudalics
2008-08-21  8:07         ` Helmut Eller
2008-08-21  9:04           ` martin rudalics
2008-08-21 13:20             ` Helmut Eller
2008-08-21 20:31               ` martin rudalics
2008-08-22 14:27                 ` Helmut Eller
2008-08-22 16:39                   ` martin rudalics
2008-08-23  8:55                     ` Helmut Eller
2008-08-23 12:05                       ` martin rudalics [this message]
2008-08-24 13:14                         ` Helmut Eller
2008-08-25 13:45                           ` martin rudalics
2008-08-26 21:45                             ` Helmut Eller
2008-08-27  8:12                               ` martin rudalics
2008-08-27 12:54                                 ` Helmut Eller
2008-08-28 11:46                                   ` martin rudalics
2008-08-28 16:47                                     ` Helmut Eller
2008-08-28 21:26                                       ` martin rudalics
2008-08-29  7:39                                         ` Helmut Eller
2008-08-29  9:26                                           ` martin rudalics
2008-08-29 15:02                                             ` Helmut Eller
2008-08-30  8:15                                               ` martin rudalics
2008-08-30 11:06                                                 ` Helmut Eller
2008-08-30 13:42                                                   ` martin rudalics
2008-08-31  8:55                                                     ` Helmut Eller
2008-09-06 11:56                                                       ` martin rudalics
2008-09-09  6:24                                                         ` Helmut Eller
2008-09-11  7:05   ` bug#745: marked as done (pop-to-buffer, frames, and input focus) Emacs bug Tracking System

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

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

  git send-email \
    --in-reply-to=48AFFD26.3040204@gmx.at \
    --to=rudalics@gmx.at \
    --cc=745@emacsbugs.donarmstrong.com \
    --cc=eller.helmut@gmail.com \
    /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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.