aboutsummaryrefslogtreecommitdiff
path: root/src/event.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/event.c')
-rw-r--r--src/event.c59
1 files changed, 39 insertions, 20 deletions
diff --git a/src/event.c b/src/event.c
index 9e65a9e..4f5a73f 100644
--- a/src/event.c
+++ b/src/event.c
@@ -1,32 +1,51 @@
+#include <assert.h>
+
#include "util.h"
#include "layout.h"
#include "event.h"
#include "any_log.h"
-bool event_dispatch_block(layout_t *layout, event_t event)
+const char *even_type_to_string(event_type_t type)
+{
+ const char *types[] = {
+ "left_click",
+ "middle_click",
+ "right_click",
+ "trigger",
+ };
+
+ assert(type >= EVENT_LEFT_CLICK && type <= EVENT_TRIGGER);
+ return types[type];
+}
+
+static bool event_click(layout_t *layout, event_t event)
{
int width = layout->width - 2 * layout->x_padding;
int height = layout->height - 2 * layout->y_padding;
- if (!in_capsule(event.x, event.y, layout->x, layout->y, width, height))
+ if (!check_capsule(event.x, event.y, layout->x, layout->y, width, height))
return false;
for (int i = 0; i < layout->n_children; i++) {
- if (event_dispatch_block(&layout->children[i], event))
+ if (event_click(&layout->children[i], event))
return true;
}
- log_value_trace("Event targeted a block",
- "i:event_x", event.x,
- "i:event_y", event.y,
- "i:x", layout->x,
- "i:y", layout->y,
- "i:width", layout->width,
- "i:height", layout->height);
-
- if (layout->block->event_cb != NULL) {
- layout->block->event_cb(layout->block, event);
- log_debug("Called event callback");
+ block_event_t event_cb = layout->block->event_cb;
+ log_value_debug("Block was clicked",
+ "s:type", even_type_to_string(event.type),
+ "i:x", event.x,
+ "i:y", event.y,
+ "s:block_label", layout->block->label,
+ "i:block_x", layout->x,
+ "i:block_y", layout->y,
+ "i:block_width", layout->width,
+ "i:block_height", layout->height,
+ "b:callback", event_cb != NULL);
+
+ if (event_cb != NULL) {
+ event_cb(layout->block, event);
+ log_trace("Completed event callback");
}
return true;
@@ -87,18 +106,18 @@ void event_dispatch(display_t *display, layout_t *layout)
switch (button->detail) {
case XCB_BUTTON_INDEX_1:
- event.type = EVENT_RIGHT_CLICK;
- event_dispatch_block(layout, event);
+ event.type = EVENT_LEFT_CLICK;
+ event_click(layout, event);
break;
case XCB_BUTTON_INDEX_2:
- event.type = EVENT_LEFT_CLICK;
- event_dispatch_block(layout, event);
+ event.type = EVENT_MIDDLE_CLICK;
+ event_click(layout, event);
break;
case XCB_BUTTON_INDEX_3:
- event.type = EVENT_MIDDLE_CLICK;
- event_dispatch_block(layout, event);
+ event.type = EVENT_RIGHT_CLICK;
+ event_click(layout, event);
break;
default: