mirror of
https://github.com/swaywm/sway.git
synced 2024-12-29 00:16:22 +01:00
input_state: Extract 'pointer_position_set' function from handlers.
This commit is contained in:
parent
865b30f138
commit
4799d07ac1
3 changed files with 27 additions and 21 deletions
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue