From b6a72d67ed28e995032a4bbb3cf3282fe80bd167 Mon Sep 17 00:00:00 2001 From: Eric Date: Mon, 18 Oct 2021 23:04:27 -0400 Subject: [PATCH 1/4] kill subscriber process when desktop is removed --- src/layout.sh | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/layout.sh b/src/layout.sh index b160f4c..7feccd6 100755 --- a/src/layout.sh +++ b/src/layout.sh @@ -14,7 +14,7 @@ BSP_DEFAULT_LAYOUTS="tiled\nmonocle"; # Kill old layout process kill_layout() { - old_pid="$(get_desktop_options "$1" | valueof pid)"; + local old_pid=$1; kill $old_pid 2> /dev/null || true; } @@ -22,11 +22,14 @@ remove_listener() { desktop=$1; [[ -z "$desktop" ]] && desktop=$(get_focused_desktop); - kill_layout "$desktop"; + local old_pid="$(get_desktop_options "$desktop" | valueof pid)"; # Reset process id and layout set_desktop_option $desktop 'layout' ""; set_desktop_option $desktop 'pid' ""; + set_desktop_option $desktop 'did' ""; + + kill_layout $old_pid; } get_layout_file() { @@ -141,13 +144,21 @@ start_listener() { __recalculate_layout() { run_layout $layout $args 2> /dev/null || true; } # Then listen to node changes and recalculate as required - bspc subscribe node_{add,remove,transfer,flag,state} desktop_focus | while read line; do + bspc subscribe node_{add,remove,transfer,flag,state} desktop_focus desktop_remove | while read line; do event=$(echo "$line" | awk '{print $1}'); arg_index=$([[ "$event" == "node_transfer" ]] && echo "6" || echo "3"); desktop_id=$(echo "$line" | awk "{print \$$arg_index}"); desktop_name=$(get_desktop_name_from_id "$desktop_id"); - if [[ "$desktop_name" = "$selected_desktop" ]]; then + if [[ "$event" == "desktop_remove" ]]; then + selected_desktop_id=$(get_desktop_options "$selected_desktop" | valueof did); + if [[ "$desktop_id" == "$selected_desktop_id" ]]; then + remove_listener "$selected_desktop"; + exit 0; + fi + fi + + if [[ "$desktop_name" == "$selected_desktop" ]]; then __initialize_layout; if [[ "$event" == "node_transfer" ]]; then @@ -165,11 +176,14 @@ start_listener() { disown; # Kill old layout - kill_layout $selected_desktop; + local old_pid="$(get_desktop_options "$selected_desktop" | valueof pid)"; + kill_layout $old_pid; + desktop_id=$(bspc query -D -d "$selected_desktop"); # Set current layout set_desktop_option $selected_desktop 'layout' "$layout"; set_desktop_option $selected_desktop 'pid' "$LAYOUT_PID"; + set_desktop_option $selected_desktop 'did' "$desktop_id"; # Recalculate styles as soon as they are set if it is on the selected desktop if [[ "$(get_focused_desktop)" == "$selected_desktop" ]]; then From b38e145c830b3c833ed28388bac7027bf56b9ce3 Mon Sep 17 00:00:00 2001 From: amtoine <44101798+AntoineStevan@users.noreply.github.com> Date: Fri, 12 Aug 2022 12:51:34 +0200 Subject: [PATCH 2/4] add the utils.desktop.get_desktop_id tool function Addresses the original review requested changes from #36 --- src/layout.sh | 2 +- src/utils/desktop.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layout.sh b/src/layout.sh index 7feccd6..9887054 100755 --- a/src/layout.sh +++ b/src/layout.sh @@ -179,7 +179,7 @@ start_listener() { local old_pid="$(get_desktop_options "$selected_desktop" | valueof pid)"; kill_layout $old_pid; - desktop_id=$(bspc query -D -d "$selected_desktop"); + desktop_id=$(get_desktop_id "$selected_desktop"); # Set current layout set_desktop_option $selected_desktop 'layout' "$layout"; set_desktop_option $selected_desktop 'pid' "$LAYOUT_PID"; diff --git a/src/utils/desktop.sh b/src/utils/desktop.sh index 78bc3d0..5ad1d61 100644 --- a/src/utils/desktop.sh +++ b/src/utils/desktop.sh @@ -3,4 +3,4 @@ names="--names" [[ $USE_NAMES -eq 0 ]] && names=""; get_focused_desktop() { bspc query -D -d 'focused' $names; } get_desktop_name_from_id() { bspc query -D -d "$1" $names; } - +get_desktop_id() { bspc query -D -d "$1"; } From 3186fc798b931d500e6a599913c04159d707b851 Mon Sep 17 00:00:00 2001 From: amtoine <44101798+AntoineStevan@users.noreply.github.com> Date: Fri, 12 Aug 2022 12:55:03 +0200 Subject: [PATCH 3/4] separate the layout and process killing Addresses requested changes from the original stale #36 --- src/layout.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/layout.sh b/src/layout.sh index 9887054..30d97e1 100755 --- a/src/layout.sh +++ b/src/layout.sh @@ -14,6 +14,13 @@ BSP_DEFAULT_LAYOUTS="tiled\nmonocle"; # Kill old layout process kill_layout() { + old_pid="$(get_desktop_options "$1" | valueof pid)"; + local old_pid=$1; + kill $old_pid 2> /dev/null || true; +} + +# Kill old process +kill_process() { local old_pid=$1; kill $old_pid 2> /dev/null || true; } From 1d68eceda9793cf69cb206673a922c6ae436bfc1 Mon Sep 17 00:00:00 2001 From: amtoine <44101798+AntoineStevan@users.noreply.github.com> Date: Fri, 12 Aug 2022 12:57:55 +0200 Subject: [PATCH 4/4] fix a bad typo in the kill_layout function --- src/layout.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/src/layout.sh b/src/layout.sh index 30d97e1..3cf4ae3 100755 --- a/src/layout.sh +++ b/src/layout.sh @@ -15,7 +15,6 @@ BSP_DEFAULT_LAYOUTS="tiled\nmonocle"; # Kill old layout process kill_layout() { old_pid="$(get_desktop_options "$1" | valueof pid)"; - local old_pid=$1; kill $old_pid 2> /dev/null || true; }