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

Commit

Permalink
fix:follow hyprland 0.39.0
Browse files Browse the repository at this point in the history
  • Loading branch information
DreamMaoMao committed Apr 15, 2024
1 parent 7143453 commit cc0d35d
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 66 deletions.
58 changes: 36 additions & 22 deletions src/OvGridLayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ CWindow *OvGridLayout::getNextWindowCandidate(CWindow* plastWindow) {
for (auto &w : g_pCompositor->m_vWindows)
{
CWindow *pWindow = w.get();
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)
if (pWindow->m_pWorkspace != plastWindow->m_pWorkspace || pWindow->isHidden() || !pWindow->m_bIsMapped || pWindow->m_bFadingOut || pWindow->m_bIsFullscreen)
continue;
targetWindow = pWindow; // find the last window that is in same workspace with the remove window
}
Expand Down Expand Up @@ -54,10 +54,22 @@ int OvGridLayout::getNodesNumOnWorkspace(const int &ws)
return no;
}


Vector2D OvGridLayout::predictSizeForNewWindowTiled() {
return {};
}

void OvGridLayout::resizeNodeSizePos(SOvGridNodeData *node, int x, int y, int width, int height)
{
node->size = Vector2D(width, height - g_hycov_height_of_titlebar);
node->position = Vector2D(x, y);

int groupbar_height_fix;
if(node->pWindow->m_sGroupData.pNextWindow) {
groupbar_height_fix = g_hycov_groupBarHeight;
} else {
groupbar_height_fix = 0;
}
node->size = Vector2D(width, height - g_hycov_height_of_titlebar - groupbar_height_fix);
node->position = Vector2D(x, y + g_hycov_height_of_titlebar + groupbar_height_fix);
applyNodeDataToWindow(node);
}

Expand All @@ -72,9 +84,9 @@ void OvGridLayout::onWindowCreatedTiling(CWindow *pWindow, eDirection direction)

const auto pNode = &m_lOvGridNodesData.emplace_back(); // make a new node in list back

const auto pActiveWorkspace = g_pCompositor->getWorkspaceByID(pTargetMonitor->activeWorkspace);
auto pActiveWorkspace = pTargetMonitor->activeWorkspace;

const auto pWindowOriWorkspace = g_pCompositor->getWorkspaceByID(pWindow->m_iWorkspaceID);
auto pWindowOriWorkspace = pWindow->m_pWorkspace;

auto oldLayoutRecordNode = getOldLayoutRecordNodeFromWindow(pWindow);
if(oldLayoutRecordNode) {
Expand All @@ -89,16 +101,16 @@ void OvGridLayout::onWindowCreatedTiling(CWindow *pWindow, eDirection direction)
pNode->pGroupNextWindow = pWindow->m_sGroupData.pNextWindow;
}

pNode->workspaceID = pWindow->m_iWorkspaceID; // encapsulate window objects as node objects to bind more properties
pNode->workspaceID = pWindow->m_pWorkspace->m_iID; // encapsulate window objects as node objects to bind more properties
pNode->pWindow = pWindow;
pNode->workspaceName = pWindowOriWorkspace->m_szName;

//record the window stats which are used by restore
pNode->ovbk_windowMonitorId = pWindow->m_iMonitorID;
pNode->ovbk_windowWorkspaceId = pWindow->m_iWorkspaceID;
pNode->ovbk_windowWorkspaceId = pWindow->m_pWorkspace->m_iID;
pNode->ovbk_windowFullscreenMode = pWindowOriWorkspace->m_efFullscreenMode;
pNode->ovbk_position = pWindow->m_vRealPosition.goalv();
pNode->ovbk_size = pWindow->m_vRealSize.goalv();
pNode->ovbk_position = pWindow->m_vRealPosition.goal();
pNode->ovbk_size = pWindow->m_vRealSize.goal();
pNode->ovbk_windowIsFloating = pWindow->m_bIsFloating;
pNode->ovbk_windowIsFullscreen = pWindow->m_bIsFullscreen;
pNode->ovbk_windowWorkspaceName = pWindowOriWorkspace->m_szName;
Expand All @@ -111,8 +123,9 @@ void OvGridLayout::onWindowCreatedTiling(CWindow *pWindow, eDirection direction)


//change all client(exclude special workspace) to active worksapce
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)) {
pNode->workspaceID = pWindow->m_iWorkspaceID = pActiveWorkspace->m_iID;
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)) {
pWindow->m_pWorkspace = pActiveWorkspace;
pNode->workspaceID = pWindow->m_pWorkspace->m_iID;
pNode->workspaceName = pActiveWorkspace->m_szName;
pNode->pWindow->m_iMonitorID = pTargetMonitor->ID;
}
Expand Down Expand Up @@ -182,7 +195,7 @@ void OvGridLayout::onWindowRemovedTiling(CWindow *pWindow)
if(pNode->isGroupActive && pNode->pGroupPrevWindow && pNode->pGroupPrevWindow != pNode->pWindow) {
pNode->pWindow = pNode->pGroupPrevWindow;
pNode->pGroupPrevWindow = pNode->pGroupPrevWindow->getGroupPrevious();
pNode->pWindow->m_iWorkspaceID = pNode->workspaceID;
pNode->pWindow->m_pWorkspace = g_pCompositor->getWorkspaceByID(pNode->workspaceID);
applyNodeDataToWindow(pNode);
pNode->isInOldLayout = false;
g_pCompositor->focusWindow(pNode->pWindow);
Expand Down Expand Up @@ -327,12 +340,12 @@ void OvGridLayout::recalculateMonitor(const int &monid)
const auto pMonitor = g_pCompositor->getMonitorFromID(monid); // 根据monitor id获取monitor对象
g_pHyprRenderer->damageMonitor(pMonitor); // Use local rendering

if (pMonitor->specialWorkspaceID) {
calculateWorkspace(pMonitor->specialWorkspaceID);
if (pMonitor->activeSpecialWorkspaceID()) {
calculateWorkspace(pMonitor->activeSpecialWorkspaceID());
return;
}

const auto pWorksapce = g_pCompositor->getWorkspaceByID(pMonitor->activeWorkspace); // 获取当前workspace对象
const auto pWorksapce = g_pCompositor->getWorkspaceByID(pMonitor->activeWorkspaceID()); // 获取当前workspace对象
if (!pWorksapce)
return;

Expand Down Expand Up @@ -421,16 +434,16 @@ void OvGridLayout::changeToActivceSourceWorkspace()
{
CWindow *pWindow = nullptr;
SOvGridNodeData *pNode;
CWorkspace *pWorksapce;
PHLWORKSPACE pWorksapce;
hycov_log(LOG,"changeToActivceSourceWorkspace");
pWindow = g_pCompositor->m_pLastWindow;
pNode = getNodeFromWindow(pWindow);
if(pNode) {
pWorksapce = g_pCompositor->getWorkspaceByID(pNode->ovbk_windowWorkspaceId);
} else if(pWindow) {
pWorksapce = g_pCompositor->getWorkspaceByID(pWindow->m_iWorkspaceID);
pWorksapce = pWindow->m_pWorkspace;
} else {
pWorksapce = g_pCompositor->getWorkspaceByID(g_pCompositor->m_pLastMonitor->activeWorkspace);
pWorksapce = g_pCompositor->m_pLastMonitor->activeWorkspace;
}
// pMonitor->changeWorkspace(pWorksapce);
hycov_log(LOG,"changeToWorkspace:{}",pWorksapce->m_iID);
Expand All @@ -440,13 +453,13 @@ void OvGridLayout::changeToActivceSourceWorkspace()

void OvGridLayout::moveWindowToSourceWorkspace()
{
CWorkspace *pWorkspace;
PHLWORKSPACE pWorkspace;

hycov_log(LOG,"moveWindowToSourceWorkspace");

for (auto &nd : m_lOvGridNodesData)
{
if (nd.pWindow && (nd.pWindow->m_iWorkspaceID != nd.ovbk_windowWorkspaceId || nd.workspaceName != nd.ovbk_windowWorkspaceName ))
if (nd.pWindow && (nd.pWindow->m_pWorkspace->m_iID != nd.ovbk_windowWorkspaceId || nd.workspaceName != nd.ovbk_windowWorkspaceName ))
{
pWorkspace = g_pCompositor->getWorkspaceByID(nd.ovbk_windowWorkspaceId);
if (!pWorkspace){
Expand All @@ -455,7 +468,8 @@ void OvGridLayout::moveWindowToSourceWorkspace()
hycov_log(LOG,"create workspace: id:{} monitor:{} name:{}",nd.ovbk_windowWorkspaceId,nd.pWindow->m_iMonitorID,nd.ovbk_windowWorkspaceName);
}
nd.pWindow->m_iMonitorID = nd.ovbk_windowMonitorId;
nd.workspaceID = nd.pWindow->m_iWorkspaceID = nd.ovbk_windowWorkspaceId;
nd.pWindow->m_pWorkspace = pWorkspace;
nd.workspaceID = nd.ovbk_windowWorkspaceId;
nd.workspaceName = nd.ovbk_windowWorkspaceName;
nd.pWindow->m_vPosition = nd.ovbk_position;
nd.pWindow->m_vSize = nd.ovbk_size;
Expand Down Expand Up @@ -488,4 +502,4 @@ void OvGridLayout::onEnable()
void OvGridLayout::onDisable()
{
dispatch_leaveoverview("");
}
}
1 change: 1 addition & 0 deletions src/OvGridLayout.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ class OvGridLayout : public IHyprLayout
virtual void switchWindows(CWindow *, CWindow *);
virtual void alterSplitRatio(CWindow *, float, bool);
virtual std::string getLayoutName();
virtual Vector2D predictSizeForNewWindowTiled();
virtual void replaceWindowDataWith(CWindow *from, CWindow *to);
virtual void moveWindowTo(CWindow *, const std::string &dir);
virtual void onEnable();
Expand Down
Loading

0 comments on commit cc0d35d

Please sign in to comment.