[gnome-control-center] printers: Check for invalid characters in printer names



commit df51bed16c7360ac8e308ad8f88d2ee68208d8cf
Author: Corey Berla <corey berla me>
Date:   Thu Jul 29 14:20:48 2021 -0700

    printers: Check for invalid characters in printer names
    
    Currently when you rename a printer through the print details page
    there is no indication of errors produced by CUPS, most notable
    about any invalid characters used. Adds a function to check
    for invalid characters and shows a warning to users.  No
    attempt will be made to rename the printer if it contains an
    invalid character.  Users are currently shown an elevation prompt
    before this fix
    https://www.cups.org/doc/man-lpstat.html
    
    Partially addresses #1008

 panels/printers/pp-details-dialog.c | 13 ++++++++++---
 panels/printers/pp-printer-entry.c  |  2 +-
 panels/printers/pp-utils.c          |  7 +++++++
 panels/printers/pp-utils.h          |  2 ++
 4 files changed, 20 insertions(+), 4 deletions(-)
---
diff --git a/panels/printers/pp-details-dialog.c b/panels/printers/pp-details-dialog.c
index 5a839cf53..6eeffb150 100644
--- a/panels/printers/pp-details-dialog.c
+++ b/panels/printers/pp-details-dialog.c
@@ -45,6 +45,7 @@ struct _PpDetailsDialog {
   GtkBox       *driver_buttons;
   GtkBox       *loading_box;
   GtkLabel     *printer_address_label;
+  GtkRevealer  *print_name_hint_revealer;
   GtkEntry     *printer_location_entry;
   GtkLabel     *printer_model_label;
   GtkStack     *printer_model_stack;
@@ -70,9 +71,14 @@ printer_name_changed (PpDetailsDialog *self)
 
   name = pp_details_dialog_get_printer_name (self);
 
-  /* Translators: This is the title of the dialog. %s is the printer name. */
-  title = g_strdup_printf (_("%s Details"), name);
-  gtk_label_set_label (self->dialog_title, title);
+  if (printer_name_is_valid (name)){
+    /* Translators: This is the title of the dialog. %s is the printer name. */
+    title = g_strdup_printf (_("%s Details"), name);
+    gtk_revealer_set_reveal_child (self->print_name_hint_revealer, FALSE);
+    gtk_label_set_label (self->dialog_title, title);
+  } else {
+    gtk_revealer_set_reveal_child (self->print_name_hint_revealer, TRUE);
+  }
 }
 
 static void set_ppd_cb (const gchar *printer_name, gboolean success, gpointer user_data);
@@ -328,6 +334,7 @@ pp_details_dialog_class_init (PpDetailsDialogClass *klass)
   gtk_widget_class_set_template_from_resource (widget_class, 
"/org/gnome/control-center/printers/pp-details-dialog.ui");
 
   gtk_widget_class_bind_template_child (widget_class, PpDetailsDialog, dialog_title);
+  gtk_widget_class_bind_template_child (widget_class, PpDetailsDialog, print_name_hint_revealer);
   gtk_widget_class_bind_template_child (widget_class, PpDetailsDialog, driver_buttons);
   gtk_widget_class_bind_template_child (widget_class, PpDetailsDialog, loading_box);
   gtk_widget_class_bind_template_child (widget_class, PpDetailsDialog, printer_address_label);
diff --git a/panels/printers/pp-printer-entry.c b/panels/printers/pp-printer-entry.c
index b2e6b32c4..ba8700406 100644
--- a/panels/printers/pp-printer-entry.c
+++ b/panels/printers/pp-printer-entry.c
@@ -371,7 +371,7 @@ show_printer_details_response_cb (PpDetailsDialog *dialog,
     printer_set_location (self->printer_name, new_location);
 
   new_name = pp_details_dialog_get_printer_name (dialog);
-  if (g_strcmp0 (self->printer_name, new_name) != 0)
+  if (g_strcmp0 (self->printer_name, new_name) != 0 && printer_name_is_valid (new_name))
     {
       g_autoptr(PpPrinter) printer = pp_printer_new (self->printer_name);
 
diff --git a/panels/printers/pp-utils.c b/panels/printers/pp-utils.c
index 7a94745a0..4cd22e3f4 100644
--- a/panels/printers/pp-utils.c
+++ b/panels/printers/pp-utils.c
@@ -3636,3 +3636,10 @@ shift_string_left (gchar *str)
       memmove (str, next, strlen (next) + 1);
     }
 }
+
+gboolean
+printer_name_is_valid (gchar *str)
+{
+  const gchar *invalid_chars = " \t#/";
+  return strlen(str) == strcspn(str, invalid_chars);
+}
diff --git a/panels/printers/pp-utils.h b/panels/printers/pp-utils.h
index f1d840ffc..50c48c0cf 100644
--- a/panels/printers/pp-utils.h
+++ b/panels/printers/pp-utils.h
@@ -258,4 +258,6 @@ gchar      *canonicalize_device_name (GList         *device_names,
 
 void        shift_string_left (gchar *str);
 
+gboolean    printer_name_is_valid (gchar *str);
+
 G_END_DECLS


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]