linuxdeepin / developer-center

Deepin developer center, provide developer wiki and community forum.
446 stars 72 forks source link

不应该让所有 dtk 应用都自行修改 XDG_CURRENT_DESKTOP 环境变量 #4112

Open wineee opened 1 year ago

wineee commented 1 year ago

SUMMARY | 问题概要

目前大部分 dtk 应用会判断如果 XDG_CURRENT_DESKTOP 不是 deepin 改成 deepin,少部分判断 XDG_CURRENT_DESKTOP 为空设成 deepin

让普通应用修改 XDG_CURRENT_DESKTOP 并不合理的,应该删除,相关 https://github.com/linuxdeepin/developer-center/issues/3829

### Tasks
kegechen commented 1 year ago

主要是应对两种情况:

  1. DDE/Deepin 环境想正常加载 dxcb 就需要这么改
  2. root 权限运行应用(如文管管理员权限), lightdm启动时greeter时, 这个环境变量是空的, 这时也需要应用自行适配.

没有加载 dxcb 会影响什么? 正常不会加载 deepintheme 插件, 进而影响图标查找. 影响最多的是内置图标(builtinicon) 现象就是 会显示系统标题栏(ssd), 部分图标加载失败. 类似这样 image

wineee commented 1 year ago

是否应该在 qt5platform-plugins 中处理此问题,比如改用 D_DXCB_ENABLE 之类的变量,让 dtk 应用确保使用 dxcb,在非 DDE 下修改 XDG_CURRENT_DESKTOP 不是合理的行为

cc @zccrs @BLumia

zccrs commented 1 year ago

这个问题有个计划。是希望某些隐式依赖 libdeepin.so 或 libdxcb.so 的核心功能提取出来,提到dtkgui里,让应用程序主动调用,比如截图中的图标问题就是这样的,当做到这样之后,程序即便不是在deepin中运行,没有使用DDE提供的插件,也不会有明显的问题。但是一些外围功能还是会有些差异,比如窗口没有了圆角效果,而且会多了系统标题栏,这种问题我觉得可以接受,因为圆角效果、窗口标题栏可以认为是DDE所提供的功能,而不是应用程序提供的。

kegechen commented 1 year ago

比如查找图标换成 DIconTheme::findQIcon ?

BLumia commented 1 year ago

dde-session-shell 之类项目里的这种代码可以直接去掉,因为这种项目本身就不会在 dde 外的桌面环境上使用。

有个计划。是希望某些隐士依赖 libdeepin.so 或 libdxcb.so 的核心功能提取出来,提到dtkgui里,让应用程序主动调用

这个有对应 issue 跟进吗?

wineee commented 1 year ago

dde-session-shell 之类项目里的这种代码可以直接去掉

deepin-picker 的也可以删了,这个应用不需要 qt5platform-plugins

wineee commented 1 year ago

在非 DDE 下使用系统标题栏没有问题,目前 dtk 应用有必须点击两次才能拖动的问题,使用系统标题栏反而正常点 (Arch KDE 下即使应用设置了XDG_CURRENT_DESKTOP=Deepin,也在使用系统标题栏

zccrs commented 1 year ago

dde-session-shell 之类项目里的这种代码可以直接去掉,因为这种项目本身就不会在 dde 外的桌面环境上使用。

有个计划。是希望某些隐士依赖 libdeepin.so 或 libdxcb.so 的核心功能提取出来,提到dtkgui里,让应用程序主动调用

这个有对应 issue 跟进吗?

@kegechen

kegechen commented 1 year ago

为了避免查找图标相关逻辑依赖 dxcb/deepintheme/iconengine 等插件. 将查找图标主要逻辑移动到 dtkgui .

最终实现 DDE 应用无需依赖环境变量 XDG_CURRENT_DESKTOP 加载 dxcb 才能正常显示图标 可以接受无圆角, 系统标题栏, 模糊等需要窗管实现的效果.

BLumia commented 1 year ago

补充一个相关问题:

尽管根据上面讨论,我们(绝大多数情况)是不应该在应用里做这个判断的,但上述列出的进行如此判断的列表中的判断方式有的也是有误的。XDG_CURRENT_DESKTOP 本身可以是一个列表,很多判断都假定这个环境变量的值是单一桌面环境名称了。所以如果最终确定某个位置确需进行判断的话,需要考虑此环境变量内可能是由冒号分隔的多个值的情况。

kegechen commented 1 year ago

image

QIcon::fromTheme ==> DIconTheme::findQIcon 即可实现 dtk 应用查找图标不再依赖 dde-qt5integration.

dtkgui > 5.6.12

felixonmars commented 10 months ago

这个问题有个计划。是希望某些隐式依赖 libdeepin.so 或 libdxcb.so 的核心功能提取出来,提到dtkgui里,让应用程序主动调用,比如截图中的图标问题就是这样的,当做到这样之后,程序即便不是在deepin中运行,没有使用DDE提供的插件,也不会有明显的问题。但是一些外围功能还是会有些差异,比如窗口没有了圆角效果,而且会多了系统标题栏,这种问题我觉得可以接受,因为圆角效果、窗口标题栏可以认为是DDE所提供的功能,而不是应用程序提供的。

我觉得现在的操作步骤应该是,对于每个应用,确认在非 DDE 环境下基本功能可以正常运行再执行此次对 XDG_CURRENT_DESKTOP 判断逻辑的删除。否则会让应用重新面临在 DDE 以外基本功能无法正常使用的问题(如 #5723 中描述的,当前版本的 deepin-terminal)。