From 631de55bc19931ca2d778e8399697921228902a8 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 5 Jun 2014 22:35:17 -0400 Subject: [PATCH] * lisp/mouse.el (mouse-posn-property): Ignore buffer position info when the even happened elsewhere. * src/keyboard.c (make_lispy_position): Don't include a buffer position in mode/header-line mouse events. --- lisp/mouse.el | 9 +++++---- src/ChangeLog | 3 +++ src/keyboard.c | 16 +++++++--------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/lisp/mouse.el b/lisp/mouse.el index 10358c91636..ca9ea5dadca 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -684,10 +684,11 @@ its value is returned." (str (posn-string pos))) (or (and str (get-text-property (cdr str) property (car str))) - ;; FIXME: mouse clicks on the mode-line come with a position in - ;; (nth 5). Maybe we should change the C code instead so that - ;; mouse-clicks don't include a position there! - (and pt (not (memq (posn-area pos) '(mode-line header-line))) + ;; Mouse clicks in the fringe come with a position in + ;; (nth 5). This is useful but is not exactly where we clicked, so + ;; don't look up that position's properties! + (and pt (not (memq (posn-area pos) '(left-fringe right-fringe + left-margin right-margin))) (get-char-property pt property w)))) (get-char-property pos property))) diff --git a/src/ChangeLog b/src/ChangeLog index a56a0a27d92..06847a72de3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2014-06-06 Stefan Monnier + * keyboard.c (make_lispy_position): Don't include a buffer position in + mode/header-line mouse events. + * keyboard.c (read_char): Handle (t . ) in the second use of Vunread_command_events (bug#17650). diff --git a/src/keyboard.c b/src/keyboard.c index c9cd222b110..568c8203c7f 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -2465,7 +2465,7 @@ read_char (int commandflag, Lisp_Object map, inside universal-argument. */ if (CONSP (c) && EQ (XCAR (c), Qt)) - c = XCDR (c); + c = XCDR (c); else reread = true; @@ -5228,7 +5228,7 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y, /* It's a click in window WINDOW at frame coordinates (X,Y) */ struct window *w = XWINDOW (window); Lisp_Object string_info = Qnil; - ptrdiff_t textpos = -1; + ptrdiff_t textpos = 0; int col = -1, row = -1; int dx = -1, dy = -1; int width = -1, height = -1; @@ -5263,9 +5263,7 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y, &object, &dx, &dy, &width, &height); if (STRINGP (string)) string_info = Fcons (string, make_number (charpos)); - textpos = (w == XWINDOW (selected_window) - && current_buffer == XBUFFER (w->contents)) - ? PT : marker_position (w->pointm); + textpos = -1; xret = wx; yret = wy; @@ -5333,7 +5331,7 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y, /* For clicks in the text area, fringes, or margins, call buffer_posn_from_coords to extract TEXTPOS, the buffer position nearest to the click. */ - if (textpos < 0) + if (!textpos) { Lisp_Object string2, object2 = Qnil; struct display_pos p; @@ -5384,15 +5382,15 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y, } #endif - /* Object info */ + /* Object info. */ extra_info = list3 (object, Fcons (make_number (dx), make_number (dy)), Fcons (make_number (width), make_number (height))); - /* String info */ + /* String info. */ extra_info = Fcons (string_info, - Fcons (make_number (textpos), + Fcons (textpos < 0 ? Qnil : make_number (textpos), Fcons (Fcons (make_number (col), make_number (row)), extra_info))); -- 2.39.2