Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CMonitor: move to sharedptr #6475

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 51 additions & 60 deletions src/Compositor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ void CCompositor::cleanup() {
m_vWindows.clear();

for (auto& m : m_vMonitors) {
g_pHyprOpenGL->destroyMonitorResources(m.get());
g_pHyprOpenGL->destroyMonitorResources(m);

wlr_output_state_set_enabled(m->state.wlr(), false);
m->state.commit();
Expand Down Expand Up @@ -570,39 +570,39 @@ void CCompositor::startCompositor() {
g_pEventLoopManager->enterLoop(m_sWLDisplay, m_sWLEventLoop);
}

CMonitor* CCompositor::getMonitorFromID(const int& id) {
PHLMONITOR CCompositor::getMonitorFromID(const int& id) {
for (auto& m : m_vMonitors) {
if (m->ID == (uint64_t)id) {
return m.get();
return m;
}
}

return nullptr;
}

CMonitor* CCompositor::getMonitorFromName(const std::string& name) {
PHLMONITOR CCompositor::getMonitorFromName(const std::string& name) {
for (auto& m : m_vMonitors) {
if (m->szName == name) {
return m.get();
return m;
}
}
return nullptr;
}

CMonitor* CCompositor::getMonitorFromDesc(const std::string& desc) {
PHLMONITOR CCompositor::getMonitorFromDesc(const std::string& desc) {
for (auto& m : m_vMonitors) {
if (m->szDescription.starts_with(desc))
return m.get();
return m;
}
return nullptr;
}

CMonitor* CCompositor::getMonitorFromCursor() {
PHLMONITOR CCompositor::getMonitorFromCursor() {
return getMonitorFromVector(g_pPointerManager->position());
}

CMonitor* CCompositor::getMonitorFromVector(const Vector2D& point) {
SP<CMonitor> mon;
PHLMONITOR CCompositor::getMonitorFromVector(const Vector2D& point) {
PHLMONITOR mon;
for (auto& m : m_vMonitors) {
if (CBox{m->vecPosition, m->vecSize}.containsPoint(point)) {
mon = m;
Expand All @@ -611,8 +611,8 @@ CMonitor* CCompositor::getMonitorFromVector(const Vector2D& point) {
}

if (!mon) {
float bestDistance = 0.f;
SP<CMonitor> pBestMon;
float bestDistance = 0.f;
PHLMONITOR pBestMon;

for (auto& m : m_vMonitors) {
float dist = vecToRectDistanceSquared(point, m->vecPosition, m->vecPosition + m->vecSize);
Expand All @@ -625,13 +625,13 @@ CMonitor* CCompositor::getMonitorFromVector(const Vector2D& point) {

if (!pBestMon) { // ?????
Debug::log(WARN, "getMonitorFromVector no close mon???");
return m_vMonitors.front().get();
return m_vMonitors.front();
}

return pBestMon.get();
return pBestMon;
}

return mon.get();
return mon;
}

void CCompositor::removeWindowFromVectorSafe(PHLWINDOW pWindow) {
Expand All @@ -643,15 +643,6 @@ void CCompositor::removeWindowFromVectorSafe(PHLWINDOW pWindow) {
}
}

bool CCompositor::monitorExists(CMonitor* pMonitor) {
for (auto& m : m_vRealMonitors) {
if (m.get() == pMonitor)
return true;
}

return false;
}

PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t properties, PHLWINDOW pIgnoreWindow) {
const auto PMONITOR = getMonitorFromVector(pos);
static auto PRESIZEONBORDER = CConfigValue<Hyprlang::INT>("general:resize_on_border");
Expand Down Expand Up @@ -834,20 +825,20 @@ Vector2D CCompositor::vectorToSurfaceLocal(const Vector2D& vec, PHLWINDOW pWindo
return vec - pWindow->m_vRealPosition.goal() - std::get<1>(iterData) + Vector2D{geom.x, geom.y};
}

CMonitor* CCompositor::getMonitorFromOutput(wlr_output* out) {
PHLMONITOR CCompositor::getMonitorFromOutput(wlr_output* out) {
for (auto& m : m_vMonitors) {
if (m->output == out) {
return m.get();
return m;
}
}

return nullptr;
}

CMonitor* CCompositor::getRealMonitorFromOutput(wlr_output* out) {
PHLMONITOR CCompositor::getRealMonitorFromOutput(wlr_output* out) {
for (auto& m : m_vRealMonitors) {
if (m->output == out) {
return m.get();
return m;
}
}

Expand Down Expand Up @@ -1035,7 +1026,7 @@ void CCompositor::focusSurface(SP<CWLSurfaceResource> pSurface, PHLWINDOW pWindo
SURF->constraint()->activate();
}

SP<CWLSurfaceResource> CCompositor::vectorToLayerPopupSurface(const Vector2D& pos, CMonitor* monitor, Vector2D* sCoords, PHLLS* ppLayerSurfaceFound) {
SP<CWLSurfaceResource> CCompositor::vectorToLayerPopupSurface(const Vector2D& pos, PHLMONITOR monitor, Vector2D* sCoords, PHLLS* ppLayerSurfaceFound) {
for (auto& lsl : monitor->m_aLayerSurfaceLayers | std::views::reverse) {
for (auto& ls : lsl | std::views::reverse) {
if (ls->fadingOut || !ls->layerSurface || (ls->layerSurface && !ls->layerSurface->mapped) || ls->alpha.value() == 0.f)
Expand Down Expand Up @@ -1628,7 +1619,7 @@ bool CCompositor::isPointOnAnyMonitor(const Vector2D& point) {
return false;
}

bool CCompositor::isPointOnReservedArea(const Vector2D& point, const CMonitor* pMonitor) {
bool CCompositor::isPointOnReservedArea(const Vector2D& point, const PHLMONITOR pMonitor) {
const auto PMONITOR = pMonitor ? pMonitor : getMonitorFromVector(point);

const auto XY1 = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft;
Expand All @@ -1637,19 +1628,19 @@ bool CCompositor::isPointOnReservedArea(const Vector2D& point, const CMonitor* p
return !VECINRECT(point, XY1.x, XY1.y, XY2.x, XY2.y);
}

CMonitor* CCompositor::getMonitorInDirection(const char& dir) {
return this->getMonitorInDirection(m_pLastMonitor.get(), dir);
PHLMONITOR CCompositor::getMonitorInDirection(const char& dir) {
return getMonitorInDirection(m_pLastMonitor.lock(), dir);
}

CMonitor* CCompositor::getMonitorInDirection(CMonitor* pSourceMonitor, const char& dir) {
PHLMONITOR CCompositor::getMonitorInDirection(PHLMONITOR pSourceMonitor, const char& dir) {
if (!pSourceMonitor)
return nullptr;

const auto POSA = pSourceMonitor->vecPosition;
const auto SIZEA = pSourceMonitor->vecSize;

auto longestIntersect = -1;
CMonitor* longestIntersectMonitor = nullptr;
PHLMONITOR longestIntersectMonitor = nullptr;

for (auto& m : m_vMonitors) {
if (m == m_pLastMonitor)
Expand All @@ -1663,7 +1654,7 @@ CMonitor* CCompositor::getMonitorInDirection(CMonitor* pSourceMonitor, const cha
const auto INTERSECTLEN = std::max(0.0, std::min(POSA.y + SIZEA.y, POSB.y + SIZEB.y) - std::max(POSA.y, POSB.y));
if (INTERSECTLEN > longestIntersect) {
longestIntersect = INTERSECTLEN;
longestIntersectMonitor = m.get();
longestIntersectMonitor = m;
}
}
break;
Expand All @@ -1672,7 +1663,7 @@ CMonitor* CCompositor::getMonitorInDirection(CMonitor* pSourceMonitor, const cha
const auto INTERSECTLEN = std::max(0.0, std::min(POSA.y + SIZEA.y, POSB.y + SIZEB.y) - std::max(POSA.y, POSB.y));
if (INTERSECTLEN > longestIntersect) {
longestIntersect = INTERSECTLEN;
longestIntersectMonitor = m.get();
longestIntersectMonitor = m;
}
}
break;
Expand All @@ -1682,7 +1673,7 @@ CMonitor* CCompositor::getMonitorInDirection(CMonitor* pSourceMonitor, const cha
const auto INTERSECTLEN = std::max(0.0, std::min(POSA.x + SIZEA.x, POSB.x + SIZEB.x) - std::max(POSA.x, POSB.x));
if (INTERSECTLEN > longestIntersect) {
longestIntersect = INTERSECTLEN;
longestIntersectMonitor = m.get();
longestIntersectMonitor = m;
}
}
break;
Expand All @@ -1692,7 +1683,7 @@ CMonitor* CCompositor::getMonitorInDirection(CMonitor* pSourceMonitor, const cha
const auto INTERSECTLEN = std::max(0.0, std::min(POSA.x + SIZEA.x, POSB.x + SIZEB.x) - std::max(POSA.x, POSB.x));
if (INTERSECTLEN > longestIntersect) {
longestIntersect = INTERSECTLEN;
longestIntersectMonitor = m.get();
longestIntersectMonitor = m;
}
}
break;
Expand Down Expand Up @@ -1841,7 +1832,7 @@ int CCompositor::getNextAvailableMonitorID(std::string const& name) {
return nextID;
}

void CCompositor::swapActiveWorkspaces(CMonitor* pMonitorA, CMonitor* pMonitorB) {
void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitorB) {

const auto PWORKSPACEA = pMonitorA->activeWorkspace;
const auto PWORKSPACEB = pMonitorB->activeWorkspace;
Expand Down Expand Up @@ -1928,16 +1919,16 @@ void CCompositor::swapActiveWorkspaces(CMonitor* pMonitorA, CMonitor* pMonitorB)
EMIT_HOOK_EVENT("moveWorkspace", (std::vector<std::any>{PWORKSPACEB, pMonitorA}));
}

CMonitor* CCompositor::getMonitorFromString(const std::string& name) {
PHLMONITOR CCompositor::getMonitorFromString(const std::string& name) {
if (name == "current")
return g_pCompositor->m_pLastMonitor.get();
return g_pCompositor->m_pLastMonitor.lock();
else if (isDirection(name))
return getMonitorInDirection(name[0]);
else if (name[0] == '+' || name[0] == '-') {
// relative

if (m_vMonitors.size() == 1)
return m_vMonitors.begin()->get();
return *m_vMonitors.begin();

const auto OFFSET = name[0] == '-' ? name : name.substr(1);

Expand Down Expand Up @@ -1970,7 +1961,7 @@ CMonitor* CCompositor::getMonitorFromString(const std::string& name) {
currentPlace = std::clamp(currentPlace, 0, (int)m_vMonitors.size() - 1);
}

return m_vMonitors[currentPlace].get();
return m_vMonitors.at(currentPlace);
} else if (isNumber(name)) {
// change by ID
int monID = -1;
Expand All @@ -1994,15 +1985,15 @@ CMonitor* CCompositor::getMonitorFromString(const std::string& name) {
continue;

if (m->matchesStaticSelector(name)) {
return m.get();
return m;
}
}
}

return nullptr;
}

void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, CMonitor* pMonitor, bool noWarpCursor) {
void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMonitor, bool noWarpCursor) {

// We trust the monitor to be correct.

Expand Down Expand Up @@ -2077,7 +2068,7 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, CMonitor* pMon
}
}

if (SWITCHINGISACTIVE && POLDMON == g_pCompositor->m_pLastMonitor.get()) { // if it was active, preserve its' status. If it wasn't, don't.
if (SWITCHINGISACTIVE && POLDMON == g_pCompositor->m_pLastMonitor.lock()) { // if it was active, preserve its' status. If it wasn't, don't.
Debug::log(LOG, "moveWorkspaceToMonitor: SWITCHINGISACTIVE, active {} -> {}", pMonitor->activeWorkspaceID(), pWorkspace->m_iID);

if (valid(pMonitor->activeWorkspace)) {
Expand Down Expand Up @@ -2245,11 +2236,11 @@ void CCompositor::updateWorkspaceSpecialRenderData(const int& id) {
}
}

void CCompositor::scheduleFrameForMonitor(CMonitor* pMonitor) {
void CCompositor::scheduleFrameForMonitor(PHLMONITOR pMonitor) {
if ((m_sWLRSession && !m_sWLRSession->active) || !m_bSessionActive)
return;

if (!pMonitor->m_bEnabled)
if (!pMonitor->m_bEnabled || !pMonitor->output)
return;

if (pMonitor->renderingActive)
Expand Down Expand Up @@ -2359,15 +2350,15 @@ void CCompositor::warpCursorTo(const Vector2D& pos, bool force) {

if (*PNOWARPS && !force) {
const auto PMONITORNEW = getMonitorFromVector(pos);
if (PMONITORNEW != m_pLastMonitor.get())
if (PMONITORNEW != m_pLastMonitor.lock())
setActiveMonitor(PMONITORNEW);
return;
}

g_pPointerManager->warpTo(pos);

const auto PMONITORNEW = getMonitorFromVector(pos);
if (PMONITORNEW != m_pLastMonitor.get())
if (PMONITORNEW != m_pLastMonitor.lock())
setActiveMonitor(PMONITORNEW);
}

Expand Down Expand Up @@ -2494,8 +2485,8 @@ void CCompositor::renameWorkspace(const int& id, const std::string& name) {
g_pEventManager->postEvent({"renameworkspace", std::to_string(PWORKSPACE->m_iID) + "," + PWORKSPACE->m_szName});
}

void CCompositor::setActiveMonitor(CMonitor* pMonitor) {
if (m_pLastMonitor.get() == pMonitor)
void CCompositor::setActiveMonitor(PHLMONITOR pMonitor) {
if (m_pLastMonitor == pMonitor)
return;

if (!pMonitor) {
Expand Down Expand Up @@ -2594,13 +2585,13 @@ PHLWINDOW CCompositor::getForceFocus() {
}

void CCompositor::arrangeMonitors() {
static auto* const PXWLFORCESCALEZERO = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("xwayland:force_zero_scaling");
static auto* const PXWLFORCESCALEZERO = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("xwayland:force_zero_scaling");

std::vector<CMonitor*> toArrange;
std::vector<CMonitor*> arranged;
std::vector<PHLMONITOR> toArrange;
std::vector<PHLMONITOR> arranged;

for (auto& m : m_vMonitors)
toArrange.push_back(m.get());
toArrange.push_back(m);

Debug::log(LOG, "arrangeMonitors: {} to arrange", toArrange.size());

Expand Down Expand Up @@ -2697,7 +2688,7 @@ void CCompositor::enterUnsafeState() {

m_bUnsafeState = true;

setActiveMonitor(m_pUnsafeOutput);
setActiveMonitor(m_pUnsafeOutput.lock());
}

void CCompositor::leaveUnsafeState() {
Expand All @@ -2708,10 +2699,10 @@ void CCompositor::leaveUnsafeState() {

m_bUnsafeState = false;

CMonitor* pNewMonitor = nullptr;
PHLMONITOR pNewMonitor = nullptr;
for (auto& pMonitor : m_vMonitors) {
if (pMonitor->output != m_pUnsafeOutput->output) {
pNewMonitor = pMonitor.get();
pNewMonitor = pMonitor;
break;
}
}
Expand All @@ -2722,7 +2713,7 @@ void CCompositor::leaveUnsafeState() {
m_pUnsafeOutput->onDisconnect();

for (auto& m : m_vMonitors) {
scheduleFrameForMonitor(m.get());
scheduleFrameForMonitor(m);
}
}

Expand Down
Loading
Loading