while (node != NULL) {
ply_list_node_t *next_node;
ply_trigger_closure_t *closure;
+ ply_trigger_handler_result_t result = PLY_TRIGGER_HANDLER_RESULT_CONTINUE;
closure = (ply_trigger_closure_t *) ply_list_node_get_data (node);
closure->handler (closure->user_data, data, trigger);
break;
case PLY_TRIGGER_HANDLER_TYPE_INSTANCE_HANDLER:
- closure->instance_handler (closure->user_data, trigger->instance, data, trigger);
+ result = closure->instance_handler (closure->user_data, trigger->instance, data, trigger);
break;
default:
break;
}
+ if (result == PLY_TRIGGER_HANDLER_RESULT_ABORT)
+ break;
+
node = next_node;
}
typedef struct _ply_trigger ply_trigger_t;
+typedef enum
+{
+ PLY_TRIGGER_HANDLER_RESULT_CONTINUE = false,
+ PLY_TRIGGER_HANDLER_RESULT_ABORT = true
+} ply_trigger_handler_result_t;
+
typedef void (*ply_trigger_handler_t) (void *user_data,
const void *trigger_data,
ply_trigger_t *trigger);
-typedef void (*ply_trigger_instance_handler_t) (void *user_data,
- void *instance,
- const void *trigger_data,
- ply_trigger_t *trigger);
+typedef ply_trigger_handler_result_t (*ply_trigger_instance_handler_t) (void *user_data,
+ void *instance,
+ const void *trigger_data,
+ ply_trigger_t *trigger);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_trigger_t *ply_trigger_new (ply_trigger_t **free_address);