Skip to content

Commit 4dc8c0a

Browse files
committed
xtra-dispatchers: Fixes for 40d8fa8
I am not entirely sure whether I was supposed to use fullWindowFocus() or rawWindowFocus() in xtra-dispatchers/main.cpp at lines 47 and 106
1 parent 93d2f7f commit 4dc8c0a

File tree

1 file changed

+28
-13
lines changed

1 file changed

+28
-13
lines changed

xtra-dispatchers/main.cpp

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#define private public
99
#include <hyprland/src/Compositor.hpp>
10+
#include <hyprland/src/desktop/state/FocusState.hpp>
1011
#include <hyprland/src/desktop/Window.hpp>
1112
#include <hyprland/src/config/ConfigManager.hpp>
1213
#include <hyprland/src/render/Renderer.hpp>
@@ -28,19 +29,22 @@ APICALL EXPORT std::string PLUGIN_API_VERSION() {
2829
static SDispatchResult moveOrExec(std::string in) {
2930
CVarList vars(in, 0, ',');
3031

31-
if (!g_pCompositor->m_lastMonitor || !g_pCompositor->m_lastMonitor->m_activeWorkspace)
32+
auto focusState = Desktop::focusState();
33+
auto monitor = focusState->monitor();
34+
35+
if (!monitor || !monitor->m_activeWorkspace)
3236
return SDispatchResult{.success = false, .error = "No active workspace"};
3337

3438
const auto PWINDOW = g_pCompositor->getWindowByRegex(vars[0]);
3539

3640
if (!PWINDOW)
3741
g_pKeybindManager->spawn(vars[1]);
3842
else {
39-
if (g_pCompositor->m_lastMonitor->m_activeWorkspace != PWINDOW->m_workspace)
40-
g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, g_pCompositor->m_lastMonitor->m_activeWorkspace);
43+
if (monitor->m_activeWorkspace != PWINDOW->m_workspace)
44+
g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, monitor->m_activeWorkspace);
4145
else
4246
g_pCompositor->warpCursorTo(PWINDOW->middle());
43-
g_pCompositor->focusWindow(PWINDOW);
47+
focusState->fullWindowFocus(PWINDOW);
4448
}
4549

4650
return SDispatchResult{};
@@ -52,15 +56,18 @@ static SDispatchResult throwUnfocused(std::string in) {
5256
if (id == WORKSPACE_INVALID)
5357
return SDispatchResult{.success = false, .error = "Failed to find workspace"};
5458

55-
if (!g_pCompositor->m_lastWindow || !g_pCompositor->m_lastWindow->m_workspace)
59+
auto focusState = Desktop::focusState();
60+
auto window = focusState->window();
61+
62+
if (!window || !window->m_workspace)
5663
return SDispatchResult{.success = false, .error = "No valid last window"};
5764

5865
auto pWorkspace = g_pCompositor->getWorkspaceByID(id);
5966
if (!pWorkspace)
60-
pWorkspace = g_pCompositor->createNewWorkspace(id, g_pCompositor->m_lastWindow->m_workspace->monitorID(), name, false);
67+
pWorkspace = g_pCompositor->createNewWorkspace(id, window->m_workspace->monitorID(), name, false);
6168

6269
for (const auto& w : g_pCompositor->m_windows) {
63-
if (w == g_pCompositor->m_lastWindow || w->m_workspace != g_pCompositor->m_lastWindow->m_workspace)
70+
if (w == window || w->m_workspace != window->m_workspace)
6471
continue;
6572

6673
g_pCompositor->moveWindowToWorkspaceSafe(w, pWorkspace);
@@ -75,36 +82,44 @@ static SDispatchResult bringAllFrom(std::string in) {
7582
if (id == WORKSPACE_INVALID)
7683
return SDispatchResult{.success = false, .error = "Failed to find workspace"};
7784

78-
if (!g_pCompositor->m_lastMonitor || !g_pCompositor->m_lastMonitor->m_activeWorkspace)
85+
auto focusState = Desktop::focusState();
86+
auto monitor = focusState->monitor();
87+
auto window = focusState->window();
88+
89+
if (!monitor || !monitor->m_activeWorkspace)
7990
return SDispatchResult{.success = false, .error = "No active monitor"};
8091

8192
auto pWorkspace = g_pCompositor->getWorkspaceByID(id);
8293
if (!pWorkspace)
8394
return SDispatchResult{.success = false, .error = "Workspace isnt open"};
8495

85-
const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock();
96+
const auto PLASTWINDOW = window;
8697

8798
for (const auto& w : g_pCompositor->m_windows) {
8899
if (w->m_workspace != pWorkspace)
89100
continue;
90101

91-
g_pCompositor->moveWindowToWorkspaceSafe(w, g_pCompositor->m_lastMonitor->m_activeWorkspace);
102+
g_pCompositor->moveWindowToWorkspaceSafe(w, monitor->m_activeWorkspace);
92103
}
93104

94105
if (PLASTWINDOW) {
95-
g_pCompositor->focusWindow(PLASTWINDOW);
106+
Desktop::focusState()->fullWindowFocus(PLASTWINDOW);
96107
g_pCompositor->warpCursorTo(PLASTWINDOW->middle());
97108
}
98109

99110
return SDispatchResult{};
100111
}
101112

102113
static SDispatchResult closeUnfocused(std::string in) {
103-
if (!g_pCompositor->m_lastMonitor)
114+
auto focusState = Desktop::focusState();
115+
auto monitor = focusState->monitor();
116+
auto window = focusState->window();
117+
118+
if (!window)
104119
return SDispatchResult{.success = false, .error = "No focused monitor"};
105120

106121
for (const auto& w : g_pCompositor->m_windows) {
107-
if (w->m_workspace != g_pCompositor->m_lastMonitor->m_activeWorkspace || w->m_monitor != g_pCompositor->m_lastMonitor || !w->m_isMapped || w == g_pCompositor->m_lastWindow)
122+
if (w->m_workspace != monitor->m_activeWorkspace || w->m_monitor != monitor || !w->m_isMapped || w == window)
108123
continue;
109124

110125
g_pCompositor->closeWindow(w);

0 commit comments

Comments
 (0)