e6cabcfa3d303c47406e458f662564d50883b4f2

Author
outfoxxed <outfoxxed@outfoxxed.me>
Committer
outfoxxed <outfoxxed@outfoxxed.me>
Date

Message

fixup: fix hook + layout breakage

fixes #102

Diff

This diff is truncated to protect this page.

  1diff --git a/flake.lock b/flake.lock
  2index df88212444453b448a03f0529f9c76f905f57f83..7b5053a9032a0c4df47d62a67b6930d0fad69f17 100644
  3--- a/flake.lock
  4+++ b/flake.lock
  5@@ -16,11 +16,11 @@
  6         ]
  7       },
  8       "locked": {
  9-        "lastModified": 1712434681,
 10-        "narHash": "sha256-qwmR2p1oc48Bj7gUDvb1oGL19Rjs2PmEmk4ChV01A5o=",
 11+        "lastModified": 1713612213,
 12+        "narHash": "sha256-zJboXgWNpNhKyNF8H/3UYzWkx7w00TOCGKi3cwi+tsw=",
 13         "owner": "hyprwm",
 14         "repo": "hyprcursor",
 15-        "rev": "818d8c4b69e0997483d60b75f701fe14b561a7a3",
 16+        "rev": "cab4746180f210a3c1dd3d53e45c510e309e90e1",
 17         "type": "github"
 18       },
 19       "original": {
 20@@ -34,22 +34,23 @@
 21         "hyprcursor": "hyprcursor",
 22         "hyprland-protocols": "hyprland-protocols",
 23         "hyprlang": "hyprlang",
 24+        "hyprwayland-scanner": "hyprwayland-scanner",
 25         "nixpkgs": "nixpkgs",
 26         "systems": "systems",
 27         "wlroots": "wlroots",
 28         "xdph": "xdph"
 29       },
 30       "locked": {
 31-        "lastModified": 1713283263,
 32-        "narHash": "sha256-Urb/njWiHYUudXpmK8EKl9Z58esTIG0PxXw5LuM2r5g=",
 33+        "lastModified": 1713819507,
 34+        "narHash": "sha256-mG0kD8HmkCsHRkTBmqGb/QvM1vAvkAmB5p2H5XQ0zLo=",
 35         "owner": "hyprwm",
 36         "repo": "Hyprland",
 37-        "rev": "fe7b748eb668136dd0558b7c8279bfcd7ab4d759",
 38+        "rev": "da839f20f1b1a57ec78d6b041f8d1369150d253e",
 39         "type": "github"
 40       },
 41       "original": {
 42         "owner": "hyprwm",
 43-        "ref": "fe7b748eb668136dd0558b7c8279bfcd7ab4d759",
 44+        "ref": "da839f20f1b1a57ec78d6b041f8d1369150d253e",
 45         "repo": "Hyprland",
 46         "type": "github"
 47       }
 48@@ -91,11 +92,11 @@
 49         ]
 50       },
 51       "locked": {
 52-        "lastModified": 1711671891,
 53-        "narHash": "sha256-C/Wwsy/RLxHP1axFFl+AnwJRWfd8gxDKKoa8nt8Qk3c=",
 54+        "lastModified": 1713121246,
 55+        "narHash": "sha256-502X0Q0fhN6tJK7iEUA8CghONKSatW/Mqj4Wappd++0=",
 56         "owner": "hyprwm",
 57         "repo": "hyprlang",
 58-        "rev": "c1402612146ba06606ebf64963a02bc1efe11e74",
 59+        "rev": "78fcaa27ae9e1d782faa3ff06c8ea55ddce63706",
 60         "type": "github"
 61       },
 62       "original": {
 63@@ -104,13 +105,38 @@
 64         "type": "github"
 65       }
 66     },
 67+    "hyprwayland-scanner": {
 68+      "inputs": {
 69+        "nixpkgs": [
 70+          "hyprland",
 71+          "nixpkgs"
 72+        ],
 73+        "systems": [
 74+          "hyprland",
 75+          "systems"
 76+        ]
 77+      },
 78+      "locked": {
 79+        "lastModified": 1713730424,
 80+        "narHash": "sha256-MqYjTvQCxwuDIuAaqIEuyqserm5PYr0auiHHPuYFN/k=",
 81+        "owner": "hyprwm",
 82+        "repo": "hyprwayland-scanner",
 83+        "rev": "7c9c8adfe7e424faa0c5ce6e8be90157fda53c06",
 84+        "type": "github"
 85+      },
 86+      "original": {
 87+        "owner": "hyprwm",
 88+        "repo": "hyprwayland-scanner",
 89+        "type": "github"
 90+      }
 91+    },
 92     "nixpkgs": {
 93       "locked": {
 94-        "lastModified": 1712439257,
 95-        "narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=",
 96+        "lastModified": 1713537308,
 97+        "narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=",
 98         "owner": "NixOS",
 99         "repo": "nixpkgs",
100-        "rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599",
101+        "rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f",
102         "type": "github"
103       },
104       "original": {
105diff --git a/flake.nix b/flake.nix
106index b6c1b265facd99b5c0a84b4a0c38f5b067de7d60..998ea51b4e10419c90ba98e1f5ef4f6fdca07d4a 100644
107--- a/flake.nix
108+++ b/flake.nix
109@@ -1,6 +1,6 @@
110 {
111   inputs = {
112-    hyprland.url = "github:hyprwm/Hyprland?ref=fe7b748eb668136dd0558b7c8279bfcd7ab4d759";
113+    hyprland.url = "github:hyprwm/Hyprland?ref=da839f20f1b1a57ec78d6b041f8d1369150d253e";
114   };
115 
116   outputs = { self, hyprland, ... }: let
117diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
118index d54b90dac9eb578c494c4c8569d8b6ffabe764d3..ca60aa0bbd209df896614742cead2affe3afc46e 100644
119--- a/src/Hy3Layout.cpp
120+++ b/src/Hy3Layout.cpp
121@@ -10,14 +10,10 @@
122 #include "SelectionHook.hpp"
123 #include "globals.hpp"
124 
125-std::unique_ptr<HOOK_CALLBACK_FN> renderHookPtr =
126-    std::make_unique<HOOK_CALLBACK_FN>(Hy3Layout::renderHook);
127-std::unique_ptr<HOOK_CALLBACK_FN> windowTitleHookPtr =
128-    std::make_unique<HOOK_CALLBACK_FN>(Hy3Layout::windowGroupUpdateRecursiveHook);
129-std::unique_ptr<HOOK_CALLBACK_FN> urgentHookPtr =
130-    std::make_unique<HOOK_CALLBACK_FN>(Hy3Layout::windowGroupUrgentHook);
131-std::unique_ptr<HOOK_CALLBACK_FN> tickHookPtr =
132-    std::make_unique<HOOK_CALLBACK_FN>(Hy3Layout::tickHook);
133+std::shared_ptr<HOOK_CALLBACK_FN> renderHookPtr;
134+std::shared_ptr<HOOK_CALLBACK_FN> windowTitleHookPtr;
135+std::shared_ptr<HOOK_CALLBACK_FN> urgentHookPtr;
136+std::shared_ptr<HOOK_CALLBACK_FN> tickHookPtr;
137 
138 bool performContainment(Hy3Node& node, bool contained, CWindow* window) {
139 	if (node.data.type == Hy3NodeType::Group) {
140@@ -604,7 +600,8 @@ void Hy3Layout::switchWindows(CWindow* pWindowA, CWindow* pWindowB) {
141 	// todo
142 }
143 
144-void Hy3Layout::moveWindowTo(CWindow* window, const std::string& direction) {
145+void Hy3Layout::moveWindowTo(CWindow* window, const std::string& direction, bool silent) {
146+	// todo: support silent
147 	auto* node = this->getNodeFromWindow(window);
148 	if (node == nullptr) return;
149 
150@@ -677,18 +674,18 @@ void Hy3Layout::onEnable() {
151 		this->onWindowCreatedTiling(window.get());
152 	}
153 
154-	HyprlandAPI::registerCallbackStatic(PHANDLE, "render", renderHookPtr.get());
155-	HyprlandAPI::registerCallbackStatic(PHANDLE, "windowTitle", windowTitleHookPtr.get());
156-	HyprlandAPI::registerCallbackStatic(PHANDLE, "urgent", urgentHookPtr.get());
157-	HyprlandAPI::registerCallbackStatic(PHANDLE, "tick", tickHookPtr.get());
158+	renderHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "render", &Hy3Layout::renderHook);
159+	windowTitleHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "windowTitle", &Hy3Layout::windowGroupUpdateRecursiveHook);
160+	urgentHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "urgent", &Hy3Layout::windowGroupUrgentHook);
161+	tickHookPtr = HyprlandAPI::registerCallbackDynamic(PHANDLE, "tick", &Hy3Layout::tickHook);
162 	selection_hook::enable();
163 }
164 
165 void Hy3Layout::onDisable() {
166-	HyprlandAPI::unregisterCallback(PHANDLE, renderHookPtr.get());
167-	HyprlandAPI::unregisterCallback(PHANDLE, windowTitleHookPtr.get());
168-	HyprlandAPI::unregisterCallback(PHANDLE, urgentHookPtr.get());
169-	HyprlandAPI::unregisterCallback(PHANDLE, tickHookPtr.get());
170+	renderHookPtr.reset();
171+	windowTitleHookPtr.reset();
172+	urgentHookPtr.reset();
173+	tickHookPtr.reset();
174 	selection_hook::disable();
175 
176 	for (auto& node: this->nodes) {
177diff --git a/src/Hy3Layout.hpp b/src/Hy3Layout.hpp
178index 930d91d387cb6324dea4c1696e481b930d60aaf4..3bb27de013ecf7950064be894017e61eb6586411 100644
179--- a/src/Hy3Layout.hpp
180+++ b/src/Hy3Layout.hpp
181@@ -83,7 +83,7 @@ public:
182 	virtual std::any layoutMessage(SLayoutMessageHeader header, std::string content);
183 	virtual SWindowRenderLayoutHints requestRenderHints(CWindow*);
184 	virtual void switchWindows(CWindow*, CWindow*);
185-	virtual void moveWindowTo(CWindow*, const std::string& direction);
186+	virtual void moveWindowTo(CWindow*, const std::string& direction, bool silent);
187 	virtual void alterSplitRatio(CWindow*, float, bool);
188 	virtual std::string getLayoutName();
189 	virtual CWindow* getNextWindowCandidate(CWindow*);