summaryrefslogtreecommitdiff
path: root/src/xterm.c
diff options
context:
space:
mode:
authorDmitry Antipov <dmantipov@yandex.ru>2013-09-02 19:48:59 +0400
committerDmitry Antipov <dmantipov@yandex.ru>2013-09-02 19:48:59 +0400
commitb594a96c8729c73619c1cccdcb092653910fc70a (patch)
tree82e019c6cdd05d13c32934ea64af2dbfad90a7bd /src/xterm.c
parent96edb677815a79f2952d49959a0d4a8be6da08d6 (diff)
downloademacs-b594a96c8729c73619c1cccdcb092653910fc70a.tar.gz
* xterm.c (x_last_mouse_movement_time): Revert last change.
This code should use XDisplayMotionBufferSize to check display's motion history first, and there are few other issues as well. (x_scroll_bar_note_movement): Pass XMotionEvent rather than XEvent. (handle_one_xevent): Adjust user.
Diffstat (limited to 'src/xterm.c')
-rw-r--r--src/xterm.c73
1 files changed, 18 insertions, 55 deletions
diff --git a/src/xterm.c b/src/xterm.c
index 2def3ef11d5..f470afea446 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -133,9 +133,6 @@ extern void _XEditResCheckMessages (Widget, XtPointer, XEvent *, Boolean *);
#include <X11/XKBlib.h>
#endif
-/* Default to using XGetMotionEvents. */
-#define X_MOTION_HISTORY 1
-
/* Default to using XIM if available. */
#ifdef USE_XIM
int use_xim = 1;
@@ -224,6 +221,15 @@ static struct frame *last_mouse_glyph_frame;
static Lisp_Object last_mouse_scroll_bar;
+/* This is a hack. We would really prefer that XTmouse_position would
+ return the time associated with the position it returns, but there
+ doesn't seem to be any way to wrest the time-stamp from the server
+ along with the position query. So, we just keep track of the time
+ of the last movement we received, and return that in hopes that
+ it's somewhat accurate. */
+
+static Time last_mouse_movement_time;
+
/* Time for last user interaction as returned in X events. */
static Time last_user_time;
@@ -3716,48 +3722,6 @@ construct_mouse_click (struct input_event *result, XButtonEvent *event, struct f
return Qnil;
}
-#ifdef X_MOTION_HISTORY
-
-/* Here we assume that X server supports XGetMotionEvents. If you hit
- eassert in the function below, most probably your X server is too
- old and/or buggy. Undef X_MOTION_HISTORY to enable legacy code. */
-
-static Time
-x_last_mouse_movement_time (struct frame *f)
-{
- Time t;
- int nevents;
- XTimeCoord *xtc;
-
- block_input ();
- xtc = XGetMotionEvents (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
- 1, last_user_time, &nevents);
- eassert (xtc && nevents > 0);
- t = xtc[nevents - 1].time;
- XFree (xtc);
- unblock_input ();
- return t;
-}
-
-#else /* no X_MOTION_HISTORY */
-
-/* This is a hack. We would really prefer that XTmouse_position would
- return the time associated with the position it returns, but there
- doesn't seem to be any way to wrest the time-stamp from the server
- along with the position query. So, we just keep track of the time
- of the last movement we received, and return that in hopes that
- it's somewhat accurate. */
-
-static Time last_mouse_movement_time;
-
-static Time
-x_last_mouse_movement_time (struct frame *f)
-{
- return last_mouse_movement_time;
-}
-
-#endif /* X_MOTION_HISTORY */
-
/* Function to report a mouse movement to the mainstream Emacs code.
The input handler calls this.
@@ -3772,9 +3736,7 @@ static Lisp_Object last_mouse_motion_frame;
static int
note_mouse_movement (struct frame *frame, XMotionEvent *event)
{
-#ifndef X_MOTION_HISTORY
last_mouse_movement_time = event->time;
-#endif /* legacy */
last_mouse_motion_event = *event;
XSETFRAME (last_mouse_motion_frame, frame);
@@ -4030,7 +3992,7 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
*fp = f1;
XSETINT (*x, win_x);
XSETINT (*y, win_y);
- *timestamp = x_last_mouse_movement_time (f1);
+ *timestamp = last_mouse_movement_time;
}
}
}
@@ -5533,12 +5495,12 @@ x_scroll_bar_handle_click (struct scroll_bar *bar, XEvent *event, struct input_e
mark bits. */
static void
-x_scroll_bar_note_movement (struct scroll_bar *bar, XEvent *event)
+x_scroll_bar_note_movement (struct scroll_bar *bar, XMotionEvent *event)
{
struct frame *f = XFRAME (XWINDOW (bar->window)->frame);
-#ifndef X_MOTION_HISTORY
- last_mouse_movement_time = event->xmotion.time;
-#endif /* legacy */
+
+ last_mouse_movement_time = event->time;
+
f->mouse_moved = 1;
XSETVECTOR (last_mouse_scroll_bar, bar);
@@ -5546,7 +5508,7 @@ x_scroll_bar_note_movement (struct scroll_bar *bar, XEvent *event)
if (! NILP (bar->dragging))
{
/* Where should the handle be now? */
- int new_start = event->xmotion.y - XINT (bar->dragging);
+ int new_start = event->y - XINT (bar->dragging);
if (new_start != bar->start)
{
@@ -5623,9 +5585,10 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window,
f->mouse_moved = 0;
last_mouse_scroll_bar = Qnil;
- *timestamp = x_last_mouse_movement_time (f);
}
+ *timestamp = last_mouse_movement_time;
+
unblock_input ();
}
@@ -6722,7 +6685,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
event.xmotion.window);
if (bar)
- x_scroll_bar_note_movement (bar, &event);
+ x_scroll_bar_note_movement (bar, &event.xmotion);
#endif /* USE_TOOLKIT_SCROLL_BARS */
/* If we move outside the frame, then we're