# HG changeset patch # User Thinker K.F. Li # Date 1236524931 -28800 # Node ID 892f4efe2e48f4d6f44b58978ab0c2660f4c17a3 # Parent 700954870ceefcc8f5b7ac66bf8612cd8c9029a2 Prevent applications from hanging by massive mouse motion events. - When massive motion events are send by mouse, the application will busy for processing events. - The motion events are aggregated to prevent applicatin from hanging for massive mouse motion events. diff -r 700954870cee -r 892f4efe2e48 src/X_supp.c --- a/src/X_supp.c Sun Mar 08 22:45:14 2009 +0800 +++ b/src/X_supp.c Sun Mar 08 23:08:51 2009 +0800 @@ -177,7 +177,7 @@ static void handle_x_event(X_MB_runtime_t *rt) { Display *display = rt->display; redraw_man_t *rdman = rt->rdman; - XEvent evt; + XEvent evt, peek_evt; XMotionEvent *mevt; XButtonEvent *bevt; XExposeEvent *eevt; @@ -231,6 +231,17 @@ break; case MotionNotify: + while(XEventsQueued(display, QueuedAfterReading) > 0) { + r = XPeekEvent(display, &peek_evt); + if(r == -1) + break; + if(peek_evt.type != MotionNotify) + break; + XNextEvent(display, &evt); + } + if(r == -1) + break; + mevt = (XMotionEvent *)&evt; x = mevt->x; y = mevt->y;