f99e75e
--- modules/printbackends/cups/gtkprintbackendcups.c	2009-01-01 20:41:58.000000000 +0100
ce5c764
+++ modules/printbackends/cups/gtkprintbackendcups.c	2009-01-21 13:54:39.000000000 +0100
ce5c764
@@ -1103,6 +1103,7 @@ cups_request_printer_list_cb (GtkPrintBa
ce5c764
   ipp_t *response;
ce5c764
   gboolean list_has_changed;
ce5c764
   GList *removed_printer_checklist;
ce5c764
+  gchar *remote_default_printer = NULL;
ce5c764
 
ce5c764
   GDK_THREADS_ENTER ();
ce5c764
 
ce5c764
@@ -1190,6 +1191,7 @@ cups_request_printer_list_cb (GtkPrintBa
ce5c764
       gboolean is_accepting_jobs = TRUE;
ce5c764
       gboolean default_printer = FALSE;
ce5c764
       gboolean got_printer_type = FALSE;
ce5c764
+      gboolean remote_printer = FALSE;
ce5c764
       
ce5c764
       /* Skip leading attributes until we hit a printer...
ce5c764
        */
ce5c764
@@ -1307,6 +1309,11 @@ cups_request_printer_list_cb (GtkPrintBa
f99e75e
               default_printer = TRUE;
f99e75e
             else
f99e75e
               default_printer = FALSE;
ce5c764
+
ce5c764
+            if (attr->values[0].integer & 0x00000002)
ce5c764
+              remote_printer = TRUE;
ce5c764
+            else
ce5c764
+              remote_printer = FALSE;
ce5c764
           }
ce5c764
         else
ce5c764
 	  {
ce5c764
@@ -1330,8 +1337,16 @@ cups_request_printer_list_cb (GtkPrintBa
ce5c764
         {
ce5c764
           if (default_printer && !cups_backend->got_default_printer)
ce5c764
             {
ce5c764
-              cups_backend->got_default_printer = TRUE;
ce5c764
-              cups_backend->default_printer = g_strdup (printer_name);
ce5c764
+              if (!remote_printer)
ce5c764
+                {
ce5c764
+                  cups_backend->got_default_printer = TRUE;
ce5c764
+                  cups_backend->default_printer = g_strdup (printer_name);
ce5c764
+                }
ce5c764
+              else
ce5c764
+                {
ce5c764
+                  if (remote_default_printer == NULL)
ce5c764
+                    remote_default_printer = g_strdup (printer_name);
ce5c764
+                }
ce5c764
             }
ce5c764
         }
ce5c764
       else
ce5c764
@@ -1552,6 +1567,26 @@ done:
ce5c764
   
ce5c764
   gtk_print_backend_set_list_done (backend);
ce5c764
 
ce5c764
+  if (!cups_backend->got_default_printer && remote_default_printer != NULL)
ce5c764
+    {
ce5c764
+      cups_backend->default_printer = g_strdup (remote_default_printer);
ce5c764
+      cups_backend->got_default_printer = TRUE;
ce5c764
+      g_free (remote_default_printer);
ce5c764
+
ce5c764
+      if (cups_backend->default_printer != NULL)
ce5c764
+        {
ce5c764
+          GtkPrinter *default_printer = NULL;
ce5c764
+          default_printer = gtk_print_backend_find_printer (GTK_PRINT_BACKEND (cups_backend),
ce5c764
+                                                            cups_backend->default_printer);
ce5c764
+          if (default_printer != NULL)
ce5c764
+            {
ce5c764
+              gtk_printer_set_is_default (default_printer, TRUE);
ce5c764
+              g_signal_emit_by_name (GTK_PRINT_BACKEND (cups_backend),
ce5c764
+                                     "printer-status-changed", default_printer);
ce5c764
+            }
ce5c764
+        }
ce5c764
+    }
ce5c764
+
ce5c764
   GDK_THREADS_LEAVE ();
ce5c764
 }
ce5c764