aboutsummaryrefslogtreecommitdiff
path: root/sway/handlers.c
diff options
context:
space:
mode:
authortaiyu <taiyu.len@gmail.com>2015-08-15 14:32:14 -0700
committertaiyu <taiyu.len@gmail.com>2015-08-15 14:32:14 -0700
commit824a3d81aad8e3eb81c80d07bf6554be9fe214cf (patch)
tree6704374b29ab7144b7b5332dac7fc3af09fe6d21 /sway/handlers.c
parent322989c431d87bd87dcda3266685948c2f2914e9 (diff)
fixed fullscreen & focusing
Diffstat (limited to 'sway/handlers.c')
-rw-r--r--sway/handlers.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/sway/handlers.c b/sway/handlers.c
index f95683d0..b02cd988 100644
--- a/sway/handlers.c
+++ b/sway/handlers.c
@@ -82,16 +82,21 @@ static void handle_output_focused(wlc_handle output, bool focus) {
}
static bool handle_view_created(wlc_handle handle) {
- swayc_t *container = get_focused_container(&root_container);
- swayc_t *view = new_view(container, handle);
- unfocus_all(&root_container);
+ swayc_t *focused = get_focused_container(&root_container);
+ swayc_t *view = new_view(focused, handle);
if (view) {
+ unfocus_all(&root_container);
focus_view(view);
arrange_windows(view->parent, -1, -1);
} else { //Unmanaged view
wlc_view_set_state(handle, WLC_BIT_ACTIVATED, true);
wlc_view_focus(handle);
}
+ if (wlc_view_get_state(focused->handle) & WLC_BIT_FULLSCREEN) {
+ unfocus_all(&root_container);
+ focus_view(focused);
+ arrange_windows(focused, -1, -1);
+ }
return true;
}
@@ -189,21 +194,24 @@ static bool handle_pointer_motion(wlc_handle view, uint32_t time, const struct w
if (!config->focus_follows_mouse) {
return true;
}
- swayc_t *c = find_container(&root_container, pointer_test, (void *)origin);
swayc_t *focused = get_focused_container(&root_container);
- if (c && c != focused) {
- sway_log(L_DEBUG, "Switching focus to %p", c);
- unfocus_all(&root_container);
- focus_view(c);
+ 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;
}
static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct wlc_modifiers *modifiers,
uint32_t button, enum wlc_button_state state) {
- if (state == WLC_BUTTON_STATE_PRESSED) {
+ 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);
- swayc_t *focused = get_focused_container(&root_container);
if (c && c != focused) {
sway_log(L_DEBUG, "Switching focus to %p", c);
unfocus_all(&root_container);