如何在 wayland 下运行时设置 (firefox) gtk 主题?

如何在 wayland 下运行时设置 (firefox) gtk 主题?

使用 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无法设置,或者在不同窗口间存在多种状态。不依赖于查询窗口的主题(即系统主题)不受影响。用户主题无法正确更新,这就是我的问题所在。

相关内容