summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2023-03-05 13:37:21 +0000
committervaxerski <43317083+vaxerski@users.noreply.github.com>2023-03-05 13:37:21 +0000
commitdc7d783d1439b92b16bfe1851c2b699e7c7267e0 (patch)
tree2af2c88d1588d45a56365f489b6be0effede4441 /src/Compositor.cpp
parent8e5ee31f300323331a33bc58123b7fe2f5bee4a6 (diff)
Initialize priority managers before server init
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp129
1 files changed, 69 insertions, 60 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index aae6328e..66e23b67 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -35,8 +35,6 @@ void handleUnrecoverableSignal(int sig) {
}
CCompositor::CCompositor() {
- wlr_log_init(WLR_INFO, NULL);
-
m_iHyprlandPID = getpid();
m_szInstanceSignature = GIT_COMMIT_HASH + std::string("_") + std::to_string(time(NULL));
@@ -72,7 +70,21 @@ CCompositor::CCompositor() {
setRandomSplash();
Debug::log(LOG, "\nCurrent splash: %s\n\n", m_szCurrentSplash.c_str());
+}
+
+CCompositor::~CCompositor() {
+ cleanup();
+}
+void CCompositor::setRandomSplash() {
+ std::random_device dev;
+ std::mt19937 engine(dev());
+ std::uniform_int_distribution<> distribution(0, SPLASHES.size() - 1);
+
+ m_szCurrentSplash = SPLASHES[distribution(engine)];
+}
+
+void CCompositor::initServer() {
m_sWLDisplay = wl_display_create();
m_sWLEventLoop = wl_display_get_event_loop(m_sWLDisplay);
@@ -83,6 +95,14 @@ CCompositor::CCompositor() {
signal(SIGABRT, handleUnrecoverableSignal);
//wl_event_loop_add_signal(m_sWLEventLoop, SIGINT, handleCritSignal, nullptr);
+ initManagers(STAGE_PRIORITY);
+
+ wlr_log_init(WLR_INFO, NULL);
+
+ const auto LOGWLR = getenv("HYPRLAND_LOG_WLR");
+ if (LOGWLR && std::string(LOGWLR) == "1")
+ wlr_log_init(WLR_DEBUG, Debug::wlrLog);
+
m_sWLRBackend = wlr_backend_autocreate(m_sWLDisplay, &m_sWLRSession);
if (!m_sWLRBackend) {
@@ -226,18 +246,8 @@ CCompositor::CCompositor() {
wlr_single_pixel_buffer_manager_v1_create(m_sWLDisplay);
wlr_multi_backend_add(m_sWLRBackend, m_sWLRHeadlessBackend);
-}
-
-CCompositor::~CCompositor() {
- cleanup();
-}
-
-void CCompositor::setRandomSplash() {
- std::random_device dev;
- std::mt19937 engine(dev());
- std::uniform_int_distribution<> distribution(0, SPLASHES.size() - 1);
- m_szCurrentSplash = SPLASHES[distribution(engine)];
+ initManagers(STAGE_LATE);
}
void CCompositor::initAllSignals() {
@@ -337,70 +347,69 @@ void CCompositor::cleanup() {
// the PID should not be reused.
}
-void CCompositor::startCompositor() {
- // Init all the managers BEFORE we start with the wayland server so that ALL of the stuff is initialized
- // properly and we dont get any bad mem reads.
- //
-
- Debug::log(LOG, "Creating the HookSystem!");
- g_pHookSystem = std::make_unique<CHookSystemManager>();
-
- Debug::log(LOG, "Creating the KeybindManager!");
- g_pKeybindManager = std::make_unique<CKeybindManager>();
+void CCompositor::initManagers(eManagersInitStage stage) {
+ switch (stage) {
+ case STAGE_PRIORITY: {
+ Debug::log(LOG, "Creating the HookSystem!");
+ g_pHookSystem = std::make_unique<CHookSystemManager>();
- Debug::log(LOG, "Creating the AnimationManager!");
- g_pAnimationManager = std::make_unique<CAnimationManager>();
+ Debug::log(LOG, "Creating the KeybindManager!");
+ g_pKeybindManager = std::make_unique<CKeybindManager>();
- Debug::log(LOG, "Creating the LayoutManager!");
- g_pLayoutManager = std::make_unique<CLayoutManager>();
+ Debug::log(LOG, "Creating the AnimationManager!");
+ g_pAnimationManager = std::make_unique<CAnimationManager>();
- Debug::log(LOG, "Creating the ConfigManager!");
- g_pConfigManager = std::make_unique<CConfigManager>();
+ Debug::log(LOG, "Creating the ConfigManager!");
+ g_pConfigManager = std::make_unique<CConfigManager>();
- Debug::log(LOG, "Creating the CHyprError!");
- g_pHyprError = std::make_unique<CHyprError>();
+ Debug::log(LOG, "Creating the CHyprError!");
+ g_pHyprError = std::make_unique<CHyprError>();
- Debug::log(LOG, "Creating the ThreadManager!");
- g_pThreadManager = std::make_unique<CThreadManager>();
+ Debug::log(LOG, "Creating the LayoutManager!");
+ g_pLayoutManager = std::make_unique<CLayoutManager>();
- Debug::log(LOG, "Creating the InputManager!");
- g_pInputManager = std::make_unique<CInputManager>();
+ g_pConfigManager->init();
+ } break;
+ case STAGE_LATE: {
+ Debug::log(LOG, "Creating the ThreadManager!");
+ g_pThreadManager = std::make_unique<CThreadManager>();
- Debug::log(LOG, "Creating the CHyprOpenGLImpl!");
- g_pHyprOpenGL = std::make_unique<CHyprOpenGLImpl>();
+ Debug::log(LOG, "Creating the InputManager!");
+ g_pInputManager = std::make_unique<CInputManager>();
- Debug::log(LOG, "Creating the HyprRenderer!");
- g_pHyprRenderer = std::make_unique<CHyprRenderer>();
+ Debug::log(LOG, "Creating the CHyprOpenGLImpl!");
+ g_pHyprOpenGL = std::make_unique<CHyprOpenGLImpl>();
- Debug::log(LOG, "Creating the XWaylandManager!");
- g_pXWaylandManager = std::make_unique<CHyprXWaylandManager>();
+ Debug::log(LOG, "Creating the HyprRenderer!");
+ g_pHyprRenderer = std::make_unique<CHyprRenderer>();
- Debug::log(LOG, "Creating the ProtocolManager!");
- g_pProtocolManager = std::make_unique<CProtocolManager>();
+ Debug::log(LOG, "Creating the XWaylandManager!");
+ g_pXWaylandManager = std::make_unique<CHyprXWaylandManager>();
- Debug::log(LOG, "Creating the SessionLockManager!");
- g_pSessionLockManager = std::make_unique<CSessionLockManager>();
+ Debug::log(LOG, "Creating the ProtocolManager!");
+ g_pProtocolManager = std::make_unique<CProtocolManager>();
- Debug::log(LOG, "Creating the EventManager!");
- g_pEventManager = std::make_unique<CEventManager>();
- g_pEventManager->startThread();
+ Debug::log(LOG, "Creating the SessionLockManager!");
+ g_pSessionLockManager = std::make_unique<CSessionLockManager>();
- Debug::log(LOG, "Creating the HyprDebugOverlay!");
- g_pDebugOverlay = std::make_unique<CHyprDebugOverlay>();
+ Debug::log(LOG, "Creating the EventManager!");
+ g_pEventManager = std::make_unique<CEventManager>();
+ g_pEventManager->startThread();
- Debug::log(LOG, "Creating the HyprNotificationOverlay!");
- g_pHyprNotificationOverlay = std::make_unique<CHyprNotificationOverlay>();
+ Debug::log(LOG, "Creating the HyprDebugOverlay!");
+ g_pDebugOverlay = std::make_unique<CHyprDebugOverlay>();
- Debug::log(LOG, "Creating the PluginSystem!");
- g_pPluginSystem = std::make_unique<CPluginSystem>();
- //
- //
+ Debug::log(LOG, "Creating the HyprNotificationOverlay!");
+ g_pHyprNotificationOverlay = std::make_unique<CHyprNotificationOverlay>();
- // firefox wont detect wl
- setenv("MOZ_ENABLE_WAYLAND", "1", 1);
-
- setenv("XDG_CURRENT_DESKTOP", "Hyprland", 1);
+ Debug::log(LOG, "Creating the PluginSystem!");
+ g_pPluginSystem = std::make_unique<CPluginSystem>();
+ } break;
+ default: UNREACHABLE();
+ }
+}
+void CCompositor::startCompositor() {
initAllSignals();
// get socket, avoid using 0