diff -ru gnome-cups-manager-0.31-orig/gnome-cups-add/add-printer.c gnome-cups-manager-0.31-dev/gnome-cups-add/add-printer.c --- gnome-cups-manager-0.31-orig/gnome-cups-add/add-printer.c 2005-03-03 15:54:25.000000000 +0100 +++ gnome-cups-manager-0.31-dev/gnome-cups-add/add-printer.c 2006-03-21 21:33:08.000000000 +0100 @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -113,14 +114,20 @@ static void driver_page_sensitivity (GladeXML *xml, gboolean *back, gboolean *next) { - GtkWidget *druid = glade_xml_get_widget (xml, "add_printer_druid"); *back = TRUE; *next = NULL != gcups_driver_selector_get (driver_selector (xml)); - /* see driver_page_prepare for an explanation of the druid hack */ - gnome_druid_set_show_finish (GNOME_DRUID (druid), *next); + GCupsPPD const *ppd = gcups_driver_selector_get (driver_selector (xml)); + + if (ppd && ppd->model) { + g_signal_handlers_block_by_func(glade_xml_get_widget (xml, "printer-name-entry"), G_CALLBACK (druid_update_sensitivities), xml); + GtkEntry *printer_name_entry = (GtkEntry*) glade_xml_get_widget(xml, "printer-name-entry"); + gtk_entry_set_text(printer_name_entry, ppd->model); + g_signal_handlers_unblock_by_func(glade_xml_get_widget (xml, "printer-name-entry"), G_CALLBACK (druid_update_sensitivities), xml); + } } + static GtkWidget * driver_page_back (GladeXML *xml) { @@ -172,30 +179,149 @@ static GtkWidget * driver_page_next (GladeXML *xml) { - GList *existing; char *name, *uri, *ptr; - unsigned i = 0; GCupsPPD const *ppd = gcups_driver_selector_get (driver_selector (xml)); - + GtkWidget *res = NULL; + if (ppd == NULL) return NULL; uri = get_selected_uri (xml); - name = g_strdup (ppd->model); - /* strip out the spaces */ - for (ptr = name ; *ptr ; ptr++) - if (*ptr == ' ') - *ptr = '-'; + if (uri != NULL) { + res = glade_xml_get_widget (xml, "printer_info_page"); + } + + g_free (uri); + return res; +} + +/****************************************************************************/ + +static void +printer_info_page_setup (GladeXML *xml) +{ + GtkWidget *w = glade_xml_get_widget (xml, "printer-name-entry"); + g_signal_connect_swapped (w, + "changed", + G_CALLBACK (druid_update_sensitivities), xml); +} + +static gboolean check_printer_name(GladeXML *xml) { + /* Checks whether the name is correctly filled */ + GtkEntry *printer_name_entry = (GtkEntry *)glade_xml_get_widget (xml, "printer-name-entry"); + GtkLabel *warnings_label = (GtkLabel *)glade_xml_get_widget (xml, "warnings-label"); + + char *printer_name, *ptr; + gboolean has_spaces = FALSE; + unsigned i = 0; + + printer_name = g_strchomp(g_strdup(gtk_entry_get_text(printer_name_entry))); + + if(!strlen(printer_name)) { + gtk_label_set_markup(warnings_label,_("Error: Printer name cannot be empty.")); + g_free (printer_name); + return FALSE; + } + + /* Checks that the name contains no spaces */ + for (ptr = printer_name ; *ptr ; ptr++) + if (*ptr == ' ') { + has_spaces = TRUE; + break; + } + + + /* If the name is not valid show a warning message */ + if(has_spaces) { + gtk_label_set_markup(warnings_label,_("Error: Printer name cannot contain spaces.")); + g_free (printer_name); + return FALSE; + } + + + g_free (printer_name); + gtk_label_set_markup(warnings_label,""); + return TRUE; + } + +static void +printer_info_page_sensitivity (GladeXML *xml, gboolean *back, gboolean *next) +{ + GtkWidget *druid = glade_xml_get_widget (xml, "add_printer_druid"); + *back = TRUE; + *next = FALSE != check_printer_name (xml); + + /* see driver_page_prepare for an explanation of the druid hack */ + gnome_druid_set_show_finish (GNOME_DRUID (druid), *next); +} + +static GtkWidget * +printer_info_page_back (GladeXML *xml) +{ + return glade_xml_get_widget (xml, "driver_page"); +} + + +static void +printer_info_page_prepare (GladeXML *xml) +{ + /* The printer name defaults to the printer model */ + GtkEntry *printer_name_entry = (GtkEntry*) glade_xml_get_widget(xml, "printer-name-entry"); + GCupsPPD const *ppd = gcups_driver_selector_get (driver_selector (xml)); + GtkLabel *warnings_label = (GtkLabel *)glade_xml_get_widget (xml, "warnings-label"); + char *name; + + gtk_misc_set_alignment(GTK_MISC(warnings_label), 0.0f, 0.0f); + + name = g_strdup(gtk_entry_get_text(printer_name_entry)); + + if(!strlen(name)) + gtk_entry_set_text(printer_name_entry, ppd->model); + + g_free(name); +} + +static GtkWidget * +printer_info_page_next (GladeXML *xml) +{ + GCupsPPD const *ppd = gcups_driver_selector_get (driver_selector (xml)); + char *original_name, *name, *uri; + GtkEntry *printer_name_entry = (GtkEntry*) glade_xml_get_widget(xml, "printer-name-entry"); + GtkWidget *parent_window = glade_xml_get_widget (xml, "add_printer_window"); + GList *existing; + unsigned i = 0; + gboolean name_changed = FALSE; + + uri = get_selected_uri (xml); + name = g_strchomp(g_strdup(gtk_entry_get_text(printer_name_entry))); + original_name = g_strchomp(g_strdup(gtk_entry_get_text(printer_name_entry))); existing = gnome_cups_get_printers (); + while (NULL != g_list_find_custom (existing, name, (GCompareFunc)strcasecmp )) { g_free (name); - name = g_strdup_printf ("%s-%d", ppd->model, ++i); - } + name = g_strdup_printf ("%s-%d", original_name, ++i); + name_changed = TRUE; + } + g_list_foreach (existing, (GFunc)g_free, NULL); g_list_free (existing); + if(name_changed) { + GtkWidget *dialog; + + dialog = gtk_message_dialog_new + (GTK_WINDOW (parent_window), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, GTK_BUTTONS_OK, + _("Printer '%s' is already installed on this system. This printer has been renamed to '%s'."), + original_name, + name); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + } + if (add_cups_printer (xml, uri, ppd, name)) { GtkWidget *toplevel = glade_xml_get_widget (xml, "add_printer_window"); char const *args[] = { "-p", NULL }; @@ -204,14 +330,19 @@ gtk_widget_destroy (toplevel); g_object_unref (xml); gtk_main_quit (); - } + } g_free (uri); g_free (name); - + g_free (original_name); return NULL; } + + + + + /****************************************************************************/ static DruidPageDescription pages[] = { @@ -231,6 +362,14 @@ driver_page_back, driver_page_next }, + { + "printer_info_page", + printer_info_page_setup, + printer_info_page_prepare, + printer_info_page_sensitivity, + printer_info_page_back, + printer_info_page_next + }, { NULL } }; Only in gnome-cups-manager-0.31-dev/gnome-cups-add: add-printer.c~ Only in gnome-cups-manager-0.31-dev/gnome-cups-add: add-printer.o Only in gnome-cups-manager-0.31-dev/gnome-cups-add: .deps Only in gnome-cups-manager-0.31-dev/gnome-cups-add: druid-helper.c~ Only in gnome-cups-manager-0.31-dev/gnome-cups-add: druid-helper.o Only in gnome-cups-manager-0.31-dev/gnome-cups-add: gnome-cups-add diff -ru gnome-cups-manager-0.31-orig/gnome-cups-add/gnome-cups-add.glade gnome-cups-manager-0.31-dev/gnome-cups-add/gnome-cups-add.glade --- gnome-cups-manager-0.31-orig/gnome-cups-add/gnome-cups-add.glade 2004-08-30 22:32:42.000000000 +0200 +++ gnome-cups-manager-0.31-dev/gnome-cups-add/gnome-cups-add.glade 2006-03-21 20:06:07.000000000 +0100 @@ -18,6 +18,8 @@ False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST + True + False @@ -28,7 +30,7 @@ True - Step 1 of 2: Printer Connection + Step 1 of 3: Printer Connection gnome-cups-add-druid.png @@ -51,6 +53,10 @@ 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 4 @@ -81,11 +87,11 @@ True - Step 2 of 2: Printer Driver + Step 2 of 3: Printer Driver gnome-cups-add-druid.png - + 16 True False @@ -109,6 +115,92 @@ + + + + True + Step 3 of 3: Printer Information + gnome-cups-add-druid.png + + + + 16 + True + False + 6 + + + + True + Choose a name to identify this printer: + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + + True + True + True + True + 0 + + True + * + False + + + 0 + False + False + + + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + Only in gnome-cups-manager-0.31-dev/gnome-cups-add: gnome-cups-add.glade~ Only in gnome-cups-manager-0.31-dev/gnome-cups-add: gnome-cups-add.glade.bak Only in gnome-cups-manager-0.31-dev/gnome-cups-add: gnome-cups-add.gladep Only in gnome-cups-manager-0.31-dev/gnome-cups-add: gnome-cups-add.gladep.bak Only in gnome-cups-manager-0.31-dev/gnome-cups-add: .libs Only in gnome-cups-manager-0.31-dev/gnome-cups-add: Makefile