Skip to content

feat: able to control if we should register tray selectionmanager via DConfig#971

Open
BLumia wants to merge 1 commit into
linuxdeepin:masterfrom
BLumia:xembed-treeland
Open

feat: able to control if we should register tray selectionmanager via DConfig#971
BLumia wants to merge 1 commit into
linuxdeepin:masterfrom
BLumia:xembed-treeland

Conversation

@BLumia
Copy link
Copy Markdown
Member

@BLumia BLumia commented Dec 3, 2025

为 wayland 会话也初始化 Xembed 托盘支持.

Summary by Sourcery

Enhancements:

  • Gate X connection and tray selection manager initialization behind an internal flag instead of disabling it entirely on Wayland sessions.

@BLumia BLumia requested a review from fly602 December 3, 2025 08:56
@sourcery-ai
Copy link
Copy Markdown

sourcery-ai Bot commented Dec 3, 2025

Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Enable the tray daemon’s Xembed/Xwayland-related X connection initialization path to be present in both X11 and Wayland sessions while effectively disabling the tray selection manager logic for now via a feature flag variable, and add region markers around the X connection setup block.

Flow diagram for updated X connection initialization in Daemon.Start

flowchart TD
    A[Daemon.Start] --> B[Create sessionBus]
    B --> C[Create sigLoop and start]
    C --> D[Set enableTraySelectionManager = false]
    D --> E{XDG_SESSION_TYPE != wayland?}
    E -->|no| G[Skip XConn initialization]
    E -->|yes| F{enableTraySelectionManager == true?}
    F -->|no| G
    F -->|yes| H[Call x.NewConn and assign to XConn]
    H --> I[Initialize tray selection manager on X]
    G --> J{DDE_DISABLE_STATUS_NOTIFIER_WATCHER != 1?}
    I --> J
    J -->|yes| K[Create StatusNotifierWatcher]
    J -->|no| L[Skip StatusNotifierWatcher]
    K --> M[Return from Daemon.Start]
    L --> M
Loading

File-Level Changes

Change Details Files
Gate X connection initialization behind a temporary boolean flag and relax the session-type check to conceptually support Xwayland in Wayland sessions.
  • Replace the Wayland-only early return condition so that the X connection block is no longer skipped solely based on XDG_SESSION_TYPE being wayland.
  • Introduce a local enableTraySelectionManager boolean flag defaulting to false to control whether the X connection and tray selection manager code actually runs.
  • Keep the existing tray selection manager logic intact but now conditionally executed based on the new flag rather than session type.
trayicon1/daemon.go
Improve code organization and clarity for the X connection setup section.
  • Add a comment explaining that the logic is intended to run on both X11 and Wayland for Xwayland support.
  • Wrap the X connection setup and related code with region markers to delineate the initialization section.
trayicon1/daemon.go

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey there - I've reviewed your changes and found some issues that need to be addressed.

  • By unconditionally calling x.NewConn() you now hard-fail the daemon on sessions without an X server/Xwayland; consider keeping an environment-based guard or gracefully degrading if the X connection cannot be established so Wayland-only sessions still work.
  • The // #region / // #endregion markers are non-idiomatic in Go and inconsistent with typical comment style in this file; consider removing them or replacing with a simple explanatory comment block if needed.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- By unconditionally calling `x.NewConn()` you now hard-fail the daemon on sessions without an X server/Xwayland; consider keeping an environment-based guard or gracefully degrading if the X connection cannot be established so Wayland-only sessions still work.
- The `// #region` / `// #endregion` markers are non-idiomatic in Go and inconsistent with typical comment style in this file; consider removing them or replacing with a simple explanatory comment block if needed.

## Individual Comments

### Comment 1
<location> `trayicon1/daemon.go:51-53` </location>
<code_context>
-		if err != nil {
-			return err
-		}
+	// Enable this on both x11 and wayland(for xwayland support)
+	// #region init x conn
+	XConn, err = x.NewConn()
+	if err != nil {
+		return err
</code_context>

<issue_to_address>
**issue (bug_risk):** Unconditionally creating the X connection may cause Start() to fail on pure Wayland setups without Xwayland.

This used to be guarded by `XDG_SESSION_TYPE != "wayland"`, so the daemon could start on Wayland even without X. With `x.NewConn()` now unconditional, a failure (e.g., Wayland without Xwayland or DISPLAY) causes `Start()` to error and the daemon to fail to start. If X is meant to be optional, consider treating connection failures as non-fatal (e.g., log and continue without the tray manager, or only require a successful X connection when you know X should be available) to preserve the previous behavior while still enabling Xwayland when present.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment thread trayicon1/daemon.go Outdated
@BLumia BLumia marked this pull request as draft December 3, 2025 09:20
@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Dec 4, 2025

TAG Bot

New tag: 6.1.66
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #972

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Dec 11, 2025

TAG Bot

New tag: 6.1.67
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #976

@BLumia BLumia marked this pull request as ready for review December 15, 2025 10:07
@BLumia BLumia changed the title feat: enable xembed support for xwayland 【不要合并!!!】feat: enable xembed support for xwayland Dec 15, 2025
Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey there - I've reviewed your changes and found some issues that need to be addressed.

  • The new enableTraySelectionManager flag is hardcoded to false, which means the X connection (and thus tray selection manager) is never initialized on any session type; if this is meant to be configurable, wire it to a real config/env option or remove the flag and keep the previous behavior adjusted for Wayland/Xwayland as intended.
  • The comment // Enable this on both x11 and wayland(for xwayland support) does not match the current logic (guarded by enableTraySelectionManager and still checking XDG_SESSION_TYPE); please align the condition with the intended behavior or update the comment to avoid confusion.
  • The // #region / // #endregion markers are not idiomatic in Go and may not be recognized by all editors; consider using a regular comment block or extracting the X initialization into a small helper function to make the intent clearer.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- The new `enableTraySelectionManager` flag is hardcoded to `false`, which means the X connection (and thus tray selection manager) is never initialized on any session type; if this is meant to be configurable, wire it to a real config/env option or remove the flag and keep the previous behavior adjusted for Wayland/Xwayland as intended.
- The comment `// Enable this on both x11 and wayland(for xwayland support)` does not match the current logic (guarded by `enableTraySelectionManager` and still checking `XDG_SESSION_TYPE`); please align the condition with the intended behavior or update the comment to avoid confusion.
- The `// #region` / `// #endregion` markers are not idiomatic in Go and may not be recognized by all editors; consider using a regular comment block or extracting the X initialization into a small helper function to make the intent clearer.

## Individual Comments

### Comment 1
<location> `trayicon1/daemon.go:51-54` </location>
<code_context>

-	if os.Getenv("XDG_SESSION_TYPE") != "wayland" {
-		// init x conn
+	// Enable this on both x11 and wayland(for xwayland support)
+	// #region init x conn
+	var enableTraySelectionManager = false
+	if os.Getenv("XDG_SESSION_TYPE") != "wayland" && enableTraySelectionManager {
 		XConn, err = x.NewConn()
 		if err != nil {
</code_context>

<issue_to_address>
**issue (bug_risk):** The new flag and condition effectively disable the X connection everywhere and conflict with the comment about enabling on both X11 and Wayland.

Because `enableTraySelectionManager` is hardcoded to `false`, this block will never run on any session type. The condition also still excludes `XDG_SESSION_TYPE == "wayland"`, which conflicts with the comment about supporting both X11 and Wayland (via Xwayland).

If the goal is to gate this behind a flag while allowing Xwayland, consider either:
- Removing the `XDG_SESSION_TYPE != "wayland"` check and relying only on the flag, or
- Making `enableTraySelectionManager` configurable (env/config) and updating the condition so Xwayland sessions are actually included.

As it stands, the tray selection manager is effectively disabled everywhere.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment thread trayicon1/daemon.go Outdated
@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Dec 18, 2025

TAG Bot

New tag: 6.1.68
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #982

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Dec 25, 2025

TAG Bot

New tag: 6.1.69
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #986

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Jan 7, 2026

TAG Bot

New tag: 6.1.70
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #991

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Jan 15, 2026

TAG Bot

New tag: 6.1.71
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #998

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Jan 23, 2026

TAG Bot

New tag: 6.1.72
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1001

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Jan 28, 2026

TAG Bot

New tag: 6.1.73
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1006

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Jan 29, 2026

TAG Bot

New tag: 6.1.74
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1008

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Feb 6, 2026

TAG Bot

New tag: 6.1.75
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1029

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Feb 27, 2026

TAG Bot

New tag: 6.1.76
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1036

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Mar 5, 2026

TAG Bot

New tag: 6.1.77
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1048

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Mar 12, 2026

TAG Bot

New tag: 6.1.78
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1057

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Mar 18, 2026

TAG Bot

New tag: 6.1.79
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1063

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Mar 18, 2026

TAG Bot

New tag: 6.1.80
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1065

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Mar 23, 2026

TAG Bot

New tag: 6.1.81
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1070

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Mar 25, 2026

TAG Bot

New tag: 6.1.82
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1071

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Mar 26, 2026

TAG Bot

New tag: 6.1.83
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1073

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Mar 30, 2026

TAG Bot

New tag: 6.1.84
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1075

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Apr 10, 2026

TAG Bot

New tag: 6.1.85
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1084

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Apr 23, 2026

TAG Bot

New tag: 6.1.86
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1094

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Apr 24, 2026

TAG Bot

New tag: 6.1.87
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1095

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented May 8, 2026

TAG Bot

New tag: 6.1.88
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1098

@BLumia BLumia force-pushed the xembed-treeland branch from 3c09ec8 to ef17444 Compare May 12, 2026 12:36
@BLumia BLumia changed the title 【不要合并!!!】feat: enable xembed support for xwayland feat: able to control if we should register tray selectionmanager via DConfig May 12, 2026
@BLumia BLumia force-pushed the xembed-treeland branch 2 times, most recently from c20dfb4 to 0f5492c Compare May 12, 2026 13:04
…anager

允许通过 DConfig 控制 dde-daemon 的 trayicon1 模块是否注册自身为 xembed
selectionmanager,默认为仅在 x11 下注册(现状),允许任何时候都注册、
仅x11/仅wayland注册、任何时候都不注册。

Log:
@BLumia BLumia force-pushed the xembed-treeland branch from 0f5492c to 0807139 Compare May 13, 2026 03:49
@BLumia BLumia requested a review from xionglinlin May 13, 2026 03:50
@deepin-ci-robot
Copy link
Copy Markdown

deepin pr auto review

你好!我是CodeGeeX。我已仔细审查了你提供的Git Diff。本次修改的主要目的是通过引入DConfig配置,让托盘Selection Manager的注册策略变得可配置,以支持在Wayland环境下通过XWayland运行托盘图标。

整体来看,代码逻辑清晰,配置项设计合理。但在代码逻辑的严谨性、性能、安全性以及代码规范方面,有一些改进建议供你参考:

1. 语法与逻辑

  • 默认回退值逻辑不一致
    getTraySelectionManagerScope 函数中,当读取配置失败时,返回的默认值是 scopeNever

    return scopeNever

    但是在 shouldRegisterTraySelectionManagerdefault 分支中,处理未知配置值时的默认逻辑是 return !isWayland(即等同于 scopeX11Only)。
    问题:如果配置读取失败,系统将不注册托盘(never);但如果配置读取成功但值被用户或错误配置成了非法值(如拼写错误),系统却会回退到仅X11注册。这种不一致的行为可能会导致排查问题时的困惑。
    建议:统一默认降级策略。考虑到原代码的逻辑是 os.Getenv("XDG_SESSION_TYPE") != "wayland",建议将 getTraySelectionManagerScope 的错误返回值改为 scopeX11Only,或者在 shouldRegisterTraySelectionManagerdefault 分支打印警告日志并返回 scopeNever 以安全失败。

  • 环境变量判断逻辑的隐含假设
    shouldRegisterTraySelectionManager 中,isWayland := sessionType == "wayland"scopeX11Only 返回 !isWayland
    问题:如果 XDG_SESSION_TYPE 为空(例如某些非标准桌面环境或容器环境),isWaylandfalsescopeX11Only 会返回 true。这在大多数情况下是合理的,但需确认是否符合预期。另外,原来代码的注释写着 Enable this on both x11 and wayland(for xwayland support),这说明当配置为 scopeAlways 时,无论 XDG_SESSION_TYPE 是什么都会去初始化 X 连接,逻辑是正确的。

2. 代码性能

  • DConfig 实例的重复创建与资源泄漏
    getTraySelectionManagerScope 中,每次调用都会执行 dconfig.NewDConfig
    问题Start() 方法在 Daemon 生命周期内只会被调用一次,所以目前不会造成严重的性能问题。但是,NewDConfig 可能会建立 DConfig 的 DBus 监听连接,如果只调用一次 GetValueString 就丢弃,不仅浪费了 DConfig 动态监听配置变更的能力,还可能导致底层的 DBus Signal 连接未被正确释放(取决于 dconfig 的内部实现是否有 GC 释放机制)。
    建议:将 trayIconDConfig 作为 Daemon 结构体的成员变量,在 NewDaemonStart 时初始化一次。这样不仅避免重复创建,未来如果需要动态响应配置变更(不重启Daemon生效)也会非常方便。

3. 代码安全

  • 环境变量的隐式信任
    依赖 XDG_SESSION_TYPE 来决定是否注册 X11 托盘。在常规的 Linux 桌面下,这个环境变量是 Display Manager (如 lightdm/sddm) 注入的,相对安全。但在多用户系统或提权场景下(例如通过 sudopkexec 运行),环境变量可能被伪造。
    建议:对于 dde-daemon 这种系统级服务,当前逻辑是可以接受的。但需确保该服务在 Wayland 环境下启动 X 连接时,不会因为伪造的环境变量导致向不受信任的 X Server 建立连接。目前的配置化设计实际上已经把控制权交给了管理员,这是一个很好的安全实践。

  • DConfig 权限配置
    JSON 配置中 "permissions": "readwrite", "visibility": "public" 意味着所有用户都可读写此配置。
    建议:需确认是否希望普通用户也能修改此项配置。通常系统核心组件的运行策略只允许管理员(通过 deepin-editordde-control-center 的管理员认证)修改。如果普通用户可以随意将其设置为 always,可能在纯 Wayland 下引发不必要的 XWayland 初始化。如果只允许管理员修改,建议将 permissions 设为 read(对普通用户),通过 DSConfig 的 override 机制让管理员写。

4. 代码质量与规范

  • 版权年份修改
    SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd.
    问题:通常版权年份的结束时间应该是代码发布/修改的当前年份(如2023或2024),而不是未来的年份(2026)。
    建议:确认是否为笔误,建议改为当前实际年份。

  • 注释规范
    // #region init x conn// #endregion 是 C#/JS 风格的代码折叠注释。
    问题:在 Go 语言中,这不是标准规范。Go 语言更推荐使用函数来划分逻辑块,或者使用普通的行注释。
    建议:如果是为了在 IDE 中支持代码折叠,可以保留;但如果追求 Go 代码的整洁标准,建议移除 #region 标签,或者将这段逻辑封装为一个内部函数,如 initXConnection(scope string)

改进后的代码示例

结合以上建议,以下是优化后的代码参考:

daemon.go 优化部分:

type Daemon struct {
	*loader.ModuleBase
	sigLoop *dbusutil.SignalLoop
	snw     *statusNotifierWatcher
	// 将 DConfig 作为成员变量,避免资源泄漏和重复创建
	trayIconDConfig *dconfig.DConfig
}

const moduleName = "trayicon"

const (
	dconfigAppID                 = "org.deepin.dde.daemon"
	dconfigTrayIconID            = "org.deepin.dde.daemon.trayicon"
	dconfigKeyTraySelectionScope = "traySelectionManagerScope"

	scopeNever       = "never"
	scopeX11Only     = "x11-only"
	scopeWaylandOnly = "wayland-only"
	scopeAlways      = "always"
)

func NewDaemon(logger *log.Logger) *Daemon {
	daemon := new(Daemon)
	daemon.ModuleBase = loader.NewModuleBase(moduleName, daemon, logger)
	// 初始化 DConfig
	var err error
	daemon.trayIconDConfig, err = dconfig.NewDConfig(dconfigAppID, dconfigTrayIconID, "")
	if err != nil {
		logger.Warning("failed to create trayicon dconfig:", err)
	}
	return daemon
}

func shouldRegisterTraySelectionManager(scope string) bool {
	sessionType := os.Getenv("XDG_SESSION_TYPE")
	isWayland := sessionType == "wayland"

	switch scope {
	case scopeNever:
		return false
	case scopeX11Only:
		return !isWayland
	case scopeWaylandOnly:
		return isWayland
	case scopeAlways:
		return true
	default:
		// 统一降级策略:遇到非法配置,打印警告并按 X11-Only 处理(与原逻辑保持一致)
		logger.Warningf("unknown tray selection scope: %q, fallback to x11-only", scope)
		return !isWayland
	}
}

func (d *Daemon) getTraySelectionManagerScope() string {
	if d.trayIconDConfig == nil {
		// 降级为 X11-Only
		return scopeX11Only
	}

	scope, err := d.trayIconDConfig.GetValueString(dconfigKeyTraySelectionScope)
	if err != nil {
		logger.Warning("failed to get tray selection manager scope:", err)
		// 降级为 X11-Only
		return scopeX11Only
	}

	return scope
}

func (d *Daemon) Start() error {
	var err error
	service := loader.GetService()

	sessionBus, err := service.SessionBus()
	if err != nil {
		return err
	}

	d.sigLoop = dbusutil.NewSignalLoop(sessionBus, 10)
	d.sigLoop.Start()

	scope := d.getTraySelectionManagerScope()
	if shouldRegisterTraySelectionManager(scope) {
		XConn, err = x.NewConn()
		if err != nil {
			return err
		}

		// ... 原有逻辑 ...
	}
    
	// ...
}

JSON 配置优化建议:

{
    "magic": "dsg.config.meta",
    "version": "1.0",
    "contents": {
        "traySelectionManagerScope": {
            "value": "x11-only", 
            "serial": 0,
            "flags": [],
            "name": "traySelectionManagerScope",
            "name[zh_CN]": "托盘 Selection Manager 注册范围",
            "description": "Control when to register tray selection manager: never, x11-only, wayland-only, always",
            "description[zh_CN]": "控制何时注册托盘 Selection Manager:never(不注册)、x11-only(仅 X11)、wayland-only(仅 Wayland)、always(始终注册)",
            "permissions": "readwrite",
            "visibility": "public"
        }
    }
}

(注:JSON中的默认值 "value": "x11-only" 与代码降级逻辑保持了绝对一致,避免行为分裂)

@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: BLumia, fly602

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants