mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-04 22:22:00 -07:00
* xwayland: add destructor to CXWM and free resource the wl_event_resource was running upon destruction of the compositor causing a null pointer segfault in onX11Event so ensure the event is removed upon destruction, also free the memory allocated by xcb_errors_context_new and finally call xcb_disconnect on the connection to free the fd and its memory. * hyprctl: dont leak the fd on destruction add a destructor and properly free the fd on destruction * eventloop: add destructor and free event source properly free the wl_event_source upon destruction.
39 lines
912 B
C++
39 lines
912 B
C++
#pragma once
|
|
|
|
#include <condition_variable>
|
|
#include <mutex>
|
|
#include <thread>
|
|
#include <wayland-server.h>
|
|
|
|
#include "EventLoopTimer.hpp"
|
|
|
|
class CEventLoopManager {
|
|
public:
|
|
CEventLoopManager();
|
|
~CEventLoopManager();
|
|
|
|
void enterLoop(wl_display* display, wl_event_loop* wlEventLoop);
|
|
|
|
// Note: will remove the timer if the ptr is lost.
|
|
void addTimer(SP<CEventLoopTimer> timer);
|
|
void removeTimer(SP<CEventLoopTimer> timer);
|
|
|
|
void onTimerFire();
|
|
|
|
// recalculates timers
|
|
void nudgeTimers();
|
|
|
|
private:
|
|
struct {
|
|
wl_event_loop* loop = nullptr;
|
|
wl_display* display = nullptr;
|
|
wl_event_source* eventSource = nullptr;
|
|
} m_sWayland;
|
|
|
|
struct {
|
|
std::vector<SP<CEventLoopTimer>> timers;
|
|
int timerfd = -1;
|
|
} m_sTimers;
|
|
};
|
|
|
|
inline std::unique_ptr<CEventLoopManager> g_pEventLoopManager; |