Skip to content
This repository was archived by the owner on Jul 9, 2024. It is now read-only.

Commit cc0d35d

Browse files
committed
fix:follow hyprland 0.39.0
1 parent 7143453 commit cc0d35d

File tree

6 files changed

+85
-66
lines changed

6 files changed

+85
-66
lines changed

src/OvGridLayout.cpp

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
5762
void 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

441454
void 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()
488502
void OvGridLayout::onDisable()
489503
{
490504
dispatch_leaveoverview("");
491-
}
505+
}

src/OvGridLayout.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class OvGridLayout : public IHyprLayout
6161
virtual void switchWindows(CWindow *, CWindow *);
6262
virtual void alterSplitRatio(CWindow *, float, bool);
6363
virtual std::string getLayoutName();
64+
virtual Vector2D predictSizeForNewWindowTiled();
6465
virtual void replaceWindowDataWith(CWindow *from, CWindow *to);
6566
virtual void moveWindowTo(CWindow *, const std::string &dir);
6667
virtual void onEnable();

0 commit comments

Comments
 (0)