diff --git a/newprinter.py b/newprinter.py
index 3d3b49bfb..2d28121f1 100644
--- a/newprinter.py
+++ b/newprinter.py
@@ -285,6 +285,7 @@ def __init__(self):
"ntbkPPDSource",
"rbtnNPPPD",
"tvNPMakes",
+ "entryNPModelsSearch",
"rbtnNPFoomatic",
"filechooserPPD",
"rbtnNPDownloadableDriverSearch",
@@ -394,6 +395,13 @@ def __init__(self):
treeview.append_column(column)
treeview.get_selection().set_mode(selection_mode)
+ # Set up filter for Models list
+ self.models_liststore = self.tvNPModels.get_model()
+ self.models_filter = self.models_liststore.filter_new()
+ self.models_filter.set_visible_func(self.models_visible_func)
+ self.tvNPModels.set_model(self.models_filter)
+ self.entryNPModelsSearch.connect("changed", self.on_entryNPModelsSearch_changed)
+
# Since some dialogs are reused we can't let the delete-event's
# default handler destroy them
self.SMBBrowseDialog.connect ("delete-event", on_delete_just_hide)
@@ -1356,11 +1364,12 @@ def _handlePrinterInstallationMode (self, step):
# is available, based on the model the user has
# selected.
try:
- model, iter = self.tvNPModels.get_selection ().\
- get_selected ()
- name = model.get(iter, 0)[0]
- name = self.makeNameUnique (name)
- self.entNPName.set_text (name)
+ selection = self.tvNPModels.get_selection ()
+ model, iter = selection.get_selected ()
+ if iter is not None:
+ name = model.get(iter, 0)[0]
+ name = self.makeNameUnique (name)
+ self.entNPName.set_text (name)
except:
nonfatalException ()
@@ -3866,11 +3875,27 @@ def on_tvNPMakes_cursor_changed(self, tvNPMakes):
self.recommended_make_selected = recommended_make
self.fillModelList()
+ def models_visible_func(self, model, iter, data):
+ """Filter function for models list."""
+ search_text = self.entryNPModelsSearch.get_text().lower()
+ if not search_text:
+ return True
+ # Check both the display text (column 0) and the actual model name (column 1)
+ display_text = model.get(iter, 0)[0].lower()
+ model_name = model.get(iter, 1)[0].lower()
+ return search_text in display_text or search_text in model_name
+
+ def on_entryNPModelsSearch_changed(self, entry):
+ """Handle search text changes."""
+ if self.models_filter:
+ self.models_filter.refilter()
+
def fillModelList(self):
self.recommended_model_selected = False
+ self.entryNPModelsSearch.set_text("") # Clear filter when make changes
models = self.ppds.getModels(self.NPMake)
- model = self.tvNPModels.get_model()
- model.clear()
+ # Clear the underlying liststore, not the filter model
+ self.models_liststore.clear()
selected = False
is_auto_make = (cupshelpers.ppds.normalize (self.NPMake) ==
cupshelpers.ppds.normalize (self.auto_make))
@@ -3886,12 +3911,15 @@ def fillModelList(self):
else:
text = pmodel
- iter = model.append((text, pmodel,))
+ iter = self.models_liststore.append((text, pmodel,))
if recommended:
- path = model.get_path(iter)
- self.tvNPModels.set_cursor (path, None, False)
- self.tvNPModels.scroll_to_cell(path, None,
- True, 0.5, 0.5)
+ # Get the path in the filter model, not the liststore
+ child_path = self.models_liststore.get_path(iter)
+ filter_path = self.models_filter.convert_child_path_to_path(child_path)
+ if filter_path is not None:
+ self.tvNPModels.set_cursor (filter_path, None, False)
+ self.tvNPModels.scroll_to_cell(filter_path, None,
+ True, 0.5, 0.5)
selected = True
if not selected:
self.tvNPModels.set_cursor (Gtk.TreePath(), None, False)
diff --git a/po/ru.po b/po/ru.po
index 363494f6e..2354170d6 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -4112,6 +4112,14 @@ msgstr "Апплет очереди печати"
msgid "System tray icon for managing print jobs"
msgstr "Значок на панели задач для управления заданиями печати"
+#: ../ui/NewPrinterWindow.ui:1938
+msgid "Filter models..."
+msgstr "Модель..."
+
+#: ../ui/NewPrinterWindow.ui:1940
+msgid "Type to filter the list of printer models"
+msgstr "Введите текст для фильтрации списка моделей"
+
#~ msgid "Option '%s' has value '%s' and cannot be edited."
#~ msgstr "Параметр «%s» имеет значение «%s» и не может быть изменён."
diff --git a/po/system-config-printer.pot b/po/system-config-printer.pot
index 956f4f953..9cf69957e 100644
--- a/po/system-config-printer.pot
+++ b/po/system-config-printer.pot
@@ -2939,6 +2939,14 @@ msgstr ""
msgid "_Forward"
msgstr ""
+#: ../ui/NewPrinterWindow.ui.h:107
+msgid "Filter models..."
+msgstr ""
+
+#: ../ui/NewPrinterWindow.ui.h:108
+msgid "Type to filter the list of printer models"
+msgstr ""
+
#: ../ui/PrinterPropertiesDialog.ui.h:1
msgid "Printer Properties"
msgstr ""
diff --git a/ui/NewPrinterWindow.ui b/ui/NewPrinterWindow.ui
index ce9aab4e4..774960f09 100644
--- a/ui/NewPrinterWindow.ui
+++ b/ui/NewPrinterWindow.ui
@@ -1927,20 +1927,47 @@ ipp://printer.mydomain/ipp
True
True
-