Merge pull request #136071 from jtojnar/gnome-qpa

nixos/gnome: enable platform integration for Qt
This commit is contained in:
Jan Tojnar 2021-09-02 03:06:55 +02:00 committed by GitHub
commit 07978cddab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 38 additions and 22 deletions

View file

@ -1088,6 +1088,15 @@ Superuser created successfully.
but instead use more of the YAML-specific syntax.
</para>
</listitem>
<listitem>
<para>
GNOME desktop environment now enables
<literal>QGnomePlatform</literal> as the Qt platform theme,
which should avoid crashes when opening file chooser dialogs
in Qt apps by using XDG desktop portal. Additionally, it will
make the apps fit better visually.
</para>
</listitem>
</itemizedlist>
</section>
</section>

View file

@ -312,3 +312,5 @@ To be able to access the web UI this port needs to be opened in the firewall.
- Nginx will use the value of `sslTrustedCertificate` if provided for a virtual host, even if `enableACME` is set. This is useful for providers not using the same certificate to sign OCSP responses and server certificates.
- `lib.formats.yaml`'s `generate` will not generate JSON anymore, but instead use more of the YAML-specific syntax.
- GNOME desktop environment now enables `QGnomePlatform` as the Qt platform theme, which should avoid crashes when opening file chooser dialogs in Qt apps by using XDG desktop portal. Additionally, it will make the apps fit better visually.

View file

@ -372,6 +372,13 @@ in
xdg.portal.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
# Harmonize Qt5 application style and also make them use the portal for file chooser dialog.
qt5 = {
enable = mkDefault true;
platformTheme = mkDefault "gnome";
style = mkDefault "adwaita";
};
networking.networkmanager.enable = mkDefault true;
services.xserver.updateDbusEnvironment = true;

View file

@ -2,12 +2,12 @@
, lib
, fetchFromGitHub
, nix-update-script
, cmake
, pkg-config
, gtk3
, adwaita-qt
, glib
, gtk3
, qtbase
, qmake
, qtx11extras
, pantheon
, substituteAll
, gsettings-desktop-schemas
@ -15,13 +15,13 @@
mkDerivation rec {
pname = "qgnomeplatform";
version = "0.6.1";
version = "0.8.0";
src = fetchFromGitHub {
owner = "FedoraQt";
repo = "QGnomePlatform";
rev = version;
sha256 = "1mwqg2zk0sfjq54vz2jjahbgi5sxw8rb71h6mgg459wp99mhlqi0";
sha256 = "C/n8i5j0UWfxhP10c4j89U+LrpPozXnam4fIPYMXZAA=";
};
patches = [
@ -33,24 +33,21 @@ mkDerivation rec {
];
nativeBuildInputs = [
cmake
pkg-config
qmake
];
buildInputs = [
adwaita-qt
glib
gtk3
qtbase
qtx11extras
];
postPatch = ''
# Fix plugin dir
substituteInPlace decoration/decoration.pro \
--replace "\$\$[QT_INSTALL_PLUGINS]" "$out/$qtPluginPrefix"
substituteInPlace theme/theme.pro \
--replace "\$\$[QT_INSTALL_PLUGINS]" "$out/$qtPluginPrefix"
'';
cmakeFlags = [
"-DGLIB_SCHEMAS_DIR=${glib.getSchemaPath gsettings-desktop-schemas}"
"-DQT_PLUGINS_DIR=${placeholder "out"}/${qtbase.qtPluginPrefix}"
];
passthru = {
updateScript = nix-update-script {

View file

@ -1,13 +1,14 @@
diff --git a/common/gnomehintssettings.cpp b/common/gnomehintssettings.cpp
index 9860e57..40fa6ec 100644
--- a/common/gnomehintssettings.cpp
+++ b/common/gnomehintssettings.cpp
@@ -80,9 +80,17 @@ void gtkMessageHandler(const gchar *log_domain,
GnomeHintsSettings::GnomeHintsSettings()
: QObject(0)
diff --git a/src/common/gnomesettings.cpp b/src/common/gnomesettings.cpp
index 717cc9b..ee255ea 100644
--- a/src/common/gnomesettings.cpp
+++ b/src/common/gnomesettings.cpp
@@ -150,10 +150,18 @@ GnomeSettingsPrivate::GnomeSettingsPrivate(QObject *parent)
: GnomeSettings(parent)
, m_usePortal(checkUsePortalSupport())
, m_canUseFileChooserPortal(!m_usePortal)
- , m_gnomeDesktopSettings(g_settings_new("org.gnome.desktop.wm.preferences"))
- , m_settings(g_settings_new("org.gnome.desktop.interface"))
, m_fallbackFont(new QFont(QLatin1String("Sans"), 10))
{
+ g_autoptr(GSettingsSchemaSource) schemaSource = nullptr;
+ g_autoptr(GSettingsSchema) gnomeDesktopSchema = nullptr;

View file

@ -18510,7 +18510,7 @@ with pkgs;
qrupdate = callPackage ../development/libraries/qrupdate { };
qgnomeplatform = libsForQt514.callPackage ../development/libraries/qgnomeplatform { };
qgnomeplatform = libsForQt5.callPackage ../development/libraries/qgnomeplatform { };
randomx = callPackage ../development/libraries/randomx { };