@@ -10,7 +10,7 @@ CWindow *OvGridLayout::getNextWindowCandidate(CWindow* plastWindow) {
1010 for (auto &w : g_pCompositor->m_vWindows )
1111 {
1212 CWindow *pWindow = w.get ();
13- if ((g_pCompositor-> m_pLastMonitor -> specialWorkspaceID != 0 && !g_pCompositor-> isWorkspaceSpecial ( pWindow->m_iWorkspaceID )) || (g_pCompositor-> m_pLastMonitor -> specialWorkspaceID == 0 && g_pCompositor-> isWorkspaceSpecial (pWindow-> m_iWorkspaceID )) || pWindow-> m_iWorkspaceID != plastWindow->m_iWorkspaceID || pWindow->isHidden () || !pWindow->m_bIsMapped || pWindow->m_bFadingOut || pWindow->m_bIsFullscreen )
13+ if (pWindow->m_pWorkspace != plastWindow->m_pWorkspace || pWindow->isHidden () || !pWindow->m_bIsMapped || pWindow->m_bFadingOut || pWindow->m_bIsFullscreen )
1414 continue ;
1515 targetWindow = pWindow; // find the last window that is in same workspace with the remove window
1616 }
@@ -54,10 +54,22 @@ int OvGridLayout::getNodesNumOnWorkspace(const int &ws)
5454 return no;
5555}
5656
57+
58+ Vector2D OvGridLayout::predictSizeForNewWindowTiled () {
59+ return {};
60+ }
61+
5762void OvGridLayout::resizeNodeSizePos (SOvGridNodeData *node, int x, int y, int width, int height)
5863{
59- node->size = Vector2D (width, height - g_hycov_height_of_titlebar);
60- node->position = Vector2D (x, y);
64+
65+ int groupbar_height_fix;
66+ if (node->pWindow ->m_sGroupData .pNextWindow ) {
67+ groupbar_height_fix = g_hycov_groupBarHeight;
68+ } else {
69+ groupbar_height_fix = 0 ;
70+ }
71+ node->size = Vector2D (width, height - g_hycov_height_of_titlebar - groupbar_height_fix);
72+ node->position = Vector2D (x, y + g_hycov_height_of_titlebar + groupbar_height_fix);
6173 applyNodeDataToWindow (node);
6274}
6375
@@ -72,9 +84,9 @@ void OvGridLayout::onWindowCreatedTiling(CWindow *pWindow, eDirection direction)
7284
7385 const auto pNode = &m_lOvGridNodesData.emplace_back (); // make a new node in list back
7486
75- const auto pActiveWorkspace = g_pCompositor-> getWorkspaceByID ( pTargetMonitor->activeWorkspace );
87+ auto pActiveWorkspace = pTargetMonitor->activeWorkspace ;
7688
77- const auto pWindowOriWorkspace = g_pCompositor-> getWorkspaceByID ( pWindow->m_iWorkspaceID ) ;
89+ auto pWindowOriWorkspace = pWindow->m_pWorkspace ;
7890
7991 auto oldLayoutRecordNode = getOldLayoutRecordNodeFromWindow (pWindow);
8092 if (oldLayoutRecordNode) {
@@ -89,16 +101,16 @@ void OvGridLayout::onWindowCreatedTiling(CWindow *pWindow, eDirection direction)
89101 pNode->pGroupNextWindow = pWindow->m_sGroupData .pNextWindow ;
90102 }
91103
92- pNode->workspaceID = pWindow->m_iWorkspaceID ; // encapsulate window objects as node objects to bind more properties
104+ pNode->workspaceID = pWindow->m_pWorkspace -> m_iID ; // encapsulate window objects as node objects to bind more properties
93105 pNode->pWindow = pWindow;
94106 pNode->workspaceName = pWindowOriWorkspace->m_szName ;
95107
96108 // record the window stats which are used by restore
97109 pNode->ovbk_windowMonitorId = pWindow->m_iMonitorID ;
98- pNode->ovbk_windowWorkspaceId = pWindow->m_iWorkspaceID ;
110+ pNode->ovbk_windowWorkspaceId = pWindow->m_pWorkspace -> m_iID ;
99111 pNode->ovbk_windowFullscreenMode = pWindowOriWorkspace->m_efFullscreenMode ;
100- pNode->ovbk_position = pWindow->m_vRealPosition .goalv ();
101- pNode->ovbk_size = pWindow->m_vRealSize .goalv ();
112+ pNode->ovbk_position = pWindow->m_vRealPosition .goal ();
113+ pNode->ovbk_size = pWindow->m_vRealSize .goal ();
102114 pNode->ovbk_windowIsFloating = pWindow->m_bIsFloating ;
103115 pNode->ovbk_windowIsFullscreen = pWindow->m_bIsFullscreen ;
104116 pNode->ovbk_windowWorkspaceName = pWindowOriWorkspace->m_szName ;
@@ -111,8 +123,9 @@ void OvGridLayout::onWindowCreatedTiling(CWindow *pWindow, eDirection direction)
111123
112124
113125 // change all client(exclude special workspace) to active worksapce
114- if ( !g_pCompositor->isWorkspaceSpecial (pWindow->m_iWorkspaceID ) && pNode->isInOldLayout && (pWindowOriWorkspace->m_iID != pActiveWorkspace->m_iID || pWindowOriWorkspace->m_szName != pActiveWorkspace->m_szName ) && (!g_hycov_only_active_workspace || g_hycov_forece_display_all || g_hycov_forece_display_all_in_one_monitor)) {
115- pNode->workspaceID = pWindow->m_iWorkspaceID = pActiveWorkspace->m_iID ;
126+ if (!g_pCompositor->isWorkspaceSpecial (pNode->workspaceID ) && pNode->isInOldLayout && (pWindowOriWorkspace->m_iID != pActiveWorkspace->m_iID || pWindowOriWorkspace->m_szName != pActiveWorkspace->m_szName ) && (!g_hycov_only_active_workspace || g_hycov_forece_display_all || g_hycov_forece_display_all_in_one_monitor)) {
127+ pWindow->m_pWorkspace = pActiveWorkspace;
128+ pNode->workspaceID = pWindow->m_pWorkspace ->m_iID ;
116129 pNode->workspaceName = pActiveWorkspace->m_szName ;
117130 pNode->pWindow ->m_iMonitorID = pTargetMonitor->ID ;
118131 }
@@ -182,7 +195,7 @@ void OvGridLayout::onWindowRemovedTiling(CWindow *pWindow)
182195 if (pNode->isGroupActive && pNode->pGroupPrevWindow && pNode->pGroupPrevWindow != pNode->pWindow ) {
183196 pNode->pWindow = pNode->pGroupPrevWindow ;
184197 pNode->pGroupPrevWindow = pNode->pGroupPrevWindow ->getGroupPrevious ();
185- pNode->pWindow ->m_iWorkspaceID = pNode->workspaceID ;
198+ pNode->pWindow ->m_pWorkspace = g_pCompositor-> getWorkspaceByID ( pNode->workspaceID ) ;
186199 applyNodeDataToWindow (pNode);
187200 pNode->isInOldLayout = false ;
188201 g_pCompositor->focusWindow (pNode->pWindow );
@@ -327,12 +340,12 @@ void OvGridLayout::recalculateMonitor(const int &monid)
327340 const auto pMonitor = g_pCompositor->getMonitorFromID (monid); // 根据monitor id获取monitor对象
328341 g_pHyprRenderer->damageMonitor (pMonitor); // Use local rendering
329342
330- if (pMonitor->specialWorkspaceID ) {
331- calculateWorkspace (pMonitor->specialWorkspaceID );
343+ if (pMonitor->activeSpecialWorkspaceID () ) {
344+ calculateWorkspace (pMonitor->activeSpecialWorkspaceID () );
332345 return ;
333346 }
334347
335- const auto pWorksapce = g_pCompositor->getWorkspaceByID (pMonitor->activeWorkspace ); // 获取当前workspace对象
348+ const auto pWorksapce = g_pCompositor->getWorkspaceByID (pMonitor->activeWorkspaceID () ); // 获取当前workspace对象
336349 if (!pWorksapce)
337350 return ;
338351
@@ -421,16 +434,16 @@ void OvGridLayout::changeToActivceSourceWorkspace()
421434{
422435 CWindow *pWindow = nullptr ;
423436 SOvGridNodeData *pNode;
424- CWorkspace * pWorksapce;
437+ PHLWORKSPACE pWorksapce;
425438 hycov_log (LOG," changeToActivceSourceWorkspace" );
426439 pWindow = g_pCompositor->m_pLastWindow ;
427440 pNode = getNodeFromWindow (pWindow);
428441 if (pNode) {
429442 pWorksapce = g_pCompositor->getWorkspaceByID (pNode->ovbk_windowWorkspaceId );
430443 } else if (pWindow) {
431- pWorksapce = g_pCompositor-> getWorkspaceByID ( pWindow->m_iWorkspaceID ) ;
444+ pWorksapce = pWindow->m_pWorkspace ;
432445 } else {
433- pWorksapce = g_pCompositor->getWorkspaceByID (g_pCompositor-> m_pLastMonitor ->activeWorkspace ) ;
446+ pWorksapce = g_pCompositor->m_pLastMonitor ->activeWorkspace ;
434447 }
435448 // pMonitor->changeWorkspace(pWorksapce);
436449 hycov_log (LOG," changeToWorkspace:{}" ,pWorksapce->m_iID );
@@ -440,13 +453,13 @@ void OvGridLayout::changeToActivceSourceWorkspace()
440453
441454void OvGridLayout::moveWindowToSourceWorkspace ()
442455{
443- CWorkspace * pWorkspace;
456+ PHLWORKSPACE pWorkspace;
444457
445458 hycov_log (LOG," moveWindowToSourceWorkspace" );
446459
447460 for (auto &nd : m_lOvGridNodesData)
448461 {
449- if (nd.pWindow && (nd.pWindow ->m_iWorkspaceID != nd.ovbk_windowWorkspaceId || nd.workspaceName != nd.ovbk_windowWorkspaceName ))
462+ if (nd.pWindow && (nd.pWindow ->m_pWorkspace -> m_iID != nd.ovbk_windowWorkspaceId || nd.workspaceName != nd.ovbk_windowWorkspaceName ))
450463 {
451464 pWorkspace = g_pCompositor->getWorkspaceByID (nd.ovbk_windowWorkspaceId );
452465 if (!pWorkspace){
@@ -455,7 +468,8 @@ void OvGridLayout::moveWindowToSourceWorkspace()
455468 hycov_log (LOG," create workspace: id:{} monitor:{} name:{}" ,nd.ovbk_windowWorkspaceId ,nd.pWindow ->m_iMonitorID ,nd.ovbk_windowWorkspaceName );
456469 }
457470 nd.pWindow ->m_iMonitorID = nd.ovbk_windowMonitorId ;
458- nd.workspaceID = nd.pWindow ->m_iWorkspaceID = nd.ovbk_windowWorkspaceId ;
471+ nd.pWindow ->m_pWorkspace = pWorkspace;
472+ nd.workspaceID = nd.ovbk_windowWorkspaceId ;
459473 nd.workspaceName = nd.ovbk_windowWorkspaceName ;
460474 nd.pWindow ->m_vPosition = nd.ovbk_position ;
461475 nd.pWindow ->m_vSize = nd.ovbk_size ;
@@ -488,4 +502,4 @@ void OvGridLayout::onEnable()
488502void OvGridLayout::onDisable ()
489503{
490504 dispatch_leaveoverview (" " );
491- }
505+ }
0 commit comments