From 68e0d368fb5d3088c5e7d7513607d24dbcb50e02 Mon Sep 17 00:00:00 2001 From: David Zeuthen Date: Tue, 21 May 2013 16:06:19 +0000 Subject: UDisksClient: Make it possible to get part desc based on the part table subtype Otherwise, Disks can't populate the partition table combobox correctly for GPT because "Generic", "Apple" and "Other" subtypes all have the same partition type (ZFS) but with different descriptions ("ZFS", "Apple ZFS", "Solaris /usr"). Signed-off-by: David Zeuthen --- diff --git a/doc/udisks2-sections.txt b/doc/udisks2-sections.txt index 9dbeef6..897f48a 100644 --- a/doc/udisks2-sections.txt +++ b/doc/udisks2-sections.txt @@ -70,6 +70,7 @@ udisks_partition_type_info_free udisks_client_get_partition_type_infos udisks_client_get_partition_table_subtypes udisks_client_get_partition_type_for_display +udisks_client_get_partition_type_and_subtype_for_display udisks_client_get_partition_table_type_for_display udisks_client_get_partition_table_subtype_for_display diff --git a/udisks/udisksclient.c b/udisks/udisksclient.c index aca946c..f7eaa04 100644 --- a/udisks/udisksclient.c +++ b/udisks/udisksclient.c @@ -2395,6 +2395,48 @@ udisks_client_get_partition_type_for_display (UDisksClient *client, return ret; } +/** + * udisks_client_get_partition_type_and_subtype_for_display: + * @client: A #UDisksClient. + * @partition_table_type: A partitioning type e.g. 'dos' or 'gpt'. + * @partition_table_subtype: A partitioning subtype or %NULL. + * @partition_type: A partition type. + * + * Like udisks_client_get_partition_type_for_display() but also takes + * the partition table subtype into account, if available. This is + * useful in scenarios where different subtypes is using the same + * partition type. + * + * Returns: A description of @partition_type or %NULL if unknown. + * + * Since: 2.1.1 + */ +const gchar * +udisks_client_get_partition_type_and_subtype_for_display (UDisksClient *client, + const gchar *partition_table_type, + const gchar *partition_table_subtype, + const gchar *partition_type) +{ + const gchar *ret = NULL; + guint n; + + for (n = 0; known_partition_types[n].name != NULL; n++) + { + if (g_strcmp0 (known_partition_types[n].table_type, partition_table_type) == 0 && + g_strcmp0 (known_partition_types[n].type, partition_type) == 0) + { + if (partition_table_subtype != NULL && + g_strcmp0 (known_partition_types[n].table_subtype, partition_table_subtype) != 0) + continue; + ret = g_dpgettext2 (GETTEXT_PACKAGE, "part-type", known_partition_types[n].name); + goto out; + } + } + + out: + return ret; +} + /* ---------------------------------------------------------------------------------------------------- */ /** diff --git a/udisks/udisksclient.h b/udisks/udisksclient.h index 93dfddf..121efc3 100644 --- a/udisks/udisksclient.h +++ b/udisks/udisksclient.h @@ -136,6 +136,12 @@ const gchar *udisks_client_get_partition_type_for_display (UDisksCl const gchar *partition_table_type, const gchar *partition_type); +const gchar *udisks_client_get_partition_type_and_subtype_for_display (UDisksClient *client, + const gchar *partition_table_type, + const gchar *partition_table_subtype, + const gchar *partition_type); + + const gchar *udisks_client_get_partition_table_type_for_display (UDisksClient *client, const gchar *partition_table_type); -- cgit v0.9.0.2-2-gbebe