From 200d91d042a73c5844bccebbd80b5bee4c8cf577 Mon Sep 17 00:00:00 2001 From: Alessandro Iezzi Date: Mon, 22 May 2023 00:17:28 +0200 Subject: Add handlers to mouse and keyboard events --- src/application.c | 20 +++++++++++++++++++- src/event.h | 19 ++++++++++++++++--- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/application.c b/src/application.c index fd99780..8126c5b 100644 --- a/src/application.c +++ b/src/application.c @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #include #include "application.h" @@ -59,6 +61,8 @@ cherry_application_main_loop(CherryApplication *app) while (finish == 0) { XNextEvent(app->display, &event); + CherryEvent evt; + switch (event.type) { case ClientMessage: atom_name = XGetAtomName(app->display, (Atom) event.xclient.data.l[0]); @@ -67,20 +71,34 @@ cherry_application_main_loop(CherryApplication *app) /* Exit from loop */ finish = 1; } else if (strcmp("WM_DELETE_WINDOW", atom_name) == 0) { - dispatch_event(app, event.xclient.window, DELETE_WINDOW); + evt = cherry_event_create(NULL, + event.xclient.window, + WINDOW_DELETED); } XFree(atom_name); break; case Expose: + evt = cherry_event_create(event.xclient.display, + event.xclient.window, + WINDOW_EXPOSED); break; case MappingNotify: + XRefreshKeyboardMapping(&event.xmapping); break; case ButtonPress: + evt = cherry_event_mouse_create(event.xbutton.display, + event.xbutton.window, + MOUSE_BUTTON_PRESSED, + event.xbutton.x, + event.xbutton.y); break; case KeyPress: + evt = cherry_event_key_create(KEY_PRESSED, event.xkey); break; } + + dispatch_event(app, evt, event); } } diff --git a/src/event.h b/src/event.h index 249bac9..08f95f3 100644 --- a/src/event.h +++ b/src/event.h @@ -12,12 +12,25 @@ enum Events { KEY_PRESSED }; +typedef struct CherryEventMouse { + int x; + int y; +} CherryEventMouse; + +typedef struct CherryEventKey { + XKeyEvent xkey; +} CherryEventKey; + typedef struct CherryEvent { Display *display; Window window; int event_id; - int x, y; - XKeyEvent xkey; -}; + CherryEventKey key; + CherryEventMouse mouse; +} CherryEvent; + +CherryEvent cherry_event_create(Display *, Window, int); +CherryEvent cherry_event_mouse_create(Display *, Window, int, int x, int y); +CherryEvent cherry_event_key_create(int, XKeyEvent); #endif /* __CHERRY_EVENT_H__ */ -- cgit v1.2.3