30f1b5ed83af12e82d1a018eadbaa42bee8703a6

Author
Immelancholy <lenalowes0@gmail.com>
Committer
outfoxxed <outfoxxed@outfoxxed.me>
Date

Message

fix: update dispatchers to use V2 API and return SDispatchResult

- Changed dispatcher functions to return `SDispatchResult`.
- Updated all `HyprlandAPI::addDispatcher` calls to `HyprlandAPI::addDispatcherV2`.
- Added missing `return SDispatchResult {};` statements to dispatcher functions.
- Introduced `static` keyword for all dispatcher functions.

Diff

This diff is truncated to protect this page.

  1diff --git a/flake.lock b/flake.lock
  2index 9c334bbacf35110e31e8b827e26f3586756f8119..7a713aee6924781bf0edbe93580d01584de093d5 100644
  3--- a/flake.lock
  4+++ b/flake.lock
  5@@ -20,11 +20,11 @@
  6         ]
  7       },
  8       "locked": {
  9-        "lastModified": 1763922789,
 10-        "narHash": "sha256-XnkWjCpeXfip9tqYdL0b0zzBDjq+dgdISvEdSVGdVyA=",
 11+        "lastModified": 1764714051,
 12+        "narHash": "sha256-AjcMlM3UoavFoLzr0YrcvsIxALShjyvwe+o7ikibpCM=",
 13         "owner": "hyprwm",
 14         "repo": "aquamarine",
 15-        "rev": "a20a0e67a33b6848378a91b871b89588d3a12573",
 16+        "rev": "a43bedcceced5c21ad36578ed823e6099af78214",
 17         "type": "github"
 18       },
 19       "original": {
 20@@ -139,23 +139,24 @@
 21         "hyprlang": "hyprlang",
 22         "hyprutils": "hyprutils",
 23         "hyprwayland-scanner": "hyprwayland-scanner",
 24+        "hyprwire": "hyprwire",
 25         "nixpkgs": "nixpkgs",
 26         "pre-commit-hooks": "pre-commit-hooks",
 27         "systems": "systems",
 28         "xdph": "xdph"
 29       },
 30       "locked": {
 31-        "lastModified": 1764110666,
 32-        "narHash": "sha256-prU18d3zNddHZsdqh5o8vLVNONDgxVloFhXZgUxO4CI=",
 33+        "lastModified": 1765284242,
 34+        "narHash": "sha256-r9ltXBKsowTVc/avfoBmd7M4H3NOxJUPm0+9o8sj03Y=",
 35         "owner": "hyprwm",
 36         "repo": "hyprland",
 37-        "rev": "40d8fa84919c6d0e9fcb1536f4bc09710d4c031c",
 38+        "rev": "6712fb954f2e4f701878b97f19b7185a2cd0e192",
 39         "type": "github"
 40       },
 41       "original": {
 42         "owner": "hyprwm",
 43         "repo": "hyprland",
 44-        "rev": "40d8fa84919c6d0e9fcb1536f4bc09710d4c031c",
 45+        "rev": "6712fb954f2e4f701878b97f19b7185a2cd0e192",
 46         "type": "github"
 47       }
 48     },
 49@@ -192,11 +193,11 @@
 50         ]
 51       },
 52       "locked": {
 53-        "lastModified": 1763727565,
 54-        "narHash": "sha256-vRff/2R1U1jzPBy4OODqh2kfUzmizW/nfV2ROzTDIKo=",
 55+        "lastModified": 1764812575,
 56+        "narHash": "sha256-1bK1yGgaR82vajUrt6z+BSljQvFn91D74WJ/vJsydtE=",
 57         "owner": "hyprwm",
 58         "repo": "hyprland-guiutils",
 59-        "rev": "7724d3a12a0453e7aae05f2ef39474219f05a4b4",
 60+        "rev": "fd321368a40c782cfa299991e5584ca338e36ebe",
 61         "type": "github"
 62       },
 63       "original": {
 64@@ -246,11 +247,11 @@
 65         ]
 66       },
 67       "locked": {
 68-        "lastModified": 1763819661,
 69-        "narHash": "sha256-0jLarTR/BLWdGlboM86bPVP2zKJNI2jvo3JietnDkOM=",
 70+        "lastModified": 1764612430,
 71+        "narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=",
 72         "owner": "hyprwm",
 73         "repo": "hyprlang",
 74-        "rev": "a318deec0c12409ec39c68d2be8096b636dc2a5c",
 75+        "rev": "0d00dc118981531aa731150b6ea551ef037acddd",
 76         "type": "github"
 77       },
 78       "original": {
 79@@ -298,11 +299,11 @@
 80         ]
 81       },
 82       "locked": {
 83-        "lastModified": 1763503177,
 84-        "narHash": "sha256-VPoiswJBBmTLVuNncvT/8FpFR+sYcAi/LgP/zTZ+5rA=",
 85+        "lastModified": 1764592794,
 86+        "narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=",
 87         "owner": "hyprwm",
 88         "repo": "hyprtoolkit",
 89-        "rev": "f4e1e12755567ecf39090203b8f43eace8279630",
 90+        "rev": "5cfe0743f0e608e1462972303778d8a0859ee63e",
 91         "type": "github"
 92       },
 93       "original": {
 94@@ -323,11 +324,11 @@
 95         ]
 96       },
 97       "locked": {
 98-        "lastModified": 1763996058,
 99-        "narHash": "sha256-DsqzFZvrEV+aDmavjaD4/bk5qxeZwhGxPWBQdpFyM9Y=",
100+        "lastModified": 1764962281,
101+        "narHash": "sha256-rGbEMhTTyTzw4iyz45lch5kXseqnqcEpmrHdy+zHsfo=",
102         "owner": "hyprwm",
103         "repo": "hyprutils",
104-        "rev": "0168583075baffa083032ed13a8bea8ea12f281a",
105diff --git a/flake.nix b/flake.nix
106index 0a9eaf00d3f7855b2ebd46f95b6754c6d032536b..50ead460da2d93d69759d31263c923298e1a8137 100644
107--- a/flake.nix
108+++ b/flake.nix
109@@ -1,12 +1,17 @@
110 {
111   inputs = {
112-    hyprland.url = "github:hyprwm/hyprland/40d8fa84919c6d0e9fcb1536f4bc09710d4c031c";
113+    hyprland.url = "github:hyprwm/hyprland/6712fb954f2e4f701878b97f19b7185a2cd0e192";
114   };
115 
116-  outputs = { self, hyprland, ... }: let
117+  outputs = {
118+    self,
119+    hyprland,
120+    ...
121+  }: let
122     inherit (hyprland.inputs) nixpkgs;
123 
124-    hyprlandSystems = fn: nixpkgs.lib.genAttrs
125+    hyprlandSystems = fn:
126+      nixpkgs.lib.genAttrs
127       (builtins.attrNames hyprland.packages)
128       (system: fn system nixpkgs.legacyPackages.${system});
129 
130@@ -30,7 +35,7 @@
131       impure = import ./shell.nix {
132         pkgs = import <nixpkgs> {};
133         hlversion = hyprlandVersion;
134-        hyprland = (pkgs.appendOverlays [ hyprland.overlays.hyprland-packages ]).hyprland.overrideAttrs {
135+        hyprland = (pkgs.appendOverlays [hyprland.overlays.hyprland-packages]).hyprland.overrideAttrs {
136           dontStrip = true;
137         };
138       };
139diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
140index 5b379f5f91c6d0acd33441bbc5c744513caf6a10..352081cce1fe82433ece3ad646dcaa297557c80a 100644
141--- a/src/Hy3Layout.cpp
142+++ b/src/Hy3Layout.cpp
143@@ -25,12 +25,15 @@
144 #include "TabGroup.hpp"
145 #include "globals.hpp"
146 #include "src/SharedDefs.hpp"
147-#include "src/desktop/WLSurface.hpp"
148-#include "src/desktop/Window.hpp"
149+#include "src/desktop/view/WLSurface.hpp"
150+#include "src/desktop/view/Window.hpp"
151 #include "src/desktop/rule/Rule.hpp"
152 #include "src/desktop/types/OverridableVar.hpp"
153 #include "src/devices/IPointer.hpp"
154 
155+
156+using namespace Desktop::View;
157+
158 PHLWORKSPACE workspace_for_action(bool allow_fullscreen) {
159 	if (g_pLayoutManager->getCurrentLayout() != g_Hy3Layout.get()) return nullptr;
160 
161@@ -155,7 +158,7 @@ void Hy3Layout::insertNode(Hy3Node& node) {
162 		} else {
163 			auto mouse_window = g_pCompositor->vectorToWindowUnified(
164 			    g_pInputManager->getMouseCoordsInternal(),
165-			    RESERVED_EXTENTS | INPUT_EXTENTS
166+			    RESERVED_EXTENTS | Desktop::View::INPUT_EXTENTS
167 			);
168 
169 			if (mouse_window != nullptr && mouse_window->m_workspace == node.workspace) {
170@@ -182,14 +185,14 @@ void Hy3Layout::insertNode(Hy3Node& node) {
171 			    ConfigValue<Hyprlang::INT>("plugin:hy3:tab_first_window");
172 
173 			auto width =
174-			    monitor->m_size.x - monitor->m_reservedBottomRight.x - monitor->m_reservedTopLeft.x;
175+			    monitor->m_size.x - monitor->m_reservedArea.right() - monitor->m_reservedArea.left();
176 			auto height =
177-			    monitor->m_size.y - monitor->m_reservedBottomRight.y - monitor->m_reservedTopLeft.y;
178+			    monitor->m_size.y - monitor->m_reservedArea.bottom() - monitor->m_reservedArea.top();
179 
180 			this->nodes.push_back({
181 			    .data = height > width ? Hy3GroupLayout::SplitV : Hy3GroupLayout::SplitH,
182-			    .position = monitor->m_position + monitor->m_reservedTopLeft,
183-			    .size = monitor->m_size - monitor->m_reservedTopLeft - monitor->m_reservedBottomRight,
184+			    .position = monitor->m_position + Vector2D(monitor->m_reservedArea.left(), monitor->m_reservedArea.top()),
185+			    .size = monitor->m_size - Vector2D(monitor->m_reservedArea.left(), monitor->m_reservedArea.top()) - Vector2D(monitor->m_reservedArea.right(), monitor->m_reservedArea.bottom()),
186 			    .workspace = node.workspace,
187 			    .layout = this,
188 			});
189@@ -371,9 +374,9 @@ void Hy3Layout::recalculateMonitor(const MONITORID& monitor_id) {
190 
191 	auto* top_node = this->getWorkspaceRootGroup(monitor->m_activeWorkspace.get());
192 	if (top_node != nullptr) {
193-		top_node->position = monitor->m_position + monitor->m_reservedTopLeft;
194+		top_node->position = monitor->m_position + Vector2D(monitor->m_reservedArea.left(), monitor->m_reservedArea.top());
195 		top_node->size =
196-		    monitor->m_size - monitor->m_reservedTopLeft - monitor->m_reservedBottomRight;
197+		    monitor->m_size - Vector2D(monitor->m_reservedArea.left(), monitor->m_reservedArea.top()) - Vector2D(monitor->m_reservedArea.right(), monitor->m_reservedArea.bottom());
198 
199 		top_node->recalcSizePosRecursive();
200 	}
201@@ -381,9 +384,9 @@ void Hy3Layout::recalculateMonitor(const MONITORID& monitor_id) {
202 	top_node = this->getWorkspaceRootGroup(monitor->m_activeSpecialWorkspace.get());
203 
204 	if (top_node != nullptr) {
205-		top_node->position = monitor->m_position + monitor->m_reservedTopLeft;
206+		top_node->position = monitor->m_position + Vector2D(monitor->m_reservedArea.left(), monitor->m_reservedArea.top());
207 		top_node->size =
208-		    monitor->m_size - monitor->m_reservedTopLeft - monitor->m_reservedBottomRight;
209+		    monitor->m_size - Vector2D(monitor->m_reservedArea.left(), monitor->m_reservedArea.top()) - Vector2D(monitor->m_reservedArea.right(), monitor->m_reservedArea.bottom());
210 
211 		top_node->recalcSizePosRecursive();
212 	}
213@@ -424,16 +427,16 @@ void Hy3Layout::resizeActiveWindow(const Vector2D& delta, eRectCorner corner, PH
214 		auto& monitor = window->m_monitor;
215 
216 		const bool display_left =
217-		    STICKS(node->position.x, monitor->m_position.x + monitor->m_reservedTopLeft.x);
218+		    STICKS(node->position.x, monitor->m_position.x + monitor->m_reservedArea.left());
219 		const bool display_right = STICKS(
220 		    node->position.x + node->size.x,
221-		    monitor->m_position.x + monitor->m_size.x - monitor->m_reservedBottomRight.x
222+		    monitor->m_position.x + monitor->m_size.x - monitor->m_reservedArea.right()
223 		);
224 		const bool display_top =
225-		    STICKS(node->position.y, monitor->m_position.y + monitor->m_reservedTopLeft.y);
226+		    STICKS(node->position.y, monitor->m_position.y + monitor->m_reservedArea.top());
227 		const bool display_bottom = STICKS(
228 		    node->position.y + node->size.y,
229-		    monitor->m_position.y + monitor->m_size.y - monitor->m_reservedBottomRight.y
230+		    monitor->m_position.y + monitor->m_size.y - monitor->m_reservedArea.bottom()
231 		);
232 
233 		Vector2D resize_delta = delta;
234@@ -556,8 +559,8 @@ void Hy3Layout::fullscreenRequestForWindow(
235 
236 			Hy3Node fakeNode = {
237 			    .data = window,
238-			    .position = monitor->m_position + monitor->m_reservedTopLeft,
239-			    .size = monitor->m_size - monitor->m_reservedTopLeft - monitor->m_reservedBottomRight,
240+			    .position = monitor->m_position + Vector2D(monitor->m_reservedArea.left(), monitor->m_reservedArea.top()),
241+			    .size = monitor->m_size - Vector2D(monitor->m_reservedArea.left(), monitor->m_reservedArea.top()) - Vector2D(monitor->m_reservedArea.right(), monitor->m_reservedArea.bottom()),
242 			    .gap_topleft_offset = gap_pos_offset,
243diff --git a/src/Hy3Layout.hpp b/src/Hy3Layout.hpp
244index f894ec580dedb5b21d677478d223fa3a3c527bcf..049e19b84766402a8ffff2299fcbf195929bfaa0 100644
245--- a/src/Hy3Layout.hpp
246+++ b/src/Hy3Layout.hpp
247@@ -155,9 +155,9 @@ public:
248 	static void warpCursorToBox(const Vector2D& pos, const Vector2D& size);
249 	static void warpCursorWithFocus(const Vector2D& pos, bool force = false);
250 
251-	bool shouldRenderSelected(const CWindow*);
252-	PHLWINDOW findTiledWindowCandidate(const CWindow* from);
253-	PHLWINDOW findFloatingWindowCandidate(const CWindow* from);
254+	bool shouldRenderSelected(const Desktop::View::CWindow*);
255+	PHLWINDOW findTiledWindowCandidate(const Desktop::View::CWindow* from);
256+	PHLWINDOW findFloatingWindowCandidate(const Desktop::View::CWindow* from);
257 
258 	Hy3Node* getWorkspaceRootGroup(const CWorkspace* workspace);
259 	Hy3Node* getWorkspaceFocusedNode(
260@@ -176,7 +176,7 @@ public:
261 	std::list<Hy3TabGroup> tab_groups;
262 
263 private:
264-	Hy3Node* getNodeFromWindow(const CWindow*);
265+	Hy3Node* getNodeFromWindow(const Desktop::View::CWindow*);
266 	void applyNodeDataToWindow(Hy3Node*, bool no_animation = false);
267 
268 	// if shift is true, shift the window in the given direction, returning
269diff --git a/src/Hy3Node.cpp b/src/Hy3Node.cpp
270index 74c751b5a669478f154c2a02c62c513b8b1c6288..7de161a2c1f68488ad4694306f1fb2ce2be48cfb 100644
271--- a/src/Hy3Node.cpp
272+++ b/src/Hy3Node.cpp
273@@ -215,6 +215,7 @@ PHLWINDOW Hy3Node::bringToTop() {
274 		return nullptr;
275 	}
276 	}
277+	return nullptr;
278 }
279 
280 void Hy3Node::focusWindow() {
281@@ -278,6 +279,7 @@ Hy3Node* Hy3Node::getFocusedNode(bool ignore_group_focus, bool stop_at_expanded)
282 		}
283 	}
284 	}
285+	return nullptr;
286 }
287 
288 bool Hy3Node::isIndirectlyFocused() {
289@@ -344,8 +346,8 @@ void Hy3Node::recalcSizePosRecursive(bool no_animation) {
290 
291 		Hy3Node fake_node = {
292 		    .data = window,
293-		    .position = monitor->m_position + monitor->m_reservedTopLeft,
294-		    .size = monitor->m_size - monitor->m_reservedTopLeft - monitor->m_reservedBottomRight,
295+		    .position = monitor->m_position + Vector2D(monitor->m_reservedArea.left(), monitor->m_reservedArea.top()),
296+		    .size = monitor->m_size - Vector2D(monitor->m_reservedArea.left(), monitor->m_reservedArea.top()) - Vector2D(monitor->m_reservedArea.right(), monitor->m_reservedArea.bottom()),
297 		    .gap_topleft_offset = gap_topleft_offset,
298 		    .gap_bottomright_offset = gap_bottomright_offset,
299 		    .workspace = this->workspace,
300@@ -376,7 +378,7 @@ void Hy3Node::recalcSizePosRecursive(bool no_animation) {
301 
302 	auto& group = this->data.as_group();
303 
304-	double constraint;
305+	double constraint = 0.0;
306 	switch (group.layout) {
307 	case Hy3GroupLayout::SplitH:
308 		constraint = tsize.x - gap_topleft_offset.x - gap_bottomright_offset.x;
309@@ -634,6 +636,7 @@ bool Hy3Node::isUrgent() {
310 
311 		return false;
312 	}
313+	return false;
314 }
315 
316 void Hy3Node::setHidden(bool hidden) {
317diff --git a/src/Hy3Node.hpp b/src/Hy3Node.hpp
318index 34b4ad90c19fa73f85a44dd654adc0900adef91f..876a235ebb95165cf5ba82269aca7b5771df8f5a 100644
319--- a/src/Hy3Node.hpp
320+++ b/src/Hy3Node.hpp
321@@ -7,7 +7,7 @@ enum class Hy3GroupLayout;
322 #include <variant>
323 
324 #include <hyprland/src/defines.hpp>
325-#include <hyprland/src/desktop/Window.hpp>
326+#include <hyprland/src/desktop/view/Window.hpp>
327 
328 #include "Hy3Layout.hpp"
329 #include "TabGroup.hpp"
330diff --git a/src/dispatchers.cpp b/src/dispatchers.cpp
331index 847417d4c6042aeb63062ce838d72b2f689f2a56..f88793f77e75fa8ba3a1cc2148744232969cd0ed 100644
332--- a/src/dispatchers.cpp
333+++ b/src/dispatchers.cpp
334@@ -9,9 +9,9 @@
335 #include "globals.hpp"
336 #include "src/SharedDefs.hpp"
337 
338-void dispatch_makegroup(std::string value) {
339+static SDispatchResult dispatch_makegroup(std::string value) {
340 	auto workspace = workspace_for_action();
341-	if (!valid(workspace)) return;
342+	if (!valid(workspace)) return SDispatchResult {};
343 
344 	auto args = CVarList(value);
345 
346@@ -34,11 +34,12 @@ void dispatch_makegroup(std::string value) {
347 	} else if (args[0] == "opposite") {
348 		g_Hy3Layout->makeOppositeGroupOnWorkspace(workspace.get(), ephemeral);
349 	}
350+	return SDispatchResult {};
351 }
352 
353-void dispatch_changegroup(std::string value) {
354+static SDispatchResult dispatch_changegroup(std::string value) {
355 	auto workspace = workspace_for_action();
356-	if (!valid(workspace)) return;
357+	if (!valid(workspace)) return SDispatchResult {};
358 
359 	auto args = CVarList(value);
360 
361@@ -55,17 +56,19 @@ void dispatch_changegroup(std::string value) {
362 	} else if (args[0] == "opposite") {
363 		g_Hy3Layout->changeGroupToOppositeOnWorkspace(workspace.get());
364 	}
365+	return SDispatchResult {};
366 }
367 
368-void dispatch_setephemeral(std::string value) {
369+static SDispatchResult dispatch_setephemeral(std::string value) {
370 	auto workspace = workspace_for_action();
371-	if (!valid(workspace)) return;
372+	if (!valid(workspace)) return SDispatchResult {};
373 
374 	auto args = CVarList(value);
375 
376 	bool ephemeral = args[0] == "true";
377 
378 	g_Hy3Layout->changeGroupEphemeralityOnWorkspace(workspace.get(), ephemeral);
379+	return SDispatchResult {};
380 }
381 
382 std::optional<ShiftDirection> parseShiftArg(std::string arg) {
383@@ -76,9 +79,9 @@ std::optional<ShiftDirection> parseShiftArg(std::string arg) {
384 	else return {};
385 }
386 
387-void dispatch_movewindow(std::string value) {
388+static SDispatchResult dispatch_movewindow(std::string value) {
389 	auto workspace = workspace_for_action();
390-	if (!valid(workspace)) return;
391+	if (!valid(workspace)) return SDispatchResult {};
392 
393 	auto args = CVarList(value);
394 
395@@ -99,11 +102,12 @@ void dispatch_movewindow(std::string value) {
396 
397 		g_Hy3Layout->shiftWindow(workspace.get(), shift.value(), once, visible);
398 	}
399+	return SDispatchResult {};
400 }
401 
402-void dispatch_movefocus(std::string value) {
403+static SDispatchResult dispatch_movefocus(std::string value) {
404 	auto workspace = workspace_for_action(true);
405-	if (!valid(workspace)) return;
406+	if (!valid(workspace)) return SDispatchResult {};
407 
408 	auto args = CVarList(value);
409 
410@@ -112,10 +116,10 @@ void dispatch_movefocus(std::string value) {
411 
412 	int argi = 0;
413 	auto shift = parseShiftArg(args[argi++]);
414-	if (!shift) return;
415+	if (!shift) return SDispatchResult {};
416 	if (workspace->m_hasFullscreenWindow) {
417 		g_Hy3Layout->focusMonitor(shift.value());
418-		return;
419+		return SDispatchResult {};
420 	}
421 
422 	auto visible = args[argi] == "visible";
423@@ -125,27 +129,32 @@ void dispatch_movefocus(std::string value) {
424 	else if (args[argi] == "warp") warp_cursor = true;
425 
426 	g_Hy3Layout->shiftFocus(workspace.get(), shift.value(), visible, warp_cursor);
427+	return SDispatchResult {};
428 }
429 
430-void dispatch_togglefocuslayer(std::string value) {
431+static SDispatchResult dispatch_togglefocuslayer(std::string value) {
432 	auto workspace = workspace_for_action();
433-	if (!valid(workspace)) return;