X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/805318e13086c01dd65dae86145441711a434581..177030baaa96009fdf8188d39e93a4e13bccb8ce:/src/w32term.c diff --git a/src/w32term.c b/src/w32term.c index dfda29fb90..55c2d71834 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -4166,17 +4166,24 @@ w32_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg, int y; int dragging = bar->dragging; SCROLLINFO si; + int sb_event = LOWORD (msg->msg.wParam); si.cbSize = sizeof (si); - si.fMask = SIF_POS; + if (sb_event == SB_THUMBTRACK) + si.fMask = SIF_TRACKPOS; + else + si.fMask = SIF_POS; GetScrollInfo ((HWND) msg->msg.lParam, SB_CTL, &si); - y = si.nPos; + if (sb_event == SB_THUMBTRACK) + y = si.nTrackPos; + else + y = si.nPos; bar->dragging = 0; FRAME_DISPLAY_INFO (f)->last_mouse_scroll_bar_pos = msg->msg.wParam; - switch (LOWORD (msg->msg.wParam)) + switch (sb_event) { case SB_LINEDOWN: emacs_event->part = scroll_bar_down_arrow; @@ -4200,8 +4207,6 @@ w32_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg, break; case SB_THUMBTRACK: case SB_THUMBPOSITION: - if (VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height) <= 0xffff) - y = HIWORD (msg->msg.wParam); bar->dragging = 1; /* ??????? */ emacs_event->part = scroll_bar_handle; @@ -4272,20 +4277,28 @@ w32_horizontal_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg, { int left_range = HORIZONTAL_SCROLL_BAR_LEFT_RANGE (f, bar->width); - int x; + int x, y; int dragging = bar->dragging; SCROLLINFO si; + int sb_event = LOWORD (msg->msg.wParam); si.cbSize = sizeof (si); - si.fMask = SIF_POS; + if (sb_event == SB_THUMBTRACK) + si.fMask = SIF_TRACKPOS | SIF_PAGE | SIF_RANGE; + else + si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; GetScrollInfo ((HWND) msg->msg.lParam, SB_CTL, &si); - x = si.nPos; + if (sb_event == SB_THUMBTRACK) + x = si.nTrackPos; + else + x = si.nPos; + y = si.nMax - si.nPage; bar->dragging = 0; FRAME_DISPLAY_INFO (f)->last_mouse_scroll_bar_pos = msg->msg.wParam; - switch (LOWORD (msg->msg.wParam)) + switch (sb_event) { case SB_LINELEFT: emacs_event->part = scroll_bar_left_arrow; @@ -4309,8 +4322,6 @@ w32_horizontal_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg, break; case SB_THUMBTRACK: case SB_THUMBPOSITION: - if (HORIZONTAL_SCROLL_BAR_LEFT_RANGE (f, bar->width) <= 0xffff) - x = HIWORD (msg->msg.wParam); bar->dragging = 1; emacs_event->part = scroll_bar_horizontal_handle; @@ -4339,12 +4350,9 @@ w32_horizontal_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg, int end = bar->end; si.cbSize = sizeof (si); -/** si.fMask = SIF_PAGE | SIF_POS; **/ si.fMask = SIF_POS; -/** si.nPage = end - start + HORIZONTAL_SCROLL_BAR_MIN_HANDLE; **/ si.nPos = min (last_scroll_bar_drag_pos, XWINDOW (bar->window)->hscroll_whole - 1); -/** si.nPos = last_scroll_bar_drag_pos; **/ SetScrollInfo (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, &si, TRUE); } /* fall through */ @@ -4354,7 +4362,7 @@ w32_horizontal_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg, } XSETINT (emacs_event->x, x); - XSETINT (emacs_event->y, left_range); + XSETINT (emacs_event->y, y); return TRUE; } @@ -4375,6 +4383,7 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window, int pos; int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height); SCROLLINFO si; + int sb_event = LOWORD (dpyinfo->last_mouse_scroll_bar_pos); block_input (); @@ -4382,28 +4391,21 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window, *bar_window = bar->window; si.cbSize = sizeof (si); - si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; + if (sb_event == SB_THUMBTRACK) + si.fMask = SIF_TRACKPOS | SIF_PAGE | SIF_RANGE; + else + si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; GetScrollInfo (w, SB_CTL, &si); - pos = si.nPos; + if (sb_event == SB_THUMBTRACK) + pos = si.nTrackPos; + else + pos = si.nPos; top_range = si.nMax - si.nPage + 1; - switch (LOWORD (dpyinfo->last_mouse_scroll_bar_pos)) - { - case SB_THUMBPOSITION: - case SB_THUMBTRACK: - *part = scroll_bar_handle; - if (VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height) <= 0xffff) - pos = HIWORD (dpyinfo->last_mouse_scroll_bar_pos); - break; - case SB_LINEDOWN: - *part = scroll_bar_handle; - pos++; - break; - default: - *part = scroll_bar_handle; - break; - } + *part = scroll_bar_handle; + if (sb_event == SB_LINEDOWN) + pos++; XSETINT (*x, pos); XSETINT (*y, top_range); @@ -4431,6 +4433,7 @@ x_horizontal_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_windo int pos; int left_range = HORIZONTAL_SCROLL_BAR_LEFT_RANGE (f, bar->width); SCROLLINFO si; + int sb_event = LOWORD (dpyinfo->last_mouse_scroll_bar_pos); block_input (); @@ -4438,28 +4441,22 @@ x_horizontal_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_windo *bar_window = bar->window; si.cbSize = sizeof (si); - si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; + if (sb_event == SB_THUMBTRACK) + si.fMask = SIF_TRACKPOS | SIF_PAGE | SIF_RANGE; + else + si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; GetScrollInfo (w, SB_CTL, &si); - pos = si.nPos; + if (sb_event == SB_THUMBTRACK) + pos = si.nTrackPos; + else + pos = si.nPos; left_range = si.nMax - si.nPage + 1; - switch (LOWORD (dpyinfo->last_mouse_scroll_bar_pos)) - { - case SB_THUMBPOSITION: - case SB_THUMBTRACK: - *part = scroll_bar_handle; - if (HORIZONTAL_SCROLL_BAR_LEFT_RANGE (f, bar->width) <= 0xffff) - pos = HIWORD (dpyinfo->last_mouse_scroll_bar_pos); - break; - case SB_LINERIGHT: - *part = scroll_bar_handle; - pos++; - break; - default: - *part = scroll_bar_handle; - break; - } + *part = scroll_bar_handle; + if (sb_event == SB_LINERIGHT) + pos++; + XSETINT (*y, pos); XSETINT (*x, left_range);