fdc4749ac7010a05ed4cc9f7450dcf93aeb65999

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

Message

fixup: fix breakage from hyprland#5380

Diff

This diff is truncated to protect this page.

  1diff --git a/flake.lock b/flake.lock
  2index f3a4c3633eab7f91bea0e07e9b67d76f13dde907..ce30305ebd632d78ff60a65dc49fd50b05d27373 100644
  3--- a/flake.lock
  4+++ b/flake.lock
  5@@ -37,16 +37,15 @@
  6         "xdph": "xdph"
  7       },
  8       "locked": {
  9-        "lastModified": 1711996237,
 10-        "narHash": "sha256-oa82eFINs1HkEnx3Nu+GEQQxXXNkJzSci3HZU//OJ2Y=",
 11+        "lastModified": 1712189807,
 12+        "narHash": "sha256-hmEBPDk1GbpPzpa0gLhJ0XJ5rvt+dMddKNQGr9J8XyA=",
 13         "owner": "hyprwm",
 14         "repo": "Hyprland",
 15-        "rev": "3875679755014997776e091ff8903acfb311dd2f",
 16+        "rev": "b7d71bc0e1084bc1a296ae906503709a74fde4d9",
 17         "type": "github"
 18       },
 19       "original": {
 20         "owner": "hyprwm",
 21-        "ref": "v0.38.0",
 22         "repo": "Hyprland",
 23         "type": "github"
 24       }
 25diff --git a/flake.nix b/flake.nix
 26index f675e782702034a924c7515101e6e81474bc2064..a375308b98bc8c5caa8e69646dfbab4ef69e3f70 100644
 27--- a/flake.nix
 28+++ b/flake.nix
 29@@ -1,6 +1,6 @@
 30 {
 31   inputs = {
 32-    hyprland.url = "github:hyprwm/Hyprland?ref=v0.38.0";
 33+    hyprland.url = "github:hyprwm/Hyprland";
 34   };
 35 
 36   outputs = { self, hyprland, ... }: let
 37diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
 38index 5fc334670402ca73e3127cb95253d424964437ef..a1f54a03fb32ba29ad460c97ed255e37c858eaba 100644
 39--- a/src/Hy3Layout.cpp
 40+++ b/src/Hy3Layout.cpp
 41@@ -2,6 +2,7 @@
 42 #include <set>
 43 
 44 #include <hyprland/src/Compositor.hpp>
 45+#include <hyprland/src/desktop/DesktopTypes.hpp>
 46 #include <hyprland/src/plugins/PluginAPI.hpp>
 47 #include <ranges>
 48 
 49@@ -36,7 +37,7 @@ bool performContainment(Hy3Node& node, bool contained, CWindow* window) {
 50 							node.layout->nodes.push_back({
 51 							    .parent = &node,
 52 							    .data = window,
 53-							    .workspace_id = node.workspace_id,
 54+							    .workspace = node.workspace,
 55 							    .layout = node.layout,
 56 							});
 57 
 58@@ -78,7 +79,7 @@ void Hy3Layout::onWindowCreatedTiling(CWindow* window, eDirection) {
 59 	    (uintptr_t) window,
 60 	    window->m_bIsFloating,
 61 	    window->m_iMonitorID,
 62-	    window->m_iWorkspaceID
 63+	    window->m_pWorkspace->m_iID
 64 	);
 65 
 66 	if (window->m_bIsFloating) return;
 67@@ -97,7 +98,7 @@ void Hy3Layout::onWindowCreatedTiling(CWindow* window, eDirection) {
 68 	this->nodes.push_back({
 69 	    .parent = nullptr,
 70 	    .data = window,
 71-	    .workspace_id = window->m_iWorkspaceID,
 72+	    .workspace = window->m_pWorkspace,
 73 	    .layout = this,
 74 	});
 75 
 76@@ -115,26 +116,24 @@ void Hy3Layout::insertNode(Hy3Node& node) {
 77 		return;
 78 	}
 79 
 80-	auto* workspace = g_pCompositor->getWorkspaceByID(node.workspace_id);
 81-
 82-	if (workspace == nullptr) {
 83+	if (!valid(node.workspace)) {
 84 		hy3_log(
 85 		    ERR,
 86 		    "insertNode called for node {:x} with invalid workspace id {}",
 87 		    (uintptr_t) &node,
 88-		    node.workspace_id
 89+		    node.workspace->m_iID
 90 		);
 91 		return;
 92 	}
 93 
 94 	node.reparenting = true;
 95 
 96-	auto* monitor = g_pCompositor->getMonitorFromID(workspace->m_iMonitorID);
 97+	auto* monitor = g_pCompositor->getMonitorFromID(node.workspace->m_iMonitorID);
 98 
 99 	Hy3Node* opening_into;
100 	Hy3Node* opening_after = nullptr;
101 
102-	auto* root = this->getWorkspaceRootGroup(node.workspace_id);
103+	auto* root = this->getWorkspaceRootGroup(node.workspace);
104 
105 	if (root != nullptr) {
106 		opening_after = root->getFocusedNode();
107@@ -148,7 +147,7 @@ void Hy3Layout::insertNode(Hy3Node& node) {
108 
109 	if (opening_after == nullptr) {
110 		if (g_pCompositor->m_pLastWindow != nullptr
111-		    && g_pCompositor->m_pLastWindow->m_iWorkspaceID == node.workspace_id
112+		    && g_pCompositor->m_pLastWindow->m_pWorkspace == node.workspace
113 		    && !g_pCompositor->m_pLastWindow->m_bIsFloating
114 		    && (node.data.type == Hy3NodeType::Window
115 		        || g_pCompositor->m_pLastWindow != node.data.as_window)
116@@ -161,7 +160,7 @@ void Hy3Layout::insertNode(Hy3Node& node) {
117 			    RESERVED_EXTENTS | INPUT_EXTENTS
118 			);
119 
120-			if (mouse_window != nullptr && mouse_window->m_iWorkspaceID == node.workspace_id) {
121+			if (mouse_window != nullptr && mouse_window->m_pWorkspace == node.workspace) {
122 				opening_after = this->getNodeFromWindow(mouse_window);
123 			}
124 		}
125@@ -178,7 +177,7 @@ void Hy3Layout::insertNode(Hy3Node& node) {
126 	if (opening_after != nullptr) {
127 		opening_into = opening_after->parent;
128 	} else {
129-		if ((opening_into = this->getWorkspaceRootGroup(node.workspace_id)) == nullptr) {
130+		if ((opening_into = this->getWorkspaceRootGroup(node.workspace)) == nullptr) {
131 			static const auto tab_first_window =
132 			    ConfigValue<Hyprlang::INT>("plugin:hy3:tab_first_window");
133 
134@@ -191,7 +190,7 @@ void Hy3Layout::insertNode(Hy3Node& node) {
135 			    .data = height > width ? Hy3GroupLayout::SplitV : Hy3GroupLayout::SplitH,
136 			    .position = monitor->vecPosition + monitor->vecReservedTopLeft,
137 			    .size = monitor->vecSize - monitor->vecReservedTopLeft - monitor->vecReservedBottomRight,
138-			    .workspace_id = node.workspace_id,
139+			    .workspace = node.workspace,
140 			    .layout = this,
141diff --git a/src/Hy3Layout.hpp b/src/Hy3Layout.hpp
142index d269229f6acd6fdad1f84eef739146a5f189262b..93333c307b5d1cd7277c9a76b26ca00716d6f22e 100644
143--- a/src/Hy3Layout.hpp
144+++ b/src/Hy3Layout.hpp
145@@ -1,5 +1,6 @@
146 #pragma once
147 
148+#include <hyprland/src/desktop/DesktopTypes.hpp>
149 class Hy3Layout;
150 
151 enum class GroupEphemeralityOption {
152@@ -95,13 +96,13 @@ public:
153 	virtual void onDisable();
154 
155 	void insertNode(Hy3Node& node);
156-	void makeGroupOnWorkspace(int workspace, Hy3GroupLayout, GroupEphemeralityOption);
157-	void makeOppositeGroupOnWorkspace(int workspace, GroupEphemeralityOption);
158-	void changeGroupOnWorkspace(int workspace, Hy3GroupLayout);
159-	void untabGroupOnWorkspace(int workspace);
160-	void toggleTabGroupOnWorkspace(int workspace);
161-	void changeGroupToOppositeOnWorkspace(int workspace);
162-	void changeGroupEphemeralityOnWorkspace(int workspace, bool ephemeral);
163+	void makeGroupOnWorkspace(const PHLWORKSPACE& workspace, Hy3GroupLayout, GroupEphemeralityOption);
164+	void makeOppositeGroupOnWorkspace(const PHLWORKSPACE& workspace, GroupEphemeralityOption);
165+	void changeGroupOnWorkspace(const PHLWORKSPACE& workspace, Hy3GroupLayout);
166+	void untabGroupOnWorkspace(const PHLWORKSPACE& workspace);
167+	void toggleTabGroupOnWorkspace(const PHLWORKSPACE& workspace);
168+	void changeGroupToOppositeOnWorkspace(const PHLWORKSPACE& workspace);
169+	void changeGroupEphemeralityOnWorkspace(const PHLWORKSPACE& workspace, bool ephemeral);
170 	void makeGroupOn(Hy3Node*, Hy3GroupLayout, GroupEphemeralityOption);
171 	void makeOppositeGroupOn(Hy3Node*, GroupEphemeralityOption);
172 	void changeGroupOn(Hy3Node&, Hy3GroupLayout);
173@@ -110,20 +111,20 @@ public:
174 	void changeGroupToOppositeOn(Hy3Node&);
175 	void changeGroupEphemeralityOn(Hy3Node&, bool ephemeral);
176 	void shiftNode(Hy3Node&, ShiftDirection, bool once, bool visible);
177-	void shiftWindow(int workspace, ShiftDirection, bool once, bool visible);
178-	void shiftFocus(int workspace, ShiftDirection, bool visible);
179-	void moveNodeToWorkspace(int origin, std::string wsname, bool follow);
180-	void changeFocus(int workspace, FocusShift);
181-	void focusTab(int workspace, TabFocus target, TabFocusMousePriority, bool wrap_scroll, int index);
182-	void setNodeSwallow(int workspace, SetSwallowOption);
183-	void killFocusedNode(int workspace);
184-	void expand(int workspace, ExpandOption, ExpandFullscreenOption);
185+	void shiftWindow(const PHLWORKSPACE& workspace, ShiftDirection, bool once, bool visible);
186+	void shiftFocus(const PHLWORKSPACE& workspace, ShiftDirection, bool visible);
187+	void moveNodeToWorkspace(const PHLWORKSPACE& origin, std::string wsname, bool follow);
188+	void changeFocus(const PHLWORKSPACE& workspace, FocusShift);
189+	void focusTab(const PHLWORKSPACE& workspace, TabFocus target, TabFocusMousePriority, bool wrap_scroll, int index);
190+	void setNodeSwallow(const PHLWORKSPACE& workspace, SetSwallowOption);
191+	void killFocusedNode(const PHLWORKSPACE& workspace);
192+	void expand(const PHLWORKSPACE& workspace, ExpandOption, ExpandFullscreenOption);
193 
194 	bool shouldRenderSelected(CWindow*);
195 
196-	Hy3Node* getWorkspaceRootGroup(const int& workspace);
197+	Hy3Node* getWorkspaceRootGroup(const PHLWORKSPACE& workspace);
198 	Hy3Node* getWorkspaceFocusedNode(
199-	    const int& workspace,
200+	    const PHLWORKSPACE& workspace,
201 	    bool ignore_group_focus = false,
202 	    bool stop_at_expanded = false
203 	);
204@@ -146,7 +147,7 @@ private:
205 	Hy3Node* shiftOrGetFocus(Hy3Node&, ShiftDirection, bool shift, bool once, bool visible);
206 
207 	void updateAutotileWorkspaces();
208-	bool shouldAutotileWorkspace(int);
209+	bool shouldAutotileWorkspace(const PHLWORKSPACE& workspace);
210 	void resizeNode(Hy3Node*, Vector2D, ShiftDirection resize_edge_x, ShiftDirection resize_edge_y);
211 
212 	struct {
213diff --git a/src/Hy3Node.cpp b/src/Hy3Node.cpp
214index 5eed0fcffdb8883c48e8b33dc32d39e11ee9be5b..9572d7bacfa7c720dc03663d0d30d18cd3937cbb 100644
215--- a/src/Hy3Node.cpp
216+++ b/src/Hy3Node.cpp
217@@ -290,10 +290,9 @@ void Hy3Node::recalcSizePosRecursive(bool no_animation) {
218 	// clang-format on
219 
220 	if (this->data.type == Hy3NodeType::Window && this->data.as_window->m_bIsFullscreen) {
221-		auto* workspace = g_pCompositor->getWorkspaceByID(this->workspace_id);
222-		auto* monitor = g_pCompositor->getMonitorFromID(workspace->m_iMonitorID);
223+		auto* monitor = g_pCompositor->getMonitorFromID(this->workspace->m_iMonitorID);
224 
225-		if (workspace->m_efFullscreenMode == FULLSCREEN_FULL) {
226+		if (this->workspace->m_efFullscreenMode == FULLSCREEN_FULL) {
227 			this->data.as_window->m_vRealPosition = monitor->vecPosition;
228 			this->data.as_window->m_vRealSize = monitor->vecSize;
229 			return;
230@@ -305,7 +304,7 @@ void Hy3Node::recalcSizePosRecursive(bool no_animation) {
231 		    .size = monitor->vecSize - monitor->vecReservedTopLeft - monitor->vecReservedBottomRight,
232 		    .gap_topleft_offset = gap_topleft_offset,
233 		    .gap_bottomright_offset = gap_bottomright_offset,
234-		    .workspace_id = this->workspace_id,
235+		    .workspace = this->workspace,
236 		};
237 
238 		this->layout->applyNodeDataToWindow(&fake_node);
239@@ -522,7 +521,7 @@ void Hy3Node::updateTabBar(bool no_animation) {
240 			FindTopWindowInNodeResult result;
241 			findTopWindowInNode(*this, result);
242 			group.tab_bar->target_window = result.window;
243-			if (result.window != nullptr) group.tab_bar->workspace_id = result.window->m_iWorkspaceID;
244+			if (result.window != nullptr) group.tab_bar->workspace = result.window->m_pWorkspace;
245 		} else if (group.tab_bar != nullptr) {
246 			group.tab_bar->bar.beginDestroy();
247 			group.tab_bar = nullptr;
248@@ -771,7 +770,7 @@ Hy3Node* Hy3Node::intoGroup(Hy3GroupLayout layout, GroupEphemeralityOption ephem
249 	this->layout->nodes.push_back({
250 	    .parent = this,
251 	    .data = layout,
252-	    .workspace_id = this->workspace_id,
253+	    .workspace = this->workspace,
254 	    .layout = this->layout,
255 	});
256 
257diff --git a/src/Hy3Node.hpp b/src/Hy3Node.hpp
258index 759feaf777e8cb83b671db50c136f30c6af3b7a0..772d01fc612569225a3849477cbfdbccf623d5d0 100644
259--- a/src/Hy3Node.hpp
260+++ b/src/Hy3Node.hpp
261@@ -87,7 +87,7 @@ struct Hy3Node {
262 	Vector2D gap_topleft_offset;
263 	Vector2D gap_bottomright_offset;
264 	float size_ratio = 1.0;
265-	int workspace_id = -1;
266+	PHLWORKSPACE workspace = nullptr;
267 	bool hidden = false;
268 	Hy3Layout* layout = nullptr;
269 
270diff --git a/src/TabGroup.cpp b/src/TabGroup.cpp
271index 46651dded0fbe1a566861dc8e2a90579bf8b2b26..08fe876a3886f5066678ab9548df298cafb16f5b 100644
272--- a/src/TabGroup.cpp
273+++ b/src/TabGroup.cpp
274@@ -444,12 +444,11 @@ void Hy3TabGroup::updateWithGroup(Hy3Node& node, bool warp) {
275 void Hy3TabGroup::tick() {
276 	static const auto enter_from_top = ConfigValue<Hyprlang::INT>("plugin:hy3:tabs:from_top");
277 	static const auto padding = ConfigValue<Hyprlang::INT>("plugin:hy3:tabs:padding");
278-	auto* workspace = g_pCompositor->getWorkspaceByID(this->workspace_id);
279 
280 	this->bar.tick();
281 
282-	if (workspace != nullptr) {
283-		if (workspace->m_bHasFullscreenWindow) {
284+	if (valid(this->workspace)) {
285+		if (this->workspace->m_bHasFullscreenWindow) {
286 			if (this->bar.fade_opacity.goal() != 0.0) this->bar.fade_opacity = 0.0;
287 		} else {
288 			if (this->bar.fade_opacity.goal() != 1.0) this->bar.fade_opacity = 1.0;
289@@ -489,15 +488,14 @@ void Hy3TabGroup::renderTabBar() {
290 	static const auto padding = ConfigValue<Hyprlang::INT>("plugin:hy3:tabs:padding");
291 
292 	auto* monitor = g_pHyprOpenGL->m_RenderData.pMonitor;
293-	auto* workspace = g_pCompositor->getWorkspaceByID(this->workspace_id);
294 	auto scale = monitor->scale;
295 
296 	auto monitor_size = monitor->vecSize;
297 	auto pos = this->pos.value() - monitor->vecPosition;
298 	auto size = this->size.value();
299 
300-	if (workspace != nullptr) {
301-		pos = pos + workspace->m_vRenderOffset.value();
302+	if (valid(this->workspace)) {
303+		pos = pos + this->workspace->m_vRenderOffset.value();
304 	}
305 
306 	auto scaled_pos = Vector2D(std::round(pos.x * scale), std::round(pos.y * scale));
307@@ -563,7 +561,7 @@ void Hy3TabGroup::renderTabBar() {
308 	}
309 
310 	auto fade_opacity =
311-	    this->bar.fade_opacity.value() * (workspace == nullptr ? 1.0 : workspace->m_fAlpha.value());
312+	  this->bar.fade_opacity.value() * (valid(this->workspace) ? this->workspace->m_fAlpha.value() : 1.0);
313 
314 	auto render_entry = [&](Hy3TabBarEntry& entry) {
315 		Vector2D entry_pos = {
316diff --git a/src/TabGroup.hpp b/src/TabGroup.hpp
317index 77f78745d90b3d22c10ec7cc98dc063b27000033..3d776243c9bdfc7b2c9c6e446dd95da8ab593818 100644
318--- a/src/TabGroup.hpp
319+++ b/src/TabGroup.hpp
320@@ -86,7 +86,7 @@ private:
321 class Hy3TabGroup {
322 public:
323 	CWindow* target_window = nullptr;
324-	int workspace_id = -1;
325+	PHLWORKSPACE workspace = nullptr;
326 	bool hidden = false;
327 	Hy3TabBar bar;
328 	CAnimatedVariable<Vector2D> pos;
329diff --git a/src/dispatchers.cpp b/src/dispatchers.cpp
330index 667b1cf7a8e4599523ffd8192105aa3b599d8964..843b17a8d40ae9167629f55292c42bb98b411fbe 100644
331--- a/src/dispatchers.cpp
332+++ b/src/dispatchers.cpp
333@@ -1,27 +1,26 @@
334 #include <optional>
335 
336 #include <hyprland/src/Compositor.hpp>
337+#include <hyprland/src/desktop/DesktopTypes.hpp>
338 #include <hyprland/src/plugins/PluginAPI.hpp>
339 
340 #include "dispatchers.hpp"
341 #include "globals.hpp"
342 
343-int workspace_for_action(bool allow_fullscreen = false) {
344-	if (g_pLayoutManager->getCurrentLayout() != g_Hy3Layout.get()) return -1;
345+PHLWORKSPACE workspace_for_action(bool allow_fullscreen = false) {
346+	if (g_pLayoutManager->getCurrentLayout() != g_Hy3Layout.get()) return nullptr;
347 
348-	int workspace_id = g_pCompositor->m_pLastMonitor->activeWorkspace;
349+	auto workspace = g_pCompositor->m_pLastMonitor->activeWorkspace;
350 
351-	if (workspace_id == -1) return -1;
352-	auto* workspace = g_pCompositor->getWorkspaceByID(workspace_id);
353-	if (workspace == nullptr) return -1;
354-	if (!allow_fullscreen && workspace->m_bHasFullscreenWindow) return -1;
355+	if (!valid(workspace)) return nullptr;
356+	if (!allow_fullscreen && workspace->m_bHasFullscreenWindow) return nullptr;
357 
358-	return workspace_id;
359+	return workspace;
360 }
361 
362 void dispatch_makegroup(std::string value) {
363-	int workspace = workspace_for_action();
364-	if (workspace == -1) return;
365+	auto workspace = workspace_for_action();
366+	if (!valid(workspace)) return;
367 
368 	auto args = CVarList(value);
369 
370@@ -44,8 +43,8 @@ void dispatch_makegroup(std::string value) {
371 }
372 
373 void dispatch_changegroup(std::string value) {
374-	int workspace = workspace_for_action();
375-	if (workspace == -1) return;
376+	auto workspace = workspace_for_action();
377+	if (!valid(workspace)) return;
378 
379 	auto args = CVarList(value);
380 
381@@ -65,8 +64,8 @@ void dispatch_changegroup(std::string value) {
382 }
383 
384 void dispatch_setephemeral(std::string value) {
385-	int workspace = workspace_for_action();
386-	if (workspace == -1) return;
387+	auto workspace = workspace_for_action();
388+	if (!valid(workspace)) return;
389 
390 	auto args = CVarList(value);
391 
392@@ -84,8 +83,8 @@ std::optional<ShiftDirection> parseShiftArg(std::string arg) {
393 }
394 
395 void dispatch_movewindow(std::string value) {
396-	int workspace = workspace_for_action();
397-	if (workspace == -1) return;
398+	auto workspace = workspace_for_action();
399+	if (!valid(workspace)) return;
400 
401 	auto args = CVarList(value);
402 
403@@ -109,8 +108,8 @@ void dispatch_movewindow(std::string value) {
404 }
405 
406 void dispatch_movefocus(std::string value) {
407-	int workspace = workspace_for_action();
408-	if (workspace == -1) return;
409+	auto workspace = workspace_for_action();
410+	if (!valid(workspace)) return;
411 
412 	auto args = CVarList(value);
413 
414@@ -120,8 +119,8 @@ void dispatch_movefocus(std::string value) {
415 }
416 
417 void dispatch_move_to_workspace(std::string value) {
418-	int origin_workspace = workspace_for_action(true);
419-	if (origin_workspace == -1) return;
420+	auto origin_workspace = workspace_for_action(true);
421+	if (!valid(origin_workspace)) return;
422 
423 	auto args = CVarList(value);
424 
425@@ -134,8 +133,8 @@ void dispatch_move_to_workspace(std::string value) {
426 }
427 
428 void dispatch_changefocus(std::string arg) {
429-	int workspace = workspace_for_action();
430-	if (workspace == -1) return;
431+	auto workspace = workspace_for_action();
432+	if (!valid(workspace)) return;
433diff --git a/src/globals.hpp b/src/globals.hpp
434index 48839ca34b5ca87ab3721242200c680df7fc176d..ede0c8f054abd8d1499a4da5fb83144d8425868d 100644
435--- a/src/globals.hpp
436+++ b/src/globals.hpp
437@@ -2,6 +2,7 @@
438 
439 #include <type_traits>
440 
441+#include <hyprland/src/desktop/Workspace.hpp>
442 #include <hyprland/src/plugins/PluginAPI.hpp>
443 #include <hyprlang.hpp>
444