aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages
diff options
context:
space:
mode:
authorKei Kebreau <kkebreau@posteo.net>2019-06-27 10:01:12 -0400
committerKei Kebreau <kkebreau@posteo.net>2019-07-15 09:26:56 -0400
commit982c0b368daa2443de6fb642d73469d6a6ca468a (patch)
treeb3512047e12a12ebbd05c4684f483bf91a32d57f /gnu/packages
parentbba7a77ed9ad826bcdc6d9b8a183d66a23229501 (diff)
downloadguix-982c0b368daa2443de6fb642d73469d6a6ca468a.tar
guix-982c0b368daa2443de6fb642d73469d6a6ca468a.tar.gz
gnu: gnome-control-center: Update to 3.30.3.
* gnu/packages/gnome.scm (gnome-control-center): Update to 3.30.3. [source](patches): New field. [arguments]: Adjust "patch-paths" phase. [inputs]: Add libsecret and udisks. * gnu/packages/patches/gnome-control-center-use-udisks-to-get-disk-size.patch: New patch. * gnu/local.mk (dist_patch_DATA): Add it.
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/gnome.scm11
-rw-r--r--gnu/packages/patches/gnome-control-center-use-udisks-to-get-disk-size.patch221
2 files changed, 229 insertions, 3 deletions
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index eb251498e9..ea854ff38a 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -5809,7 +5809,7 @@ devices using the GNOME desktop.")
(define-public gnome-control-center
(package
(name "gnome-control-center")
- (version "3.28.2")
+ (version "3.30.3")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnome/sources/" name "/"
@@ -5817,7 +5817,10 @@ devices using the GNOME desktop.")
name "-" version ".tar.xz"))
(sha256
(base32
- "0d6pjdbsra16nav8201kaadja5yma92bhziki9601ilk2ry3v7pz"))))
+ "0gih1cmqbv803kp30704sllghb0impa0mmv3j8pndfg4zr2mnq9r"))
+ (patches
+ (search-patches
+ "gnome-control-center-use-udisks-to-get-disk-size.patch"))))
(build-system meson-build-system)
(arguments
'(#:glib-or-gtk? #t
@@ -5834,7 +5837,7 @@ devices using the GNOME desktop.")
(substitute* "panels/datetime/tz.h"
(("/usr/share/zoneinfo/zone.tab")
(string-append tzdata "/share/zoneinfo/zone.tab")))
- (substitute* "panels/datetime/test-endianess.c"
+ (substitute* "tests/datetime/test-endianess.c"
(("/usr/share/locale")
(string-append libc "/share/locale")))
(substitute* "panels/region/cc-region-panel.c"
@@ -5877,6 +5880,7 @@ devices using the GNOME desktop.")
("libgudev" ,libgudev)
("libgtop" ,libgtop)
("libpwquality" ,libpwquality)
+ ("libsecret" ,libsecret)
("libsoup" ,libsoup)
("libxml2" ,libxml2)
("libwacom" ,libwacom)
@@ -5888,6 +5892,7 @@ devices using the GNOME desktop.")
("pulseaudio" ,pulseaudio)
("smbclient" ,samba)
("tzdata" ,tzdata)
+ ("udisks" ,udisks)
("upower" ,upower)))
(synopsis "Utilities to configure the GNOME desktop")
(home-page "https://www.gnome.org/")
diff --git a/gnu/packages/patches/gnome-control-center-use-udisks-to-get-disk-size.patch b/gnu/packages/patches/gnome-control-center-use-udisks-to-get-disk-size.patch
new file mode 100644
index 0000000000..823684b2e9
--- /dev/null
+++ b/gnu/packages/patches/gnome-control-center-use-udisks-to-get-disk-size.patch
@@ -0,0 +1,221 @@
+This patch is derived from upstream commit 2520aea6 and fixes upstream issues
+285 and 302. See https://gitlab.gnome.org/GNOME/gcr/merge_requests/387,
+https://gitlab.gnome.org/GNOME/gnome-control-center/issues/285 and
+https://gitlab.gnome.org/GNOME/gnome-control-center/issues/302.
+
+diff --git a/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c
+index e2276a295b3fd9de01b30fc3369069b5d33ba5b7..ff47c1fef2493bcc7ab34f9e8716d570d8d370ed 100644
+--- a/panels/info/cc-info-overview-panel.c
++++ b/panels/info/cc-info-overview-panel.c
+@@ -36,6 +36,7 @@
+ #include <glibtop/mountlist.h>
+ #include <glibtop/mem.h>
+ #include <glibtop/sysinfo.h>
++#include <udisks/udisks.h>
+
+ #include <gdk/gdk.h>
+
+@@ -81,9 +82,7 @@ typedef struct
+
+ GCancellable *cancellable;
+
+- /* Free space */
+- GList *primary_mounts;
+- guint64 total_bytes;
++ UDisksClient *client;
+
+ GraphicsData *graphics_data;
+ } CcInfoOverviewPanelPrivate;
+@@ -96,8 +95,6 @@ struct _CcInfoOverviewPanel
+ CcInfoOverviewPanelPrivate *priv;
+ };
+
+-static void get_primary_disc_info_start (CcInfoOverviewPanel *self);
+-
+ typedef struct
+ {
+ char *major;
+@@ -486,111 +483,51 @@ get_os_type (void)
+ }
+
+ static void
+-query_done (GFile *file,
+- GAsyncResult *res,
+- CcInfoOverviewPanel *self)
++get_primary_disc_info (CcInfoOverviewPanel *self)
+ {
+ CcInfoOverviewPanelPrivate *priv;
+- g_autoptr(GFileInfo) info = NULL;
+- g_autoptr(GError) error = NULL;
+-
+- info = g_file_query_filesystem_info_finish (file, res, &error);
+- if (info != NULL)
+- {
+- priv = cc_info_overview_panel_get_instance_private (self);
+- priv->total_bytes += g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE);
+- }
+- else
+- {
+- if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+- return;
+- else
+- {
+- g_autofree char *path = NULL;
+- path = g_file_get_path (file);
+- g_warning ("Failed to get filesystem free space for '%s': %s", path, error->message);
+- }
+- }
++ GDBusObjectManager *manager;
++ g_autolist(GDBusObject) objects = NULL;
++ GList *l;
++ guint64 total_size;
+
+- /* And onto the next element */
+- get_primary_disc_info_start (self);
+-}
+-
+-static void
+-get_primary_disc_info_start (CcInfoOverviewPanel *self)
+-{
+- GUnixMountEntry *mount;
+- g_autoptr(GFile) file = NULL;
+- CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self);
++ priv = cc_info_overview_panel_get_instance_private (self);
++ total_size = 0;
+
+- if (priv->primary_mounts == NULL)
++ if (!priv->client)
+ {
+- g_autofree char *size = NULL;
+-
+- size = g_format_size (priv->total_bytes);
+- gtk_label_set_text (GTK_LABEL (priv->disk_label), size);
+-
++ gtk_label_set_text (GTK_LABEL (priv->disk_label), _("Unknown"));
+ return;
+ }
+
+- mount = priv->primary_mounts->data;
+- priv->primary_mounts = g_list_remove (priv->primary_mounts, mount);
+- file = g_file_new_for_path (g_unix_mount_get_mount_path (mount));
+- g_unix_mount_free (mount);
+-
+- g_file_query_filesystem_info_async (file,
+- G_FILE_ATTRIBUTE_FILESYSTEM_SIZE,
+- 0,
+- priv->cancellable,
+- (GAsyncReadyCallback) query_done,
+- self);
+-}
+-
+-static void
+-get_primary_disc_info (CcInfoOverviewPanel *self)
+-{
+- GList *points;
+- GList *p;
+- GHashTable *hash;
+- CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self);
+-
+- hash = g_hash_table_new (g_str_hash, g_str_equal);
+- points = g_unix_mount_points_get (NULL);
+-
+- /* If we do not have /etc/fstab around, try /etc/mtab */
+- if (points == NULL)
+- points = g_unix_mounts_get (NULL);
++ manager = udisks_client_get_object_manager (priv->client);
++ objects = g_dbus_object_manager_get_objects (manager);
+
+- for (p = points; p != NULL; p = p->next)
++ for (l = objects; l != NULL; l = l->next)
+ {
+- GUnixMountEntry *mount = p->data;
+- const char *mount_path;
+- const char *device_path;
+-
+- mount_path = g_unix_mount_get_mount_path (mount);
+- device_path = g_unix_mount_get_device_path (mount);
+-
+- /* Do not count multiple mounts with same device_path, because it is
+- * probably something like btrfs subvolume. Use only the first one in
+- * order to count the real size. */
+- if (gsd_should_ignore_unix_mount (mount) ||
+- gsd_is_removable_mount (mount) ||
+- g_str_has_prefix (mount_path, "/media/") ||
+- g_str_has_prefix (mount_path, g_get_home_dir ()) ||
+- g_hash_table_lookup (hash, device_path) != NULL)
++ UDisksDrive *drive;
++ drive = udisks_object_peek_drive (UDISKS_OBJECT (l->data));
++
++ /* Skip removable devices */
++ if (drive == NULL ||
++ udisks_drive_get_removable (drive) ||
++ udisks_drive_get_ejectable (drive))
+ {
+- g_unix_mount_free (mount);
+ continue;
+ }
+
+- priv->primary_mounts = g_list_prepend (priv->primary_mounts, mount);
+- g_hash_table_insert (hash, (gpointer) device_path, (gpointer) device_path);
++ total_size += udisks_drive_get_size (drive);
+ }
+- g_list_free (points);
+- g_hash_table_destroy (hash);
+
+- priv->cancellable = g_cancellable_new ();
+- get_primary_disc_info_start (self);
++ if (total_size > 0)
++ {
++ g_autofree gchar *size = g_format_size (total_size);
++ gtk_label_set_text (GTK_LABEL (priv->disk_label), size);
++ }
++ else
++ {
++ gtk_label_set_text (GTK_LABEL (priv->disk_label), _("Unknown"));
++ }
+ }
+
+ static char *
+@@ -852,8 +789,7 @@ cc_info_overview_panel_finalize (GObject *object)
+ g_clear_object (&priv->cancellable);
+ }
+
+- if (priv->primary_mounts)
+- g_list_free_full (priv->primary_mounts, (GDestroyNotify) g_unix_mount_free);
++ g_clear_object (&priv->client);
+
+ g_free (priv->gnome_version);
+ g_free (priv->gnome_date);
+@@ -895,6 +831,7 @@ static void
+ cc_info_overview_panel_init (CcInfoOverviewPanel *self)
+ {
+ CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self);
++ g_autoptr(GError) error = NULL;
+
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+@@ -907,6 +844,12 @@ cc_info_overview_panel_init (CcInfoOverviewPanel *self)
+ else
+ gtk_widget_destroy (priv->updates_button);
+
++ priv->client = udisks_client_new_sync (NULL, &error);
++
++ if (error != NULL)
++ g_warning ("Unable to get UDisks client: %s. Disk information will not be available.",
++ error->message);
++
+ info_overview_panel_setup_overview (self);
+ info_overview_panel_setup_virt (self);
+ }
+diff --git a/panels/info/meson.build b/panels/info/meson.build
+index 03742551314f91b60e3ec1caad153ff314b93310..c54e5fdaff3c6ddb59cca8ee9a2bf5a0212bf196 100644
+--- a/panels/info/meson.build
++++ b/panels/info/meson.build
+@@ -61,6 +61,7 @@ sources += gnome.compile_resources(
+
+ deps = common_deps + [
+ polkit_gobject_dep,
++ dependency('udisks2', version: '>= 2.1.8'),
+ dependency('libgtop-2.0')
+ ]
+