From 2a540b0a62939159a97f5a8969c6012c66a84a64 Mon Sep 17 00:00:00 2001
From: matt1432 <matt@nelim.org>
Date: Tue, 12 Sep 2023 14:42:53 -0400
Subject: [PATCH] feat(ags): close all windows when closing from button

---
 config/ags/bin/qs-toggle.sh         | 37 ---------------------------
 config/ags/js/bar/clock.js          |  2 ++
 config/ags/js/bar/notif-button.js   |  2 ++
 config/ags/js/bar/quick-settings.js | 39 +++++++++++------------------
 config/ags/js/misc/close-all.js     |  6 +++++
 config/ags/js/misc/closer.js        | 11 +++-----
 6 files changed, 29 insertions(+), 68 deletions(-)
 delete mode 100755 config/ags/bin/qs-toggle.sh
 create mode 100644 config/ags/js/misc/close-all.js

diff --git a/config/ags/bin/qs-toggle.sh b/config/ags/bin/qs-toggle.sh
deleted file mode 100755
index b12d4c9a..00000000
--- a/config/ags/bin/qs-toggle.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env bash
-
-on () {
-  eww open quick-settings-reveal;
-  eww update showqs=true;
-}
-
-off () {
-  eww update showqs=false;
-  eww close quick-settings-reveal;
-}
-
-toggle() {
-  if [[ $(eww get showqs) == "true" ]]; then
-    echo "Off"
-    off > /dev/null
-  else
-    echo "On"
-    on > /dev/null
-  fi
-}
-
-state() {
-  if [[ $(eww get showqs) == "true" ]]; then
-    echo "Off"
-  else
-    echo "On"
-  fi
-}
-
-[[ "$1" == "toggle" ]] && toggle
-if [[ "$1" == "state" ]]; then
-   while true; do 
-    state
-    sleep 1
-  done
-fi
diff --git a/config/ags/js/bar/clock.js b/config/ags/js/bar/clock.js
index 1da870b6..40484f40 100644
--- a/config/ags/js/bar/clock.js
+++ b/config/ags/js/bar/clock.js
@@ -3,6 +3,7 @@ const { toggleWindow, openWindow } = ags.App;
 const { DateTime } = imports.gi.GLib;
 
 import { EventBox } from '../misc/cursorbox.js';
+import { closeAll } from '../misc/close-all.js';
 
 const ClockModule = ({
     interval = 1000,
@@ -30,6 +31,7 @@ export const Clock = EventBox({
         }
         else {
           Clock.toggleClassName('toggle-on', false);
+          closeAll();
         }
       }
     }],
diff --git a/config/ags/js/bar/notif-button.js b/config/ags/js/bar/notif-button.js
index 19b7c59d..f5d42c73 100644
--- a/config/ags/js/bar/notif-button.js
+++ b/config/ags/js/bar/notif-button.js
@@ -4,6 +4,7 @@ const { Notifications } = ags.Service;
 
 import { Separator } from '../misc/separator.js';
 import { EventBox } from '../misc/cursorbox.js';
+import { closeAll } from '../misc/close-all.js';
 
 export const NotifButton = EventBox({
   className: 'toggle-off',
@@ -17,6 +18,7 @@ export const NotifButton = EventBox({
         }
         else {
           NotifButton.toggleClassName('toggle-on', false);
+          closeAll();
         }
       }
     }],
diff --git a/config/ags/js/bar/quick-settings.js b/config/ags/js/bar/quick-settings.js
index bc5ea3f9..95aed085 100644
--- a/config/ags/js/bar/quick-settings.js
+++ b/config/ags/js/bar/quick-settings.js
@@ -1,35 +1,26 @@
 const { Box, Label } = ags.Widget;
-const { subprocess } = ags.Utils;
-const deflisten = subprocess;
+const { toggleWindow, openWindow } = ags.App;
 
 import { EventBox } from '../misc/cursorbox.js';
+import { closeAll } from '../misc/close-all.js';
 
-deflisten(
-  ['bash', '-c', '$AGS_PATH/qs-toggle.sh state'],
-  (output) => {
-    print(output)
-    if (output == 'On') {
-      QsToggle.toggleClassName('toggle-on', false);
-    } else {
-      QsToggle.toggleClassName('toggle-on', true);
-    }
-  },
-);
 export const QsToggle = EventBox({
   className: 'toggle-off',
-  onPrimaryClickRelease: function() {
-    subprocess(
-      ['bash', '-c', '$AGS_PATH/qs-toggle.sh toggle'],
-      (output) => {
-        print(output)
-        if (output == 'On') {
+  onPrimaryClickRelease: () => toggleWindow('quick-settings'),
+  connections: [
+    [ags.App, (box, windowName, visible) => {
+      if (windowName == 'quick-settings') {
+        if (visible) {
           QsToggle.toggleClassName('toggle-on', true);
-        } else {
-          QsToggle.toggleClassName('toggle-on', false);
+          openWindow('closer');
         }
-      },
-    );
-  },
+        else {
+          QsToggle.toggleClassName('toggle-on', false);
+          closeAll();
+        }
+      }
+    }],
+  ],
   child: Box({
     className: 'quick-settings-toggle',
     vertical: false,
diff --git a/config/ags/js/misc/close-all.js b/config/ags/js/misc/close-all.js
new file mode 100644
index 00000000..67df828b
--- /dev/null
+++ b/config/ags/js/misc/close-all.js
@@ -0,0 +1,6 @@
+export const closeAll = () => {
+  ags.App.windows.forEach(w => {
+    if (w.name != 'bar')
+      ags.App.closeWindow(w.name)
+  });
+};
diff --git a/config/ags/js/misc/closer.js b/config/ags/js/misc/closer.js
index 12c232e6..8301eabb 100644
--- a/config/ags/js/misc/closer.js
+++ b/config/ags/js/misc/closer.js
@@ -1,5 +1,7 @@
 const { Window, EventBox } = ags.Widget;
-const { windows, closeWindow } = ags.App;
+const { closeWindow } = ags.App;
+
+import { closeAll } from './close-all.js';
 
 export const Closer = Window({
   name: 'closer',
@@ -8,11 +10,6 @@ export const Closer = Window({
   anchor: 'top bottom left right',
 
   child: EventBox({
-    onPrimaryClickRelease: () => {
-      windows.forEach(w => {
-        if (w.name != 'bar')
-          closeWindow(w.name)
-      });
-    },
+    onPrimaryClickRelease: () => closeAll(),
   }),
 });