GNU bug report logs -
#73559
[PATCH] fix NS build focus-in event processing
Previous Next
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Sat, 05 Oct 2024 13:37:14 +0300
with message-id <86iku6x2cl.fsf <at> gnu.org>
and subject line Re: bug#73559: [PATCH] fix NS build focus-in event processing
has caused the debbugs.gnu.org bug report #73559,
regarding [PATCH] fix NS build focus-in event processing
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
73559: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=73559
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
In Emacs NS build, frames don't respond to focus-in events right away.
Instead, they store the focus-in event and process it (and other queued
events) whenever some other event happens to occur on that frame.
This patch kicks the NS event loop immediately when a focus-in event
happens, allowing Emacs to respond to focus-in events without some other
event triggering the processing.
commit c6d98bfc2a098b57fa9631978224ead2668d3a88
Author: Daniel Colascione <dancol <at> dancol.org>
Date: Wed Aug 21 19:48:05 2024 -0700
process events on focus in
diff --git a/src/nsterm.m b/src/nsterm.m
index 8c405738467..f68a22d9fbc 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -7973,6 +7973,7 @@ - (void)windowDidBecomeKey /* for direct calls */
event.kind = FOCUS_IN_EVENT;
XSETFRAME (event.frame_or_window, emacsframe);
kbd_buffer_store_event (&event);
+ ns_send_appdefined (-1); // Kick main loop
}
[Message part 3 (message/rfc822, inline)]
> Date: Mon, 30 Sep 2024 10:50:31 -0700
> From: Daniel Colascione <dancol <at> dancol.org>
> CC: luangruo <at> yahoo.com, 73559 <at> debbugs.gnu.org
>
>
>
> On September 30, 2024 10:40:57 AM PDT, Eli Zaretskii <eliz <at> gnu.org> wrote:
> >> Date: Mon, 30 Sep 2024 10:05:09 -0700
> >> From: Daniel Colascione <dancol <at> dancol.org>
> >> CC: luangruo <at> yahoo.com, 73559 <at> debbugs.gnu.org
> >>
> >> It's not that the NS pselect waits too long. It's that it doesn't know to wake up. The focus event is delivered to Emacs by NS as a callback. Unless that callback, one way or another, takes some action to wake up the event loop, nothing gets processed. On Windows, we drain the event queue as a side effect of the message pump, whereas on NS there doesn't seem to be a separate pump that works this way -- just a callback.
> >
> >What about making pselect wait on one more descriptor, to which the
> >callback could then write?
>
> That's the moral equivalent of what my patch does. My patch just uses the existing machinery for waking the main thread instead of adding a new FD.
The patch was installed on the master branch, so I'm closing this bug.
Thanks.
This bug report was last modified 257 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.