From da604136b92764f159442496a9b18cb48204787e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 9 Sep 2014 18:00:51 +0300 Subject: Fix mouse-dragging mode lines on text-mode terminals. lisp/mouse.el (mouse-drag-line): On text-mode frames, count the mode line and header line as 1 pixel. This fixes the 1-"pixel" (row) discrepancy between window-pixel-edges and mouse events, and avoids moving mode line up when the mouse click is on the modeline and no drag is attempted. --- lisp/mouse.el | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'lisp/mouse.el') diff --git a/lisp/mouse.el b/lisp/mouse.el index 99407d9f9cf..d84c6c119ed 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -395,7 +395,16 @@ must be one of the symbols `header', `mode', or `vertical'." ;; Check whether header-line can be dragged at all. (if (window-at-side-p window 'top) (setq draggable nil) - (setq height (/ (window-header-line-height window) 2)) + ;; window-pixel-edges includes the header and mode lines, so + ;; we need to account for that when calculating window growth. + ;; On GUI frames, assume the mouse is approximately in the + ;; middle of the header/mode line, so we need only half the + ;; height in pixels. + (setq height + (cond + ((display-graphic-p frame) + (/ (window-header-line-height window) 2)) + (t (window-header-line-height window)))) (setq window (window-in-direction 'above window t)))) ((eq line 'mode) ;; Check whether mode-line can be dragged at all. @@ -410,7 +419,11 @@ must be one of the symbols `header', `mode', or `vertical'." (eq minibuffer-window (active-minibuffer-window)))))) (setq draggable nil) - (setq height (/ (window-mode-line-height window) 2)))) + (setq height + (cond + ((display-graphic-p frame) + (/ (window-mode-line-height window) 2)) + (t (window-mode-line-height window)))))) ((eq line 'vertical) ;; Get the window to adjust for the vertical case. If the scroll ;; bar is on the window's right or we drag a vertical divider, -- cgit v1.2.1