From bdcdc9dc364f2666185ea7d0ecfe51f180fc8520 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sat, 9 Apr 2011 23:59:17 +0000 Subject: [PATCH] 2011-04-10 01:58 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * src/rtl/gtxwc/gtxwc.c % undone small optimization in 2011-04-04 10:48 UTC+0200 Przemyslaw Czerpak because it caused random app stalls where the app would only continue if some input events were manually made. Cursor blinking also only happened on input events. I've seen this issue on Ubuntu 10.10 and latest OS X. After this patch, it works OK again. Przemek, please review this patch, most probably there is a solution which keeps the optimization and avoids this problem. --- harbour/ChangeLog | 11 +++++++++++ harbour/src/rtl/gtxwc/gtxwc.c | 22 +++++++++------------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 525cbcb0b1..b6ae09d0e1 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,17 @@ The license applies to all entries newer than 2009-04-28. */ +2011-04-10 01:58 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * src/rtl/gtxwc/gtxwc.c + % undone small optimization in 2011-04-04 10:48 UTC+0200 Przemyslaw Czerpak + because it caused random app stalls where the app would only + continue if some input events were manually made. Cursor + blinking also only happened on input events. + I've seen this issue on Ubuntu 10.10 and latest OS X. + After this patch, it works OK again. + Przemek, please review this patch, most probably there is + a solution which keeps the optimization and avoids this problem. + 2011-04-10 01:26 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/src/rtl/cdpapi.c ! some fixes for future CPs which may have together multibyte diff --git a/harbour/src/rtl/gtxwc/gtxwc.c b/harbour/src/rtl/gtxwc/gtxwc.c index 1223bb9573..ce51ca06b7 100644 --- a/harbour/src/rtl/gtxwc/gtxwc.c +++ b/harbour/src/rtl/gtxwc/gtxwc.c @@ -2945,23 +2945,19 @@ static void hb_gt_xwc_ProcessMessages( PXWND_DEF wnd ) } #if 1 - if( XEventsQueued( wnd->dpy, QueuedAfterFlush ) ) + do { - do + while( XEventsQueued( wnd->dpy, QueuedAfterFlush ) ) { - do - { - XEvent evt; - XNextEvent( wnd->dpy, &evt ); - hb_gt_xwc_WndProc( wnd, &evt ); - } - while( XEventsQueued( wnd->dpy, QueuedAfterFlush ) ); - hb_gt_xwc_UpdateSize( wnd ); - hb_gt_xwc_UpdatePts( wnd ); - hb_gt_xwc_UpdateCursor( wnd ); + XEvent evt; + XNextEvent( wnd->dpy, &evt ); + hb_gt_xwc_WndProc( wnd, &evt ); } - while( XEventsQueued( wnd->dpy, QueuedAfterFlush ) ); + hb_gt_xwc_UpdateSize( wnd ); + hb_gt_xwc_UpdatePts( wnd ); + hb_gt_xwc_UpdateCursor( wnd ); } + while( XEventsQueued( wnd->dpy, QueuedAfterFlush ) ); #else { HB_BOOL fRepeat;