internal: fix null deref in setWindowFullscreenInternal when fullscreen state stale (#14725)

This commit is contained in:
neonetizen
2026-06-07 12:24:08 +02:00
committed by Vaxry
parent 71bb405589
commit 5ecd8393a2
3 changed files with 11 additions and 2 deletions
+2
View File
@@ -2196,6 +2196,8 @@ void CCompositor::changeWindowFullscreenModeClient(const PHLWINDOW PWINDOW, cons
// TODO: move fs functions to Desktop::
void CCompositor::setWindowFullscreenInternal(const PHLWINDOW PWINDOW, const eFullscreenMode MODE) {
if (!PWINDOW)
return;
if (PWINDOW->m_ruleApplicator->syncFullscreen().valueOrDefault())
setWindowFullscreenState(PWINDOW, Desktop::View::SFullscreenState{.internal = MODE, .client = MODE});
else
+4
View File
@@ -1820,6 +1820,10 @@ void CWindow::mapWindow() {
Desktop::focusState()->rawMonitorFocus(g_pCompositor->getMonitorFromVector({}));
PMONITOR = Desktop::focusState()->monitor();
}
if (!PMONITOR || (!PMONITOR->m_activeSpecialWorkspace && !PMONITOR->m_activeWorkspace)) {
Log::logger->log(Log::ERR, "mapWindow: no valid monitor/workspace, aborting map for {:x}", (uintptr_t)this);
return;
}
auto PWORKSPACE = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->m_activeSpecialWorkspace : PMONITOR->m_activeWorkspace;
m_monitor = PMONITOR;
m_workspace = PWORKSPACE;
@@ -29,8 +29,11 @@ CScreenshareFrame::~CScreenshareFrame() {
if (m_failed || !m_shared)
return;
if (!m_copied && m_callback)
m_callback(RESULT_NOT_COPIED);
if (!m_copied && m_callback) {
FScreenshareCallback cb;
std::swap(cb, m_callback);
cb(RESULT_NOT_COPIED);
}
}
bool CScreenshareFrame::done() const {