=== modified file 'src/window.c' --- src/window.c 2014-02-21 08:02:05 +0000 +++ src/window.c 2014-02-21 18:16:00 +0000 @@ -1410,13 +1410,15 @@ DEFUN ("coordinates-in-window-p", Fcoordinates_in_window_p, - Scoordinates_in_window_p, 2, 2, 0, + Scoordinates_in_window_p, 2, 3, 0, doc: /* Return non-nil if COORDINATES are in WINDOW. WINDOW must be a live window and defaults to the selected one. COORDINATES is a cons of the form (X . Y), X and Y being distances measured in characters from the upper-left corner of the frame. \(0 . 0) denotes the character in the upper left corner of the -frame. +frame. Third argument PIXELWISE non-nil means interpret coordinates +pixelwise. + If COORDINATES are in the text portion of WINDOW, the coordinates relative to the window are returned. If they are in the mode line of WINDOW, `mode-line' is returned. @@ -1427,7 +1429,7 @@ `vertical-line' is returned. If they are in the windows's left or right marginal areas, `left-margin'\n\ or `right-margin' is returned. */) - (register Lisp_Object coordinates, Lisp_Object window) + (register Lisp_Object coordinates, Lisp_Object window, Lisp_Object pixelwise) { struct window *w; struct frame *f; @@ -1439,10 +1441,16 @@ CHECK_CONS (coordinates); lx = Fcar (coordinates); ly = Fcdr (coordinates); - CHECK_NUMBER_OR_FLOAT (lx); - CHECK_NUMBER_OR_FLOAT (ly); - x = FRAME_PIXEL_X_FROM_CANON_X (f, lx) + FRAME_INTERNAL_BORDER_WIDTH (f); - y = FRAME_PIXEL_Y_FROM_CANON_Y (f, ly) + FRAME_INTERNAL_BORDER_WIDTH (f); + CHECK_NUMBER (lx); + CHECK_NUMBER (ly); + x = ((!NILP (pixelwise) + ? XINT (lx) + : FRAME_PIXEL_X_FROM_CANON_X (f, lx)) + + FRAME_INTERNAL_BORDER_WIDTH (f)); + y = ((!NILP (pixelwise) + ? XINT (ly) + : FRAME_PIXEL_Y_FROM_CANON_Y (f, ly)) + + FRAME_INTERNAL_BORDER_WIDTH (f)); switch (coordinates_in_window (w, x, y)) {