summaryrefslogtreecommitdiff
path: root/src/core/signals.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/signals.h')
-rw-r--r--src/core/signals.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/core/signals.h b/src/core/signals.h
new file mode 100644
index 00000000..613aa245
--- /dev/null
+++ b/src/core/signals.h
@@ -0,0 +1,30 @@
+#ifndef __SIGNAL_H
+#define __SIGNAL_H
+
+typedef void (*SIGNAL_FUNC) (gconstpointer, gconstpointer, gconstpointer, gconstpointer, gconstpointer, gconstpointer, gconstpointer);
+
+void signals_init(void);
+void signals_deinit(void);
+
+/* bind a signal */
+void signal_add_to(const char *module, int pos, const char *signal, SIGNAL_FUNC func);
+#define signal_add(a, b) signal_add_to(MODULE_NAME, 1, a, b)
+#define signal_add_first(a, b) signal_add_to(MODULE_NAME, 0, a, b)
+#define signal_add_last(a, b) signal_add_to(MODULE_NAME, 2, a, b)
+
+/* unbind signal */
+void signal_remove(const char *signal, SIGNAL_FUNC func);
+
+/* emit signal */
+int signal_emit(const char *signal, int params, ...);
+int signal_emit_id(int signal_id, int params, ...);
+
+/* stop the current ongoing signal emission */
+void signal_stop(void);
+/* stop ongoing signal emission by signal name */
+void signal_stop_by_name(const char *signal);
+
+/* remove all signals that belong to `module' */
+void signals_remove_module(const char *module);
+
+#endif