[Feature Requests] # 功能请求:默认启用「变暗非活动窗口」,或在控制中心提供开关
Tofloor
poster avatar
w***f@pozinski.ru
deepin
2 hours ago
Author

中文版,供论坛发布。英文原文见 bugreport-kwin-dim-inactive.md(内容一致,供自己阅读)。

摘要

Deepin 25 使用 KWin 作为窗口管理器,而 KWin 自带 Dim Inactive(变暗非活动窗口)
效果(/usr/share/kwin/builtin-effects/diminactive)。该效果已经存在、可以正常工作,
但默认是关闭的
,而且在控制中心里没有任何地方可以打开它。

结果就是:窗口焦点几乎看不出来。活动窗口与非活动窗口的标题栏差别过于细微,桌面上
开了几个窗口之后,用户必须靠点击或看任务栏才能确认哪个窗口处于焦点状态。

环境

  • Deepin 25 Community(25.2.2),内核 6.18.48-amd64-desktop-rolling
  • 窗口管理器:kwin_x11(软件包 kwin-x11 4:6.1.43)
  • 窗口装饰:com.deepin.chameleon(系统中唯一安装的装饰插件)
  • 硬件:Sony VAIO VPCEJ2A9E,Intel HD 3000(无 GPU 加速)

复现步骤

  1. 打开两个或以上的窗口;
  2. 在两个窗口之间来回点击;
  3. 仅凭窗口装饰判断哪个窗口拥有焦点。

实际结果

两个窗口看起来几乎一模一样,除非用户早已熟悉标题栏的细微明暗差别,否则无法判断。

预期结果

非活动窗口应当有明确的视觉区分。常见做法就是把它稍微变暗——而这正是系统里已经
存在的那个效果。

证据:修复其实已经随系统提供

打开它只需要一个配置项加一次重载,之后 KWin 会明确报告该效果已加载:

$ kwriteconfig5 --file kwinrc --group Plugins --key diminactiveEnabled true
$ qdbus org.kde.KWin /KWin reconfigure
$ qdbus org.kde.KWin /KWin supportInformation | grep -i dim
diminactive

建议的修改方式(按优先级)

  1. 直接在随系统发布的 kwinrc 中默认启用 diminactive。 一行配置,不需要新代码,
    却能让所有用户立刻看清焦点位置。
  2. 在控制中心中提供开关(个性化,或窗口效果所在的位置),最好再配一个强度滑块。
    不喜欢变暗的用户可以关掉,需要它的用户可以打开。
  3. 如果以上都做不到,至少写进文档。但一个必须修改隐藏配置文件的默认值,
    等于大多数用户永远不会发现的默认值。

给用户的临时方案(可直接复制)

kwriteconfig5 --file kwinrc --group Plugins --key diminactiveEnabled true
qdbus org.kde.KWin /KWin reconfigure

撤销:

kwriteconfig5 --file kwinrc --group Plugins --key diminactiveEnabled false
qdbus org.kde.KWin /KWin reconfigure

或者使用随本帖提供的开关脚本 dim-inactive.sh(支持 on / off / toggle / status),
它不需要 sudo,也不需要手动编辑配置文件。

补充说明:与 Plasma 的窗口边框着色不是一回事

KDE Plasma 可以让窗口边框跟随应用程序自身的配色方案,截图看起来相似,
但这并不是本帖所请求的功能:它依赖于 Breeze 一类的装饰插件,并且要求每个应用
自行发布配色方案。Deepin 只有一个装饰插件,且 DTK 应用共用同一套全局配色,
所以即使装上那种装饰,效果也会是统一的,而不是随应用变化。

而「变暗非活动窗口」不依赖上述任何一项,对任何工具包的应用都有效。

#!/bin/bash
# dim-inactive.sh - turn KWin's "Dim Inactive" effect on or off.
#
# No sudo, no editing dotfiles: Deepin 25 ships the effect but leaves it off and
# does not expose it in Control Center. This just writes the one key and asks
# KWin to reload.
#
#   ./dim-inactive.sh          toggle
#   ./dim-inactive.sh on
#   ./dim-inactive.sh off
#   ./dim-inactive.sh status
set -u

CONF="$HOME/.config/kwinrc"
KEY="diminactiveEnabled"

current() { kreadconfig5 --file kwinrc --group Plugins --key "$KEY" 2>/dev/null || echo false; }
setval()  { kwriteconfig5 --file kwinrc --group Plugins --key "$KEY" "$1"; }
reload()  { qdbus org.kde.KWin /KWin reconfigure >/dev/null 2>&1; }

case "${1:-toggle}" in
	status)
		echo "Dim Inactive is currently: $(current)"
		;;
	on)
		setval true; reload; echo "Dim Inactive: on"
		;;
	off)
		setval false; reload; echo "Dim Inactive: off"
		;;
	toggle)
		if [ "$(current)" = "true" ]; then
			setval false; reload; echo "Dim Inactive: off"
		else
			setval true; reload; echo "Dim Inactive: on"
		fi
		;;
	*)
		echo "usage: $0 [on|off|toggle|status]" >&2
		exit 2
		;;
esac

Reply Favorite View the author
All Replies

No replies yet