aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortaiyu <taiyu.len@gmail.com>2015-08-15 15:20:07 -0700
committertaiyu <taiyu.len@gmail.com>2015-08-15 15:20:07 -0700
commit3a21ba020fd0f0628a128070b72f0cf7a6b64a57 (patch)
tree5a2229d9e33968aba41c4bd4cd76dd1d11a41ab9
parent8752a166ed5ecddd67fc383934c1c3a580ece49b (diff)
made better, reduced code duplication
-rw-r--r--sway/handlers.c43
-rw-r--r--sway/handlers.h4
2 files changed, 18 insertions, 29 deletions
diff --git a/sway/handlers.c b/sway/handlers.c
index b02cd988..98d4831f 100644
--- a/sway/handlers.c
+++ b/sway/handlers.c
@@ -28,15 +28,19 @@ static bool pointer_test(swayc_t *view, void *_origin) {
return false;
}
-void focus_pointer(void) {
- swayc_t *focused = find_container(&root_container, pointer_test, &mouse_origin);
- if (focused) {
- sway_log(L_DEBUG, "Switching focus to %p", focused);
- unfocus_all(&root_container);
- focus_view(focused);
- } else {
- focus_view(active_workspace);
+swayc_t *focus_pointer(void) {
+ swayc_t *focused = get_focused_container(&root_container);
+ if (!(wlc_view_get_state(focused->handle) & WLC_BIT_FULLSCREEN)) {
+ swayc_t *pointer = find_container(&root_container, pointer_test, &mouse_origin);
+ if (pointer && focused != pointer) {
+ unfocus_all(&root_container);
+ focus_view(pointer);
+ } else if (!focused){
+ focus_view(active_workspace);
+ }
+ focused = pointer;
}
+ return focused;
}
static bool handle_output_created(wlc_handle output) {
@@ -194,31 +198,16 @@ static bool handle_pointer_motion(wlc_handle view, uint32_t time, const struct w
if (!config->focus_follows_mouse) {
return true;
}
- swayc_t *focused = get_focused_container(&root_container);
- if (!(wlc_view_get_state(focused->handle) & WLC_BIT_FULLSCREEN)) {
- swayc_t *c = find_container(&root_container, pointer_test, (void *)origin);
- if (c && c != focused) {
- sway_log(L_DEBUG, "Switching focus to %p", c);
- unfocus_all(&root_container);
- focus_view(c);
- }
- }
+ focus_pointer();
return true;
}
static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct wlc_modifiers *modifiers,
uint32_t button, enum wlc_button_state state) {
swayc_t *focused = get_focused_container(&root_container);
- if (state == WLC_BUTTON_STATE_PRESSED
- && !(wlc_view_get_state(focused->handle) & WLC_BIT_FULLSCREEN)) {
- swayc_t *c = find_container(&root_container, pointer_test, &mouse_origin);
- if (c && c != focused) {
- sway_log(L_DEBUG, "Switching focus to %p", c);
- unfocus_all(&root_container);
- focus_view(c);
- return false;
- }
- return true;
+ if (state == WLC_BUTTON_STATE_PRESSED) {
+ swayc_t *pointer = focus_pointer();
+ return !(pointer && pointer != focused);
}
return true;
}
diff --git a/sway/handlers.h b/sway/handlers.h
index b8b171c3..d1742cce 100644
--- a/sway/handlers.h
+++ b/sway/handlers.h
@@ -6,7 +6,7 @@
extern struct wlc_interface interface;
-//set focus to current pointer location
-void focus_pointer(void);
+//set focus to current pointer location and return focused container
+swayc_t *focus_pointer(void);
#endif