made better, reduced code duplication

This commit is contained in:
taiyu 2015-08-15 15:20:07 -07:00
parent 8752a166ed
commit 3a21ba020f
2 changed files with 18 additions and 29 deletions

View file

@ -28,15 +28,19 @@ static bool pointer_test(swayc_t *view, void *_origin) {
return false; return false;
} }
void focus_pointer(void) { swayc_t *focus_pointer(void) {
swayc_t *focused = find_container(&root_container, pointer_test, &mouse_origin); swayc_t *focused = get_focused_container(&root_container);
if (focused) { if (!(wlc_view_get_state(focused->handle) & WLC_BIT_FULLSCREEN)) {
sway_log(L_DEBUG, "Switching focus to %p", focused); swayc_t *pointer = find_container(&root_container, pointer_test, &mouse_origin);
if (pointer && focused != pointer) {
unfocus_all(&root_container); unfocus_all(&root_container);
focus_view(focused); focus_view(pointer);
} else { } else if (!focused){
focus_view(active_workspace); focus_view(active_workspace);
} }
focused = pointer;
}
return focused;
} }
static bool handle_output_created(wlc_handle output) { 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) { if (!config->focus_follows_mouse) {
return true; return true;
} }
swayc_t *focused = get_focused_container(&root_container); focus_pointer();
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);
}
}
return true; return true;
} }
static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct wlc_modifiers *modifiers, static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct wlc_modifiers *modifiers,
uint32_t button, enum wlc_button_state state) { uint32_t button, enum wlc_button_state state) {
swayc_t *focused = get_focused_container(&root_container); swayc_t *focused = get_focused_container(&root_container);
if (state == WLC_BUTTON_STATE_PRESSED if (state == WLC_BUTTON_STATE_PRESSED) {
&& !(wlc_view_get_state(focused->handle) & WLC_BIT_FULLSCREEN)) { swayc_t *pointer = focus_pointer();
swayc_t *c = find_container(&root_container, pointer_test, &mouse_origin); return !(pointer && pointer != focused);
if (c && c != focused) {
sway_log(L_DEBUG, "Switching focus to %p", c);
unfocus_all(&root_container);
focus_view(c);
return false;
}
return true;
} }
return true; return true;
} }

View file

@ -6,7 +6,7 @@
extern struct wlc_interface interface; extern struct wlc_interface interface;
//set focus to current pointer location //set focus to current pointer location and return focused container
void focus_pointer(void); swayc_t *focus_pointer(void);
#endif #endif