diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-08-27 12:41:39 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-27 12:41:39 -0400 |
commit | 82423b88b8c3d6a34e883a840db1bfe2fefc9932 (patch) | |
tree | 060b5d59ce74c00eb522beb38ff60e4bcb3ad3f9 | |
parent | 9d9de97c4c31b420b337fb7d6878297fcca95562 (diff) | |
parent | 4afb2e3f240f737fc965ee574f0ecdfc7208070b (diff) | |
download | sway-82423b88b8c3d6a34e883a840db1bfe2fefc9932.tar.xz |
Merge pull request #2494 from RyanDwyer/fix-overflowing-subsurfaces
Allow subsurfaces which overflow the container to be interacted with
-rw-r--r-- | sway/tree/container.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c index 58fd4898..04454ab6 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -476,10 +476,11 @@ struct sway_container *container_at(struct sway_container *workspace, return NULL; } struct sway_container *c; - // Focused view's popups struct sway_seat *seat = input_manager_current_seat(input_manager); struct sway_container *focus = seat_get_focus_inactive(seat, &root_container); + bool is_floating = focus && container_is_floating_or_child(focus); + // Focused view's popups if (focus && focus->type == C_VIEW) { surface_at_view(focus, lx, ly, surface, sx, sy); if (*surface && surface_is_popup(*surface)) { @@ -487,11 +488,27 @@ struct sway_container *container_at(struct sway_container *workspace, } *surface = NULL; } - // Floating + // If focused is floating, focused view's non-popups + if (focus && focus->type == C_VIEW && is_floating) { + surface_at_view(focus, lx, ly, surface, sx, sy); + if (*surface) { + return focus; + } + *surface = NULL; + } + // Floating (non-focused) if ((c = floating_container_at(lx, ly, surface, sx, sy))) { return c; } - // Tiling + // If focused is tiling, focused view's non-popups + if (focus && focus->type == C_VIEW && !is_floating) { + surface_at_view(focus, lx, ly, surface, sx, sy); + if (*surface) { + return focus; + } + *surface = NULL; + } + // Tiling (non-focused) if ((c = tiling_container_at(workspace, lx, ly, surface, sx, sy))) { return c; } |