#include "xevents.h"
+/* Maximum time between mouse double-clicks, in milliseconds */
+#define DOUBLE_CLICK_MAX_INTERVAL_MS 250
+
+
/* Function pointers to handle single and double mouse click events. */
static void (*SingleClickCallback)( void ) = NULL;
void
ProcessXlibEvents( void )
{
- bool quit = FALSE;
- bool button1_pressed = FALSE;
- bool check_for_double_click = FALSE;
+ bool quit = false;
+ bool button1_pressed = false;
+ bool check_for_double_click = false;
XEvent Event;
- while( quit == FALSE ) {
- if( ( check_for_double_click != FALSE ) &&
+ while( quit == false ) {
+ if( ( check_for_double_click != false ) &&
( XPending( dockapp.display ) == 0 ) ) {
/* If no other button 1 events are received after the delay, then it is a
single-click mouse event. */
(*SingleClickCallback)();
}
- check_for_double_click = FALSE;
+ check_for_double_click = false;
}
/* XNextEvent is a blocking call: it will return only when an event is
ready to be processed, thus freeing the CPU for other tasks when no
/* Window was killed... */
/* Is this necessary ? */
(void) XCloseDisplay( dockapp.display );
- quit = TRUE;
+ quit = true;
break;
case ClientMessage:
/* Doesn't seem to work... */
case ButtonPress:
if( Event.xbutton.button == Button1 ) {
/* Mouse LEFT button pressed. */
- button1_pressed = TRUE;
+ button1_pressed = true;
}
break;
case ButtonRelease:
if( Event.xbutton.button == Button1 ) {
/* Mouse LEFT button released. */
- if( button1_pressed != FALSE ) {
+ if( button1_pressed != false ) {
/* We act only when the button is released */
- if( check_for_double_click != FALSE ) {
+ if( check_for_double_click != false ) {
/* Double-click */
if( DoubleClickCallback != NULL ) {
(*DoubleClickCallback)();
}
- check_for_double_click = FALSE;
+ check_for_double_click = false;
}
else {
(void) usleep( DOUBLE_CLICK_MAX_INTERVAL_MS * 1000 );
- check_for_double_click = TRUE;
+ check_for_double_click = true;
}
}
}