emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-28 9aa8fd6: * src/callint.c (Fcall_interactively): Fix inhibit_mou


From: Juri Linkov
Subject: emacs-28 9aa8fd6: * src/callint.c (Fcall_interactively): Fix inhibit_mouse_event_check.
Date: Tue, 30 Nov 2021 13:12:43 -0500 (EST)

branch: emacs-28
commit 9aa8fd6e62c7621c0e722f874a02007debed91b0
Author: Juri Linkov <juri@linkov.net>
Commit: Juri Linkov <juri@linkov.net>

    * src/callint.c (Fcall_interactively): Fix inhibit_mouse_event_check.
    
    Don't search for the next mouse event with parameters
    when inhibit-mouse-event-check is non-nil (bug#50067).
---
 src/callint.c | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/src/callint.c b/src/callint.c
index 44dae36..68f1037 100644
--- a/src/callint.c
+++ b/src/callint.c
@@ -364,11 +364,14 @@ invoke it (via an `interactive' spec that contains, for 
instance, an
 
   /* The index of the next element of this_command_keys to examine for
      the 'e' interactive code.  Initialize it to point to the first
-     event with parameters.  */
-  ptrdiff_t next_event;
-  for (next_event = 0; next_event < key_count; next_event++)
-    if (EVENT_HAS_PARAMETERS (AREF (keys, next_event)))
-      break;
+     event with parameters.  When `inhibit_mouse_event_check' is non-nil,
+     the command can accept an event without parameters,
+     so don't search for the event with parameters in this case.  */
+  ptrdiff_t next_event = 0;
+  if (!inhibit_mouse_event_check)
+    for (; next_event < key_count; next_event++)
+      if (EVENT_HAS_PARAMETERS (AREF (keys, next_event)))
+       break;
 
   /* Handle special starting chars `*' and `@'.  Also `-'.  */
   /* Note that `+' is reserved for user extensions.  */
@@ -606,7 +609,7 @@ invoke it (via an `interactive' spec that contains, for 
instance, an
          break;
 
        case 'e':               /* The invoking event.  */
-         if (!inhibit_mouse_event_check && next_event >= key_count)
+         if (next_event >= key_count)
            error ("%s must be bound to an event with parameters",
                   (SYMBOLP (function)
                    ? SSDATA (SYMBOL_NAME (function))
@@ -614,11 +617,15 @@ invoke it (via an `interactive' spec that contains, for 
instance, an
          args[i] = AREF (keys, next_event);
          varies[i] = -1;
 
-         /* Find the next parameterized event.  */
-         do
+         /* `inhibit_mouse_event_check' allows non-parameterized events.  */
+         if (inhibit_mouse_event_check)
            next_event++;
-         while (next_event < key_count
-                && ! EVENT_HAS_PARAMETERS (AREF (keys, next_event)));
+         else
+           /* Find the next parameterized event.  */
+           do
+             next_event++;
+           while (next_event < key_count
+                  && ! EVENT_HAS_PARAMETERS (AREF (keys, next_event)));
 
          break;
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]