diff --git a/data/preferences.ui b/data/preferences.ui
index a53d382..6b4aee0 100644
--- a/data/preferences.ui
+++ b/data/preferences.ui
@@ -311,6 +311,19 @@
True
vertical
+
+
+ False
+ False
+ 0
+
+
+
- 0
+ 1
@@ -335,7 +348,7 @@
False
False
5
- 1
+ 2
diff --git a/kupfer/ui/preferences.py b/kupfer/ui/preferences.py
index ff50932..5f484d6 100644
--- a/kupfer/ui/preferences.py
+++ b/kupfer/ui/preferences.py
@@ -10,7 +10,8 @@ from xdg import DesktopEntry as desktop
from kupfer import config, pretty, utils, icons, version
-from kupfer.core import settings, plugins
+from kupfer import scheduler, kupferstring
+from kupfer.core import settings, plugins, relevance
from kupfer.ui import keybindings
class PreferencesWindowController (pretty.OutputMixin):
@@ -41,6 +42,7 @@ class PreferencesWindowController (pretty.OutputMixin):
self.buttonremovedirectory = builder.get_object("buttonremovedirectory")
checkautostart = builder.get_object("checkautostart")
checkstatusicon = builder.get_object("checkstatusicon")
+ self.entry_plugins_filter = builder.get_object('entry_plugins_filter')
setctl = settings.GetSettingsController()
self.entrykeybinding.set_text(setctl.get_keybinding())
@@ -88,17 +90,10 @@ class PreferencesWindowController (pretty.OutputMixin):
#self.table.append_column(icon_col)
self.table.append_column(col)
+ self.plugin_list_timer = scheduler.Timer()
self.plugin_info = utils.locale_sort(plugins.get_plugin_info(),
key= lambda rec: rec["localized_name"])
- for info in self.plugin_info:
- plugin_id = info["name"]
- if setctl.get_plugin_is_hidden(plugin_id):
- continue
- enabled = setctl.get_plugin_enabled(plugin_id)
- name = info["localized_name"]
- desc = info["description"]
- text = u"%s" % name
- self.store.append((plugin_id, enabled, "kupfer-object", text))
+ self._refresh_plugin_list()
self.output_debug("Standard Plugins: %d" % len(self.store))
self.table.show()
self.pluglist_parent.add(self.table)
@@ -230,6 +225,42 @@ class PreferencesWindowController (pretty.OutputMixin):
pass
def on_closebutton_clicked(self, widget):
self.hide()
+
+ def _refresh_plugin_list(self):
+ self.store.clear()
+ setctl = settings.GetSettingsController()
+ name_filter = kupferstring.tounicode(self.entry_plugins_filter.get_text())
+ if name_filter:
+ self.plugin_list_timer.set_ms(300, self._show_focus_topmost_plugin)
+ else:
+ self.plugin_list_timer.invalidate()
+
+ for info in self.plugin_info:
+ plugin_id = info["name"]
+ if setctl.get_plugin_is_hidden(plugin_id):
+ continue
+ enabled = setctl.get_plugin_enabled(plugin_id)
+ name = info["localized_name"]
+ desc = info["description"]
+ text = u"%s" % name
+
+ if name_filter:
+ name_score = relevance.score(name.lower(), name_filter)
+ desc_score = relevance.score(desc.lower(), name_filter)
+ if name_score < 0.1 and desc_score < 0.9:
+ continue
+
+ self.store.append((plugin_id, enabled, "kupfer-object", text))
+
+ def _show_focus_topmost_plugin(self):
+ try:
+ first_row = iter(self.store).next()
+ except StopIteration:
+ return
+ plugin_id = first_row[0]
+ self.show_focus_plugin(plugin_id)
+
+
def on_checkplugin_toggled(self, cell, path):
checkcol = self.columns.index("enabled")
plugin_id = self._id_for_table_path(path)
@@ -511,6 +542,9 @@ class PreferencesWindowController (pretty.OutputMixin):
it = self.dir_store.get_iter(curpath)
self.remove_directory_model(it, store=True)
+ def on_entry_plugins_filter_changed(self, widget):
+ self._refresh_plugin_list()
+
def dir_table_cursor_changed(self, table):
curpath, curcol = table.get_cursor()
if not curpath or not self.dir_store: