aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlessandro Iezzi <aiezzi@alessandroiezzi.it>2023-05-22 00:17:28 +0200
committerAlessandro Iezzi <aiezzi@alessandroiezzi.it>2023-05-22 00:17:28 +0200
commit200d91d042a73c5844bccebbd80b5bee4c8cf577 (patch)
tree48e77c008de2585e2aac587094df96102cbc12da /src
parent76f67e43cbf20122be7e82adecd35a316afcc38d (diff)
downloadcherry-200d91d042a73c5844bccebbd80b5bee4c8cf577.tar.gz
cherry-200d91d042a73c5844bccebbd80b5bee4c8cf577.zip
Add handlers to mouse and keyboard events
Diffstat (limited to 'src')
-rw-r--r--src/application.c20
-rw-r--r--src/event.h19
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__ */