summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2011-07-02 19:40:04 -0400
committerChong Yidong <cyd@stupidchicken.com>2011-07-02 19:40:04 -0400
commit7a8e04f79efdefcb3eb7cb2cf5dbb454a78cf24e (patch)
tree06539b2037155e83e91bc1c49f6a997662c690ab /src
parent83319045a48fbe15d9223056435c72ee5172bc2b (diff)
Fix corner case in prefix-arg handling for mouse events (Bug#1586).
* src/keyboard.c (command_loop_1): If a down-mouse event is unbound, leave any prefix arg for the up event.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/keyboard.c13
2 files changed, 17 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index cb5d3bacba5..8b4029bd7b3 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2011-07-02 Chong Yidong <cyd@stupidchicken.com>
+
+ * keyboard.c (command_loop_1): If a down-mouse event is unbound,
+ leave any prefix arg for the up event (Bug#1586).
+
2011-07-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
* lread.c (syms_of_lread): Mention single symbols defined by
diff --git a/src/keyboard.c b/src/keyboard.c
index 3441f1dfd12..16300e6154c 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -1539,7 +1539,18 @@ command_loop_1 (void)
message_with_string ("%s is undefined", keys, 0);
KVAR (current_kboard, defining_kbd_macro) = Qnil;
update_mode_lines = 1;
- KVAR (current_kboard, Vprefix_arg) = Qnil;
+ /* If this is a down-mouse event, don't reset prefix-arg;
+ pass it to the command run by the up event. */
+ if (EVENT_HAS_PARAMETERS (last_command_event))
+ {
+ Lisp_Object breakdown
+ = parse_modifiers (EVENT_HEAD (last_command_event));
+ int modifiers = XINT (XCAR (XCDR (breakdown)));
+ if (!(modifiers & down_modifier))
+ KVAR (current_kboard, Vprefix_arg) = Qnil;
+ }
+ else
+ KVAR (current_kboard, Vprefix_arg) = Qnil;
}
else
{