Open wineee opened 1 year ago
主要是应对两种情况:
DDE/Deepin
环境想正常加载 dxcb
就需要这么改没有加载 dxcb 会影响什么? 正常不会加载 deepintheme 插件, 进而影响图标查找. 影响最多的是内置图标(builtinicon)
现象就是 会显示系统标题栏(ssd), 部分图标加载失败. 类似这样
是否应该在 qt5platform-plugins 中处理此问题,比如改用 D_DXCB_ENABLE 之类的变量,让 dtk 应用确保使用 dxcb,在非 DDE 下修改 XDG_CURRENT_DESKTOP 不是合理的行为
cc @zccrs @BLumia
这个问题有个计划。是希望某些隐式依赖 libdeepin.so 或 libdxcb.so 的核心功能提取出来,提到dtkgui里,让应用程序主动调用,比如截图中的图标问题就是这样的,当做到这样之后,程序即便不是在deepin中运行,没有使用DDE提供的插件,也不会有明显的问题。但是一些外围功能还是会有些差异,比如窗口没有了圆角效果,而且会多了系统标题栏,这种问题我觉得可以接受,因为圆角效果、窗口标题栏可以认为是DDE所提供的功能,而不是应用程序提供的。
比如查找图标换成 DIconTheme::findQIcon ?
dde-session-shell 之类项目里的这种代码可以直接去掉,因为这种项目本身就不会在 dde 外的桌面环境上使用。
有个计划。是希望某些隐士依赖 libdeepin.so 或 libdxcb.so 的核心功能提取出来,提到dtkgui里,让应用程序主动调用
这个有对应 issue 跟进吗?
dde-session-shell 之类项目里的这种代码可以直接去掉
deepin-picker 的也可以删了,这个应用不需要 qt5platform-plugins
在非 DDE 下使用系统标题栏没有问题,目前 dtk 应用有必须点击两次才能拖动的问题,使用系统标题栏反而正常点 (Arch KDE 下即使应用设置了XDG_CURRENT_DESKTOP=Deepin,也在使用系统标题栏
dde-session-shell 之类项目里的这种代码可以直接去掉,因为这种项目本身就不会在 dde 外的桌面环境上使用。
有个计划。是希望某些隐士依赖 libdeepin.so 或 libdxcb.so 的核心功能提取出来,提到dtkgui里,让应用程序主动调用
这个有对应 issue 跟进吗?
@kegechen
为了避免查找图标相关逻辑依赖 dxcb/deepintheme/iconengine 等插件.
将查找图标主要逻辑移动到 dtkgui
.
iconengine
插件中主要实现代码移动 dtkgui
DIconTheme::findQIcon
优化, 做到可以替换 QIcon::fromTheme
DDE
主要应用替换相关接口, 删除 main.cpp
中 修改 XDG_CURRENT_DESKTOP
的部分最终实现
DDE
应用无需依赖环境变量 XDG_CURRENT_DESKTOP
加载 dxcb 才能正常显示图标
可以接受无圆角, 系统标题栏, 模糊等需要窗管实现的效果.
补充一个相关问题:
尽管根据上面讨论,我们(绝大多数情况)是不应该在应用里做这个判断的,但上述列出的进行如此判断的列表中的判断方式有的也是有误的。XDG_CURRENT_DESKTOP
本身可以是一个列表,很多判断都假定这个环境变量的值是单一桌面环境名称了。所以如果最终确定某个位置确需进行判断的话,需要考虑此环境变量内可能是由冒号分隔的多个值的情况。
QIcon::fromTheme ==> DIconTheme::findQIcon 即可实现 dtk 应用查找图标不再依赖 dde-qt5integration.
dtkgui > 5.6.12
这个问题有个计划。是希望某些隐式依赖 libdeepin.so 或 libdxcb.so 的核心功能提取出来,提到dtkgui里,让应用程序主动调用,比如截图中的图标问题就是这样的,当做到这样之后,程序即便不是在deepin中运行,没有使用DDE提供的插件,也不会有明显的问题。但是一些外围功能还是会有些差异,比如窗口没有了圆角效果,而且会多了系统标题栏,这种问题我觉得可以接受,因为圆角效果、窗口标题栏可以认为是DDE所提供的功能,而不是应用程序提供的。
我觉得现在的操作步骤应该是,对于每个应用,确认在非 DDE 环境下基本功能可以正常运行再执行此次对 XDG_CURRENT_DESKTOP 判断逻辑的删除。否则会让应用重新面临在 DDE 以外基本功能无法正常使用的问题(如 #5723 中描述的,当前版本的 deepin-terminal)。
SUMMARY | 问题概要
目前大部分 dtk 应用会判断如果 XDG_CURRENT_DESKTOP 不是 deepin 改成 deepin,少部分判断 XDG_CURRENT_DESKTOP 为空设成 deepin
让普通应用修改 XDG_CURRENT_DESKTOP 并不合理的,应该删除,相关 https://github.com/linuxdeepin/developer-center/issues/3829