33#include < algorithm>
44
55#include < hyprland/src/Compositor.hpp>
6+ #include < hyprland/src/desktop/state/FocusState.hpp>
67#include < hyprland/src/managers/input/InputManager.hpp>
78#include < hyprland/src/managers/eventLoop/EventLoopManager.hpp>
89#include < hyprland/src/config/ConfigManager.hpp>
@@ -534,7 +535,7 @@ void CScrollingLayout::onWindowCreatedTiling(PHLWINDOW window, eDirection direct
534535 workspaceData->self = workspaceData;
535536 }
536537
537- auto droppingOn = g_pCompositor-> m_lastWindow . lock ();
538+ auto droppingOn = Desktop::focusState ()-> window ();
538539
539540 if (droppingOn == window)
540541 droppingOn = g_pCompositor->vectorToWindowUnified (g_pInputManager->getMouseCoordsInternal (), RESERVED_EXTENTS | INPUT_EXTENTS);
@@ -630,7 +631,7 @@ void CScrollingLayout::onBeginDragWindow() {
630631}
631632
632633void CScrollingLayout::resizeActiveWindow (const Vector2D& delta, eRectCorner corner, PHLWINDOW pWindow) {
633- const auto PWINDOW = pWindow ? pWindow : g_pCompositor-> m_lastWindow . lock ();
634+ const auto PWINDOW = pWindow ? pWindow : Desktop::focusState ()-> window ();
634635 Vector2D modDelta = delta;
635636
636637 if (!validMapped (PWINDOW))
@@ -782,10 +783,10 @@ void CScrollingLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFull
782783
783784void CScrollingLayout::focusWindowUpdate (PHLWINDOW pWindow) {
784785 if (!validMapped (pWindow)) {
785- g_pCompositor-> focusWindow (nullptr );
786+ Desktop::focusState ()-> fullWindowFocus (nullptr );
786787 return ;
787788 }
788- g_pCompositor-> focusWindow (pWindow);
789+ Desktop::focusState ()-> fullWindowFocus (pWindow);
789790 const auto WINDOWDATA = dataFor (pWindow);
790791 if (WINDOWDATA) {
791792 if (auto col = WINDOWDATA->column .lock ())
@@ -841,7 +842,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
841842 return {};
842843
843844 if (ARGS[1 ] == " +col" || ARGS[1 ] == " col" ) {
844- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow . lock ());
845+ const auto WDATA = dataFor (Desktop::focusState ()-> window ());
845846 if (!WDATA)
846847 return {};
847848
@@ -862,7 +863,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
862863
863864 return {};
864865 } else if (ARGS[1 ] == " -col" ) {
865- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow . lock ());
866+ const auto WDATA = dataFor (Desktop::focusState ()-> window ());
866867 if (!WDATA) {
867868 if (DATA->leftOffset <= DATA->maxWidth () && DATA->columns .size () > 0 ) {
868869 DATA->centerCol (DATA->columns .back ());
@@ -899,7 +900,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
899900
900901 focusWindowUpdate (ATCENTER ? (*ATCENTER->windowDatas .begin ())->window .lock () : nullptr );
901902 } else if (ARGS[0 ] == " colresize" ) {
902- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow . lock ());
903+ const auto WDATA = dataFor (Desktop::focusState ()-> window ());
903904
904905 if (!WDATA)
905906 return {};
@@ -968,13 +969,13 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
968969 WDATA->column ->columnWidth = abs;
969970 }
970971 } else if (ARGS[0 ] == " movewindowto" ) {
971- moveWindowTo (g_pCompositor-> m_lastWindow . lock (), ARGS[1 ], false );
972+ moveWindowTo (Desktop::focusState ()-> window (), ARGS[1 ], false );
972973 } else if (ARGS[0 ] == " fit" ) {
973974
974975 if (ARGS[1 ] == " active" ) {
975976 // fit the current column to 1.F
976- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow . lock ());
977- const auto WORKDATA = dataFor (g_pCompositor-> m_lastWindow ->m_workspace );
977+ const auto WDATA = dataFor (Desktop::focusState ()-> window ());
978+ const auto WORKDATA = dataFor (Desktop::focusState ()-> window () ->m_workspace );
978979
979980 if (!WDATA || !WORKDATA || WORKDATA->columns .size () == 0 )
980981 return {};
@@ -985,7 +986,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
985986
986987 WORKDATA->leftOffset = 0 ;
987988 for (size_t i = 0 ; i < WORKDATA->columns .size (); ++i) {
988- if (WORKDATA->columns [i]->has (g_pCompositor-> m_lastWindow . lock ()))
989+ if (WORKDATA->columns [i]->has (Desktop::focusState ()-> window ()))
989990 break ;
990991
991992 WORKDATA->leftOffset += USABLE.w * WORKDATA->columns [i]->columnWidth ;
@@ -994,7 +995,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
994995 WDATA->column ->workspace ->recalculate ();
995996 } else if (ARGS[1 ] == " all" ) {
996997 // fit all columns on screen
997- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow ->m_workspace );
998+ const auto WDATA = dataFor (Desktop::focusState ()-> window () ->m_workspace );
998999
9991000 if (!WDATA || WDATA->columns .size () == 0 )
10001001 return {};
@@ -1007,15 +1008,15 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
10071008 WDATA->recalculate ();
10081009 } else if (ARGS[1 ] == " toend" ) {
10091010 // fit all columns on screen that start from the current and end on the last
1010- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow ->m_workspace );
1011+ const auto WDATA = dataFor (Desktop::focusState ()-> window () ->m_workspace );
10111012
10121013 if (!WDATA || WDATA->columns .size () == 0 )
10131014 return {};
10141015
10151016 bool begun = false ;
10161017 size_t foundAt = 0 ;
10171018 for (size_t i = 0 ; i < WDATA->columns .size (); ++i) {
1018- if (!begun && !WDATA->columns [i]->has (g_pCompositor-> m_lastWindow . lock ()))
1019+ if (!begun && !WDATA->columns [i]->has (Desktop::focusState ()-> window ()))
10191020 continue ;
10201021
10211022 if (!begun) {
@@ -1039,15 +1040,15 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
10391040 WDATA->recalculate ();
10401041 } else if (ARGS[1 ] == " tobeg" ) {
10411042 // fit all columns on screen that start from the current and end on the last
1042- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow ->m_workspace );
1043+ const auto WDATA = dataFor (Desktop::focusState ()-> window () ->m_workspace );
10431044
10441045 if (!WDATA || WDATA->columns .size () == 0 )
10451046 return {};
10461047
10471048 bool begun = false ;
10481049 size_t foundAt = 0 ;
10491050 for (int64_t i = (int64_t )WDATA->columns .size () - 1 ; i >= 0 ; --i) {
1050- if (!begun && !WDATA->columns [i]->has (g_pCompositor-> m_lastWindow . lock ()))
1051+ if (!begun && !WDATA->columns [i]->has (Desktop::focusState ()-> window ()))
10511052 continue ;
10521053
10531054 if (!begun) {
@@ -1066,7 +1067,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
10661067 WDATA->recalculate ();
10671068 } else if (ARGS[1 ] == " visible" ) {
10681069 // fit all columns on screen that start from the current and end on the last
1069- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow ->m_workspace );
1070+ const auto WDATA = dataFor (Desktop::focusState ()-> window () ->m_workspace );
10701071
10711072 if (!WDATA || WDATA->columns .size () == 0 )
10721073 return {};
@@ -1109,7 +1110,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
11091110 WDATA->recalculate ();
11101111 }
11111112 } else if (ARGS[0 ] == " focus" ) {
1112- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow . lock ());
1113+ const auto WDATA = dataFor (Desktop::focusState ()-> window ());
11131114 static const auto PNOFALLBACK = CConfigValue<Hyprlang::INT>(" general:no_focus_fallback" );
11141115
11151116 if (!WDATA || ARGS[1 ].empty ())
@@ -1193,7 +1194,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
11931194 default : return {};
11941195 }
11951196 } else if (ARGS[0 ] == " promote" ) {
1196- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow . lock ());
1197+ const auto WDATA = dataFor (Desktop::focusState ()-> window ());
11971198
11981199 if (!WDATA)
11991200 return {};
@@ -1210,7 +1211,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
12101211 if (ARGS.size () < 2 )
12111212 return {};
12121213
1213- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow . lock ());
1214+ const auto WDATA = dataFor (Desktop::focusState ()-> window ());
12141215 if (!WDATA)
12151216 return {};
12161217
@@ -1245,7 +1246,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
12451246 if (ARGS.size () < 2 )
12461247 return {};
12471248
1248- const auto WDATA = dataFor (g_pCompositor-> m_lastWindow . lock ());
1249+ const auto WDATA = dataFor (Desktop::focusState ()-> window ());
12491250 if (!WDATA)
12501251 return {};
12511252
@@ -1257,7 +1258,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
12571258 if (!SOURCE_WS_DATA)
12581259 return {};
12591260
1260- const auto PMONITOR = g_pCompositor-> m_lastWindow -> m_monitor . lock ();
1261+ const auto PMONITOR = Desktop::focusState ()-> monitor ();
12611262 if (!PMONITOR)
12621263 return {};
12631264
@@ -1340,7 +1341,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
13401341 g_pCompositor->moveWindowToWorkspaceSafe (win, PWORKSPACE);
13411342 }
13421343
1343- g_pCompositor-> focusWindow (windowsToMove.front ());
1344+ Desktop::focusState ()-> fullWindowFocus (windowsToMove.front ());
13441345 g_pCompositor->warpCursorTo (windowsToMove.front ()->middle ());
13451346 } else if (ARGS[0 ] == " togglefit" ) {
13461347 static const auto PFITMETHOD = CConfigValue<Hyprlang::INT>(" plugin:hyprscrolling:focus_fit_method" );
@@ -1349,7 +1350,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
13491350
13501351 fitMethod = toggled;
13511352
1352- const auto focusedData = dataFor (g_pCompositor-> m_lastWindow . lock ());
1353+ const auto focusedData = dataFor (Desktop::focusState ()-> window ());
13531354 static const auto PFSONONE = CConfigValue<Hyprlang::INT>(" plugin:hyprscrolling:fullscreen_on_one_column" );
13541355
13551356 for (const auto & ws : m_workspaceDatas) {
@@ -1528,12 +1529,12 @@ SP<SScrollingWindowData> CScrollingLayout::dataFor(PHLWINDOW w) {
15281529}
15291530
15301531SP<SWorkspaceData> CScrollingLayout::currentWorkspaceData () {
1531- if (!g_pCompositor-> m_lastMonitor || !g_pCompositor-> m_lastMonitor ->m_activeWorkspace )
1532+ if (!Desktop::focusState ()-> monitor () || !Desktop::focusState ()-> monitor () ->m_activeWorkspace )
15321533 return nullptr ;
15331534
15341535 // FIXME: special
15351536
1536- return dataFor (g_pCompositor-> m_lastMonitor ->m_activeWorkspace );
1537+ return dataFor (Desktop::focusState ()-> monitor () ->m_activeWorkspace );
15371538}
15381539
15391540CBox CScrollingLayout::usableAreaFor (PHLMONITOR m) {
0 commit comments