summaryrefslogtreecommitdiff
path: root/src
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
parent8e5ee31f300323331a33bc58123b7fe2f5bee4a6 (diff)
Initialize priority managers before server init
Diffstat (limited to 'src')
-rw-r--r--src/Compositor.cpp129
-rw-r--r--src/Compositor.hpp8
-rw-r--r--src/main.cpp8
-rw-r--r--src/managers/ThreadManager.cpp2
4 files changed, 81 insertions, 66 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
diff --git a/src/Compositor.hpp b/src/Compositor.hpp
index a3587600..c346df0c 100644
--- a/src/Compositor.hpp
+++ b/src/Compositor.hpp
@@ -28,6 +28,12 @@
#include "hyprerror/HyprError.hpp"
#include "plugins/PluginSystem.hpp"
+enum eManagersInitStage
+{
+ STAGE_PRIORITY = 0,
+ STAGE_LATE
+};
+
class CCompositor {
public:
CCompositor();
@@ -93,6 +99,7 @@ class CCompositor {
std::vector<CWindow*> m_vWindowsFadingOut;
std::vector<SLayerSurface*> m_vSurfacesFadingOut;
+ void initServer();
void startCompositor();
void cleanup();
@@ -188,6 +195,7 @@ class CCompositor {
private:
void initAllSignals();
void setRandomSplash();
+ void initManagers(eManagersInitStage stage);
uint64_t m_iHyprlandPID = 0;
};
diff --git a/src/main.cpp b/src/main.cpp
index 9cfe65da..2f2674f2 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -20,6 +20,8 @@ int main(int argc, char** argv) {
setenv("HYPRLAND_CMD", cmd.c_str(), 1);
setenv("XDG_BACKEND", "wayland", 1);
setenv("_JAVA_AWT_WM_NONREPARENTING", "1", 1);
+ setenv("MOZ_ENABLE_WAYLAND", "1", 1);
+ setenv("XDG_CURRENT_DESKTOP", "Hyprland", 1);
// parse some args
std::string configPath;
@@ -50,15 +52,13 @@ int main(int argc, char** argv) {
std::cout << "Welcome to Hyprland!\n";
- const auto LOGWLR = getenv("HYPRLAND_LOG_WLR");
- if (LOGWLR && std::string(LOGWLR) == "1")
- wlr_log_init(WLR_DEBUG, Debug::wlrLog);
-
// let's init the compositor.
// it initializes basic Wayland stuff in the constructor.
g_pCompositor = std::make_unique<CCompositor>();
g_pCompositor->explicitConfigPath = configPath;
+ g_pCompositor->initServer();
+
Debug::log(LOG, "Hyprland init finished.");
// If all's good to go, start.
diff --git a/src/managers/ThreadManager.cpp b/src/managers/ThreadManager.cpp
index a268258f..060e69dd 100644
--- a/src/managers/ThreadManager.cpp
+++ b/src/managers/ThreadManager.cpp
@@ -18,8 +18,6 @@ int handleTimer(void* data) {
}
CThreadManager::CThreadManager() {
- g_pConfigManager->init();
-
HyprCtl::startHyprCtlSocket();
m_esConfigTimer = wl_event_loop_add_timer(g_pCompositor->m_sWLEventLoop, handleTimer, this);