about summary refs log tree commit diff
path: root/nixpkgs/pkgs/desktops/gnome/core/evince
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/desktops/gnome/core/evince')
-rw-r--r--nixpkgs/pkgs/desktops/gnome/core/evince/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/gnome/core/evince/pantheon-dark-style.patch86
2 files changed, 111 insertions, 7 deletions
diff --git a/nixpkgs/pkgs/desktops/gnome/core/evince/default.nix b/nixpkgs/pkgs/desktops/gnome/core/evince/default.nix
index 11cd3735e1d5..45812dbc901a 100644
--- a/nixpkgs/pkgs/desktops/gnome/core/evince/default.nix
+++ b/nixpkgs/pkgs/desktops/gnome/core/evince/default.nix
@@ -30,6 +30,7 @@
 , gsettings-desktop-schemas
 , gnome-desktop
 , dbus
+, pantheon
 , python3
 , texlive
 , t1lib
@@ -40,19 +41,27 @@
 , supportMultimedia ? true # PDF multimedia
 , libgxps
 , supportXPS ? true # Open XML Paper Specification via libgxps
+, withPantheon ? false
 }:
 
 stdenv.mkDerivation rec {
   pname = "evince";
-  version = "40.4";
+  version = "41.2";
 
   outputs = [ "out" "dev" "devdoc" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/evince/${lib.versions.major version}/${pname}-${version}.tar.xz";
-    sha256 = "M0IFAODgYPF4pDUGMZfULa57Z+OcxDepZRCjPd9+lfs=";
+    sha256 = "lautDW/urJVg2zq4C6fF6rsf3xyg47PJMzmvBUU6JNg=";
   };
 
+  patches = lib.optionals withPantheon [
+    # Make this respect dark mode settings from Pantheon
+    # https://github.com/elementary/evince
+    # The patch currently differs from upstream (updated for evince 41).
+    ./pantheon-dark-style.patch
+  ];
+
   postPatch = ''
     chmod +x meson_post_install.py
     patchShebangs meson_post_install.py
@@ -96,9 +105,18 @@ stdenv.mkDerivation rec {
     poppler
     t1lib
     texlive.bin.core # kpathsea for DVI support
-  ] ++ lib.optional supportXPS libgxps
-    ++ lib.optionals supportMultimedia (with gst_all_1; [
-      gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav ]);
+  ] ++ lib.optionals supportXPS [
+    libgxps
+  ] ++ lib.optionals supportMultimedia (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad
+    gst-plugins-ugly
+    gst-libav
+  ]) ++ lib.optionals withPantheon [
+    pantheon.granite
+  ];
 
   mesonFlags = [
     "-Dnautilus=false"
@@ -128,8 +146,8 @@ stdenv.mkDerivation rec {
       on the GNOME Desktop with a single simple application.
     '';
 
-    license = lib.licenses.gpl2Plus;
+    license = licenses.gpl2Plus;
     platforms = platforms.linux;
-    maintainers = teams.gnome.members;
+    maintainers = teams.gnome.members ++ teams.pantheon.members;
   };
 }
diff --git a/nixpkgs/pkgs/desktops/gnome/core/evince/pantheon-dark-style.patch b/nixpkgs/pkgs/desktops/gnome/core/evince/pantheon-dark-style.patch
new file mode 100644
index 000000000000..5e1ef67b08cd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/core/evince/pantheon-dark-style.patch
@@ -0,0 +1,86 @@
+diff --git a/meson.build b/meson.build
+index bcb69cf7..4a18c08c 100644
+--- a/meson.build
++++ b/meson.build
+@@ -162,6 +162,7 @@ gmodule_dep = dependency('gmodule-2.0')
+ gmodule_no_export_dep = dependency('gmodule-no-export-2.0', version: glib_req_version)
+ gtk_dep = dependency('gtk+-3.0', version: gtk_req_version)
+ gthread_dep = dependency('gthread-2.0', version: glib_req_version)
++granite_dep = dependency('granite')
+ # Keep the version here synchronised with subprojects/libhandy.wrap
+ hdy_dep = dependency('libhandy-1', version: hdy_req_version, fallback: ['libhandy', 'libhandy_dep'])
+ 
+diff --git a/shell/ev-application.c b/shell/ev-application.c
+index e704bda2..d705328c 100644
+--- a/shell/ev-application.c
++++ b/shell/ev-application.c
+@@ -30,6 +30,7 @@
+ #include <glib/gi18n.h>
+ #include <glib/gstdio.h>
+ #include <gtk/gtk.h>
++#include <granite.h>
+ #include <handy.h>
+ #ifdef GDK_WINDOWING_X11
+ #include <gdk/gdkx.h>
+@@ -176,7 +177,7 @@ ev_spawn (const char     *uri,
+ 
+ 	g_string_append_printf (cmd, " %s", path);
+ 	g_free (path);
+-	
++
+ 	/* Page label */
+ 	if (dest) {
+                 switch (ev_link_dest_get_dest_type (dest)) {
+@@ -940,6 +941,20 @@ ev_application_migrate_config_dir (EvApplication *application)
+         g_free (old_accels);
+ }
+ 
++static void
++ev_application_set_prefers_color_scheme ()
++{
++        GtkSettings* gtk_settings = gtk_settings_get_default ();
++        GraniteSettings* granite_settings = granite_settings_get_default ();
++
++        g_object_set (
++          gtk_settings,
++          "gtk-application-prefer-dark-theme",
++          granite_settings_get_prefers_color_scheme (granite_settings) == GRANITE_SETTINGS_COLOR_SCHEME_DARK,
++          NULL
++        );
++}
++
+ static void
+ ev_application_startup (GApplication *gapplication)
+ {
+@@ -992,6 +1007,7 @@ ev_application_startup (GApplication *gapplication)
+ 
+         EvApplication *application = EV_APPLICATION (gapplication);
+         const gchar **it;
++        GraniteSettings* granite_settings = granite_settings_get_default ();
+ 
+ 	g_application_set_resource_base_path (gapplication, "/org/gnome/evince");
+ 
+@@ -999,6 +1015,11 @@ ev_application_startup (GApplication *gapplication)
+ 
+         hdy_init ();
+ 
++        ev_application_set_prefers_color_scheme ();
++
++        g_signal_connect (granite_settings, "notify::prefers-color-scheme",
++          G_CALLBACK(ev_application_set_prefers_color_scheme), NULL);
++
+         for (it = action_accels; it[0]; it += g_strv_length ((gchar **)it) + 1)
+                 gtk_application_set_accels_for_action (GTK_APPLICATION (application), it[0], &it[1]);
+ }
+diff --git a/shell/meson.build b/shell/meson.build
+index 7cbc48f2..a3089b13 100644
+--- a/shell/meson.build
++++ b/shell/meson.build
+@@ -52,6 +52,7 @@ sources += gnome.compile_resources(
+ deps = [
+   gdk_pixbuf_dep,
+   gnome_desktop_dep,
++  granite_dep,
+   hdy_dep,
+   libevmisc_dep,
+   libevproperties_dep,