diff --git a/src/events/Monitors.cpp b/src/events/Monitors.cpp index ee831187..bb8c2b96 100644 --- a/src/events/Monitors.cpp +++ b/src/events/Monitors.cpp @@ -64,18 +64,17 @@ void Events::listener_newOutput(wl_listener* listener, void* data) { PNEWMONITOR->ID = g_pCompositor->getNextAvailableMonitorID(); - wlr_output_init_render(OUTPUT, g_pCompositor->m_sWLRAllocator, g_pCompositor->m_sWLRRenderer); - PNEWMONITOR->output = OUTPUT; PNEWMONITOR->m_pThisWrap = PNEWMONITORWRAP; PNEWMONITOR->onConnect(false); - if (!pMostHzMonitor || PNEWMONITOR->refreshRate > pMostHzMonitor->refreshRate) + if ((!pMostHzMonitor || PNEWMONITOR->refreshRate > pMostHzMonitor->refreshRate) && PNEWMONITOR->m_bEnabled) pMostHzMonitor = PNEWMONITOR; // ready to process cuz we have a monitor - g_pCompositor->m_bReadyToProcess = true; + if (PNEWMONITOR->m_bEnabled) + g_pCompositor->m_bReadyToProcess = true; } void Events::listener_monitorFrame(void* owner, void* data) { diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index b4d6d395..78e7d49b 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -6,6 +6,8 @@ void CMonitor::onConnect(bool noRule) { if (m_bEnabled) return; + szName = output->name; + // get monitor rule that matches SMonitorRule monitorRule = g_pConfigManager->getMonitorRuleFor(output->name); @@ -37,9 +39,16 @@ void CMonitor::onConnect(bool noRule) { if (PREFSTATE) wlr_output_set_mode(output, PREFSTATE); + else + Debug::log(WARN, "No mode found for disabled output %s", output->name) wlr_output_enable(output, 0); - wlr_output_commit(output); + + if (!wlr_output_commit(output)) { + Debug::log(ERR, "Couldn't commit disabled state on output %s", output->name); + } + + Events::listener_change(nullptr, nullptr); m_bEnabled = false; @@ -47,6 +56,11 @@ void CMonitor::onConnect(bool noRule) { return; } + if (!m_bRenderingInitPassed) { + wlr_output_init_render(output, g_pCompositor->m_sWLRAllocator, g_pCompositor->m_sWLRRenderer); + m_bRenderingInitPassed = true; + } + if (!m_pThisWrap) { // find the wrap @@ -64,8 +78,6 @@ void CMonitor::onConnect(bool noRule) { m_bEnabled = true; - szName = output->name; - wlr_output_set_scale(output, monitorRule.scale); wlr_xcursor_manager_load(g_pCompositor->m_sWLRXCursorMgr, monitorRule.scale); wlr_output_set_transform(output, WL_OUTPUT_TRANSFORM_NORMAL); // TODO: support other transforms diff --git a/src/helpers/Monitor.hpp b/src/helpers/Monitor.hpp index 6f54aa14..5b8b02d4 100644 --- a/src/helpers/Monitor.hpp +++ b/src/helpers/Monitor.hpp @@ -58,6 +58,7 @@ public: std::shared_ptr* m_pThisWrap = nullptr; bool m_bEnabled = false; + bool m_bRenderingInitPassed = false; // For the list lookup