GNU bug report logs -
#17439
24.3.50; run-with-idle-timer runs on focus-out
Previous Next
Reported by: Juri Linkov <juri <at> jurta.org>
Date: Thu, 8 May 2014 20:56:01 UTC
Severity: important
Found in version 24.3.50
Done: Juri Linkov <juri <at> jurta.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#17439: 24.3.50; run-with-idle-timer runs on focus-out
which was filed against the emacs package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 17439 <at> debbugs.gnu.org.
--
17439: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17439
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
>> So I really see no problems with this patch:
>
> If that works, then by all means go for it.
Installed (found no problems after more testing).
[Message part 3 (message/rfc822, inline)]
Some change a few months ago introduced a significant inconvenience.
After switching to another application, the focus returns back to Emacs.
It happens when using `mouse-avoidance-mode' customized to `banish'.
This mode relies on `run-with-idle-timer' that moves the mouse cursor
on a new input. This caused no problems in prior releases.
However, now input events include a new event type `focus-out',
so the mouse cursor is moved on switching from Emacs frame
(and the new mouse cursor position puts the focus back
due to specific configuration).
This code illustrates the problem:
(defun test () (message "%S" last-input-event))
(setq timer (run-with-idle-timer 0.1 t 'test))
On switching out it prints to *Messages*:
(focus-in #<frame emacs <at> localhost 0x1121908>)
(focus-out #<frame emacs <at> localhost 0x1121908>)
This specific problem can be fixed by this patch:
=== modified file 'lisp/avoid.el'
--- lisp/avoid.el 2014-01-31 06:42:29 +0000
+++ lisp/avoid.el 2014-05-08 20:39:59 +0000
@@ -343,7 +343,8 @@ (defun mouse-avoidance-ignore-p ()
(let ((modifiers (event-modifiers (car last-input-event))))
(or (memq (car last-input-event)
'(mouse-movement scroll-bar-movement
- select-window switch-frame))
+ select-window switch-frame
+ focus-in focus-out))
(memq 'click modifiers)
(memq 'double modifiers)
(memq 'triple modifiers)
PS: it seems there are other places that check only for `switch-frame',
and not for new event types `focus-in' and `focus-out'. But maybe
this problem occurs only in `run-with-idle-timer' because switching out
doesn't emit the event on its own, i.e. `read-event' doesn't return it.
This bug report was last modified 11 years and 2 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.