mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-05-19 08:30:22 -07:00
internal: Replace monitor rule when disabling head. (#6136)
Closes #5978
This commit is contained in:
parent
255272ea18
commit
eea0a6a704
@ -1264,6 +1264,18 @@ void CConfigManager::appendMonitorRule(const SMonitorRule& r) {
|
|||||||
m_dMonitorRules.emplace_back(r);
|
m_dMonitorRules.emplace_back(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CConfigManager::replaceMonitorRule(const SMonitorRule& newrule) {
|
||||||
|
// Looks for an existing monitor rule (compared by name).
|
||||||
|
// If the rule exists, it is replaced with the input rule.
|
||||||
|
for (auto& r : m_dMonitorRules) {
|
||||||
|
if (r.name == newrule.name) {
|
||||||
|
r = newrule;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void CConfigManager::performMonitorReload() {
|
void CConfigManager::performMonitorReload() {
|
||||||
|
|
||||||
bool overAgain = false;
|
bool overAgain = false;
|
||||||
|
@ -128,6 +128,7 @@ class CConfigManager {
|
|||||||
|
|
||||||
void performMonitorReload();
|
void performMonitorReload();
|
||||||
void appendMonitorRule(const SMonitorRule&);
|
void appendMonitorRule(const SMonitorRule&);
|
||||||
|
bool replaceMonitorRule(const SMonitorRule&);
|
||||||
bool m_bWantsMonitorReload = false;
|
bool m_bWantsMonitorReload = false;
|
||||||
bool m_bForceReload = false;
|
bool m_bForceReload = false;
|
||||||
bool m_bNoMonitorReload = false;
|
bool m_bNoMonitorReload = false;
|
||||||
|
@ -106,6 +106,9 @@ COutputHead::COutputHead(SP<CZwlrOutputHeadV1> resource_, CMonitor* pMonitor_) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
pMonitor = nullptr;
|
pMonitor = nullptr;
|
||||||
|
for (auto& m : PROTO::outputManagement->m_vManagers) {
|
||||||
|
m->sendDone();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
listeners.monitorModeChange = pMonitor->events.modeChanged.registerListener([this](std::any d) { updateMode(); });
|
listeners.monitorModeChange = pMonitor->events.modeChanged.registerListener([this](std::any d) { updateMode(); });
|
||||||
@ -305,6 +308,8 @@ COutputConfiguration::COutputConfiguration(SP<CZwlrOutputConfigurationV1> resour
|
|||||||
LOGM(LOG, "disableHead on {}", PMONITOR->szName);
|
LOGM(LOG, "disableHead on {}", PMONITOR->szName);
|
||||||
|
|
||||||
PMONITOR->activeMonitorRule.disabled = true;
|
PMONITOR->activeMonitorRule.disabled = true;
|
||||||
|
if (!g_pConfigManager->replaceMonitorRule(PMONITOR->activeMonitorRule))
|
||||||
|
g_pConfigManager->appendMonitorRule(PMONITOR->activeMonitorRule);
|
||||||
g_pHyprRenderer->applyMonitorRule(PMONITOR, &PMONITOR->activeMonitorRule, false);
|
g_pHyprRenderer->applyMonitorRule(PMONITOR, &PMONITOR->activeMonitorRule, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -356,6 +361,7 @@ bool COutputConfiguration::applyTestConfiguration(bool test) {
|
|||||||
|
|
||||||
SMonitorRule newRule = PMONITOR->activeMonitorRule;
|
SMonitorRule newRule = PMONITOR->activeMonitorRule;
|
||||||
newRule.name = PMONITOR->szName;
|
newRule.name = PMONITOR->szName;
|
||||||
|
newRule.disabled = false;
|
||||||
|
|
||||||
if (head->committedProperties & COutputConfigurationHead::eCommittedProperties::OUTPUT_HEAD_COMMITTED_MODE) {
|
if (head->committedProperties & COutputConfigurationHead::eCommittedProperties::OUTPUT_HEAD_COMMITTED_MODE) {
|
||||||
newRule.resolution = {head->state.mode->getMode()->width, head->state.mode->getMode()->height};
|
newRule.resolution = {head->state.mode->getMode()->width, head->state.mode->getMode()->height};
|
||||||
@ -380,7 +386,8 @@ bool COutputConfiguration::applyTestConfiguration(bool test) {
|
|||||||
// reset properties for next set.
|
// reset properties for next set.
|
||||||
head->committedProperties = 0;
|
head->committedProperties = 0;
|
||||||
|
|
||||||
g_pConfigManager->appendMonitorRule(newRule);
|
if (!g_pConfigManager->replaceMonitorRule(newRule))
|
||||||
|
g_pConfigManager->appendMonitorRule(newRule);
|
||||||
g_pConfigManager->m_bWantsMonitorReload = true;
|
g_pConfigManager->m_bWantsMonitorReload = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user