我有一些 cron 作业可以在我的 KDE 系统上自动在明暗主题之间切换(对于那些感兴趣的人,lookandfeeltool
我可以在这里简单地在全局明暗主题之间切换(我必须根据其他人定义我自己的主题并进行我想要的更改制作),或者您可以使用plasma-theme-switcher
(适用于 X 和 Wayland)调整颜色)。它工作得很好,除了我碰巧依赖少数不尊重这些的 GTK 应用程序。其中最重要的是基于 Chromium 的浏览器/Electron 应用程序,例如 Chrome 本身或 VSCode。
然而有趣的是,Firefox 完美地处理了这个问题,尽管它是一个 GTK 应用程序,但它可以响应主题变化。它也是我运行的唯一一个 GTK 应用程序,它似乎理解我不想使用 Nautilus 文件资源管理器,而是使用 Dolphin 进行所有文件提示。
我的问题是 Firefox 是如何做到这一点的,为什么常规的 GTK 应用程序不能更优雅地处理这个问题?
我的问题的第二部分是是否有某种我可以触发的 DBUS 命令,它会导致 GTK 应用程序“检查主题更改”,以便让我的程序响应我的脚本。
感谢您的指点
我认为答案就在文件中
/widget/gtk/nsLookAndFeel.cpp
。最新稳定代码中的第 1190-1200 行:
该函数
GDK_RGBA_TO_NS_RGBA()
可以简化为:(注意这不是实际的实现)
函数
gtk_style_context_get_background_color()
并gtk_style_context_get_color()
返回给定状态的背景色和前景色(分别)。很明显,答案是检查哪个整数值更大,背景还是前景,并据此决定主题是否黑暗。