- guint sig = signals[map[event->type]];
- if (!g_signal_has_handler_pending(object, sig, 0, FALSE))
+ guint sig = map[event->type];
+
+ /* Handle button click */
+ if (sig == SIG_BUTTON_PRESS)
+ object->state.clicking = TRUE;
+ if (sig == SIG_BUTTON_RELEASE && object->state.clicking)
+ g_signal_emit(object, signals[SIG_CLICKED], 0, event);
+ if (sig == SIG_BUTTON_RELEASE || sig == SIG_MOTION)
+ object->state.clicking = FALSE;
+
+ /* Emit this signal */
+ if (!g_signal_has_handler_pending(object, signals[sig], 0, FALSE))