Diff
1diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
2index 729bc7dcd880a7d72092ae4d6d012f188e1b3918..04036c4d1247e2b68773cb8d88ff7666873d6351 100644
3--- a/src/Hy3Layout.cpp
4+++ b/src/Hy3Layout.cpp
5@@ -899,14 +899,11 @@ void Hy3Layout::shiftFocus(
6 if (current_window->m_pWorkspace->m_bHasFullscreenWindow) return;
7
8 if (current_window->m_bIsFloating) {
9- auto next_window = g_pCompositor->getWindowInDirection(
10- current_window,
11- direction == ShiftDirection::Left ? 'l'
12- : direction == ShiftDirection::Up ? 'u'
13- : direction == ShiftDirection::Down ? 'd'
14- : 'r'
15- );
16-
17+ auto direction_char = direction == ShiftDirection::Left ? 'l'
18+ : direction == ShiftDirection::Up ? 'u'
19+ : direction == ShiftDirection::Down ? 'd'
20+ : 'r';
21+ auto next_window = g_pCompositor->getWindowInDirection(current_window, direction_char);
22 if (next_window != nullptr) {
23 g_pCompositor->focusWindow(next_window);
24 if (warp) Hy3Layout::warpCursorToBox(next_window->m_vPosition, next_window->m_vSize);
25@@ -916,7 +913,18 @@ void Hy3Layout::shiftFocus(
26 }
27
28 auto* node = this->getWorkspaceFocusedNode(workspace);
29- if (node == nullptr) return;
30+ if (node == nullptr) {
31+ auto direction_char = direction == ShiftDirection::Left ? 'l'
32+ : direction == ShiftDirection::Up ? 'u'
33+ : direction == ShiftDirection::Down ? 'd'
34+ : 'r';
35+ auto* next_monitor = g_pCompositor->getMonitorInDirection(direction_char);
36+ if (next_monitor) {
37+ g_pCompositor->setActiveMonitor(next_monitor);
38+ g_pCompositor->warpCursorTo(next_monitor->vecPosition + next_monitor->vecSize / 2);
39+ }
40+ return;
41+ }
42
43 auto* target = this->shiftOrGetFocus(*node, direction, false, false, visible);
44