From 5ea20cd04107c02d9de8641c0fb34ebfedbf9684 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sat, 19 Mar 2022 13:54:24 +0100 Subject: [PATCH] fixed some oopsies --- src/Compositor.cpp | 10 ++++++++++ src/events/Events.cpp | 7 +++---- src/helpers/Monitor.hpp | 3 ++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 83cce2a0..7680532d 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -53,6 +53,14 @@ CCompositor::CCompositor() { m_sWLRPresentation = wlr_presentation_create(m_sWLDisplay, m_sWLRBackend); m_sWLRIdle = wlr_idle_create(m_sWLDisplay); + + m_sWLRLayerShell = wlr_layer_shell_v1_create(m_sWLDisplay); + + wlr_server_decoration_manager_set_default_mode(wlr_server_decoration_manager_create(m_sWLDisplay), WLR_SERVER_DECORATION_MANAGER_MODE_SERVER); + wlr_xdg_decoration_manager_v1_create(m_sWLDisplay); + + wlr_xdg_output_manager_v1_create(m_sWLDisplay, m_sWLROutputLayout); + m_sWLROutputMgr = wlr_output_manager_v1_create(m_sWLDisplay); } CCompositor::~CCompositor() { @@ -70,6 +78,8 @@ void CCompositor::initAllSignals() { wl_signal_add(&m_sWLRBackend->events.new_input, &Events::listen_newInput); wl_signal_add(&m_sWLRSeat->events.request_set_cursor, &Events::listen_requestMouse); wl_signal_add(&m_sWLRSeat->events.request_set_selection, &Events::listen_requestSetSel); + wl_signal_add(&m_sWLRLayerShell->events.new_surface, &Events::listen_newLayerSurface); + wl_signal_add(&m_sWLROutputLayout->events.change, &Events::listen_change); } void CCompositor::startCompositor() { diff --git a/src/events/Events.cpp b/src/events/Events.cpp index 947e073f..c904f150 100644 --- a/src/events/Events.cpp +++ b/src/events/Events.cpp @@ -120,7 +120,7 @@ void Events::listener_monitorDestroy(wl_listener* listener, void* data) { void Events::listener_newLayerSurface(wl_listener* listener, void* data) { const auto WLRLAYERSURFACE = (wlr_layer_surface_v1*)data; - const auto PMONITOR = (SMonitor*)WLRLAYERSURFACE->output->data; + const auto PMONITOR = (SMonitor*)(WLRLAYERSURFACE->output->data ? WLRLAYERSURFACE->output->data : g_pCompositor->getMonitorFromCursor()); PMONITOR->m_aLayerSurfaceLists[WLRLAYERSURFACE->pending.layer].push_back(SLayerSurface()); SLayerSurface* layerSurface = &PMONITOR->m_aLayerSurfaceLists[WLRLAYERSURFACE->pending.layer].back(); @@ -147,7 +147,7 @@ void Events::listener_destroyLayerSurface(wl_listener* listener, void* data) { if (layersurface->layerSurface->mapped) layersurface->layerSurface->mapped = 0; - wl_list_remove(&layersurface->link); + wl_list_remove(&layersurface->listen_destroyLayerSurface.link); wl_list_remove(&layersurface->listen_mapLayerSurface.link); wl_list_remove(&layersurface->listen_unmapLayerSurface.link); @@ -160,8 +160,7 @@ void Events::listener_destroyLayerSurface(wl_listener* listener, void* data) { // remove the layersurface as it's not used anymore PMONITOR->m_aLayerSurfaceLists[layersurface->layerSurface->pending.layer].remove(*layersurface); - free(layersurface); - + Debug::log(LOG, "LayerSurface %x destroyed", layersurface); } diff --git a/src/helpers/Monitor.hpp b/src/helpers/Monitor.hpp index a121500c..b93779fc 100644 --- a/src/helpers/Monitor.hpp +++ b/src/helpers/Monitor.hpp @@ -4,6 +4,7 @@ #include #include "WLClasses.hpp" #include +#include struct SMonitor { Vector2D vecPosition = Vector2D(0,0); @@ -22,7 +23,7 @@ struct SMonitor { wlr_output* output = nullptr; // Double-linked list because we need to have constant mem addresses for signals - std::array,4> m_aLayerSurfaceLists; + std::array, 4> m_aLayerSurfaceLists; DYNLISTENER(monitorFrame); DYNLISTENER(monitorDestroy);