use our roster filter as soon as we type a letter. Fixes #5221

This commit is contained in:
Yann Leboulanger 2011-07-23 23:18:17 +02:00
parent 0c65ea1ce6
commit 9308d3af17
2 changed files with 23 additions and 33 deletions

View File

@ -218,16 +218,6 @@
<signal name="toggled" handler="on_show_roster_menuitem_toggled"/>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="show_rfilter_menuitem">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Show Roster Fi_lter</property>
<property name="use_underline">True</property>
<accelerator key="L" signal="activate" modifiers="GDK_CONTROL_MASK"/>
<signal name="toggled" handler="on_show_rfilter_menuitem_toggled"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separator3">
<property name="visible">True</property>

View File

@ -1495,11 +1495,6 @@ class RosterWindow:
### Roster and Modelfilter handling
##############################################################################
def _search_roster_func(self, model, column, key, titer):
key = key.decode('utf-8').lower()
name = model[titer][C_NAME].decode('utf-8').lower()
return not (key in name)
def refilter_shown_roster_items(self):
self.filtering = True
self.modelfilter.refilter()
@ -3372,6 +3367,10 @@ class RosterWindow:
elif type_ == 'agent':
self.on_remove_agent(widget, list_)
elif gtk.gdk.keyval_to_unicode(event.keyval): # if we got unicode symbol
num = gtk.gdk.keyval_to_unicode(event.keyval)
self.enable_rfilter(unichr(num))
def on_roster_treeview_button_release_event(self, widget, event):
try:
path = self.tree.get_path_at_pos(int(event.x), int(event.y))[0]
@ -4218,25 +4217,29 @@ class RosterWindow:
""" When we update the content of the filter """
self.rfilter_string = widget.get_text().lower()
if self.rfilter_string == '':
self.rfilter_enabled = False
else:
self.rfilter_enabled = True
self.disable_rfilter()
self.refilter_shown_roster_items()
def on_rfilter_entry_icon_press(self, widget, icon, event):
""" Disable the roster filtering by clicking the icon in the textEntry """
self.xml.get_object('show_rfilter_menuitem').set_active(False)
self.rfilter_enabled = False
self.refilter_shown_roster_items()
"""
Disable the roster filtering by clicking the icon in the textEntry
"""
self.disable_rfilter()
def on_show_rfilter_menuitem_toggled(self, widget):
""" Show the roster filter entry """
self.rfilter_enabled = widget.get_active()
self.rfilter_entry.set_visible(self.rfilter_enabled)
self.rfilter_entry.set_editable(self.rfilter_enabled)
if self.rfilter_enabled:
self.rfilter_entry.set_text('')
self.rfilter_entry.grab_focus()
def enable_rfilter(self, search_string):
self.rfilter_enabled = True
self.rfilter_entry.set_visible(True)
self.rfilter_entry.set_editable(True)
self.rfilter_entry.set_text(search_string)
self.rfilter_entry.grab_focus()
self.rfilter_entry.set_position(-1)
def disable_rfilter(self):
self.rfilter_enabled = False
self.rfilter_entry.set_visible(False)
self.rfilter_entry.set_editable(False)
self.refilter_shown_roster_items()
self.tree.grab_focus()
def on_roster_hpaned_notify(self, pane, gparamspec):
"""
@ -6357,9 +6360,6 @@ class RosterWindow:
col.set_visible(False)
self.tree.set_expander_column(col)
# set search function
self.tree.set_search_equal_func(self._search_roster_func)
# signals
self.TARGET_TYPE_URI_LIST = 80
TARGETS = [('MY_TREE_MODEL_ROW',