diff options
author | S. Christoffer Eliesen <christoffer@eliesen.no> | 2015-10-28 00:41:28 +0100 |
---|---|---|
committer | S. Christoffer Eliesen <christoffer@eliesen.no> | 2015-10-29 16:37:19 +0100 |
commit | 4799d07ac1bb08a770ee702eb3fd0ab4654f878a (patch) | |
tree | bb790b9becdfffff98fbe808a4392501c84da52c /sway/input_state.c | |
parent | container: Move container_under_pointer here from handlers. (diff) | |
download | sway-4799d07ac1bb08a770ee702eb3fd0ab4654f878a.tar.gz sway-4799d07ac1bb08a770ee702eb3fd0ab4654f878a.tar.zst sway-4799d07ac1bb08a770ee702eb3fd0ab4654f878a.zip |
input_state: Extract 'pointer_position_set' function from handlers.
Diffstat (limited to 'sway/input_state.c')
-rw-r--r-- | sway/input_state.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/sway/input_state.c b/sway/input_state.c index 2743a9ea..bd46a5ac 100644 --- a/sway/input_state.c +++ b/sway/input_state.c | |||
@@ -2,6 +2,7 @@ | |||
2 | #include <stdbool.h> | 2 | #include <stdbool.h> |
3 | #include <ctype.h> | 3 | #include <ctype.h> |
4 | #include "log.h" | 4 | #include "log.h" |
5 | #include "config.h" | ||
5 | 6 | ||
6 | #include "input_state.h" | 7 | #include "input_state.h" |
7 | 8 | ||
@@ -161,6 +162,29 @@ static void reset_initial_sibling(void) { | |||
161 | pointer_state.mode = 0; | 162 | pointer_state.mode = 0; |
162 | } | 163 | } |
163 | 164 | ||
165 | void pointer_position_set(struct wlc_origin *new_origin, bool force_focus) { | ||
166 | pointer_state.delta.x = new_origin->x - pointer_state.origin.x; | ||
167 | pointer_state.delta.y = new_origin->y - pointer_state.origin.y; | ||
168 | pointer_state.origin.x = new_origin->x; | ||
169 | pointer_state.origin.y = new_origin->y; | ||
170 | |||
171 | // Update view under pointer | ||
172 | swayc_t *prev_view = pointer_state.view; | ||
173 | pointer_state.view = container_under_pointer(); | ||
174 | |||
175 | // If pointer is in a mode, update it | ||
176 | if (pointer_state.mode) { | ||
177 | pointer_mode_update(); | ||
178 | // Otherwise change focus if config is set | ||
179 | } else if (force_focus || (prev_view != pointer_state.view && config->focus_follows_mouse)) { | ||
180 | if (pointer_state.view && pointer_state.view->type == C_VIEW) { | ||
181 | set_focused_container(pointer_state.view); | ||
182 | } | ||
183 | } | ||
184 | |||
185 | wlc_pointer_set_origin(new_origin); | ||
186 | } | ||
187 | |||
164 | // Mode set left/right click | 188 | // Mode set left/right click |
165 | 189 | ||
166 | static void pointer_mode_set_left(void) { | 190 | static void pointer_mode_set_left(void) { |