From 0de9a1be04a2f93bcdf81bdb0f6c2dca12225974 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 17 Jul 2019 15:58:34 +0200 Subject: gnu: gnome-control-center: Shorten patch file name. * gnu/packages/patches/gnome-control-center-use-udisks-to-get-disk-size.patch: Rename to... * gnu/packages/patches/gnome-control-center-udisks.patch: ... this. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/gnome.scm (gnome-control-center)[source]: Likewise. --- gnu/local.mk | 2 +- gnu/packages/gnome.scm | 3 +- .../patches/gnome-control-center-udisks.patch | 221 +++++++++++++++++++++ ...ontrol-center-use-udisks-to-get-disk-size.patch | 221 --------------------- 4 files changed, 223 insertions(+), 224 deletions(-) create mode 100644 gnu/packages/patches/gnome-control-center-udisks.patch delete mode 100644 gnu/packages/patches/gnome-control-center-use-udisks-to-get-disk-size.patch diff --git a/gnu/local.mk b/gnu/local.mk index c41836ad3c..49c3826685 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -889,7 +889,7 @@ dist_patch_DATA = \ %D%/packages/patches/glog-gcc-5-demangling.patch \ %D%/packages/patches/gmp-arm-asm-nothumb.patch \ %D%/packages/patches/gmp-faulty-test.patch \ - %D%/packages/patches/gnome-control-center-use-udisks-to-get-disk-size.patch \ + %D%/packages/patches/gnome-control-center-udisks.patch \ %D%/packages/patches/gnome-shell-theme.patch \ %D%/packages/patches/gnome-tweaks-search-paths.patch \ %D%/packages/patches/gnutls-skip-trust-store-test.patch \ diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index 46dd268f8f..beaba3b4c5 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -5941,8 +5941,7 @@ (define-public gnome-control-center (base32 "0gih1cmqbv803kp30704sllghb0impa0mmv3j8pndfg4zr2mnq9r")) (patches - (search-patches - "gnome-control-center-use-udisks-to-get-disk-size.patch")))) + (search-patches "gnome-control-center-udisks.patch")))) (build-system meson-build-system) (arguments '(#:glib-or-gtk? #t diff --git a/gnu/packages/patches/gnome-control-center-udisks.patch b/gnu/packages/patches/gnome-control-center-udisks.patch new file mode 100644 index 0000000000..823684b2e9 --- /dev/null +++ b/gnu/packages/patches/gnome-control-center-udisks.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 + #include + #include ++#include + + #include + +@@ -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') + ] + 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 deleted file mode 100644 index 823684b2e9..0000000000 --- a/gnu/packages/patches/gnome-control-center-use-udisks-to-get-disk-size.patch +++ /dev/null @@ -1,221 +0,0 @@ -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 - #include - #include -+#include - - #include - -@@ -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') - ] - -- cgit v1.2.3