8c95991
diff -up system-config-printer-1.1.16/system-config-printer.py.driver-pre-selection system-config-printer-1.1.16/system-config-printer.py
1e57364
--- system-config-printer-1.1.16/system-config-printer.py.driver-pre-selection	2010-01-11 14:58:14.392910996 +0000
1e57364
+++ system-config-printer-1.1.16/system-config-printer.py	2010-01-11 14:58:23.834909684 +0000
1e57364
@@ -3913,6 +3913,7 @@ class NewPrinterGUI(GtkGUI):
1e57364
             self.rbtnChangePPDKeepSettings.set_active(True)
1e57364
 
1e57364
             self.auto_model = ""
1e57364
+            self.auto_driver = None
1e57364
             ppd = self.mainapp.ppd
1e57364
             #self.mainapp.devid = "MFG:Samsung;MDL:ML-3560;DES:;CMD:GDI;"
1e57364
             devid = self.mainapp.devid
1e57364
@@ -3968,38 +3969,41 @@ class NewPrinterGUI(GtkGUI):
8c95991
                     else:
8c95991
                         self.auto_make = devid_dict["MFG"]
8c95991
                         self.auto_model = devid_dict["MDL"]
8c95991
+                        self.auto_driver = None
8c95991
                 except:
8c95991
                     self.auto_make = devid_dict["MFG"]
8c95991
                     self.auto_model = devid_dict["MDL"]
8c95991
+                    self.auto_driver = None
8c95991
                 if not self.device or not self.device.id:
8c95991
                     self.device.id = devid
8c95991
                     self.device.id_dict = cupshelpers.parseDeviceID (devid)
8c95991
                 self.mainapp.devid = ""
8c95991
             elif ppd:
8c95991
-                attr = ppd.findAttr("Manufacturer")
8c95991
-                if attr:
8c95991
-                    mfr = attr.value
1e57364
-                else:
8c95991
-                    mfr = ""
8c95991
-                makeandmodel = mfr
8c95991
-                attr = ppd.findAttr("ModelName")
8c95991
-                if not attr: attr = ppd.findAttr("ShortNickName")
8c95991
-                if not attr: attr = ppd.findAttr("NickName")
8c95991
-                if attr:
8c95991
-                    if attr.value.startswith(mfr):
8c95991
-                        makeandmodel = attr.value
8c95991
-                    else:
8c95991
-                        makeandmodel += ' ' + attr.value
8c95991
-                else:
8c95991
-                    makeandmodel = ''
1e57364
+                attr = ppd.findAttr("NickName")
1e57364
+                if not attr:
1e57364
+                    attr = ppd.findAttr("ModelName")
1e57364
+
1e57364
+                if attr.value:
1e57364
+                    mfgmdl = cupshelpers.ppds.ppdMakeModelSplit (attr.value)
1e57364
+                    (self.auto_make, self.auto_model) = mfgmdl
1e57364
 
8c95991
-                (self.auto_make,
8c95991
-                 self.auto_model) = \
8c95991
-                 cupshelpers.ppds.ppdMakeModelSplit (makeandmodel)
1e57364
+                    # Search for ppdname with that make-and-model
1e57364
+                    self.loadPPDs ()
1e57364
+                    ppds = self.ppds.getInfoFromModel (self.auto_make,
1e57364
+                                                       self.auto_model)
1e57364
+                    for ppd, info in ppds.iteritems ():
1e57364
+                        if info.get ("ppd-make-and-model") == attr.value:
1e57364
+                            self.auto_driver = ppd
1e57364
+                            break
1e57364
+                else:
8c95991
+                    self.auto_make = None
8c95991
+                    self.auto_model = None
8c95991
+                    self.auto_driver = None
8c95991
             else:
8c95991
                 # Special CUPS names for a raw queue.
8c95991
                 self.auto_make = 'Generic'
8c95991
                 self.auto_model = 'Raw Queue'
8c95991
+                self.auto_driver = None
8c95991
 
8c95991
             try:
8c95991
                 if self.dialog_mode == "ppd":
1e57364
@@ -4249,6 +4253,8 @@ class NewPrinterGUI(GtkGUI):
8c95991
         if self.openprinting_query_handle != None:
8c95991
             self.openprinting.cancelOperation (self.openprinting_query_handle)
8c95991
             self.openprinting_query_handle = None
8c95991
+
8c95991
+        self.device = None
8c95991
         return True
8c95991
 
8c95991
     def on_btnNPBack_clicked(self, widget):
1e57364
@@ -4267,6 +4273,7 @@ class NewPrinterGUI(GtkGUI):
8c95991
             self.busy (self.NewPrinterWindow)
8c95991
             if page_nr == 1: # Device (first page)
8c95991
                 self.auto_make, self.auto_model = None, None
8c95991
+                self.auto_driver = None
8c95991
                 self.device.uri = self.getDeviceURI()
8c95991
                 if not self.install_hplip_plugin(self.device.uri):
8c95991
                     self.on_NPCancel(None)
1e57364
@@ -4434,6 +4441,7 @@ class NewPrinterGUI(GtkGUI):
8c95991
                             cupshelpers.ppds.ppdMakeModelSplit (make_model)
8c95991
                         self.auto_make = make
8c95991
                         self.auto_model = model
8c95991
+                        self.auto_driver = ppdname
8c95991
                         if (status == self.ppds.STATUS_SUCCESS and \
8c95991
                             self.dialog_mode != "ppd"):
8c95991
                             self.exactdrivermatch = True
1e57364
@@ -6414,7 +6422,17 @@ class NewPrinterGUI(GtkGUI):
8c95991
         ppds = self.ppds.getInfoFromModel(pmake, pmodel)
8c95991
 
8c95991
         self.NPDrivers = self.ppds.orderPPDNamesByPreference(ppds.keys(),
8c95991
-                                             self.jockey_installed_files) 
8c95991
+                                             self.jockey_installed_files)
8c95991
+        if self.auto_driver and self.device:
8c95991
+            drivers = []
8c95991
+            for driver in self.NPDrivers:
8c95991
+                if driver == self.auto_driver:
8c95991
+                    drivers.insert (0, driver)
8c95991
+                else:
8c95991
+                    drivers.append (driver)
8c95991
+
8c95991
+            self.NPDrivers = drivers
8c95991
+
8c95991
         for i in range (len(self.NPDrivers)):
8c95991
             ppd = ppds[self.NPDrivers[i]]
8c95991
             driver = ppd["ppd-make-and-model"]
1e57364
@@ -6426,7 +6444,12 @@ class NewPrinterGUI(GtkGUI):
8c95991
             except KeyError:
8c95991
                 pass
8c95991
 
8c95991
-            if i == 0:
8c95991
+            if not self.device and self.auto_driver == self.NPDrivers[i]:
8c95991
+                iter = model.append ((driver + _(" (Current)"),))
8c95991
+                path = model.get_path (iter)
8c95991
+                self.tvNPDrivers.get_selection().select_path(path)
8c95991
+                self.tvNPDrivers.scroll_to_cell(path, None, True, 0.5, 0.0)
8c95991
+            elif self.device and i == 0:
8c95991
                 iter = model.append ((driver + _(" (recommended)"),))
8c95991
                 path = model.get_path (iter)
8c95991
                 self.tvNPDrivers.get_selection().select_path(path)
1e57364
@@ -6881,6 +6904,7 @@ class NewPrinterGUI(GtkGUI):
8c95991
                 checkppd = ppd
8c95991
 
8c95991
         self.NewPrinterWindow.hide()
8c95991
+        self.device = None
8c95991
         self.mainapp.populateList()
8c95991
 
8c95991
         # Now select it.