aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog38
-rw-r--r--src/buffer.c12
-rw-r--r--src/keyboard.c26
-rw-r--r--src/sysdep.c25
-rw-r--r--src/xdisp.c31
-rw-r--r--src/xterm.c15
6 files changed, 116 insertions, 31 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index d8c93e96754..30db0548172 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,41 @@
12005-10-14 Kim F. Storm <storm@cua.dk>
2
3 * xterm.c (note_mouse_movement): Return 1 if mouse moved; 0 otherwise.
4 (handle_one_xevent): Only clear help_echo_string; restore it if
5 note_mouse_movement didn't record any mouse movement.
6
7 * xdisp.c (pos_visible_p): Convert w->hscroll to pixels before use.
8 (remember_mouse_glyph): Clear RECT if mouse is over an image glyph.
9
10 * keyboard.c (make_lispy_position): Adjust wx for left margin if ON_TEXT.
11 (Fposn_at_x_y): Fix calculation of x coordinate.
12 (Fposn_at_point): Return nil if point is hscrolled out of view.
13
142005-10-13 Andreas Schwab <schwab@suse.de>
15
16 * sysdep.c (request_sigio, unrequest_sigio): Do nothing in
17 non-interactive mode.
18
192005-10-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
20
21 * xterm.c, w32term.c, macterm.c (note_mouse_movement): Undo last change.
22
232005-10-12 Kim F. Storm <storm@cua.dk>
24
25 * xterm.c (handle_one_xevent): Clear last_mouse_glyph on mouse up/down.
26
272005-10-12 Romain Francoise <romain@orebokech.com>
28
29 * buffer.c (init_buffer): Rename `rc' to `len' for clarity.
30
312005-10-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
32
33 * xdisp.c (remember_mouse_glyph): Use MATRIX_BOTTOM_TEXT_ROW to
34 get end of text rows. Obtain header-line/mode-line rows directly.
35
36 * xterm.c, w32term.c, macterm.c (note_mouse_movement): Restore
37 help_echo_string if mouse is moved inside last_mouse_glyph.
38
12005-10-12 Kim F. Storm <storm@cua.dk> 392005-10-12 Kim F. Storm <storm@cua.dk>
2 40
3 * xdisp.c (remember_mouse_glyph): New generic version based on 41 * xdisp.c (remember_mouse_glyph): New generic version based on
diff --git a/src/buffer.c b/src/buffer.c
index fb1ff1c22e9..c173136961e 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -5114,7 +5114,7 @@ init_buffer ()
5114 char *pwd; 5114 char *pwd;
5115 struct stat dotstat, pwdstat; 5115 struct stat dotstat, pwdstat;
5116 Lisp_Object temp; 5116 Lisp_Object temp;
5117 int rc; 5117 int len;
5118 5118
5119#ifdef USE_MMAP_FOR_BUFFERS 5119#ifdef USE_MMAP_FOR_BUFFERS
5120 { 5120 {
@@ -5141,13 +5141,13 @@ init_buffer ()
5141#ifndef VMS 5141#ifndef VMS
5142 /* Maybe this should really use some standard subroutine 5142 /* Maybe this should really use some standard subroutine
5143 whose definition is filename syntax dependent. */ 5143 whose definition is filename syntax dependent. */
5144 rc = strlen (pwd); 5144 len = strlen (pwd);
5145 if (!(IS_DIRECTORY_SEP (pwd[rc - 1]))) 5145 if (!(IS_DIRECTORY_SEP (pwd[len - 1])))
5146 { 5146 {
5147 /* Grow buffer to add directory separator and '\0'. */ 5147 /* Grow buffer to add directory separator and '\0'. */
5148 pwd = (char *) xrealloc (pwd, rc + 2); 5148 pwd = (char *) xrealloc (pwd, len + 2);
5149 pwd[rc] = DIRECTORY_SEP; 5149 pwd[len] = DIRECTORY_SEP;
5150 pwd[rc + 1] = '\0'; 5150 pwd[len + 1] = '\0';
5151 } 5151 }
5152#endif /* not VMS */ 5152#endif /* not VMS */
5153 5153
diff --git a/src/keyboard.c b/src/keyboard.c
index 4937cc445bd..814ef5dc6c9 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -5108,7 +5108,11 @@ make_lispy_position (f, x, y, time)
5108 XSETINT (*x, wx); 5108 XSETINT (*x, wx);
5109 XSETINT (*y, wy); 5109 XSETINT (*y, wy);
5110 5110
5111 if (part == ON_MODE_LINE || part == ON_HEADER_LINE) 5111 if (part == ON_TEXT)
5112 {
5113 wx += WINDOW_LEFT_MARGIN_WIDTH (w);
5114 }
5115 else if (part == ON_MODE_LINE || part == ON_HEADER_LINE)
5112 { 5116 {
5113 /* Mode line or header line. Look for a string under 5117 /* Mode line or header line. Look for a string under
5114 the mouse that may have a `local-map' property. */ 5118 the mouse that may have a `local-map' property. */
@@ -10779,11 +10783,11 @@ The `posn-' functions access elements of such lists. */)
10779 CHECK_LIVE_WINDOW (frame_or_window); 10783 CHECK_LIVE_WINDOW (frame_or_window);
10780 10784
10781 w = XWINDOW (frame_or_window); 10785 w = XWINDOW (frame_or_window);
10782 XSETINT (x, (WINDOW_TO_FRAME_PIXEL_X (w, XINT (x)) 10786 XSETINT (x, (XINT (x)
10787 + WINDOW_LEFT_EDGE_X (w)
10783 + (NILP (whole) 10788 + (NILP (whole)
10784 ? window_box_left_offset (w, TEXT_AREA) 10789 ? window_box_left_offset (w, TEXT_AREA)
10785 : - (WINDOW_LEFT_SCROLL_BAR_COLS (w) 10790 : 0)));
10786 * WINDOW_FRAME_COLUMN_WIDTH (w)))));
10787 XSETINT (y, WINDOW_TO_FRAME_PIXEL_Y (w, XINT (y))); 10791 XSETINT (y, WINDOW_TO_FRAME_PIXEL_Y (w, XINT (y)));
10788 frame_or_window = w->frame; 10792 frame_or_window = w->frame;
10789 } 10793 }
@@ -10809,9 +10813,21 @@ The `posn-' functions access elements of such lists. */)
10809{ 10813{
10810 Lisp_Object tem; 10814 Lisp_Object tem;
10811 10815
10816 if (NILP (window))
10817 window = selected_window;
10818
10812 tem = Fpos_visible_in_window_p (pos, window, Qt); 10819 tem = Fpos_visible_in_window_p (pos, window, Qt);
10813 if (!NILP (tem)) 10820 if (!NILP (tem))
10814 tem = Fposn_at_x_y (XCAR (tem), XCAR (XCDR (tem)), window, Qnil); 10821 {
10822 Lisp_Object x = XCAR (tem);
10823 Lisp_Object y = XCAR (XCDR (tem));
10824
10825 /* Point invisible due to hscrolling? */
10826 if (XINT (x) < 0)
10827 return Qnil;
10828 tem = Fposn_at_x_y (x, y, window, Qnil);
10829 }
10830
10815 return tem; 10831 return tem;
10816} 10832}
10817 10833
diff --git a/src/sysdep.c b/src/sysdep.c
index c9464cd111f..0cf6ecb1f36 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -1032,6 +1032,7 @@ reset_sigio (fd)
1032 1032
1033#ifdef FASYNC /* F_SETFL does not imply existence of FASYNC */ 1033#ifdef FASYNC /* F_SETFL does not imply existence of FASYNC */
1034/* XXX Uhm, FASYNC is not used anymore here. */ 1034/* XXX Uhm, FASYNC is not used anymore here. */
1035/* XXX Yeah, but you need it for SIGIO, don't you? */
1035 1036
1036void 1037void
1037request_sigio () 1038request_sigio ()
@@ -1039,7 +1040,7 @@ request_sigio ()
1039 /* XXX read_socket_hook is not global anymore. Is blocking SIGIO 1040 /* XXX read_socket_hook is not global anymore. Is blocking SIGIO
1040 bad under X? */ 1041 bad under X? */
1041#if 0 1042#if 0
1042 if (read_socket_hook) 1043 if (noninteractive || read_socket_hook)
1043 return; 1044 return;
1044#endif 1045#endif
1045 1046
@@ -1057,7 +1058,7 @@ unrequest_sigio (void)
1057 /* XXX read_socket_hook is not global anymore. Is blocking SIGIO 1058 /* XXX read_socket_hook is not global anymore. Is blocking SIGIO
1058 bad under X? */ 1059 bad under X? */
1059#if 0 1060#if 0
1060 if (read_socket_hook) 1061 if (noninteractive || read_socket_hook)
1061 return; 1062 return;
1062#endif 1063#endif
1063 1064
@@ -1076,7 +1077,7 @@ request_sigio ()
1076{ 1077{
1077 int on = 1; 1078 int on = 1;
1078 1079
1079 if (read_socket_hook) 1080 if (noninteractive || read_socket_hook)
1080 return; 1081 return;
1081 1082
1082 /* XXX CURTTY() is bogus here. */ 1083 /* XXX CURTTY() is bogus here. */
@@ -1089,7 +1090,7 @@ unrequest_sigio ()
1089{ 1090{
1090 int off = 0; 1091 int off = 0;
1091 1092
1092 if (read_socket_hook) 1093 if (noninteractive || read_socket_hook)
1093 return; 1094 return;
1094 1095
1095 /* XXX CURTTY() is bogus here. */ 1096 /* XXX CURTTY() is bogus here. */
@@ -1109,7 +1110,7 @@ request_sigio ()
1109 int on = 1; 1110 int on = 1;
1110 sigset_t st; 1111 sigset_t st;
1111 1112
1112 if (read_socket_hook) 1113 if (noninteractive || read_socket_hook)
1113 return; 1114 return;
1114 1115
1115 sigemptyset (&st); 1116 sigemptyset (&st);
@@ -1124,7 +1125,7 @@ unrequest_sigio ()
1124{ 1125{
1125 int off = 0; 1126 int off = 0;
1126 1127
1127 if (read_socket_hook) 1128 if (noninteractive || read_socket_hook)
1128 return; 1129 return;
1129 1130
1130 ioctl (0, FIOASYNC, &off); /* XXX This fails for multiple ttys. */ 1131 ioctl (0, FIOASYNC, &off); /* XXX This fails for multiple ttys. */
@@ -1137,7 +1138,7 @@ unrequest_sigio ()
1137void 1138void
1138request_sigio () 1139request_sigio ()
1139{ 1140{
1140 if (read_socket_hook) 1141 if (noninteractive || read_socket_hook)
1141 return; 1142 return;
1142 1143
1143 croak ("request_sigio"); 1144 croak ("request_sigio");
@@ -1146,7 +1147,7 @@ request_sigio ()
1146void 1147void
1147unrequest_sigio () 1148unrequest_sigio ()
1148{ 1149{
1149 if (read_socket_hook) 1150 if (noninteractive || read_socket_hook)
1150 return; 1151 return;
1151 1152
1152 croak ("unrequest_sigio"); 1153 croak ("unrequest_sigio");
@@ -2335,12 +2336,16 @@ reset_sigio (fd)
2335void 2336void
2336request_sigio () 2337request_sigio ()
2337{ 2338{
2339 if (noninteractive)
2340 return;
2338 croak ("request sigio"); 2341 croak ("request sigio");
2339} 2342}
2340 2343
2341void 2344void
2342unrequest_sigio () 2345unrequest_sigio ()
2343{ 2346{
2347 if (noninteractive)
2348 return;
2344 croak ("unrequest sigio"); 2349 croak ("unrequest sigio");
2345} 2350}
2346 2351
@@ -2884,6 +2889,8 @@ reset_sigio (fd)
2884void 2889void
2885request_sigio () 2890request_sigio ()
2886{ 2891{
2892 if (noninteractive)
2893 return;
2887 sigrelse (SIGTINT); 2894 sigrelse (SIGTINT);
2888 2895
2889 interrupts_deferred = 0; 2896 interrupts_deferred = 0;
@@ -2892,6 +2899,8 @@ request_sigio ()
2892void 2899void
2893unrequest_sigio () 2900unrequest_sigio ()
2894{ 2901{
2902 if (noninteractive)
2903 return;
2895 sighold (SIGTINT); 2904 sighold (SIGTINT);
2896 2905
2897 interrupts_deferred = 1; 2906 interrupts_deferred = 1;
diff --git a/src/xdisp.c b/src/xdisp.c
index 013d3955c6f..ff3d9f2ca0c 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -1335,7 +1335,7 @@ pos_visible_p (w, charpos, x, y, rtop, rbot, exact_mode_line_heights_p)
1335 current_header_line_height = current_mode_line_height = -1; 1335 current_header_line_height = current_mode_line_height = -1;
1336 1336
1337 if (visible_p && XFASTINT (w->hscroll) > 0) 1337 if (visible_p && XFASTINT (w->hscroll) > 0)
1338 *x -= XFASTINT (w->hscroll); 1338 *x -= XFASTINT (w->hscroll) * WINDOW_FRAME_COLUMN_WIDTH (w);
1339 1339
1340 return visible_p; 1340 return visible_p;
1341} 1341}
@@ -2047,7 +2047,7 @@ remember_mouse_glyph (f, gx, gy, rect)
2047 height = WINDOW_FRAME_LINE_HEIGHT (w); 2047 height = WINDOW_FRAME_LINE_HEIGHT (w);
2048 2048
2049 r = MATRIX_FIRST_TEXT_ROW (w->current_matrix); 2049 r = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
2050 end_row = r + w->current_matrix->nrows - 1; 2050 end_row = MATRIX_BOTTOM_TEXT_ROW (w->current_matrix, w);
2051 2051
2052 if (w->pseudo_window_p) 2052 if (w->pseudo_window_p)
2053 { 2053 {
@@ -2066,20 +2066,28 @@ remember_mouse_glyph (f, gx, gy, rect)
2066 area = RIGHT_MARGIN_AREA; 2066 area = RIGHT_MARGIN_AREA;
2067 goto text_glyph; 2067 goto text_glyph;
2068 2068
2069 case ON_TEXT:
2070 case ON_MODE_LINE:
2071 case ON_HEADER_LINE: 2069 case ON_HEADER_LINE:
2070 case ON_MODE_LINE:
2071 gr = (part == ON_HEADER_LINE
2072 ? MATRIX_HEADER_LINE_ROW (w->current_matrix)
2073 : MATRIX_MODE_LINE_ROW (w->current_matrix));
2074 gy = gr->y;
2075 area = TEXT_AREA;
2076 goto text_glyph_row_found;
2077
2078 case ON_TEXT:
2072 area = TEXT_AREA; 2079 area = TEXT_AREA;
2073 2080
2074 text_glyph: 2081 text_glyph:
2075 gr = 0; gy = 0; 2082 gr = 0; gy = 0;
2076 for (; r < end_row && r->enabled_p; ++r) 2083 for (; r <= end_row && r->enabled_p; ++r)
2077 if (r->y + r->height > y) 2084 if (r->y + r->height > y)
2078 { 2085 {
2079 gr = r; gy = r->y; 2086 gr = r; gy = r->y;
2080 break; 2087 break;
2081 } 2088 }
2082 2089
2090 text_glyph_row_found:
2083 if (gr && gy <= y) 2091 if (gr && gy <= y)
2084 { 2092 {
2085 struct glyph *g = gr->glyphs[area]; 2093 struct glyph *g = gr->glyphs[area];
@@ -2091,7 +2099,16 @@ remember_mouse_glyph (f, gx, gy, rect)
2091 break; 2099 break;
2092 2100
2093 if (g < end) 2101 if (g < end)
2094 width = g->pixel_width; 2102 {
2103 if (g->type == IMAGE_GLYPH)
2104 {
2105 /* Don't remember when mouse is over image, as
2106 image may have hot-spots. */
2107 STORE_NATIVE_RECT (*rect, 0, 0, 0, 0);
2108 return;
2109 }
2110 width = g->pixel_width;
2111 }
2095 else 2112 else
2096 { 2113 {
2097 /* Use nominal char spacing at end of line. */ 2114 /* Use nominal char spacing at end of line. */
@@ -2136,7 +2153,7 @@ remember_mouse_glyph (f, gx, gy, rect)
2136 2153
2137 row_glyph: 2154 row_glyph:
2138 gr = 0, gy = 0; 2155 gr = 0, gy = 0;
2139 for (; r < end_row && r->enabled_p; ++r) 2156 for (; r <= end_row && r->enabled_p; ++r)
2140 if (r->y + r->height > y) 2157 if (r->y + r->height > y)
2141 { 2158 {
2142 gr = r; gy = r->y; 2159 gr = r; gy = r->y;
diff --git a/src/xterm.c b/src/xterm.c
index 30a43995a57..ef40c8b790d 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -3588,7 +3588,7 @@ construct_mouse_click (result, event, f)
3588static XMotionEvent last_mouse_motion_event; 3588static XMotionEvent last_mouse_motion_event;
3589static Lisp_Object last_mouse_motion_frame; 3589static Lisp_Object last_mouse_motion_frame;
3590 3590
3591static void 3591static int
3592note_mouse_movement (frame, event) 3592note_mouse_movement (frame, event)
3593 FRAME_PTR frame; 3593 FRAME_PTR frame;
3594 XMotionEvent *event; 3594 XMotionEvent *event;
@@ -3602,10 +3602,11 @@ note_mouse_movement (frame, event)
3602 frame->mouse_moved = 1; 3602 frame->mouse_moved = 1;
3603 last_mouse_scroll_bar = Qnil; 3603 last_mouse_scroll_bar = Qnil;
3604 note_mouse_highlight (frame, -1, -1); 3604 note_mouse_highlight (frame, -1, -1);
3605 return 1;
3605 } 3606 }
3606 3607
3607 /* Has the mouse moved off the glyph it was on at the last sighting? */ 3608 /* Has the mouse moved off the glyph it was on at the last sighting? */
3608 else if (event->x < last_mouse_glyph.x 3609 if (event->x < last_mouse_glyph.x
3609 || event->x >= last_mouse_glyph.x + last_mouse_glyph.width 3610 || event->x >= last_mouse_glyph.x + last_mouse_glyph.width
3610 || event->y < last_mouse_glyph.y 3611 || event->y < last_mouse_glyph.y
3611 || event->y >= last_mouse_glyph.y + last_mouse_glyph.height) 3612 || event->y >= last_mouse_glyph.y + last_mouse_glyph.height)
@@ -3615,7 +3616,10 @@ note_mouse_movement (frame, event)
3615 note_mouse_highlight (frame, event->x, event->y); 3616 note_mouse_highlight (frame, event->x, event->y);
3616 /* Remember which glyph we're now on. */ 3617 /* Remember which glyph we're now on. */
3617 remember_mouse_glyph (frame, event->x, event->y, &last_mouse_glyph); 3618 remember_mouse_glyph (frame, event->x, event->y, &last_mouse_glyph);
3619 return 1;
3618 } 3620 }
3621
3622 return 0;
3619} 3623}
3620 3624
3621 3625
@@ -6496,8 +6500,7 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
6496 case MotionNotify: 6500 case MotionNotify:
6497 { 6501 {
6498 previous_help_echo_string = help_echo_string; 6502 previous_help_echo_string = help_echo_string;
6499 help_echo_string = help_echo_object = help_echo_window = Qnil; 6503 help_echo_string = Qnil;
6500 help_echo_pos = -1;
6501 6504
6502 if (dpyinfo->grabbed && last_mouse_frame 6505 if (dpyinfo->grabbed && last_mouse_frame
6503 && FRAME_LIVE_P (last_mouse_frame)) 6506 && FRAME_LIVE_P (last_mouse_frame))
@@ -6536,7 +6539,8 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
6536 6539
6537 last_window=window; 6540 last_window=window;
6538 } 6541 }
6539 note_mouse_movement (f, &event.xmotion); 6542 if (!note_mouse_movement (f, &event.xmotion))
6543 help_echo_string = previous_help_echo_string;
6540 } 6544 }
6541 else 6545 else
6542 { 6546 {
@@ -6645,6 +6649,7 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
6645 int tool_bar_p = 0; 6649 int tool_bar_p = 0;
6646 6650
6647 bzero (&compose_status, sizeof (compose_status)); 6651 bzero (&compose_status, sizeof (compose_status));
6652 bzero (&last_mouse_glyph, sizeof (last_mouse_glyph));
6648 6653
6649 if (dpyinfo->grabbed 6654 if (dpyinfo->grabbed
6650 && last_mouse_frame 6655 && last_mouse_frame