Use C++-styled pointers for decorations

This commit is contained in:
vaxerski 2022-05-28 23:43:11 +02:00
parent 08e0567d3a
commit 894ae2d742
4 changed files with 5 additions and 10 deletions

View File

@ -13,7 +13,4 @@ CWindow::~CWindow() {
g_pCompositor->m_pLastFocus = nullptr;
g_pCompositor->m_pLastWindow = nullptr;
}
for (auto& wd : m_dWindowDecorations)
delete wd;
}

View File

@ -91,7 +91,7 @@ public:
bool m_bHidden = false;
// Window decorations
std::deque<IHyprWindowDecoration*> m_dWindowDecorations;
std::deque<std::unique_ptr<IHyprWindowDecoration>> m_dWindowDecorations;
// Special render data, rules, etc
SWindowSpecialRenderData m_sSpecialRenderData;

View File

@ -277,7 +277,7 @@ void CHyprDwindleLayout::onWindowCreated(CWindow* pWindow) {
// means we opened on a group
// add the group deco
pWindow->m_dWindowDecorations.emplace_back(new CHyprGroupBarDecoration(pWindow));
pWindow->m_dWindowDecorations.emplace_back(std::make_unique<CHyprGroupBarDecoration>(pWindow));
PNODE->pGroupParent = OPENINGON->pGroupParent;
PNODE->pGroupParent->groupMembers.push_back(PNODE);
@ -733,7 +733,7 @@ void CHyprDwindleLayout::toggleWindowGroup(CWindow* pWindow) {
c->pGroupParent = PPARENT;
c->pWindow->m_cRealBorderColor = GROUPINACTIVEBORDERCOL;
c->pWindow->m_dWindowDecorations.push_back(new CHyprGroupBarDecoration(c->pWindow));
c->pWindow->m_dWindowDecorations.push_back(std::make_unique<CHyprGroupBarDecoration>(c->pWindow));
if (c->pWindow == g_pCompositor->m_pLastWindow)
c->pWindow->m_cRealBorderColor = CColor(g_pConfigManager->getInt("dwindle:col.group_border_active"));

View File

@ -37,9 +37,8 @@ void CHyprGroupBarDecoration::updateWindow(CWindow* pWindow) {
if (g_pLayoutManager->getCurrentLayout()->getLayoutName() != "dwindle") {
// ????
for (auto it = pWindow->m_dWindowDecorations.begin(); it != pWindow->m_dWindowDecorations.end(); it++) {
if ((*it) == this) {
if (it->get() == this) {
pWindow->m_dWindowDecorations.erase(it);
delete this;
return;
}
}
@ -56,9 +55,8 @@ void CHyprGroupBarDecoration::updateWindow(CWindow* pWindow) {
if (m_dwGroupMembers.size() == 0) {
// remove
for (auto it = pWindow->m_dWindowDecorations.begin(); it != pWindow->m_dWindowDecorations.end(); it++) {
if ((*it) == this) {
if (it->get() == this) {
pWindow->m_dWindowDecorations.erase(it);
delete this;
return;
}
}