[gnome-control-center] printers: Check for invalid characters in printer names
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] printers: Check for invalid characters in printer names
- Date: Tue, 10 May 2022 05:16:39 +0000 (UTC)
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]