From f1bd62806e538fa2bfa7899c2b2ad02d6a5ca2db Mon Sep 17 00:00:00 2001 From: maround95 <39220886+maround95@users.noreply.github.com> Date: Thu, 23 Jan 2025 13:08:19 +0200 Subject: core/renderer: Add GPU hotplug support (#8980) --- src/managers/eventLoop/EventLoopManager.hpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'src/managers/eventLoop/EventLoopManager.hpp') diff --git a/src/managers/eventLoop/EventLoopManager.hpp b/src/managers/eventLoop/EventLoopManager.hpp index 90402de2..e1c243d3 100644 --- a/src/managers/eventLoop/EventLoopManager.hpp +++ b/src/managers/eventLoop/EventLoopManager.hpp @@ -1,9 +1,11 @@ #pragma once #include +#include #include #include #include +#include "helpers/signal/Signal.hpp" #include "EventLoopTimer.hpp" @@ -36,11 +38,18 @@ class CEventLoopManager { }; private: + // Manages the event sources after AQ pollFDs change. + void syncPollFDs(); + + struct SEventSourceData { + SP pollFD; + wl_event_source* eventSource = nullptr; + }; + struct { - wl_event_loop* loop = nullptr; - wl_display* display = nullptr; - wl_event_source* eventSource = nullptr; - std::vector aqEventSources; + wl_event_loop* loop = nullptr; + wl_display* display = nullptr; + wl_event_source* eventSource = nullptr; } m_sWayland; struct { @@ -48,12 +57,16 @@ class CEventLoopManager { int timerfd = -1; } m_sTimers; - SIdleData m_sIdle; - std::vector> aqPollFDs; + SIdleData m_sIdle; + std::map aqEventSources; + + struct { + CHyprSignalListener pollFDsChanged; + } m_sListeners; - wl_event_source* m_configWatcherInotifySource = nullptr; + wl_event_source* m_configWatcherInotifySource = nullptr; friend class CSyncTimeline; }; -inline std::unique_ptr g_pEventLoopManager; \ No newline at end of file +inline std::unique_ptr g_pEventLoopManager; -- cgit v1.2.3