diff --git a/sway/desktop/xdg_shell.c b/sway/desktop/xdg_shell.c index 96066f4b..2d79727d 100644 --- a/sway/desktop/xdg_shell.c +++ b/sway/desktop/xdg_shell.c @@ -336,12 +336,6 @@ static void handle_request_maximize(struct wl_listener *listener, void *data) { static void handle_request_minimize(struct wl_listener *listener, void *data) { struct sway_xdg_shell_view *xdg_shell_view = wl_container_of(listener, xdg_shell_view, request_minimize); - if (!config->scratchpad_minimize) { - struct wlr_xdg_toplevel *toplevel = xdg_shell_view->view.wlr_xdg_toplevel; - wlr_xdg_surface_schedule_configure(toplevel->base); - return; - } - struct sway_container *container = xdg_shell_view->view.container; if (!container->pending.workspace) { while (container->pending.parent) { @@ -430,7 +424,9 @@ static void handle_unmap(struct wl_listener *listener, void *data) { wl_list_remove(&xdg_shell_view->commit.link); wl_list_remove(&xdg_shell_view->new_popup.link); wl_list_remove(&xdg_shell_view->request_maximize.link); - wl_list_remove(&xdg_shell_view->request_minimize.link); + if (xdg_shell_view->request_minimize.notify) { + wl_list_remove(&xdg_shell_view->request_minimize.link); + } wl_list_remove(&xdg_shell_view->request_fullscreen.link); wl_list_remove(&xdg_shell_view->request_move.link); wl_list_remove(&xdg_shell_view->request_resize.link); @@ -483,9 +479,11 @@ static void handle_map(struct wl_listener *listener, void *data) { wl_signal_add(&toplevel->events.request_maximize, &xdg_shell_view->request_maximize); - xdg_shell_view->request_minimize.notify = handle_request_minimize; - wl_signal_add(&toplevel->events.request_minimize, - &xdg_shell_view->request_minimize); + if (config->scratchpad_minimize) { + xdg_shell_view->request_minimize.notify = handle_request_minimize; + wl_signal_add(&toplevel->events.request_minimize, + &xdg_shell_view->request_minimize); + } xdg_shell_view->request_fullscreen.notify = handle_request_fullscreen; wl_signal_add(&toplevel->events.request_fullscreen, diff --git a/sway/tree/root.c b/sway/tree/root.c index 4d007bf9..636a3b75 100644 --- a/sway/tree/root.c +++ b/sway/tree/root.c @@ -108,7 +108,9 @@ void root_scratchpad_add_container(struct sway_container *con, struct sway_works } // Set minimize state to minimized - root_scratchpad_set_minimize(con, true); + if (config->scratchpad_minimize) { + root_scratchpad_set_minimize(con, true); + } ipc_event_window(con, "move"); } @@ -156,7 +158,9 @@ void root_scratchpad_show(struct sway_container *con) { workspace_add_floating(new_ws, con); // Set minimize state to normalized - root_scratchpad_set_minimize(con, false); + if (config->scratchpad_minimize) { + root_scratchpad_set_minimize(con, false); + } // Make sure the container's center point overlaps this workspace double center_lx = con->pending.x + con->pending.width / 2; @@ -190,7 +194,9 @@ void root_scratchpad_hide(struct sway_container *con) { } // Set minimize state to minimized - root_scratchpad_set_minimize(con, true); + if (config->scratchpad_minimize) { + root_scratchpad_set_minimize(con, true); + } disable_fullscreen(con, NULL); container_for_each_child(con, disable_fullscreen, NULL); diff --git a/sway/tree/view.c b/sway/tree/view.c index 397f317e..b66dc2f8 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -712,8 +712,6 @@ static void handle_foreign_fullscreen_request( static void handle_foreign_minimize( struct wl_listener *listener, void *data) { - if (!config->scratchpad_minimize) return; - struct sway_view *view = wl_container_of( listener, view, foreign_minimize); struct wlr_foreign_toplevel_handle_v1_minimized_event *event = data; @@ -748,6 +746,9 @@ static void handle_foreign_destroy( listener, view, foreign_destroy); wl_list_remove(&view->foreign_activate_request.link); + if (view->foreign_minimize.notify) { + wl_list_remove(&view->foreign_minimize.link); + } wl_list_remove(&view->foreign_fullscreen_request.link); wl_list_remove(&view->foreign_close_request.link); wl_list_remove(&view->foreign_destroy.link); @@ -821,9 +822,11 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, view->foreign_destroy.notify = handle_foreign_destroy; wl_signal_add(&view->foreign_toplevel->events.destroy, &view->foreign_destroy); - view->foreign_minimize.notify = handle_foreign_minimize; - wl_signal_add(&view->foreign_toplevel->events.request_minimize, - &view->foreign_minimize); + if (config->scratchpad_minimize) { + view->foreign_minimize.notify = handle_foreign_minimize; + wl_signal_add(&view->foreign_toplevel->events.request_minimize, + &view->foreign_minimize); + } struct sway_container *container = view->container;