使用 wayland(Hyprland)下的 Firefox,如果我设置gtk-application-prefer-dark-theme={0,1}
然后~/.config/gtk3.0/settings.ini
启动 Firefox,它会正确确定系统主题。
我如何在运行时设置它?
gsettings set org.gnome.desktop.interface color-scheme 'prefer-{light, dark}'
gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita{,-dark}'
没有任何效果(除了在存储中设置值),即没有任何变化,并且重新启动 Firefox 没有任何效果,无论是否gtk-theme-prefer-dark-theme
设置。
这些设置是 gtk{4,2} 值吗?如果是,我该如何gtk-application-prefer-dark-theme
在运行时设置任何设置?
答案1
简短的回答是:通过设置gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita{,-dark}'
。这是在中查询的nsLookAndFeel.cpp
,它正确响应更改事件---您可以在等待半小时让 Firefox 构建后使用 gdb 确认:D 它实际上使用了一个有趣的技巧:
static bool GetThemeIsDark() {
GdkRGBA bg, fg;
GtkStyleContext* style = GetStyleContext(MOZ_GTK_WINDOW);
gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &bg);
gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &fg);
return RelativeLuminanceUtils::Compute(GDK_RGBA_TO_NS_RGBA(bg)) <
RelativeLuminanceUtils::Compute(GDK_RGBA_TO_NS_RGBA(fg));
}
这只是测试前景是否比背景亮,我猜这就是浅色主题的定义。
更长的答案是,似乎有一个漏洞,有时prefers-color-scheme
无法设置,或者在不同窗口间存在多种状态。不依赖于查询窗口的主题(即系统主题)不受影响。用户主题无法正确更新,这就是我的问题所在。