From 15fc0892c7cd8385bfa896fda4e79c10af48cc06 Mon Sep 17 00:00:00 2001 From: vaxerski Date: Wed, 10 Aug 2022 13:44:04 +0200 Subject: [PATCH] further fixes to monitor disabling on launch --- src/events/Monitors.cpp | 7 +++---- src/helpers/Monitor.cpp | 18 +++++++++++++++--- src/helpers/Monitor.hpp | 1 + 3 files changed, 19 insertions(+), 7 deletions(-) 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