summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2022-07-13 18:18:23 +0200
committerGitHub <noreply@github.com>2022-07-13 18:18:23 +0200
commit6708f3b1334e8b6a966f424fe04713a4e74d5fdb (patch)
tree3635c6d81e43ce033991fdd4b0f06083f07e86e4 /src/Compositor.cpp
parentef7ee2fd0f64a1a0a0088b90d3cbaeb6b3436c32 (diff)
Fixed TTY switching (#364)
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp41
1 files changed, 29 insertions, 12 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index cdcf880c..b0949d89 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -2,6 +2,16 @@
#include "helpers/Splashes.hpp"
#include <random>
+int handleCritSignal(int signo, void* data) {
+ Debug::log(LOG, "Hyprland received signal %d", signo);
+
+ if (signo == SIGTERM || signo == SIGINT || signo == SIGKILL) {
+ g_pCompositor->cleanup();
+ }
+
+ return 0; // everything went fine
+}
+
CCompositor::CCompositor() {
m_szInstanceSignature = GIT_COMMIT_HASH + std::string("_") + std::to_string(time(NULL));
@@ -30,6 +40,12 @@ CCompositor::CCompositor() {
m_sWLDisplay = wl_display_create();
+ m_sWLEventLoop = wl_display_get_event_loop(m_sWLDisplay);
+
+ // register crit signal handler
+ wl_event_loop_add_signal(m_sWLEventLoop, SIGTERM, handleCritSignal, nullptr);
+ //wl_event_loop_add_signal(m_sWLEventLoop, SIGINT, handleCritSignal, nullptr);
+
m_sWLRBackend = wlr_backend_autocreate(m_sWLDisplay);
if (!m_sWLRBackend) {
@@ -131,15 +147,12 @@ CCompositor::CCompositor() {
wlr_xdg_foreign_v2_create(m_sWLDisplay, m_sWLRForeignRegistry);
m_sWLRPointerGestures = wlr_pointer_gestures_v1_create(m_sWLDisplay);
-}
-CCompositor::~CCompositor() {
- cleanupExit();
+ m_sWLRSession = wlr_backend_get_session(m_sWLRBackend);
}
-void handleCritSignal(int signo) {
- g_pCompositor->cleanupExit();
- exit(signo);
+CCompositor::~CCompositor() {
+ cleanup();
}
void CCompositor::setRandomSplash() {
@@ -177,12 +190,10 @@ void CCompositor::initAllSignals() {
addWLSignal(&m_sWLRVirtPtrMgr->events.new_virtual_pointer, &Events::listen_newVirtPtr, m_sWLRVirtPtrMgr, "VirtPtrMgr");
addWLSignal(&m_sWLRRenderer->events.destroy, &Events::listen_RendererDestroy, m_sWLRRenderer, "WLRRenderer");
addWLSignal(&m_sWLRIdleInhibitMgr->events.new_inhibitor, &Events::listen_newIdleInhibitor, m_sWLRIdleInhibitMgr, "WLRIdleInhibitMgr");
-
- signal(SIGINT, handleCritSignal);
- signal(SIGTERM, handleCritSignal);
+ addWLSignal(&m_sWLRSession->events.active, &Events::listen_sessionActive, m_sWLRSession, "Session");
}
-void CCompositor::cleanupExit() {
+void CCompositor::cleanup() {
if (!m_sWLDisplay)
return;
@@ -197,8 +208,7 @@ void CCompositor::cleanupExit() {
g_pXWaylandManager->m_sWLRXWayland = nullptr;
}
- wl_display_destroy_clients(m_sWLDisplay);
- wl_display_destroy(m_sWLDisplay);
+ wl_display_terminate(m_sWLDisplay);
m_sWLDisplay = nullptr;
}
@@ -1334,3 +1344,10 @@ void CCompositor::updateWorkspaceWindowDecos(const int& id) {
w->updateWindowDecos();
}
}
+
+void CCompositor::scheduleFrameForMonitor(SMonitor* pMonitor) {
+ if (!m_sWLRSession->active || !m_bSessionActive)
+ return;
+
+ wlr_output_schedule_frame(pMonitor->output);
+} \ No newline at end of file