input_state: Extract 'pointer_position_set' function from handlers.

This commit is contained in:
S. Christoffer Eliesen 2015-10-28 00:41:28 +01:00
parent 865b30f138
commit 4799d07ac1
3 changed files with 27 additions and 21 deletions

View file

@ -65,6 +65,8 @@ extern struct pointer_state {
int mode; int mode;
} pointer_state; } pointer_state;
void pointer_position_set(struct wlc_origin *new_origin, bool force_focus);
// on button release unset mode depending on the button. // on button release unset mode depending on the button.
// on button press set mode conditionally depending on the button // on button press set mode conditionally depending on the button
void pointer_mode_set(uint32_t button, bool condition); void pointer_mode_set(uint32_t button, bool condition);

View file

@ -332,27 +332,7 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct
} }
} }
// Update pointer origin pointer_position_set(&new_origin, false);
pointer_state.delta.x = origin->x - pointer_state.origin.x;
pointer_state.delta.y = origin->y - pointer_state.origin.y;
pointer_state.origin.x = origin->x;
pointer_state.origin.y = origin->y;
// Update view under pointer
swayc_t *prev_view = pointer_state.view;
pointer_state.view = container_under_pointer();
// If pointer is in a mode, update it
if (pointer_state.mode) {
pointer_mode_update();
}
// Otherwise change focus if config is set an
else if (prev_view != pointer_state.view && config->focus_follows_mouse) {
if (pointer_state.view && pointer_state.view->type == C_VIEW) {
set_focused_container(pointer_state.view);
}
}
wlc_pointer_set_origin(&new_origin);
return EVENT_PASSTHROUGH; return EVENT_PASSTHROUGH;
} }

View file

@ -2,6 +2,7 @@
#include <stdbool.h> #include <stdbool.h>
#include <ctype.h> #include <ctype.h>
#include "log.h" #include "log.h"
#include "config.h"
#include "input_state.h" #include "input_state.h"
@ -161,6 +162,29 @@ static void reset_initial_sibling(void) {
pointer_state.mode = 0; pointer_state.mode = 0;
} }
void pointer_position_set(struct wlc_origin *new_origin, bool force_focus) {
pointer_state.delta.x = new_origin->x - pointer_state.origin.x;
pointer_state.delta.y = new_origin->y - pointer_state.origin.y;
pointer_state.origin.x = new_origin->x;
pointer_state.origin.y = new_origin->y;
// Update view under pointer
swayc_t *prev_view = pointer_state.view;
pointer_state.view = container_under_pointer();
// If pointer is in a mode, update it
if (pointer_state.mode) {
pointer_mode_update();
// Otherwise change focus if config is set
} else if (force_focus || (prev_view != pointer_state.view && config->focus_follows_mouse)) {
if (pointer_state.view && pointer_state.view->type == C_VIEW) {
set_focused_container(pointer_state.view);
}
}
wlc_pointer_set_origin(new_origin);
}
// Mode set left/right click // Mode set left/right click
static void pointer_mode_set_left(void) { static void pointer_mode_set_left(void) {