diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 10 | ||||
| -rw-r--r-- | src/w32term.c | 97 |
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 @@ | |||
| 1 | 2014-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 | |||
| 1 | 2014-08-19 Eli Zaretskii <eliz@gnu.org> | 11 | 2014-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); |