[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#16647: Imprecisions with window-resizing cursors
From: |
martin rudalics |
Subject: |
bug#16647: Imprecisions with window-resizing cursors |
Date: |
Fri, 21 Feb 2014 19:53:40 +0100 |
> Regardless of where the vertical line is, it is now almost impossible to
> get the <=> handle to appear at all when approaching the vertical line
> from the left -- I get it once in about fifty attempts. When approaching
> the vertical line from the right, the <=> handle appears normally (and
> it now appears normally when the vertical line is all the way to the
> left as well).
If you can apply the patch I posted earlier (and I attach here again)
you could try the following snippet with emacs -Q:
(let ((i 200)
(window-on-left (selected-window))
(window-on-right (split-window-right))
(lhits 0)
(rhits 0))
(tooltip-mode -1)
(scroll-bar-mode -1)
(set-mouse-pixel-position (selected-frame) i 200)
(while (car (setq position (cdr (mouse-pixel-position))))
(let ((coordinates (coordinates-in-window-p position window-on-left t)))
(when (eq coordinates 'vertical-line)
(setq lhits (1+ lhits))))
(let ((coordinates (coordinates-in-window-p position window-on-right t)))
(when (eq coordinates 'vertical-line)
(setq rhits (1+ rhits))))
(sit-for 0.001)
(set-mouse-pixel-position
(selected-frame) (setq i (1+ i)) 200))
(cons lhits rhits))
Evaluating this returns (8 . 0) here, the cdr of which amounts to the
width of one character on my frame. So here I have an 8 pixel-wide
corridor entirely in the left window where I am "on the vertical line"
(which occupies virtually the 7 right pixels of the right fringe of the
window on the left). Evaluating
(let ((i 600)
(window-on-left (selected-window))
(window-on-right (split-window-right))
(lhits 0)
(rhits 0))
(tooltip-mode -1)
(scroll-bar-mode -1)
(set-mouse-pixel-position (selected-frame) i 200)
(while (car (setq position (cdr (mouse-pixel-position))))
(let ((coordinates (coordinates-in-window-p position window-on-left t)))
(when (eq coordinates 'vertical-line)
(setq lhits (1+ lhits))))
(let ((coordinates (coordinates-in-window-p position window-on-right t)))
(when (eq coordinates 'vertical-line)
(setq rhits (1+ rhits))))
(sit-for 0.001)
(set-mouse-pixel-position
(selected-frame) (setq i (1- i)) 200))
(cons lhits rhits))
gets me the same results. What do you get? You might have to change
the initial values of `i' to "be in the frame" accordingly.
martin
=== 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))
{
- bug#16647: Imprecisions with window-resizing cursors, (continued)
- bug#16647: Imprecisions with window-resizing cursors, E Sabof, 2014/02/07
- bug#16647: Imprecisions with window-resizing cursors, martin rudalics, 2014/02/07
- bug#16647: Imprecisions with window-resizing cursors, E Sabof, 2014/02/13
- bug#16647: Imprecisions with window-resizing cursors, martin rudalics, 2014/02/14
- bug#16647: Imprecisions with window-resizing cursors, N. Jackson, 2014/02/14
- bug#16647: Imprecisions with window-resizing cursors, martin rudalics, 2014/02/14
- bug#16647: Imprecisions with window-resizing cursors, N. Jackson, 2014/02/14
- bug#16647: Imprecisions with window-resizing cursors, martin rudalics, 2014/02/16
- bug#16647: Imprecisions with window-resizing cursors, N. Jackson, 2014/02/16
- bug#16647: Imprecisions with window-resizing cursors, N. Jackson, 2014/02/19
- bug#16647: Imprecisions with window-resizing cursors,
martin rudalics <=
- bug#16647: Imprecisions with window-resizing cursors, N. Jackson, 2014/02/21
- bug#16647: Imprecisions with window-resizing cursors, martin rudalics, 2014/02/22
- bug#16647: Imprecisions with window-resizing cursors, N. Jackson, 2014/02/22
- bug#16647: Imprecisions with window-resizing cursors, E Sabof, 2014/02/22
- bug#16647: Imprecisions with window-resizing cursors, martin rudalics, 2014/02/22
- bug#16647: Imprecisions with window-resizing cursors, E Sabof, 2014/02/22
- bug#16647: Imprecisions with window-resizing cursors, N. Jackson, 2014/02/22
- bug#16647: Imprecisions with window-resizing cursors, martin rudalics, 2014/02/23
- bug#16647: Imprecisions with window-resizing cursors, N. Jackson, 2014/02/23
- bug#16647: Imprecisions with window-resizing cursors, martin rudalics, 2014/02/24