On Tue, Nov 17, 2015 at 06:11:01PM +0800, Jonas Ådahl wrote: > Use pointer confinement to make the line drawing not go outside the > drawing area. It is toggled with the right pointer button. > > Signed-off-by: Jonas Ådahl <jad...@gmail.com>
patch itself is Reviewed-by: Peter Hutterer <peter.hutte...@who-t.net>, but seem my comment about shoving stuff into clickdot from patch 19. Cheers, Peter > --- > clients/clickdot.c | 33 +++++++++++++++++++++++++++++++-- > 1 file changed, 31 insertions(+), 2 deletions(-) > > diff --git a/clients/clickdot.c b/clients/clickdot.c > index 776f8da..1597e11 100644 > --- a/clients/clickdot.c > +++ b/clients/clickdot.c > @@ -25,6 +25,7 @@ > > #include "config.h" > > +#include <stdbool.h> > #include <stdint.h> > #include <stdio.h> > #include <stdlib.h> > @@ -63,6 +64,8 @@ struct clickdot { > struct input *cursor_timeout_input; > int cursor_timeout_fd; > struct task cursor_timeout_task; > + > + bool pointer_confined; > }; > > static void > @@ -207,16 +210,32 @@ key_handler(struct window *window, struct input *input, > uint32_t time, > } > > static void > +toggle_pointer_confine(struct clickdot *clickdot, struct input *input) > +{ > + if (clickdot->pointer_confined) { > + window_unconfine_pointer(clickdot->window); > + } else { > + window_confine_pointer_to_widget(clickdot->window, > + clickdot->widget, > + input); > + } > + > + clickdot->pointer_confined = !clickdot->pointer_confined; > +} > + > +static void > button_handler(struct widget *widget, > struct input *input, uint32_t time, > uint32_t button, > enum wl_pointer_button_state state, void *data) > { > struct clickdot *clickdot = data; > + bool is_pressed = state == WL_POINTER_BUTTON_STATE_PRESSED; > > - if (state == WL_POINTER_BUTTON_STATE_PRESSED && button == BTN_LEFT) > + if (is_pressed && button == BTN_LEFT) > input_get_position(input, &clickdot->dot.x, &clickdot->dot.y); > - > + else if (is_pressed && button == BTN_RIGHT) > + toggle_pointer_confine(clickdot, input); > widget_schedule_redraw(widget); > } > > @@ -284,6 +303,14 @@ cursor_timeout_func(struct task *task, uint32_t events) > CURSOR_LEFT_PTR); > } > > +static void > +pointer_unconfined(struct window *window, struct input *input, void *data) > +{ > + struct clickdot *clickdot = data; > + > + clickdot->pointer_confined = false; > +} > + > static struct clickdot * > clickdot_create(struct display *display) > { > @@ -300,6 +327,8 @@ clickdot_create(struct display *display) > window_set_user_data(clickdot->window, clickdot); > window_set_keyboard_focus_handler(clickdot->window, > keyboard_focus_handler); > + window_set_pointer_unconfined_handler(clickdot->window, > + pointer_unconfined); > > widget_set_redraw_handler(clickdot->widget, redraw_handler); > widget_set_button_handler(clickdot->widget, button_handler); > -- > 2.4.3 > > _______________________________________________ > wayland-devel mailing list > wayland-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/wayland-devel > _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel