9199fdc442ebd97854a5b751fc5ff5b3cf771a5c
- Author
- outfoxxed <outfoxxed@outfoxxed.me>
- Committer
- outfoxxed <outfoxxed@outfoxxed.me>
- Date
Message
Diff
This diff is truncated to protect this page.
1diff --git a/flake.lock b/flake.lock
2index 12ac27d5c638ba40a467beb1b9c528b27acfbc37..da248012299d238361cb76c0533ff7e8fe92e8d0 100644
3--- a/flake.lock
4+++ b/flake.lock
5@@ -20,11 +20,11 @@
6 ]
7 },
8 "locked": {
9- "lastModified": 1736102453,
10- "narHash": "sha256-5qb4kb7Xbt8jJFL/oDqOor9Z2+E+A+ql3PiyDvsfWZ0=",
11+ "lastModified": 1737636397,
12+ "narHash": "sha256-F5MbBj3QVorycVSFE9qjuOTLtIQBqt2VWbXa0uwzm98=",
13 "owner": "hyprwm",
14 "repo": "aquamarine",
15- "rev": "4846091641f3be0ad7542086d52769bb7932bde6",
16+ "rev": "7fe006981fae53e931f513026fc754e322f13145",
17 "type": "github"
18 },
19 "original": {
20@@ -87,11 +87,11 @@
21 ]
22 },
23 "locked": {
24- "lastModified": 1734906540,
25- "narHash": "sha256-vQ/L9hZFezC0LquLo4TWXkyniWtYBlFHAKIsDc7PYJE=",
26+ "lastModified": 1737634937,
27+ "narHash": "sha256-Ffw4ujFpi++6pPHe+gCBOfDgAoNlzVPZN6MReC1beu8=",
28 "owner": "hyprwm",
29 "repo": "hyprcursor",
30- "rev": "69270ba8f057d55b0e6c2dca0e165d652856e613",
31+ "rev": "9c5dd1f7c825ee47f72727ad0a4e16ca46a2688e",
32 "type": "github"
33 },
34 "original": {
35@@ -116,11 +116,11 @@
36 ]
37 },
38 "locked": {
39- "lastModified": 1736115290,
40- "narHash": "sha256-Jcn6yAzfUMcxy3tN/iZRbi/QgrYm7XLyVRl9g/nbUl4=",
41+ "lastModified": 1737634889,
42+ "narHash": "sha256-9JZE3KxcXOqZH9zs3UeadngDiK/yIACTiAR8HSA/TNI=",
43 "owner": "hyprwm",
44 "repo": "hyprgraphics",
45- "rev": "52202272d89da32a9f866c0d10305a5e3d954c50",
46+ "rev": "0d77b4895ad5f1bb3b0ee43103a5246c58b65591",
47 "type": "github"
48 },
49 "original": {
50@@ -136,26 +136,26 @@
51 "hyprgraphics": "hyprgraphics",
52 "hyprland-protocols": "hyprland-protocols",
53 "hyprland-qtutils": "hyprland-qtutils",
54- "hyprlang": "hyprlang",
55+ "hyprlang": "hyprlang_2",
56 "hyprutils": "hyprutils",
57 "hyprwayland-scanner": "hyprwayland-scanner",
58- "nixpkgs": "nixpkgs",
59+ "nixpkgs": "nixpkgs_2",
60 "pre-commit-hooks": "pre-commit-hooks",
61- "systems": "systems",
62+ "systems": "systems_2",
63 "xdph": "xdph"
64 },
65 "locked": {
66- "lastModified": 1737190765,
67- "narHash": "sha256-PLlikEedyXErmdkuIYPTY7YA3LVRlb+ZYM9YALCi7MM=",
68+ "lastModified": 1737667631,
69+ "narHash": "sha256-CptFGa5lP1ag6xF6eeNBCixhpFTbZyuqeXRjBU6saRw=",
70 "owner": "hyprwm",
71 "repo": "Hyprland",
72- "rev": "d01756c1f41977e852eba1cbf45c0149ae0f08e8",
73+ "rev": "1a0a22ad038bbd51c4e1514868d6dcd505af0242",
74 "type": "github"
75 },
76 "original": {
77 "owner": "hyprwm",
78 "repo": "Hyprland",
79- "rev": "d01756c1f41977e852eba1cbf45c0149ae0f08e8",
80+ "rev": "1a0a22ad038bbd51c4e1514868d6dcd505af0242",
81 "type": "github"
82 }
83 },
84@@ -171,11 +171,11 @@
85 ]
86 },
87 "locked": {
88- "lastModified": 1735774328,
89- "narHash": "sha256-vIRwLS9w+N99EU1aJ+XNOU6mJTxrUBa31i1r82l0V7s=",
90+ "lastModified": 1737556638,
91+ "narHash": "sha256-laKgI3mr2qz6tas/q3tuGPxMdsGhBi/w+HO+hO2f1AY=",
92 "owner": "hyprwm",
93 "repo": "hyprland-protocols",
94- "rev": "e3b6af97ddcfaafbda8e2828c719a5af84f662cb",
95+ "rev": "4c75dd5c015c8a0e5a34c6d02a018a650f57feb5",
96 "type": "github"
97 },
98 "original": {
99@@ -184,8 +184,37 @@
100 "type": "github"
101 }
102 },
103+ "hyprland-qt-support": {
104+ "inputs": {
105diff --git a/flake.nix b/flake.nix
106index a502dc45ade44c31809c3de1e069492fded99b53..af849adc99192b50bd4c3fa9a3ba775da6cd0750 100644
107--- a/flake.nix
108+++ b/flake.nix
109@@ -1,6 +1,6 @@
110 {
111 inputs = {
112- hyprland.url = "github:hyprwm/Hyprland?rev=d01756c1f41977e852eba1cbf45c0149ae0f08e8";
113+ hyprland.url = "github:hyprwm/Hyprland?rev=1a0a22ad038bbd51c4e1514868d6dcd505af0242";
114 };
115
116 outputs = { self, hyprland, ... }: let
117diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
118index f37464773ff82a297c81067ce49048230bd64587..ab7f3e85263103c6a39bf8e489ef89c61b5024f5 100644
119--- a/src/Hy3Layout.cpp
120+++ b/src/Hy3Layout.cpp
121@@ -64,59 +64,6 @@ SP<HOOK_CALLBACK_FN> urgentHookPtr;
122 SP<HOOK_CALLBACK_FN> tickHookPtr;
123 SP<HOOK_CALLBACK_FN> mouseButtonPtr;
124
125-bool performContainment(Hy3Node& node, bool contained, PHLWINDOW& window) {
126- if (node.data.is_group()) {
127- auto& group = node.data.as_group();
128- contained |= group.containment;
129-
130- auto iter = group.children.begin();
131- while (iter != group.children.end()) {
132- switch ((*iter)->data.type()) {
133- case Hy3NodeType::Group: return performContainment(**iter, contained, window);
134- case Hy3NodeType::Window:
135- if (contained) {
136- auto wpid = (*iter)->data.as_window()->getPID();
137- auto ppid = getPPIDof(window->getPID());
138- while (ppid > 10) { // `> 10` yoinked from HL swallow
139- if (ppid == wpid) {
140- node.layout->nodes.push_back({
141- .parent = &node,
142- .data = window,
143- .workspace = node.workspace,
144- .layout = node.layout,
145- });
146-
147- auto& child_node = node.layout->nodes.back();
148-
149- group.children.insert(std::next(iter), &child_node);
150- child_node.markFocused();
151- node.recalcSizePosRecursive();
152-
153- return true;
154- }
155-
156- ppid = getPPIDof(ppid);
157- }
158- }
159- }
160-
161- iter = std::next(iter);
162- }
163- }
164-
165- return false;
166-}
167-
168-void Hy3Layout::onWindowCreated(PHLWINDOW window, eDirection direction) {
169- for (auto& node: this->nodes) {
170- if (node.parent == nullptr && performContainment(node, false, window)) {
171- return;
172- }
173- }
174-
175- IHyprLayout::onWindowCreated(window, direction);
176-}
177-
178 void Hy3Layout::onWindowCreatedTiling(PHLWINDOW window, eDirection) {
179 hy3_log(
180 LOG,
181@@ -129,7 +76,7 @@ void Hy3Layout::onWindowCreatedTiling(PHLWINDOW window, eDirection) {
182
183 if (window->m_bIsFloating) return;
184
185- auto* existing = this->getNodeFromWindow(window);
186+ auto* existing = this->getNodeFromWindow(window.get());
187 if (existing != nullptr) {
188 hy3_log(
189 ERR,
190@@ -174,12 +121,12 @@ void Hy3Layout::insertNode(Hy3Node& node) {
191 node.reparenting = true;
192 node.size_ratio = 1.0;
193
194- auto monitor = node.workspace->m_pMonitor.lock();
195+ auto& monitor = node.workspace->m_pMonitor;
196
197 Hy3Node* opening_into;
198 Hy3Node* opening_after = nullptr;
199
200- auto* root = this->getWorkspaceRootGroup(node.workspace);
201+ auto* root = this->getWorkspaceRootGroup(node.workspace.get());
202
203 if (root != nullptr) {
204 opening_after = root->getFocusedNode();
205@@ -192,13 +139,13 @@ void Hy3Layout::insertNode(Hy3Node& node) {
206 }
207
208 if (opening_after == nullptr) {
209- auto last_window = g_pCompositor->m_pLastWindow.lock();
210+ auto last_window = g_pCompositor->m_pLastWindow;
211 if (last_window != nullptr && last_window->m_pWorkspace == node.workspace
212 && !last_window->m_bIsFloating
213 && (node.data.is_window() || last_window != node.data.as_window())
214 && last_window->m_bIsMapped)
215 {
216- opening_after = this->getNodeFromWindow(last_window);
217+ opening_after = this->getNodeFromWindow(last_window.get());
218 } else {
219 auto mouse_window = g_pCompositor->vectorToWindowUnified(
220 g_pInputManager->getMouseCoordsInternal(),
221diff --git a/src/Hy3Layout.hpp b/src/Hy3Layout.hpp
222index 4785533fb0b5336efd5b97181e7d49aef4cb1cc5..eda45791cfcbadc16ad186a1d0756e0d7e3ce092 100644
223--- a/src/Hy3Layout.hpp
224+++ b/src/Hy3Layout.hpp
225@@ -78,7 +78,6 @@ PHLWORKSPACE workspace_for_action(bool allow_fullscreen = false);
226
227 class Hy3Layout: public IHyprLayout {
228 public:
229- void onWindowCreated(PHLWINDOW, eDirection = DIRECTION_DEFAULT) override;
230 void onWindowCreatedTiling(PHLWINDOW, eDirection = DIRECTION_DEFAULT) override;
231 void onWindowRemovedTiling(PHLWINDOW) override;
232 void onWindowFocusChange(PHLWINDOW) override;
233@@ -106,13 +105,13 @@ public:
234 void onDisable() override;
235
236 void insertNode(Hy3Node& node);
237- void makeGroupOnWorkspace(const PHLWORKSPACE& workspace, Hy3GroupLayout, GroupEphemeralityOption);
238- void makeOppositeGroupOnWorkspace(const PHLWORKSPACE& workspace, GroupEphemeralityOption);
239- void changeGroupOnWorkspace(const PHLWORKSPACE& workspace, Hy3GroupLayout);
240- void untabGroupOnWorkspace(const PHLWORKSPACE& workspace);
241- void toggleTabGroupOnWorkspace(const PHLWORKSPACE& workspace);
242- void changeGroupToOppositeOnWorkspace(const PHLWORKSPACE& workspace);
243- void changeGroupEphemeralityOnWorkspace(const PHLWORKSPACE& workspace, bool ephemeral);
244+ void makeGroupOnWorkspace(const CWorkspace* workspace, Hy3GroupLayout, GroupEphemeralityOption);
245+ void makeOppositeGroupOnWorkspace(const CWorkspace* workspace, GroupEphemeralityOption);
246+ void changeGroupOnWorkspace(const CWorkspace* workspace, Hy3GroupLayout);
247+ void untabGroupOnWorkspace(const CWorkspace* workspace);
248+ void toggleTabGroupOnWorkspace(const CWorkspace* workspace);
249+ void changeGroupToOppositeOnWorkspace(const CWorkspace* workspace);
250+ void changeGroupEphemeralityOnWorkspace(const CWorkspace* workspace, bool ephemeral);
251 void makeGroupOn(Hy3Node*, Hy3GroupLayout, GroupEphemeralityOption);
252 void makeOppositeGroupOn(Hy3Node*, GroupEphemeralityOption);
253 void changeGroupOn(Hy3Node&, Hy3GroupLayout);
254@@ -121,35 +120,35 @@ public:
255 void changeGroupToOppositeOn(Hy3Node&);
256 void changeGroupEphemeralityOn(Hy3Node&, bool ephemeral);
257 void shiftNode(Hy3Node&, ShiftDirection, bool once, bool visible);
258- void shiftWindow(const PHLWORKSPACE& workspace, ShiftDirection, bool once, bool visible);
259- void shiftFocus(const PHLWORKSPACE& workspace, ShiftDirection, bool visible, bool warp);
260- void toggleFocusLayer(const PHLWORKSPACE& workspace, bool warp);
261+ void shiftWindow(const CWorkspace* workspace, ShiftDirection, bool once, bool visible);
262+ void shiftFocus(const CWorkspace* workspace, ShiftDirection, bool visible, bool warp);
263+ void toggleFocusLayer(const CWorkspace* workspace, bool warp);
264 bool shiftMonitor(Hy3Node&, ShiftDirection, bool follow);
265 Hy3Node* focusMonitor(ShiftDirection);
266
267 void warpCursor();
268- void moveNodeToWorkspace(const PHLWORKSPACE& origin, std::string wsname, bool follow, bool warp);
269- void changeFocus(const PHLWORKSPACE& workspace, FocusShift);
270+ void moveNodeToWorkspace(CWorkspace* origin, std::string wsname, bool follow, bool warp);
271+ void changeFocus(const CWorkspace* workspace, FocusShift);
272 void focusTab(
273- const PHLWORKSPACE& workspace,
274+ const CWorkspace* workspace,
275 TabFocus target,
276 TabFocusMousePriority,
277 bool wrap_scroll,
278 int index
279 );
280- void setNodeSwallow(const PHLWORKSPACE& workspace, SetSwallowOption);
281- void killFocusedNode(const PHLWORKSPACE& workspace);
282- void expand(const PHLWORKSPACE& workspace, ExpandOption, ExpandFullscreenOption);
283+ void setNodeSwallow(const CWorkspace* workspace, SetSwallowOption);
284+ void killFocusedNode(const CWorkspace* workspace);
285+ void expand(const CWorkspace* workspace, ExpandOption, ExpandFullscreenOption);
286 static void warpCursorToBox(const Vector2D& pos, const Vector2D& size);
287 static void warpCursorWithFocus(const Vector2D& pos, bool force = false);
288
289- bool shouldRenderSelected(const PHLWINDOW&);
290- PHLWINDOW findTiledWindowCandidate(const PHLWINDOW& from);
291- PHLWINDOW findFloatingWindowCandidate(const PHLWINDOW& from);
292+ bool shouldRenderSelected(const CWindow*);
293+ PHLWINDOW findTiledWindowCandidate(const CWindow* from);
294+ PHLWINDOW findFloatingWindowCandidate(const CWindow* from);
295
296- Hy3Node* getWorkspaceRootGroup(const PHLWORKSPACE& workspace);
297+ Hy3Node* getWorkspaceRootGroup(const CWorkspace* workspace);
298 Hy3Node* getWorkspaceFocusedNode(
299- const PHLWORKSPACE& workspace,
300+ const CWorkspace* workspace,
301 bool ignore_group_focus = false,
302 bool stop_at_expanded = false
303 );
304@@ -164,7 +163,7 @@ public:
305 std::list<Hy3TabGroup> tab_groups;
306
307 private:
308- Hy3Node* getNodeFromWindow(const PHLWINDOW&);
309+ Hy3Node* getNodeFromWindow(const CWindow*);
310 void applyNodeDataToWindow(Hy3Node*, bool no_animation = false);
311
312 // if shift is true, shift the window in the given direction, returning
313@@ -173,7 +172,7 @@ private:
314 Hy3Node* shiftOrGetFocus(Hy3Node&, ShiftDirection, bool shift, bool once, bool visible);
315
316 void updateAutotileWorkspaces();
317- bool shouldAutotileWorkspace(const PHLWORKSPACE& workspace);
318+ bool shouldAutotileWorkspace(const CWorkspace* workspace);
319 void resizeNode(Hy3Node*, Vector2D, ShiftDirection resize_edge_x, ShiftDirection resize_edge_y);
320
321 struct {
322diff --git a/src/Hy3Node.cpp b/src/Hy3Node.cpp
323index bd84350e56e5ccce03a9ed3183237dcd9f738c50..d339853509097440d526ad7ab48690ce056805a7 100644
324--- a/src/Hy3Node.cpp
325+++ b/src/Hy3Node.cpp
326@@ -326,7 +326,7 @@ void Hy3Node::recalcSizePosRecursive(bool no_animation) {
327
328 if (this->data.is_window() && this->data.as_window()->isFullscreen()) {
329 auto window = this->data.as_window();
330- auto monitor = this->workspace->m_pMonitor.lock();
331+ auto& monitor = this->workspace->m_pMonitor;
332
333 if (window->isEffectiveInternalFSMode(FSMODE_FULLSCREEN)) {
334 *window->m_vRealPosition = monitor->vecPosition;
335diff --git a/src/SelectionHook.cpp b/src/SelectionHook.cpp
336index 3800e2c8edf23fb5f2fdf409780d677c78f10338..776effec76e385a0fab32adbe551007fb75cec8f 100644
337--- a/src/SelectionHook.cpp
338+++ b/src/SelectionHook.cpp
339@@ -7,7 +7,7 @@ namespace selection_hook {
340 inline CFunctionHook* g_LastSelectionHook = nullptr;
341
342 void hook_updateDecos(void* thisptr, PHLWINDOW window) {
343- bool explicitly_selected = g_Hy3Layout->shouldRenderSelected(window);
344+ bool explicitly_selected = g_Hy3Layout->shouldRenderSelected(window.get());
345
346 auto lastWindow = g_pCompositor->m_pLastWindow;
347 if (explicitly_selected) {
348diff --git a/src/TabGroup.cpp b/src/TabGroup.cpp
349index 234cd725f0303d6aaa4f23168f86dfe159c9c9bc..e173ed0f162d4ab6f6e8e16975d8ca050a17c204 100644
350--- a/src/TabGroup.cpp
351+++ b/src/TabGroup.cpp
352@@ -570,7 +570,7 @@ void Hy3TabGroup::tick() {
353 auto has_fullscreen = this->workspace->m_bHasFullscreenWindow;
354
355 if (!has_fullscreen && *no_gaps_when_only) {
356- auto root_node = g_Hy3Layout->getWorkspaceRootGroup(this->workspace);
357+ auto root_node = g_Hy3Layout->getWorkspaceRootGroup(this->workspace.get());
358 has_fullscreen = root_node != nullptr && root_node->data.as_group().children.size() == 1
359 && root_node->data.as_group().children.front()->data.is_window();
360 }
361diff --git a/src/dispatchers.cpp b/src/dispatchers.cpp
362index 6d54d304cb42c9ae377166d982293377dd07ed2e..acde155822321431b01153362a528dc46a5e22aa 100644
363--- a/src/dispatchers.cpp
364+++ b/src/dispatchers.cpp
365@@ -22,13 +22,13 @@ void dispatch_makegroup(std::string value) {
366 }
367
368 if (args[0] == "h") {
369- g_Hy3Layout->makeGroupOnWorkspace(workspace, Hy3GroupLayout::SplitH, ephemeral);
370+ g_Hy3Layout->makeGroupOnWorkspace(workspace.get(), Hy3GroupLayout::SplitH, ephemeral);
371 } else if (args[0] == "v") {
372- g_Hy3Layout->makeGroupOnWorkspace(workspace, Hy3GroupLayout::SplitV, ephemeral);
373+ g_Hy3Layout->makeGroupOnWorkspace(workspace.get(), Hy3GroupLayout::SplitV, ephemeral);
374 } else if (args[0] == "tab") {
375- g_Hy3Layout->makeGroupOnWorkspace(workspace, Hy3GroupLayout::Tabbed, ephemeral);
376+ g_Hy3Layout->makeGroupOnWorkspace(workspace.get(), Hy3GroupLayout::Tabbed, ephemeral);
377 } else if (args[0] == "opposite") {
378- g_Hy3Layout->makeOppositeGroupOnWorkspace(workspace, ephemeral);
379+ g_Hy3Layout->makeOppositeGroupOnWorkspace(workspace.get(), ephemeral);
380 }
381 }
382
383@@ -39,17 +39,17 @@ void dispatch_changegroup(std::string value) {
384 auto args = CVarList(value);
385
386 if (args[0] == "h") {
387- g_Hy3Layout->changeGroupOnWorkspace(workspace, Hy3GroupLayout::SplitH);
388+ g_Hy3Layout->changeGroupOnWorkspace(workspace.get(), Hy3GroupLayout::SplitH);
389 } else if (args[0] == "v") {
390- g_Hy3Layout->changeGroupOnWorkspace(workspace, Hy3GroupLayout::SplitV);
391+ g_Hy3Layout->changeGroupOnWorkspace(workspace.get(), Hy3GroupLayout::SplitV);
392 } else if (args[0] == "tab") {
393- g_Hy3Layout->changeGroupOnWorkspace(workspace, Hy3GroupLayout::Tabbed);
394+ g_Hy3Layout->changeGroupOnWorkspace(workspace.get(), Hy3GroupLayout::Tabbed);
395 } else if (args[0] == "untab") {
396- g_Hy3Layout->untabGroupOnWorkspace(workspace);
397+ g_Hy3Layout->untabGroupOnWorkspace(workspace.get());
398 } else if (args[0] == "toggletab") {
399- g_Hy3Layout->toggleTabGroupOnWorkspace(workspace);
400+ g_Hy3Layout->toggleTabGroupOnWorkspace(workspace.get());
401 } else if (args[0] == "opposite") {
402- g_Hy3Layout->changeGroupToOppositeOnWorkspace(workspace);
403+ g_Hy3Layout->changeGroupToOppositeOnWorkspace(workspace.get());
404 }
405 }
406
407@@ -61,7 +61,7 @@ void dispatch_setephemeral(std::string value) {
408
409 bool ephemeral = args[0] == "true";
410
411- g_Hy3Layout->changeGroupEphemeralityOnWorkspace(workspace, ephemeral);
412+ g_Hy3Layout->changeGroupEphemeralityOnWorkspace(workspace.get(), ephemeral);
413 }
414
415 std::optional<ShiftDirection> parseShiftArg(std::string arg) {
416@@ -93,7 +93,7 @@ void dispatch_movewindow(std::string value) {
417 i++;
418 }
419
420- g_Hy3Layout->shiftWindow(workspace, shift.value(), once, visible);
421+ g_Hy3Layout->shiftWindow(workspace.get(), shift.value(), once, visible);
422 }
423 }
424
425@@ -120,14 +120,14 @@ void dispatch_movefocus(std::string value) {
426 if (args[argi] == "nowarp") warp_cursor = false;
427 else if (args[argi] == "warp") warp_cursor = true;
428
429- g_Hy3Layout->shiftFocus(workspace, shift.value(), visible, warp_cursor);
430+ g_Hy3Layout->shiftFocus(workspace.get(), shift.value(), visible, warp_cursor);
431 }
432
433 void dispatch_togglefocuslayer(std::string value) {
434 auto workspace = workspace_for_action();
435 if (!valid(workspace)) return;
436
437- g_Hy3Layout->toggleFocusLayer(workspace, value != "nowarp");
438+ g_Hy3Layout->toggleFocusLayer(workspace.get(), value != "nowarp");
439 }
440
441 void dispatch_warpcursor(std::string value) { g_Hy3Layout->warpCursor(); }
442@@ -149,19 +149,19 @@ void dispatch_move_to_workspace(std::string value) {
443 follow
444 && ((!*no_cursor_warps && args[2] != "nowarp") || (*no_cursor_warps && args[2] == "warp"));
445
446- g_Hy3Layout->moveNodeToWorkspace(origin_workspace, workspace, follow, warp_cursor);
447+ g_Hy3Layout->moveNodeToWorkspace(origin_workspace.get(), workspace, follow, warp_cursor);
448 }
449
450 void dispatch_changefocus(std::string arg) {
451 auto workspace = workspace_for_action();
452 if (!valid(workspace)) return;
453
454- if (arg == "top") g_Hy3Layout->changeFocus(workspace, FocusShift::Top);
455- else if (arg == "bottom") g_Hy3Layout->changeFocus(workspace, FocusShift::Bottom);
456- else if (arg == "raise") g_Hy3Layout->changeFocus(workspace, FocusShift::Raise);
457- else if (arg == "lower") g_Hy3Layout->changeFocus(workspace, FocusShift::Lower);
458- else if (arg == "tab") g_Hy3Layout->changeFocus(workspace, FocusShift::Tab);
459- else if (arg == "tabnode") g_Hy3Layout->changeFocus(workspace, FocusShift::TabNode);
460+ if (arg == "top") g_Hy3Layout->changeFocus(workspace.get(), FocusShift::Top);
461+ else if (arg == "bottom") g_Hy3Layout->changeFocus(workspace.get(), FocusShift::Bottom);
462+ else if (arg == "raise") g_Hy3Layout->changeFocus(workspace.get(), FocusShift::Raise);
463+ else if (arg == "lower") g_Hy3Layout->changeFocus(workspace.get(), FocusShift::Lower);
464+ else if (arg == "tab") g_Hy3Layout->changeFocus(workspace.get(), FocusShift::Tab);