summaryrefslogtreecommitdiff
path: root/src/main/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/ui')
-rw-r--r--src/main/ui/ui.h1
-rw-r--r--src/main/ui/x11/ui.c16
2 files changed, 17 insertions, 0 deletions
diff --git a/src/main/ui/ui.h b/src/main/ui/ui.h
index fcdd99f..06cd515 100644
--- a/src/main/ui/ui.h
+++ b/src/main/ui/ui.h
@@ -25,5 +25,6 @@ void ui_loop(void);
void ui_set_title(const char *title);
void ui_set_loop_listener(void (*event)());
void ui_set_mouse_press_listener(void (*event)());
+void ui_set_generic_listener(void (*generic_event)(int type));
#endif /* __UI_H__ */
diff --git a/src/main/ui/x11/ui.c b/src/main/ui/x11/ui.c
index fc59e4e..69bd5be 100644
--- a/src/main/ui/x11/ui.c
+++ b/src/main/ui/x11/ui.c
@@ -33,6 +33,7 @@ static int close_window = 0;
void (*on_loop_event)();
void (*on_mouse_press_event)();
+void (*on_generic_event)(int);
void cleanup(void);
@@ -143,6 +144,14 @@ ui_on_mouse_release(XEvent event)
if (event.type != ButtonRelease) return;
}
+static void
+ui_on_generic_event(XEvent event)
+{
+ if (on_generic_event != NULL) {
+ on_generic_event(event.type);
+ }
+}
+
void
ui_set_loop_listener(void (*loop_event)())
{
@@ -156,12 +165,19 @@ ui_set_mouse_press_listener(void (*mouse_press_event)())
}
void
+ui_set_generic_listener(void (*generic_event)(int type))
+{
+ on_generic_event = generic_event;
+}
+
+void
ui_loop(void)
{
XEvent event;
while (!close_window) {
while (XPending(display)) {
XNextEvent(display, &event);
+ ui_on_generic_event(event);
ui_on_expose(event);
ui_on_resize(event);
ui_on_keypress(event);