From 7d45c18843e38bb83c71f58c25b5c20df654232e Mon Sep 17 00:00:00 2001
From: matt1432 <matt@nelim.org>
Date: Mon, 18 Sep 2023 16:14:11 -0400
Subject: [PATCH] feat(ags): add swipe gesture to open quick-settings

---
 config/ags/js/bar/gesture.js | 32 +++++++++++++++
 config/ags/js/bar/main.js    | 79 +++++++++++++++++++-----------------
 2 files changed, 73 insertions(+), 38 deletions(-)
 create mode 100644 config/ags/js/bar/gesture.js

diff --git a/config/ags/js/bar/gesture.js b/config/ags/js/bar/gesture.js
new file mode 100644
index 00000000..0097ec66
--- /dev/null
+++ b/config/ags/js/bar/gesture.js
@@ -0,0 +1,32 @@
+const { Window, CenterBox, EventBox, Button } = ags.Widget;
+const { openWindow } = ags.App;
+const { Gtk, Gdk } = imports.gi;
+const display = Gdk.Display.get_default();
+
+export const Gesture = ({
+  child,
+  ...params
+}) => {
+  let w = EventBox({
+    ...params,
+  });
+
+  let gesture = Gtk.GestureSwipe.new(w);
+
+  w.child = CenterBox({
+    children: [
+      child,
+    ],
+    connections: [
+
+      [gesture, box => {
+        const velocity = gesture.get_velocity()[1];
+        if (velocity < -50)
+          openWindow('quick-settings');
+      }, 'update'],
+
+    ],
+  });
+
+  return w;
+};
diff --git a/config/ags/js/bar/main.js b/config/ags/js/bar/main.js
index 5ea0a92d..a3650021 100644
--- a/config/ags/js/bar/main.js
+++ b/config/ags/js/bar/main.js
@@ -12,6 +12,7 @@ import { SysTray }          from './systray.js';
 import { BatteryIndicator } from './battery.js';
 import { Brightness }       from './brightness.js';
 import { AudioIndicator }   from './audio.js';
+import { Gesture }          from './gesture.js';
 
 export const Bar = Window({
   name: 'bar',
@@ -19,60 +20,62 @@ export const Bar = Window({
   anchor: 'top left right',
   exclusive: true,
 
-  child: CenterBox({
-    className: 'transparent',
-    halign: 'fill',
-    style: 'margin: 5px',
-    vertical: false,
-    
-    startWidget: Box({
-      halign: 'start',
-      children: [
+  child: Gesture({
+    child: CenterBox({
+      className: 'transparent',
+      halign: 'fill',
+      style: 'margin: 5px',
+      vertical: false,
 
-        OskToggle,
-  
-        Separator(12),
+      startWidget: Box({
+        halign: 'start',
+        children: [
 
-        TabletToggle,
-      
-        Separator(12),
+          OskToggle,
 
-        SysTray,
+          Separator(12),
 
-        Separator(12),
+          TabletToggle,
 
-        AudioIndicator,
+          Separator(12),
 
-        Separator(12),
+          SysTray,
 
-        Brightness,
+          Separator(12),
 
-        Separator(12),
+          AudioIndicator,
 
-        Workspaces,
+          Separator(12),
 
-      ],
-    }),
+          Brightness,
 
-    centerWidget: CurrentWindow,
+          Separator(12),
 
-    endWidget: Box({
-      halign: 'end',
-      children: [
-        BatteryIndicator,
-        
-        Separator(12),
-      
-        Clock,
+          Workspaces,
 
-        Separator(12),
+        ],
+      }),
 
-        NotifButton,
+      centerWidget: CurrentWindow,
 
-        Separator(12),
+      endWidget: Box({
+        halign: 'end',
+        children: [
+          BatteryIndicator,
 
-        QsToggle,
-      ],
+          Separator(12),
+
+          Clock,
+
+          Separator(12),
+
+          NotifButton,
+
+          Separator(12),
+
+          QsToggle,
+        ],
+      }),
     }),
   }),
 });