diff options
| author | Federico Angelilli <code@fedang.net> | 2024-07-10 15:57:13 +0200 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2024-07-10 15:57:13 +0200 |
| commit | d575e261c85b70a8de4f02fb2115b102d3c33f64 (patch) | |
| tree | db84a9d6aa4a0510586aa1c449f131e1b2226db6 /src/event.c | |
| parent | dbd61ded1f7ddd55743b324a5b27017f2a7a886b (diff) | |
Refactor
Diffstat (limited to 'src/event.c')
| -rw-r--r-- | src/event.c | 59 |
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: |
