summaryrefslogtreecommitdiff
path: root/src/events/Events.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-19 20:56:19 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-19 20:56:19 +0100
commit1a298257c9d7d0e140e3af60f873a71a91dd05ed (patch)
tree465631a4363bc957d4a0fa2a4b435787015ecba9 /src/events/Events.cpp
parentcf76b9060636c03e495fe522f7b4c251327adc98 (diff)
fix xwaylabnd too, stuff
Diffstat (limited to 'src/events/Events.cpp')
-rw-r--r--src/events/Events.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/events/Events.cpp b/src/events/Events.cpp
index 668d31bb..b21f58be 100644
--- a/src/events/Events.cpp
+++ b/src/events/Events.cpp
@@ -120,6 +120,10 @@ 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;
+ if (!WLRLAYERSURFACE->output->data) {
+ Debug::log(LOG, "New LayerSurface has no preferred monitor.");
+ }
+
const auto PMONITOR = (SMonitor*)(WLRLAYERSURFACE->output->data ? WLRLAYERSURFACE->output->data : g_pCompositor->getMonitorFromCursor());
PMONITOR->m_aLayerSurfaceLists[WLRLAYERSURFACE->pending.layer].push_back(new SLayerSurface());
SLayerSurface* layerSurface = PMONITOR->m_aLayerSurfaceLists[WLRLAYERSURFACE->pending.layer].back();
@@ -138,7 +142,7 @@ void Events::listener_newLayerSurface(wl_listener* listener, void* data) {
layerSurface->monitorID = PMONITOR->ID;
// todo: arrange
- Debug::log(LOG, "LayerSurface %x created", layerSurface);
+ Debug::log(LOG, "LayerSurface %x created on monitor %s", layerSurface, PMONITOR->szName.c_str());
}
void Events::listener_destroyLayerSurface(wl_listener* listener, void* data) {
@@ -185,11 +189,20 @@ void Events::listener_unmapLayerSurface(wl_listener* listener, void* data) {
void Events::listener_commitLayerSurface(wl_listener* listener, void* data) {
SLayerSurface* layersurface = wl_container_of(listener, layersurface, listen_commitLayerSurface);
- const auto PMONITOR = g_pCompositor->getMonitorFromID(layersurface->monitorID);
-
if (!layersurface->layerSurface->output)
return;
+ const auto PMONITOR = g_pCompositor->getMonitorFromOutput(layersurface->layerSurface->output);
+
+ // fix if it changed its mon
+ if (layersurface->monitorID != PMONITOR->ID) {
+ const auto POLDMON = g_pCompositor->getMonitorFromID(layersurface->monitorID);
+ POLDMON->m_aLayerSurfaceLists[layersurface->layer].remove(layersurface);
+ PMONITOR->m_aLayerSurfaceLists[layersurface->layer].push_back(layersurface);
+ layersurface->monitorID = PMONITOR->ID;
+ g_pLayoutManager->getCurrentLayout()->recalculateMonitor(POLDMON->ID);
+ }
+
g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID);
if (layersurface->layer != layersurface->layerSurface->current.layer) {
@@ -197,6 +210,8 @@ void Events::listener_commitLayerSurface(wl_listener* listener, void* data) {
PMONITOR->m_aLayerSurfaceLists[layersurface->layerSurface->current.layer].push_back(layersurface);
layersurface->layer = layersurface->layerSurface->current.layer;
}
+
+ g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PMONITOR->ID);
}
void Events::listener_mapWindow(wl_listener* listener, void* data) {