aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog10
-rw-r--r--src/w32term.c97
2 files changed, 57 insertions, 50 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 871d7391c58..5d2e75577b9 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,13 @@
12014-08-20 Eli Zaretskii <eliz@gnu.org>
2
3 * w32term.c (w32_scroll_bar_handle_click)
4 (w32_horizontal_scroll_bar_handle_click)
5 (x_scroll_bar_report_motion)
6 (x_horizontal_scroll_bar_report_motion): For SB_THUMBPOSITION and
7 SB_THUMBTRACK, use the 32-bit position information returned by
8 GetScrollInfo, not the 16-bit information returned in the Windows
9 message sent to us.
10
12014-08-19 Eli Zaretskii <eliz@gnu.org> 112014-08-19 Eli Zaretskii <eliz@gnu.org>
2 12
3 * w32term.c (w32_horizontal_scroll_bar_handle_click): Fix the 13 * w32term.c (w32_horizontal_scroll_bar_handle_click): Fix the
diff --git a/src/w32term.c b/src/w32term.c
index 2772dee6c02..d9e051be870 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -4166,17 +4166,24 @@ w32_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg,
4166 int y; 4166 int y;
4167 int dragging = bar->dragging; 4167 int dragging = bar->dragging;
4168 SCROLLINFO si; 4168 SCROLLINFO si;
4169 int sb_event = LOWORD (msg->msg.wParam);
4169 4170
4170 si.cbSize = sizeof (si); 4171 si.cbSize = sizeof (si);
4171 si.fMask = SIF_POS; 4172 if (sb_event == SB_THUMBTRACK)
4173 si.fMask = SIF_TRACKPOS;
4174 else
4175 si.fMask = SIF_POS;
4172 4176
4173 GetScrollInfo ((HWND) msg->msg.lParam, SB_CTL, &si); 4177 GetScrollInfo ((HWND) msg->msg.lParam, SB_CTL, &si);
4174 y = si.nPos; 4178 if (sb_event == SB_THUMBTRACK)
4179 y = si.nTrackPos;
4180 else
4181 y = si.nPos;
4175 4182
4176 bar->dragging = 0; 4183 bar->dragging = 0;
4177 FRAME_DISPLAY_INFO (f)->last_mouse_scroll_bar_pos = msg->msg.wParam; 4184 FRAME_DISPLAY_INFO (f)->last_mouse_scroll_bar_pos = msg->msg.wParam;
4178 4185
4179 switch (LOWORD (msg->msg.wParam)) 4186 switch (sb_event)
4180 { 4187 {
4181 case SB_LINEDOWN: 4188 case SB_LINEDOWN:
4182 emacs_event->part = scroll_bar_down_arrow; 4189 emacs_event->part = scroll_bar_down_arrow;
@@ -4200,8 +4207,6 @@ w32_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg,
4200 break; 4207 break;
4201 case SB_THUMBTRACK: 4208 case SB_THUMBTRACK:
4202 case SB_THUMBPOSITION: 4209 case SB_THUMBPOSITION:
4203 if (VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height) <= 0xffff)
4204 y = HIWORD (msg->msg.wParam);
4205 bar->dragging = 1; /* ??????? */ 4210 bar->dragging = 1; /* ??????? */
4206 emacs_event->part = scroll_bar_handle; 4211 emacs_event->part = scroll_bar_handle;
4207 4212
@@ -4275,17 +4280,25 @@ w32_horizontal_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg,
4275 int x, y; 4280 int x, y;
4276 int dragging = bar->dragging; 4281 int dragging = bar->dragging;
4277 SCROLLINFO si; 4282 SCROLLINFO si;
4283 int sb_event = LOWORD (msg->msg.wParam);
4278 4284
4279 si.cbSize = sizeof (si); 4285 si.cbSize = sizeof (si);
4280 si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; 4286 if (sb_event == SB_THUMBTRACK)
4287 si.fMask = SIF_TRACKPOS | SIF_PAGE | SIF_RANGE;
4288 else
4289 si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE;
4290
4281 GetScrollInfo ((HWND) msg->msg.lParam, SB_CTL, &si); 4291 GetScrollInfo ((HWND) msg->msg.lParam, SB_CTL, &si);
4282 x = si.nPos; 4292 if (sb_event == SB_THUMBTRACK)
4283 y = si.nMax - si.nPos - si.nPage; 4293 x = si.nTrackPos;
4294 else
4295 x = si.nPos;
4296 y = si.nMax - x - si.nPage;
4284 4297
4285 bar->dragging = 0; 4298 bar->dragging = 0;
4286 FRAME_DISPLAY_INFO (f)->last_mouse_scroll_bar_pos = msg->msg.wParam; 4299 FRAME_DISPLAY_INFO (f)->last_mouse_scroll_bar_pos = msg->msg.wParam;
4287 4300
4288 switch (LOWORD (msg->msg.wParam)) 4301 switch (sb_event)
4289 { 4302 {
4290 case SB_LINELEFT: 4303 case SB_LINELEFT:
4291 emacs_event->part = scroll_bar_left_arrow; 4304 emacs_event->part = scroll_bar_left_arrow;
@@ -4309,11 +4322,6 @@ w32_horizontal_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg,
4309 break; 4322 break;
4310 case SB_THUMBTRACK: 4323 case SB_THUMBTRACK:
4311 case SB_THUMBPOSITION: 4324 case SB_THUMBPOSITION:
4312 if (HORIZONTAL_SCROLL_BAR_LEFT_RANGE (f, bar->width) <= 0xffff)
4313 {
4314 x = HIWORD (msg->msg.wParam);
4315 y = si.nMax - x - si.nPage;
4316 }
4317 bar->dragging = 1; 4325 bar->dragging = 1;
4318 emacs_event->part = scroll_bar_horizontal_handle; 4326 emacs_event->part = scroll_bar_horizontal_handle;
4319 4327
@@ -4378,6 +4386,7 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window,
4378 int pos; 4386 int pos;
4379 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height); 4387 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height);
4380 SCROLLINFO si; 4388 SCROLLINFO si;
4389 int sb_event = LOWORD (dpyinfo->last_mouse_scroll_bar_pos);
4381 4390
4382 block_input (); 4391 block_input ();
4383 4392
@@ -4385,28 +4394,21 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window,
4385 *bar_window = bar->window; 4394 *bar_window = bar->window;
4386 4395
4387 si.cbSize = sizeof (si); 4396 si.cbSize = sizeof (si);
4388 si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; 4397 if (sb_event == SB_THUMBTRACK)
4398 si.fMask = SIF_TRACKPOS | SIF_PAGE | SIF_RANGE;
4399 else
4400 si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE;
4389 4401
4390 GetScrollInfo (w, SB_CTL, &si); 4402 GetScrollInfo (w, SB_CTL, &si);
4391 pos = si.nPos; 4403 if (sb_event == SB_THUMBTRACK)
4404 pos = si.nTrackPos;
4405 else
4406 pos = si.nPos;
4392 top_range = si.nMax - si.nPage + 1; 4407 top_range = si.nMax - si.nPage + 1;
4393 4408
4394 switch (LOWORD (dpyinfo->last_mouse_scroll_bar_pos)) 4409 *part = scroll_bar_handle;
4395 { 4410 if (sb_event == SB_LINEDOWN)
4396 case SB_THUMBPOSITION: 4411 pos++;
4397 case SB_THUMBTRACK:
4398 *part = scroll_bar_handle;
4399 if (VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height) <= 0xffff)
4400 pos = HIWORD (dpyinfo->last_mouse_scroll_bar_pos);
4401 break;
4402 case SB_LINEDOWN:
4403 *part = scroll_bar_handle;
4404 pos++;
4405 break;
4406 default:
4407 *part = scroll_bar_handle;
4408 break;
4409 }
4410 4412
4411 XSETINT (*x, pos); 4413 XSETINT (*x, pos);
4412 XSETINT (*y, top_range); 4414 XSETINT (*y, top_range);
@@ -4434,6 +4436,7 @@ x_horizontal_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_windo
4434 int pos; 4436 int pos;
4435 int left_range = HORIZONTAL_SCROLL_BAR_LEFT_RANGE (f, bar->width); 4437 int left_range = HORIZONTAL_SCROLL_BAR_LEFT_RANGE (f, bar->width);
4436 SCROLLINFO si; 4438 SCROLLINFO si;
4439 int sb_event = LOWORD (dpyinfo->last_mouse_scroll_bar_pos);
4437 4440
4438 block_input (); 4441 block_input ();
4439 4442
@@ -4441,28 +4444,22 @@ x_horizontal_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_windo
4441 *bar_window = bar->window; 4444 *bar_window = bar->window;
4442 4445
4443 si.cbSize = sizeof (si); 4446 si.cbSize = sizeof (si);
4444 si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; 4447 if (sb_event == SB_THUMBTRACK)
4448 si.fMask = SIF_TRACKPOS | SIF_PAGE | SIF_RANGE;
4449 else
4450 si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE;
4445 4451
4446 GetScrollInfo (w, SB_CTL, &si); 4452 GetScrollInfo (w, SB_CTL, &si);
4447 pos = si.nPos; 4453 if (sb_event == SB_THUMBTRACK)
4454 pos = si.nTrackPos;
4455 else
4456 pos = si.nPos;
4448 left_range = si.nMax - si.nPage + 1; 4457 left_range = si.nMax - si.nPage + 1;
4449 4458
4450 switch (LOWORD (dpyinfo->last_mouse_scroll_bar_pos)) 4459 *part = scroll_bar_handle;
4451 { 4460 if (sb_event == SB_LINERIGHT)
4452 case SB_THUMBPOSITION: 4461 pos++;
4453 case SB_THUMBTRACK: 4462
4454 *part = scroll_bar_handle;
4455 if (HORIZONTAL_SCROLL_BAR_LEFT_RANGE (f, bar->width) <= 0xffff)
4456 pos = HIWORD (dpyinfo->last_mouse_scroll_bar_pos);
4457 break;
4458 case SB_LINERIGHT:
4459 *part = scroll_bar_handle;
4460 pos++;
4461 break;
4462 default:
4463 *part = scroll_bar_handle;
4464 break;
4465 }
4466 4463
4467 XSETINT (*y, pos); 4464 XSETINT (*y, pos);
4468 XSETINT (*x, left_range); 4465 XSETINT (*x, left_range);