keep track of the times of the last event (for those events that report time)

and use that instead of CurrentTime in the X selection code (as recommended
by the ICCCM)
This commit is contained in:
Bill Currie 2002-01-08 20:07:19 +00:00
parent 6633ea0273
commit 96c7159f66
3 changed files with 18 additions and 17 deletions

View file

@ -44,6 +44,7 @@ extern XVisualInfo *x_visinfo;
extern double x_gamma; extern double x_gamma;
extern int x_screen; extern int x_screen;
extern int x_shmeventtype; extern int x_shmeventtype;
extern Time x_time;
extern qboolean doShm; extern qboolean doShm;
extern qboolean oktodraw; extern qboolean oktodraw;

View file

@ -89,6 +89,7 @@ Visual *x_vis;
Window x_win; Window x_win;
Cursor nullcursor = None; Cursor nullcursor = None;
static Atom aWMDelete = 0; static Atom aWMDelete = 0;
Time x_time;
#define X_MASK (VisibilityChangeMask | StructureNotifyMask | ExposureMask) #define X_MASK (VisibilityChangeMask | StructureNotifyMask | ExposureMask)
#define MOUSE_MASK (ButtonPressMask | ButtonReleaseMask | PointerMotionMask) #define MOUSE_MASK (ButtonPressMask | ButtonReleaseMask | PointerMotionMask)
@ -180,13 +181,7 @@ X11_ProcessEvent (void)
XEvent x_event; XEvent x_event;
XNextEvent (x_disp, &x_event); XNextEvent (x_disp, &x_event);
if (x_event.type >= LASTEvent) { X11_ProcessEventProxy (&x_event);
if (x_event.type == x_shmeventtype)
oktodraw = 1;
return;
}
if (event_handlers[x_event.type])
event_handlers[x_event.type] (&x_event);
} }
void void

View file

@ -133,15 +133,12 @@ in_paste_buffer_f (void)
if (XGetSelectionOwner (x_disp, XA_PRIMARY) == None) if (XGetSelectionOwner (x_disp, XA_PRIMARY) == None)
return; return;
property = XInternAtom (x_disp, "GETCLIPBOARDDATA_PROP", False); property = XInternAtom (x_disp, "GETCLIPBOARDDATA_PROP", False);
//FIXME shouldn't use CurrentTime but rather the timestamp of the event XConvertSelection (x_disp, XA_PRIMARY, XA_STRING, property, x_win, x_time);
//triggering this (timestamp of the last event?)
XConvertSelection (x_disp, XA_PRIMARY, XA_STRING, property, x_win,
CurrentTime);
XFlush (x_disp); XFlush (x_disp);
} }
static void static void
selection_notify (XEvent * event) selection_notify (XEvent *event)
{ {
unsigned char *data, *p; unsigned char *data, *p;
unsigned long num_bytes; unsigned long num_bytes;
@ -149,6 +146,8 @@ selection_notify (XEvent * event)
int format; int format;
Atom type, property; Atom type, property;
x_time = event->xselection.time;
if ((property = event->xselection.property) == None) if ((property = event->xselection.property) == None)
return; return;
@ -423,9 +422,11 @@ XLateKey (XKeyEvent * ev, int *k, int *u)
} }
static void static void
event_key (XEvent * event) event_key (XEvent *event)
{ {
int key, unicode; int key, unicode;
x_time = event->xkey.time;
if (old_key_dest != key_dest) { if (old_key_dest != key_dest) {
old_key_dest = key_dest; old_key_dest = key_dest;
if (key_dest == key_game) { if (key_dest == key_game) {
@ -439,10 +440,12 @@ event_key (XEvent * event)
} }
static void static void
event_button (XEvent * event) event_button (XEvent *event)
{ {
int but; int but;
x_time = event->xbutton.time;
but = event->xbutton.button; but = event->xbutton.button;
if (but == 2) if (but == 2)
but = 3; but = 3;
@ -464,7 +467,7 @@ event_button (XEvent * event)
} }
static void static void
event_focusout (XEvent * event) event_focusout (XEvent *event)
{ {
XAutoRepeatOn (x_disp); XAutoRepeatOn (x_disp);
if (in_snd_block->int_val) { if (in_snd_block->int_val) {
@ -474,7 +477,7 @@ event_focusout (XEvent * event)
} }
static void static void
event_focusin (XEvent * event) event_focusin (XEvent *event)
{ {
if (key_dest == key_game) if (key_dest == key_game)
XAutoRepeatOff (x_disp); XAutoRepeatOff (x_disp);
@ -498,8 +501,10 @@ center_pointer (void)
} }
static void static void
event_motion (XEvent * event) event_motion (XEvent *event)
{ {
x_time = event->xmotion.time;
if (dga_active) { if (dga_active) {
in_mouse_x += event->xmotion.x_root; in_mouse_x += event->xmotion.x_root;
in_mouse_y += event->xmotion.y_root; in_mouse_y += event->xmotion.y_root;