]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/callint.c (Fcall_interactively): Fix inhibit_mouse_event_check.
authorJuri Linkov <juri@linkov.net>
Tue, 30 Nov 2021 18:12:06 +0000 (20:12 +0200)
committerJuri Linkov <juri@linkov.net>
Tue, 30 Nov 2021 18:12:06 +0000 (20:12 +0200)
Don't search for the next mouse event with parameters
when inhibit-mouse-event-check is non-nil (bug#50067).

src/callint.c

index 44dae361c1f49cdea8add6c8fbcfd835e29af620..68f103759aea48bb137864550faabdf99d9eb1bf 100644 (file)
@@ -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;