Skip to content

Commit

Permalink
#760 resolve issue between sticky and floating attributes of a window
Browse files Browse the repository at this point in the history
  • Loading branch information
koekeishiya committed Dec 18, 2020
1 parent 1e1df15 commit b4baf22
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 8 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
### Changed
- Update scripting addition to support macOS 11.1 [#762](https://github.com/koekeishiya/yabai/issues/762)
- Try to workaround resizing issues in some applications due to weird undocumented accessibility properties [#109](https://github.com/koekeishiya/yabai/issues/109)
- A sticky window will implicitly be treated as floating, but should not actually set the floating property [#760](https://github.com/koekeishiya/yabai/issues/760)

## [3.3.5] - 2020-12-03
### Changed
Expand Down
37 changes: 29 additions & 8 deletions src/window_manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -1342,22 +1342,43 @@ void window_manager_make_window_floating(struct space_manager *sm, struct window
window->is_floating = true;
} else {
window->is_floating = false;
window_manager_make_window_topmost(wm, window, false);
if (window->is_sticky) window_manager_make_window_sticky(sm, wm, window, false);
if ((window_manager_should_manage_window(window)) && (!window_manager_find_managed_window(wm, window))) {
struct view *view = space_manager_tile_window_on_space(sm, window, space_manager_active_space());
window_manager_add_managed_window(wm, window, view);

if (!window->is_sticky) {
window_manager_make_window_topmost(wm, window, false);
if ((window_manager_should_manage_window(window)) && (!window_manager_find_managed_window(wm, window))) {
struct view *view = space_manager_tile_window_on_space(sm, window, space_manager_active_space());
window_manager_add_managed_window(wm, window, view);
}
}
}
}

void window_manager_make_window_sticky(struct space_manager *sm, struct window_manager *wm, struct window *window, bool should_sticky)
{
if (should_sticky) {
if (!window->is_floating) window_manager_make_window_floating(sm, wm, window, true);
if (scripting_addition_set_sticky(window->id, true)) window->is_sticky = true;
if (scripting_addition_set_sticky(window->id, true)) {
struct view *view = window_manager_find_managed_window(wm, window);
if (view) {
space_manager_untile_window(sm, view, window);
window_manager_remove_managed_window(wm, window->id);
window_manager_purify_window(wm, window);
}
window_manager_make_window_topmost(wm, window, true);
window->is_sticky = true;
}
} else {
if (scripting_addition_set_sticky(window->id, false)) window->is_sticky = false;
if (scripting_addition_set_sticky(window->id, false)) {
window->is_sticky = false;

if (!window->is_floating) {
window_manager_make_window_topmost(wm, window, false);

if ((window_manager_should_manage_window(window)) && (!window_manager_find_managed_window(wm, window))) {
struct view *view = space_manager_tile_window_on_space(sm, window, space_manager_active_space());
window_manager_add_managed_window(wm, window, view);
}
}
}
}
}

Expand Down

0 comments on commit b4baf22

Please sign in to comment.