swc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/swc
Log | Files | Refs | README | LICENSE

commit 633b4c0e2de0f2a8717da65bd2c6af576c4df3b8
parent 6d459f092046fafa194821984738391b63ee2db3
Author: Michael Forney <mforney@mforney.org>
Date:   Wed, 26 Feb 2014 21:03:02 -0800

Add button bindings

Diffstat:
Mlibswc/bindings.c | 33+++++++++++++++++++++++++++++----
Mlibswc/bindings.h | 1+
Mlibswc/swc.h | 3++-
3 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/libswc/bindings.c b/libswc/bindings.c @@ -25,6 +25,7 @@ #include "bindings.h" #include "internal.h" #include "keyboard.h" +#include "pointer.h" #include "seat.h" #include "util.h" @@ -41,14 +42,22 @@ struct binding static bool handle_key(struct keyboard * keyboard, uint32_t time, struct press * press, uint32_t state); -static struct keyboard_handler binding_handler = { - .key = &handle_key, +static struct keyboard_handler key_binding_handler = { + .key = &handle_key }; -static struct wl_array key_bindings; +static bool handle_button(struct pointer_handler * handler, uint32_t time, + struct press * press, uint32_t state); + +static struct pointer_handler button_binding_handler = { + .button = &handle_button +}; + +static struct wl_array key_bindings, button_bindings; const struct swc_bindings swc_bindings = { - .keyboard_handler = &binding_handler + .keyboard_handler = &key_binding_handler, + .pointer_handler = &button_binding_handler }; static struct binding * find_binding(struct wl_array * bindings, @@ -97,6 +106,11 @@ static struct binding * find_key_binding(uint32_t modifiers, uint32_t key) return binding; } +static struct binding * find_button_binding(uint32_t modifiers, uint32_t value) +{ + return find_binding(&button_bindings, modifiers, value); +} + static bool handle_binding (uint32_t time, struct press * press, uint32_t state, struct binding * (* find_binding)(uint32_t, uint32_t)) @@ -126,9 +140,16 @@ bool handle_key(struct keyboard * keyboard, uint32_t time, return handle_binding(time, key, state, &find_key_binding); } +bool handle_button(struct pointer_handler * handler, uint32_t time, + struct press * button, uint32_t state) +{ + return handle_binding(time, button, state, &find_button_binding); +} + bool swc_bindings_initialize() { wl_array_init(&key_bindings); + wl_array_init(&button_bindings); return true; } @@ -136,6 +157,7 @@ bool swc_bindings_initialize() void swc_bindings_finalize() { wl_array_release(&key_bindings); + wl_array_release(&button_bindings); } EXPORT @@ -151,6 +173,9 @@ void swc_add_binding(enum swc_binding_type type, case SWC_BINDING_KEY: bindings = &key_bindings; break; + case SWC_BINDING_BUTTON: + bindings = &button_bindings; + break; } binding = wl_array_add(bindings, sizeof *binding); diff --git a/libswc/bindings.h b/libswc/bindings.h @@ -29,6 +29,7 @@ struct swc_bindings { struct keyboard_handler * keyboard_handler; + struct pointer_handler * pointer_handler; }; bool swc_bindings_initialize(); diff --git a/libswc/swc.h b/libswc/swc.h @@ -224,7 +224,8 @@ enum enum swc_binding_type { - SWC_BINDING_KEY + SWC_BINDING_KEY, + SWC_BINDING_BUTTON, }; typedef void (* swc_binding_handler_t)(void * data, uint32_t time,