all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Drew Adams" <drew.adams@oracle.com>
To: "martin rudalics" <rudalics@gmx.at>
Cc: Stephen Berman <Stephen.Berman@gmx.net>, emacs-devel@gnu.org
Subject: RE: mouse-autoselect-window
Date: Tue, 18 Sep 2007 09:10:12 -0700	[thread overview]
Message-ID: <BNELLINCGFJLDJIKDGACEEMOCCAA.drew.adams@oracle.com> (raw)
In-Reply-To: <46EFEFE9.1030001@gmx.at>

>  > It raises the frame, but it does not give it the input focus.
>  > I had already said (on 2007-09-05) that giving focus to the
>  > frame at the cost of raising it was a possibility:
>  >
>  >
>  >>BTW, `mouse-autoselect-window' _could_ select the mouse window in MS
>  >>Windows, even on another frame, at the cost of also raising
>  >>that frame - just add `select-frame-set-input-focus' to its code.
>  >>However, I'm not sure that is a good idea.  I assume that on
>  >>GNU/Linux etc. the focus moves but the window is not raised -
>  >>that's the behavior I would prefer, anyway.
>  >
>  > I mentioned `select-frame-set-input-focus', whereas you used
>  > `raise-frame'. The effect wrt raising is the same, but your
>  > fix does not change the input focus (for me, on Windows).
>
> You're right.  But I can't use `select-frame-set-input-focus' because it
> might move the mouse pointer as well.

(I don't remember what the problem with that is.)

> Could you try with the following substitute?
>
> 	(when mouse-autoselect-window
> 	  ;; Run `mouse-leave-buffer-hook' when autoselecting window.
> 	  (run-hooks 'mouse-leave-buffer-hook)
> 	  (unless focus-follows-mouse
> 	    ;; Make sure frame is raised and selected when autoselecting
> 	    ;; window and we assume that the window manager does not
> 	    ;; autoraise the frame of window.
> 	    (select-frame frame)
> 	    (raise-frame frame)
> 	    ;; Ensure, if possible, that frame gets input focus.
> 	    (cond ((memq window-system '(x mac))
> 		   (x-focus-frame frame))
> 		  ((eq window-system 'w32)
> 		   (w32-focus-frame frame)))))

`frame' is unbound here. Let-bind it to (window-frame window), and it works:

(defun handle-select-window (event)
  "Handle select-window events."
  (interactive "e")
  (let ((window (posn-window (event-start event))))
    (when (and (window-live-p window)
	       ;; Don't switch if we're currently in the minibuffer.
	       ;; This tries to work around problems where the minibuffer gets
	       ;; unselected unexpectedly, and where you then have to move
	       ;; your mouse all the way down to the minibuffer to select it.
	       (not (window-minibuffer-p (selected-window)))
	       ;; Don't switch to a minibuffer window unless it's active.
	       (or (not (window-minibuffer-p window))
		   (minibuffer-window-active-p window)))
      (unless (and (numberp mouse-autoselect-window)
		   (not (zerop mouse-autoselect-window))
		   (not (eq mouse-autoselect-window-state 'select))
		   (progn
		     ;; Cancel any delayed autoselection.
		     (mouse-autoselect-window-cancel t)
		     ;; Start delayed autoselection from current mouse position
		     ;; and window.
		     (mouse-autoselect-window-start (mouse-position) window)
		     ;; Executing a command cancels delayed autoselection.
		     (add-hook
		      'pre-command-hook 'mouse-autoselect-window-cancel)))
	;; Reset state of delayed autoselection.
	(setq mouse-autoselect-window-state nil)
	(when mouse-autoselect-window
	  ;; Run `mouse-leave-buffer-hook' when autoselecting window.
	  (run-hooks 'mouse-leave-buffer-hook)
          (unless focus-follows-mouse
 	    ;; Make sure frame is raised when autoselecting window and
 	    ;; we assume that the window manager does not autoraise the
 	    ;; frame of window.
            (let ((frame (window-frame window)))
              (select-frame frame)
              (raise-frame frame)
              ;; Ensure, if possible, that frame gets input focus.
              (cond ((memq window-system '(x mac))
                     (x-focus-frame frame))
                    ((eq window-system 'w32)
                     (w32-focus-frame frame))))))
	(select-window window)))))

This is an improvement, for me, but, as I said, it would be better if the
focus could be changed without necessarily raising the frame also. Those
should be two separate choices: focus & raise.

>  > I personally think that it would be OK to raise the frame too, if focus
>  > cannot be given to it otherwise, but what would really be
>  > desirable is to give focus to the frame (and window) without raising
>  > it. I don't know if that is always possible (e.g. on MS Windows), but
>  > when it is possible, it is, I think, the appropriate behavior.
>
> We could make raising optional, BTW.  You could check whether you like
> it better by removing the `raise-frame' line above.

That seems to have no effect - the frame is raised even without the call to
`raise-frame'. I presume that is because `w32-focus-frame', as its doc
string says, gives "FRAME input focus, raising to foreground if necessary".
Perhaps there is no way around this raising on Windows? Does someone know?

Again, to me, this is an improvement, even if the frame does get raised, but
if we could prevent raising (unless the user asks for that), that would be
better.

>  > Ideally, with customizable options, users would be able to control,
>  > separately, autofocus and autoraise.
>
> Agreed.
>
>  > I also see another problem with your fix (it might not be due
>  > to the fix itself, however). It doesn't always seem to raise
>  > the right frame. I don't know why. I don't know if others will
>  > see the same problem.
>
> With `mouse-autoselect-window' t or a number?

With `t'. Anyway, the code above does not seem to have this problem.

  reply	other threads:[~2007-09-18 16:10 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-05  5:53 mouse-autoselect-window Drew Adams
2007-09-05 10:36 ` mouse-autoselect-window Robert J. Chassell
2007-09-05 10:49   ` mouse-autoselect-window David Kastrup
2007-09-05 12:56     ` mouse-autoselect-window Stephen Berman
2007-09-05 16:49       ` mouse-autoselect-window Robert J. Chassell
2007-09-05 22:46         ` mouse-autoselect-window Drew Adams
2007-09-05 23:08           ` mouse-autoselect-window Jason Rumney
2007-09-06 16:36             ` mouse-autoselect-window Drew Adams
2007-09-06 17:23               ` mouse-autoselect-window martin rudalics
2007-09-06 20:05                 ` mouse-autoselect-window David Kastrup
2007-09-06 21:12                   ` mouse-autoselect-window Jason Rumney
2007-09-06 18:42               ` mouse-autoselect-window Davis Herring
2007-09-07  3:28               ` mouse-autoselect-window Jeremy Maitin-Shepard
2007-09-07  8:26                 ` mouse-autoselect-window Eli Zaretskii
2007-09-07  8:58                   ` mouse-autoselect-window martin rudalics
2007-09-07 15:54                     ` mouse-autoselect-window Davis Herring
2007-09-07 18:21                       ` mouse-autoselect-window Eli Zaretskii
2007-09-07 19:46                         ` mouse-autoselect-window Davis Herring
2007-09-08  7:05                           ` mouse-autoselect-window Eli Zaretskii
2007-09-08  8:08                             ` mouse-autoselect-window Jan Djärv
2007-09-08  0:46                         ` mouse-autoselect-window Jason Rumney
2007-09-08  7:00                           ` mouse-autoselect-window Eli Zaretskii
2007-09-08  9:31                             ` mouse-autoselect-window martin rudalics
2007-09-08 20:56                             ` mouse-autoselect-window Jason Rumney
2007-09-07 18:20                     ` mouse-autoselect-window Eli Zaretskii
2007-09-07  8:32                 ` mouse-autoselect-window martin rudalics
2007-09-07 17:01                   ` mouse-autoselect-window Jeremy Maitin-Shepard
2007-09-07 18:56                     ` mouse-autoselect-window martin rudalics
2007-09-08  7:53                     ` mouse-autoselect-window Jan Djärv
2007-09-06  3:04           ` mouse-autoselect-window Robert J. Chassell
2007-09-06 16:35             ` mouse-autoselect-window Drew Adams
2007-09-05 18:04       ` mouse-autoselect-window martin rudalics
2007-09-05 22:46         ` mouse-autoselect-window Drew Adams
2007-09-06  9:35           ` mouse-autoselect-window martin rudalics
2007-09-06 16:37             ` mouse-autoselect-window Drew Adams
2007-09-06 17:28               ` mouse-autoselect-window martin rudalics
2007-09-06 21:40                 ` mouse-autoselect-window Drew Adams
2007-09-06 20:58               ` mouse-autoselect-window Jason Rumney
2007-09-06 21:11                 ` mouse-autoselect-window Drew Adams
2007-09-07  0:02                   ` mouse-autoselect-window Stefan Monnier
2007-09-07  6:45                     ` mouse-autoselect-window Leo
2007-09-07  8:33                       ` mouse-autoselect-window Andreas Schwab
2007-09-06 12:01         ` mouse-autoselect-window Stephen Berman
2007-09-06 12:22           ` mouse-autoselect-window martin rudalics
2007-09-06 14:17             ` mouse-autoselect-window Stephen Berman
2007-09-06 15:10               ` mouse-autoselect-window martin rudalics
2007-09-06 16:00                 ` mouse-autoselect-window Stephen Berman
2007-09-06 17:31                   ` mouse-autoselect-window martin rudalics
2007-09-06 18:20                     ` mouse-autoselect-window Stephen Berman
2007-09-06 20:46                       ` mouse-autoselect-window martin rudalics
2007-09-06 22:58                         ` mouse-autoselect-window Stephen Berman
2007-09-07  6:51                           ` mouse-autoselect-window martin rudalics
2007-09-07  7:33                             ` mouse-autoselect-window Drew Adams
2007-09-07  8:09                               ` mouse-autoselect-window Stephen Berman
2007-09-07 12:31                                 ` mouse-autoselect-window Robert J. Chassell
2007-09-07  8:38                               ` mouse-autoselect-window martin rudalics
2007-09-07  8:09                             ` mouse-autoselect-window Stephen Berman
2007-09-07  8:53                               ` mouse-autoselect-window martin rudalics
2007-09-07  9:16                                 ` mouse-autoselect-window Stephen Berman
2007-09-07  9:33                                   ` mouse-autoselect-window martin rudalics
2007-09-06 14:30           ` mouse-autoselect-window Stefan Monnier
2007-09-06 15:44             ` mouse-autoselect-window Stephen Berman
2007-09-18  7:02       ` mouse-autoselect-window martin rudalics
2007-09-18 10:16         ` mouse-autoselect-window Stephen Berman
2007-09-18 14:07           ` mouse-autoselect-window martin rudalics
2007-09-18 21:00             ` mouse-autoselect-window Stephen Berman
2007-09-18 14:41         ` mouse-autoselect-window Drew Adams
2007-09-18 15:34           ` mouse-autoselect-window martin rudalics
2007-09-18 16:10             ` Drew Adams [this message]
2007-09-18 16:47               ` mouse-autoselect-window martin rudalics
2007-09-18 17:04                 ` mouse-autoselect-window Drew Adams
2007-09-18 21:01                 ` mouse-autoselect-window Stephen Berman
2007-09-28  9:11                   ` mouse-autoselect-window martin rudalics
2007-09-29 21:45                     ` mouse-autoselect-window Glenn Morris
2007-09-30  8:47                       ` mouse-autoselect-window martin rudalics
2007-09-30 21:48                         ` mouse-autoselect-window Glenn Morris
2007-10-01  6:29                           ` mouse-autoselect-window martin rudalics
2007-11-07 12:18                     ` mouse-autoselect-window Stephen Berman
2007-11-07 13:13                       ` mouse-autoselect-window martin rudalics
2007-11-07 14:30                         ` mouse-autoselect-window Stephen Berman
2007-11-07 15:32                           ` mouse-autoselect-window martin rudalics
2007-09-18 22:24             ` mouse-autoselect-window Jason Rumney
2007-09-18 22:46               ` mouse-autoselect-window Drew Adams
2007-09-18 23:13                 ` mouse-autoselect-window Jason Rumney
2007-09-18 23:24                   ` mouse-autoselect-window Drew Adams
2007-09-19  4:02                   ` mouse-autoselect-window Eli Zaretskii
2007-09-05 17:33 ` mouse-autoselect-window Eli Zaretskii
2007-09-05 17:52   ` mouse-autoselect-window Eli Zaretskii
     [not found] <31071.1189309764@cs.sunysb.edu>
2007-09-09  9:43 ` mouse-autoselect-window Jason Rumney
2007-09-09 13:52   ` mouse-autoselect-window Michael Kifer
2007-09-09 14:09     ` mouse-autoselect-window Jason Rumney
  -- strict thread matches above, loose matches on Subject: below --
2003-12-29 19:01 mouse-autoselect-window Robert Marshall
2003-12-29 21:48 ` mouse-autoselect-window Eli Zaretskii
2003-12-29 22:49 ` mouse-autoselect-window Kevin Rodgers
     [not found] ` <mailman.745.1072738378.868.help-gnu-emacs@gnu.org>
2003-12-30  7:20   ` mouse-autoselect-window Robert Marshall

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=BNELLINCGFJLDJIKDGACEEMOCCAA.drew.adams@oracle.com \
    --to=drew.adams@oracle.com \
    --cc=Stephen.Berman@gmx.net \
    --cc=emacs-devel@gnu.org \
    --cc=rudalics@gmx.at \
    /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.