[gnome-disk-utility] Restrict maximal label length if known
- From: Ondrej Holy <oholy src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-disk-utility] Restrict maximal label length if known
- Date: Mon, 10 Apr 2017 13:41:25 +0000 (UTC)
commit 39538a572ac9e894e5b1ac1df19b6717217d23b7
Author: Kai Lüke <kailueke riseup net>
Date: Sun Apr 9 17:45:42 2017 +0200
Restrict maximal label length if known
Too long filesystem labels are simply cut when they are set, but there
was no indication for this in the GUI.
The respective dialogs now restrict the maximal FS label length.
https://bugzilla.gnome.org/show_bug.cgi?id=689360
src/disks/gducreatefilesystemwidget.c | 6 ++++-
src/disks/gdufilesystemdialog.c | 9 ++++++++
src/libgdu/gduutils.c | 36 +++++++++++++++++++++++++++++++++
src/libgdu/gduutils.h | 5 ++++
4 files changed, 55 insertions(+), 1 deletions(-)
---
diff --git a/src/disks/gducreatefilesystemwidget.c b/src/disks/gducreatefilesystemwidget.c
index 55803e6..a6d9aa0 100644
--- a/src/disks/gducreatefilesystemwidget.c
+++ b/src/disks/gducreatefilesystemwidget.c
@@ -15,6 +15,7 @@
#include <gdk/gdkx.h>
#include <stdlib.h>
+#include "gduutils.h"
#include "gduapplication.h"
#include "gduwindow.h"
#include "gducreatefilesystemwidget.h"
@@ -194,7 +195,6 @@ update (GduCreateFilesystemWidget *widget)
GTK_ENTRY_ICON_SECONDARY,
NULL);
- name = gtk_entry_get_text (GTK_ENTRY (widget->name_entry));
passphrase = gtk_entry_get_text (GTK_ENTRY (widget->passphrase_entry));
id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (widget->type_combobox));
@@ -260,6 +260,10 @@ update (GduCreateFilesystemWidget *widget)
has_info = TRUE;
}
+ _gtk_entry_buffer_truncate_bytes (gtk_entry_get_buffer (GTK_ENTRY (widget->name_entry)),
+ gdu_utils_get_max_label_length (fstype));
+ name = gtk_entry_get_text (GTK_ENTRY (widget->name_entry));
+
if (show_name_widgets)
{
gtk_widget_show (widget->name_label);
diff --git a/src/disks/gdufilesystemdialog.c b/src/disks/gdufilesystemdialog.c
index c3c5a5c..8db4705 100644
--- a/src/disks/gdufilesystemdialog.c
+++ b/src/disks/gdufilesystemdialog.c
@@ -11,6 +11,7 @@
#include <glib/gi18n.h>
+#include "gduutils.h"
#include "gduapplication.h"
#include "gduwindow.h"
#include "gdufilesystemdialog.h"
@@ -23,6 +24,7 @@ typedef struct
{
GtkWidget *dialog;
gchar *orig_label;
+ guint label_max_length;
} ChangeFilesystemLabelData;
static void
@@ -32,6 +34,9 @@ on_change_filesystem_label_entry_changed (GtkEditable *editable,
ChangeFilesystemLabelData *data = user_data;
gboolean sensitive;
+ _gtk_entry_buffer_truncate_bytes (gtk_entry_get_buffer (GTK_ENTRY (editable)),
+ data->label_max_length);
+
sensitive = FALSE;
if (g_strcmp0 (gtk_entry_get_text (GTK_ENTRY (editable)), data->orig_label) != 0)
{
@@ -77,6 +82,7 @@ gdu_filesystem_dialog_show (GduWindow *window,
const gchar *label;
ChangeFilesystemLabelData data;
const gchar *label_to_set;
+ gchar *fstype;
block = udisks_object_peek_block (object);
filesystem = udisks_object_peek_filesystem (object);
@@ -99,6 +105,9 @@ gdu_filesystem_dialog_show (GduWindow *window,
memset (&data, '\0', sizeof (ChangeFilesystemLabelData));
data.dialog = dialog;
data.orig_label = g_strdup (label);
+ fstype = udisks_block_dup_id_type (block);
+ data.label_max_length = gdu_utils_get_max_label_length (fstype);
+ g_free (fstype);
gtk_entry_set_text (GTK_ENTRY (entry), label);
gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1);
diff --git a/src/libgdu/gduutils.c b/src/libgdu/gduutils.c
index f1940ad..ee29af8 100644
--- a/src/libgdu/gduutils.c
+++ b/src/libgdu/gduutils.c
@@ -780,6 +780,42 @@ gdu_utils_is_ntfs_available (void)
/* ---------------------------------------------------------------------------------------------------- */
+guint
+gdu_utils_get_max_label_length (const gchar *fstype)
+{
+ guint max_length = G_MAXUINT;
+
+ if (g_strcmp0 (fstype, "exfat") == 0)
+ {
+ max_length = 15;
+ }
+ else if (g_strcmp0 (fstype, "vfat") == 0)
+ {
+ max_length = 11;
+ }
+
+ return max_length;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+gboolean
+_gtk_entry_buffer_truncate_bytes (GtkEntryBuffer *gtk_entry_buffer,
+ guint max_bytes)
+{
+ guint max_utf8_length = max_bytes;
+
+ while (gtk_entry_buffer_get_bytes (gtk_entry_buffer) > max_bytes)
+ {
+ gtk_entry_buffer_delete_text (gtk_entry_buffer, max_utf8_length, -1);
+ max_utf8_length--;
+ }
+
+ return max_utf8_length != max_bytes;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
#ifdef __GNUC_PREREQ
# if __GNUC_PREREQ(4,6)
# pragma GCC diagnostic pop
diff --git a/src/libgdu/gduutils.h b/src/libgdu/gduutils.h
index 060cd0c..707da51 100644
--- a/src/libgdu/gduutils.h
+++ b/src/libgdu/gduutils.h
@@ -62,6 +62,11 @@ gboolean gdu_utils_show_confirmation (GtkWindow *parent_window,
gboolean gdu_utils_is_ntfs_available (void);
+guint gdu_utils_get_max_label_length (const gchar *fstype);
+
+gboolean _gtk_entry_buffer_truncate_bytes (GtkEntryBuffer *gtk_entry_buffer,
+ guint max_bytes);
+
gboolean gdu_util_is_same_size (GList *blocks,
guint64 *out_min_size);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]