diff options
Diffstat (limited to 'src/event.c')
| -rw-r--r-- | src/event.c | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/src/event.c b/src/event.c index 65e3628..fa40a82 100644 --- a/src/event.c +++ b/src/event.c @@ -6,12 +6,14 @@ #include "event.h" #include "block.h" -const char *even_type_to_string(event_type_t type) +const char *event_type_to_string(event_type_t type) { const char *types[] = { "left_click", "middle_click", "right_click", + "scroll_up", + "scroll_down", "trigger", }; @@ -19,7 +21,20 @@ const char *even_type_to_string(event_type_t type) return types[type]; } -static bool event_click(layout_t *layout, event_t event) +bool event_is_click(event_t event) +{ + return event.type == EVENT_LEFT_CLICK + || event.type == EVENT_MIDDLE_CLICK + || event.type == EVENT_RIGHT_CLICK; +} + +bool event_is_scroll(event_t event) +{ + return event.type == EVENT_SCROLL_UP + || event.type == EVENT_SCROLL_DOWN; +} + +static bool event_mouse(layout_t *layout, event_t event) { int width = layout->width - 2 * layout->x_padding; int height = layout->height - 2 * layout->y_padding; @@ -28,7 +43,7 @@ static bool event_click(layout_t *layout, event_t event) return false; for (int i = 0; i < layout->n_children; i++) { - if (event_click(&layout->children[i], event)) + if (event_mouse(&layout->children[i], event)) return true; } @@ -36,8 +51,8 @@ static bool event_click(layout_t *layout, event_t event) ? ((block_spec_t *)layout->block)->event_fn : NULL; - log_value_debug("Block was clicked", - "s:event_type", even_type_to_string(event.type), + log_value_debug("Block received a mouse interaction", + "s:event", event_type_to_string(event.type), "i:event_x", event.x, "i:event_y", event.y, "s:label", layout->block->label, @@ -105,32 +120,19 @@ void event_dispatch(display_t *display, layout_t *layout) xcb_button_release_event_t *button = (xcb_button_release_event_t *)xevent; log_trace("Processing 'ButtonRelease' event"); + if (button->detail < XCB_BUTTON_INDEX_1 || button->detail > XCB_BUTTON_INDEX_5) { + log_value_trace("Ignoring button release", + "u:value", button->detail); + break; + } + event_t event = { .x = button->event_x, .y = button->event_y, + .type = button->detail - 1, }; - switch (button->detail) { - case XCB_BUTTON_INDEX_1: - event.type = EVENT_LEFT_CLICK; - event_click(layout, event); - break; - - case XCB_BUTTON_INDEX_2: - event.type = EVENT_MIDDLE_CLICK; - event_click(layout, event); - break; - - case XCB_BUTTON_INDEX_3: - event.type = EVENT_RIGHT_CLICK; - event_click(layout, event); - break; - - default: - log_value_trace("Ignoring button release", - "u:value", button->detail); - break; - } + event_mouse(layout, event); break; } |
