diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 9 | ||||
| -rw-r--r-- | src/window.c | 66 |
2 files changed, 54 insertions, 21 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index b8a419b2acb..9c98f9d31f6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,12 @@ | |||
| 1 | 2000-12-01 Gerd Moellmann <gerd@gnu.org> | ||
| 2 | |||
| 3 | * window.c (coordinates_in_window): Handle computations for | ||
| 4 | positions on the vertical bar and fringes differently for | ||
| 5 | window-system frames. Consider some pixels near the vertical bar | ||
| 6 | as on the bar if the frame doesn't have vertical scroll bars. | ||
| 7 | Associate positions between mode or header lines with the | ||
| 8 | right window, the left one. | ||
| 9 | |||
| 1 | 2000-12-01 Jason Rumney <jasonr@gnu.org> | 10 | 2000-12-01 Jason Rumney <jasonr@gnu.org> |
| 2 | 11 | ||
| 3 | * w32term.c (w32_clear_window): Avoid clearing an invalid frame. | 12 | * w32term.c (w32_clear_window): Avoid clearing an invalid frame. |
diff --git a/src/window.c b/src/window.c index 676156c221b..2460e00bf5c 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -538,8 +538,9 @@ coordinates_in_window (w, x, y) | |||
| 538 | if (WINDOW_WANTS_MODELINE_P (w) | 538 | if (WINDOW_WANTS_MODELINE_P (w) |
| 539 | && *y >= bottom_y - CURRENT_MODE_LINE_HEIGHT (w)) | 539 | && *y >= bottom_y - CURRENT_MODE_LINE_HEIGHT (w)) |
| 540 | { | 540 | { |
| 541 | if (XFASTINT (w->left) > 0 | 541 | if (!WINDOW_RIGHTMOST_P (w) |
| 542 | && (abs (*x - XFASTINT (w->left) * CANON_X_UNIT (f)) | 542 | && (abs (*x - ((XFASTINT (w->left) + XFASTINT (w->width)) |
| 543 | * CANON_X_UNIT (f))) | ||
| 543 | < CANON_X_UNIT (f) / 2)) | 544 | < CANON_X_UNIT (f) / 2)) |
| 544 | return ON_VERTICAL_BORDER; | 545 | return ON_VERTICAL_BORDER; |
| 545 | return ON_MODE_LINE; | 546 | return ON_MODE_LINE; |
| @@ -548,33 +549,56 @@ coordinates_in_window (w, x, y) | |||
| 548 | if (WINDOW_WANTS_HEADER_LINE_P (w) | 549 | if (WINDOW_WANTS_HEADER_LINE_P (w) |
| 549 | && *y < top_y + CURRENT_HEADER_LINE_HEIGHT (w)) | 550 | && *y < top_y + CURRENT_HEADER_LINE_HEIGHT (w)) |
| 550 | { | 551 | { |
| 551 | if (XFASTINT (w->left) > 0 | 552 | if (!WINDOW_RIGHTMOST_P (w) |
| 552 | && (abs (*x - XFASTINT (w->left) * CANON_X_UNIT (f)) | 553 | && (abs (*x - ((XFASTINT (w->left) + XFASTINT (w->width)) |
| 554 | * CANON_X_UNIT (f))) | ||
| 553 | < CANON_X_UNIT (f) / 2)) | 555 | < CANON_X_UNIT (f) / 2)) |
| 554 | return ON_VERTICAL_BORDER; | 556 | return ON_VERTICAL_BORDER; |
| 555 | return ON_HEADER_LINE; | 557 | return ON_HEADER_LINE; |
| 556 | } | 558 | } |
| 557 | 559 | ||
| 558 | /* Need to say "*x > right_x" rather than >=, since on character | 560 | if (FRAME_WINDOW_P (f)) |
| 559 | terminals, the vertical line's x coordinate is right_x. */ | ||
| 560 | if (*x < left_x || *x > right_x) | ||
| 561 | { | 561 | { |
| 562 | /* Other lines than the mode line don't include flags areas and | 562 | if (!w->pseudo_window_p |
| 563 | scroll bars on the left. */ | 563 | && !FRAME_HAS_VERTICAL_SCROLL_BARS (f) |
| 564 | && !WINDOW_RIGHTMOST_P (w) | ||
| 565 | && (abs (*x - right_x - flags_area_width) < CANON_X_UNIT (f) / 2)) | ||
| 566 | return ON_VERTICAL_BORDER; | ||
| 567 | |||
| 568 | if (*x < left_x || *x > right_x) | ||
| 569 | { | ||
| 570 | /* Other lines than the mode line don't include flags areas and | ||
| 571 | scroll bars on the left. */ | ||
| 564 | 572 | ||
| 565 | /* Convert X and Y to window-relative pixel coordinates. */ | 573 | /* Convert X and Y to window-relative pixel coordinates. */ |
| 566 | *x -= left_x; | 574 | *x -= left_x; |
| 567 | *y -= top_y; | 575 | *y -= top_y; |
| 568 | return *x < left_x ? ON_LEFT_FRINGE : ON_RIGHT_FRINGE; | 576 | return *x < left_x ? ON_LEFT_FRINGE : ON_RIGHT_FRINGE; |
| 577 | } | ||
| 569 | } | 578 | } |
| 579 | else | ||
| 580 | { | ||
| 581 | /* Need to say "*x > right_x" rather than >=, since on character | ||
| 582 | terminals, the vertical line's x coordinate is right_x. */ | ||
| 583 | if (*x < left_x || *x > right_x) | ||
| 584 | { | ||
| 585 | /* Other lines than the mode line don't include flags areas and | ||
| 586 | scroll bars on the left. */ | ||
| 587 | |||
| 588 | /* Convert X and Y to window-relative pixel coordinates. */ | ||
| 589 | *x -= left_x; | ||
| 590 | *y -= top_y; | ||
| 591 | return *x < left_x ? ON_LEFT_FRINGE : ON_RIGHT_FRINGE; | ||
| 592 | } | ||
| 570 | 593 | ||
| 571 | /* Here, too, "*x > right_x" is because of character terminals. */ | 594 | /* Here, too, "*x > right_x" is because of character terminals. */ |
| 572 | if (!w->pseudo_window_p | 595 | if (!w->pseudo_window_p |
| 573 | && !WINDOW_RIGHTMOST_P (w) | 596 | && !WINDOW_RIGHTMOST_P (w) |
| 574 | && *x > right_x - CANON_X_UNIT (f)) | 597 | && *x > right_x - CANON_X_UNIT (f)) |
| 575 | /* On the border on the right side of the window? Assume that | 598 | /* On the border on the right side of the window? Assume that |
| 576 | this area begins at RIGHT_X minus a canonical char width. */ | 599 | this area begins at RIGHT_X minus a canonical char width. */ |
| 577 | return ON_VERTICAL_BORDER; | 600 | return ON_VERTICAL_BORDER; |
| 601 | } | ||
| 578 | 602 | ||
| 579 | /* Convert X and Y to window-relative pixel coordinates. */ | 603 | /* Convert X and Y to window-relative pixel coordinates. */ |
| 580 | *x -= left_x; | 604 | *x -= left_x; |