kiran-cc-daemon/0003-fix-display-Fixed-the-display-configuration-applicat.patch

84 lines
3.9 KiB
Diff
Raw Normal View History

From e4485a62f8f8f6bb0695d6a1510b05e774409144 Mon Sep 17 00:00:00 2001
From: tangjie02 <tangjie02@kylinsec.com.cn>
Date: Mon, 5 Sep 2022 11:52:45 +0800
Subject: [PATCH 3/3] fix(display): Fixed the display configuration
application failure caused by output name matching failure
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
修复由于output name匹配失败导致显示配置应用失败问题
Signed-off-by: tangjie02 <tangjie02@kylinsec.com.cn>
---
include/error-i.h | 1 +
lib/base/error.cpp | 1 +
plugins/display/display-manager.cpp | 16 ++++++++++------
3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/include/error-i.h b/include/error-i.h
index c67b604..61aebac 100644
--- a/include/error-i.h
+++ b/include/error-i.h
@@ -159,6 +159,7 @@ extern "C"
ERROR_DISPLAY_NOTFOUND_MODE_BY_ID,
ERROR_DISPLAY_UNKNOWN_ROTATION_TYPE,
ERROR_DISPLAY_UNKNOWN_REFLECT_TYPE,
+ ERROR_DISPLAY_NO_ENABLED_MONITOR,
// Greeter
ERROR_GREETER_SYNC_TO_FILE_FAILED_1 = 0x190000,
diff --git a/lib/base/error.cpp b/lib/base/error.cpp
index 656e732..874277c 100644
--- a/lib/base/error.cpp
+++ b/lib/base/error.cpp
@@ -392,6 +392,7 @@ std::string CCError::get_error_desc(CCErrorCode error_code, bool attach_error_co
case CCErrorCode::ERROR_ACCOUNTS_USER_AUTH_DEL_DATA_FAILED:
case CCErrorCode::ERROR_DISPLAY_SAVE_CREATE_FILE_FAILED:
case CCErrorCode::ERROR_DISPLAY_WRITE_CONF_FILE_FAILED:
+ case CCErrorCode::ERROR_DISPLAY_NO_ENABLED_MONITOR:
case CCErrorCode::ERROR_APPEARANCE_SET_BACKGROUND_FAILED:
case CCErrorCode::ERROR_APPEARANCE_SET_LOCKSCREEN_BACKGROUND_FAILED:
case CCErrorCode::ERROR_SYSTEMINFO_JSON_ASSIGN_FAILED:
diff --git a/plugins/display/display-manager.cpp b/plugins/display/display-manager.cpp
index 9b7190e..778a81b 100644
--- a/plugins/display/display-manager.cpp
+++ b/plugins/display/display-manager.cpp
@@ -415,15 +415,17 @@ bool DisplayManager::apply_screen_config(const ScreenConfigInfo &screen_config,
if (!monitor)
{
KLOG_WARNING("cannot find monitor for %s.", uid.c_str());
- continue;
+ return false;
}
+ /* 一般情况下uid相同时name也是相同的但是有些特殊情况会出现不一样这里uid主要是为了唯一标识一台显示器
+ 而name是用来区分显示器接口的比如有一台显示器最开始是接入在HDMI-1后面改到HDMI-2了那么在能获取到edid的
+ 情况下uid是不变的但是name会发生变化。如果出现name不一样的情况下这里仅仅记录日志方便后续跟踪问题。*/
if (c_monitor.name() != monitor->name_get())
{
- KLOG_WARNING("the name is mismatch. config name: %s, monitor name: %s.",
- c_monitor.name().c_str(),
- monitor->name_get().c_str());
- continue;
+ KLOG_DEBUG("The monitor name is dismatch. config name: %s, monitor name: %s.",
+ c_monitor.name().c_str(),
+ monitor->name_get().c_str());
}
auto mode = monitor->match_best_mode(c_monitor.width(), c_monitor.height(), c_monitor.refresh_rate());
@@ -502,7 +504,9 @@ bool DisplayManager::save_config(CCErrorCode &error_code)
// 禁止保存没有开启任何显示器的配置,这可能会导致下次进入会话屏幕无法显示
if (this->get_enabled_monitors().size() == 0)
{
- error_code = CCErrorCode::ERROR_DISPLAY_ONLY_ONE_ENABLED_MONITOR;
+ KLOG_WARNING("It is forbidden to save the configuration without any display turned on, "
+ "which may cause the next session screen not to be displayed.");
+ error_code = CCErrorCode::ERROR_DISPLAY_NO_ENABLED_MONITOR;
return false;
}
--
2.33.0