Fix chrome crash when moved between monitors

Backport patch from https://github.com/hyprwm/Hyprland/pull/11877
This commit is contained in:
Chow Loong Jin 2025-09-30 12:37:06 +08:00
parent 4e664a702a
commit e90dbf54fc
2 changed files with 97 additions and 0 deletions

View File

@ -0,0 +1,96 @@
From f6c8cbc4f5a8f395a75076cbf8f87d8c47d64390 Mon Sep 17 00:00:00 2001
From: UjinT34 <ujint34@mail.ru>
Date: Tue, 30 Sep 2025 09:54:54 +0300
Subject: [PATCH] remove unneeded preferred ref
Origin: https://github.com/hyprwm/Hyprland/pull/11877
Bug: https://github.com/hyprwm/Hyprland/discussions/11843
---
src/protocols/ColorManagement.cpp | 27 +++++++--------------------
src/protocols/ColorManagement.hpp | 1 -
2 files changed, 7 insertions(+), 21 deletions(-)
diff --git a/src/protocols/ColorManagement.cpp b/src/protocols/ColorManagement.cpp
index d126fea2785..aee3b9f0e82 100644
--- a/src/protocols/ColorManagement.cpp
+++ b/src/protocols/ColorManagement.cpp
@@ -355,14 +355,10 @@ CColorManagementFeedbackSurface::CColorManagementFeedbackSurface(SP<CWpColorMana
m_resource->setDestroy([this](CWpColorManagementSurfaceFeedbackV1* r) {
LOGM(TRACE, "Destroy wp cm feedback surface {}", (uintptr_t)m_surface);
- if (m_currentPreferred.valid())
- PROTO::colorManagement->destroyResource(m_currentPreferred.get());
PROTO::colorManagement->destroyResource(this);
});
m_resource->setOnDestroy([this](CWpColorManagementSurfaceFeedbackV1* r) {
LOGM(TRACE, "Destroy wp cm feedback surface {}", (uintptr_t)m_surface);
- if (m_currentPreferred.valid())
- PROTO::colorManagement->destroyResource(m_currentPreferred.get());
PROTO::colorManagement->destroyResource(this);
});
@@ -374,9 +370,6 @@ CColorManagementFeedbackSurface::CColorManagementFeedbackSurface(SP<CWpColorMana
return;
}
- if (m_currentPreferred.valid())
- PROTO::colorManagement->destroyResource(m_currentPreferred.get());
-
const auto RESOURCE = PROTO::colorManagement->m_imageDescriptions.emplace_back(
makeShared<CColorManagementImageDescription>(makeShared<CWpImageDescriptionV1>(r->client(), r->version(), id), true));
@@ -386,11 +379,10 @@ CColorManagementFeedbackSurface::CColorManagementFeedbackSurface(SP<CWpColorMana
return;
}
- RESOURCE->m_self = RESOURCE;
- m_currentPreferred = RESOURCE;
+ RESOURCE->m_self = RESOURCE;
+ RESOURCE->m_settings = m_surface->getPreferredImageDescription();
- m_currentPreferred->m_settings = m_surface->getPreferredImageDescription();
- RESOURCE->resource()->sendReady(m_currentPreferred->m_settings.updateId());
+ RESOURCE->resource()->sendReady(RESOURCE->m_settings.updateId());
});
m_resource->setGetPreferredParametric([this](CWpColorManagementSurfaceFeedbackV1* r, uint32_t id) {
@@ -401,9 +393,6 @@ CColorManagementFeedbackSurface::CColorManagementFeedbackSurface(SP<CWpColorMana
return;
}
- if (m_currentPreferred.valid())
- PROTO::colorManagement->destroyResource(m_currentPreferred.get());
-
const auto RESOURCE = PROTO::colorManagement->m_imageDescriptions.emplace_back(
makeShared<CColorManagementImageDescription>(makeShared<CWpImageDescriptionV1>(r->client(), r->version(), id), true));
@@ -413,13 +402,11 @@ CColorManagementFeedbackSurface::CColorManagementFeedbackSurface(SP<CWpColorMana
return;
}
- RESOURCE->m_self = RESOURCE;
- m_currentPreferred = RESOURCE;
-
- m_currentPreferred->m_settings = m_surface->getPreferredImageDescription();
- m_currentPreferredId = m_currentPreferred->m_settings.updateId();
+ RESOURCE->m_self = RESOURCE;
+ RESOURCE->m_settings = m_surface->getPreferredImageDescription();
+ m_currentPreferredId = RESOURCE->m_settings.updateId();
- if (!PROTO::colorManagement->m_debug && m_currentPreferred->m_settings.icc.fd >= 0) {
+ if (!PROTO::colorManagement->m_debug && RESOURCE->m_settings.icc.fd >= 0) {
LOGM(ERR, "FIXME: parse icc profile");
r->error(WP_COLOR_MANAGER_V1_ERROR_UNSUPPORTED_FEATURE, "ICC profiles are not supported");
return;
diff --git a/src/protocols/ColorManagement.hpp b/src/protocols/ColorManagement.hpp
index 4a085b16b38..15762530790 100644
--- a/src/protocols/ColorManagement.hpp
+++ b/src/protocols/ColorManagement.hpp
@@ -91,7 +91,6 @@ class CColorManagementFeedbackSurface {
SP<CWpColorManagementSurfaceFeedbackV1> m_resource;
wl_client* m_client = nullptr;
- WP<CColorManagementImageDescription> m_currentPreferred;
uint32_t m_currentPreferredId = 0;
struct {

View File

@ -4,3 +4,4 @@
004-gcc-port.patch
005-libcpp-port.patch
006-hyprpm-global-headers.patch
007-backport-cm-chrome-crash-fix.patch