Fix chrome crash when moved between monitors
Backport patch from https://github.com/hyprwm/Hyprland/pull/11877
This commit is contained in:
parent
4e664a702a
commit
e90dbf54fc
|
|
@ -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 {
|
||||||
|
|
@ -4,3 +4,4 @@
|
||||||
004-gcc-port.patch
|
004-gcc-port.patch
|
||||||
005-libcpp-port.patch
|
005-libcpp-port.patch
|
||||||
006-hyprpm-global-headers.patch
|
006-hyprpm-global-headers.patch
|
||||||
|
007-backport-cm-chrome-crash-fix.patch
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue