/* Handle button click */
if (sig == SIG_BUTTON_PRESS)
- object->state.clicking = TRUE;
+ object->state.clicking = GRITS_CLICK_THRESHOLD;
+ if (sig == SIG_MOTION && object->state.clicking)
+ object->state.clicking -= 1;
if (sig == SIG_BUTTON_RELEASE && object->state.clicking)
g_signal_emit(object, signals[SIG_CLICKED], 0, event, &rval);
- if (sig == SIG_BUTTON_RELEASE || sig == SIG_MOTION)
- object->state.clicking = FALSE;
+ if (sig == SIG_BUTTON_RELEASE)
+ object->state.clicking = 0;
/* Emit this signal */
if (rval == FALSE) {
#define GRITS_SKIP_CENTER (1<<2)
#define GRITS_SKIP_STATE (1<<3)
+/* Mouse move threshold for clicking */
+#define GRITS_CLICK_THRESHOLD 8
+
/* Picking states */
typedef struct {
guint picked : 1;
guint selected : 1;
- guint clicking : 1;
+ guint clicking : 6;
} GritsState;
typedef struct _GritsObject GritsObject;