diff options
author | 2023-05-22 00:17:28 +0200 | |
---|---|---|
committer | 2023-05-22 00:17:28 +0200 | |
commit | 200d91d042a73c5844bccebbd80b5bee4c8cf577 (patch) | |
tree | 48e77c008de2585e2aac587094df96102cbc12da /src | |
parent | 76f67e43cbf20122be7e82adecd35a316afcc38d (diff) | |
download | cherry-200d91d042a73c5844bccebbd80b5bee4c8cf577.tar.gz cherry-200d91d042a73c5844bccebbd80b5bee4c8cf577.zip |
Add handlers to mouse and keyboard events
Diffstat (limited to 'src')
-rw-r--r-- | src/application.c | 20 | ||||
-rw-r--r-- | 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 <stdlib.h> #include <string.h> #include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xresource.h> #include <utils.h> #include <log.h> #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__ */ |