diff options
author | Richard M. Stallman <[email protected]> | 1994-07-07 03:03:34 +0000 |
---|---|---|
committer | Richard M. Stallman <[email protected]> | 1994-07-07 03:03:34 +0000 |
commit | fb3b7de5e991e7f9b35298fa29de8288dba4038f (patch) | |
tree | fae075d2915a2254ebf1d1a3ceb5dc0f0ca9c8c1 /src/xterm.c | |
parent | 309848baf427f80a818094870fe218c0a045864c (diff) |
(XTread_socket, construct_menu_click) [USE_X_TOOLKIT]:
Update x_mouse_grabbed and Vmouse_depressed.
(x_make_frame_visible): In x_sync loop at the end,
every fourth time, sleep for 1/4 second.
Diffstat (limited to 'src/xterm.c')
-rw-r--r-- | src/xterm.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/xterm.c b/src/xterm.c index d859ffdfee..56c37ae132 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -2061,6 +2061,15 @@ construct_menu_click (result, event, f) XSET (result->x, Lisp_Int, event->x); XSET (result->y, Lisp_Int, -1); XSET (result->frame_or_window, Lisp_Frame, f); + + /* Notice if the mouse is still grabbed. */ + if (event->type == ButtonPress) + { + if (! x_mouse_grabbed) + Vmouse_depressed = Qt; + x_mouse_grabbed |= (1 << event->button); + last_mouse_frame = f; + } } /* Function to report a mouse movement to the mainstream Emacs code. @@ -2385,9 +2394,15 @@ show_mouse_face (hl) int width = window_internal_width (w); FRAME_PTR f = XFRAME (WINDOW_FRAME (w)); int i; - int curs_x = f->phys_cursor_x; - int curs_y = f->phys_cursor_y; int cursor_off = 0; + int old_curs_x = curs_x; + int old_curs_y = curs_y; + + /* Set these variables temporarily + so that if we have to turn the cursor off and on again + we will put it back at the same place. */ + curs_x = f->phys_cursor_x; + curs_y = f->phys_cursor_y; for (i = mouse_face_beg_row; i <= mouse_face_end_row; i++) { @@ -2417,6 +2432,9 @@ show_mouse_face (hl) if (cursor_off) x_display_cursor (f, 1); + curs_x = old_curs_x; + curs_y = old_curs_y; + /* Change the mouse cursor according to the value of HL. */ if (hl > 0) XDefineCursor (XDISPLAY FRAME_X_WINDOW (f), f->display.x->cross_cursor); @@ -4206,8 +4224,8 @@ XTread_socket (sd, bufp, numchars, waitp, expected) } else { - struct scroll_bar *bar = - x_window_to_scroll_bar (event.xbutton.window); + struct scroll_bar *bar + = x_window_to_scroll_bar (event.xbutton.window); if (bar) x_scroll_bar_handle_click (bar, &event, &emacs_event); @@ -4218,6 +4236,12 @@ XTread_socket (sd, bufp, numchars, waitp, expected) if (f && event.type == ButtonPress) construct_menu_click (&emacs_event, &event, f); + else if (f) + { + x_mouse_grabbed &= ~(1 << event.xbutton.button); + if (!x_mouse_grabbed) + Vmouse_depressed = Qnil; + } } #endif /* USE_X_TOOLKIT */ } |