improve search filter behaviour. Fixes #7049
This commit is contained in:
parent
f95e45d457
commit
d0494ab405
1 changed files with 36 additions and 3 deletions
|
@ -3335,7 +3335,10 @@ class RosterWindow:
|
||||||
"""
|
"""
|
||||||
self.tooltip.hide_tooltip()
|
self.tooltip.hide_tooltip()
|
||||||
if event.keyval == gtk.keysyms.Escape:
|
if event.keyval == gtk.keysyms.Escape:
|
||||||
self.tree.get_selection().unselect_all()
|
if self.rfilter_enabled:
|
||||||
|
self.disable_rfilter()
|
||||||
|
else:
|
||||||
|
self.tree.get_selection().unselect_all()
|
||||||
elif event.keyval == gtk.keysyms.F2:
|
elif event.keyval == gtk.keysyms.F2:
|
||||||
treeselection = self.tree.get_selection()
|
treeselection = self.tree.get_selection()
|
||||||
model, list_of_paths = treeselection.get_selected_rows()
|
model, list_of_paths = treeselection.get_selected_rows()
|
||||||
|
@ -3877,6 +3880,9 @@ class RosterWindow:
|
||||||
|
|
||||||
def on_roster_window_key_press_event(self, widget, event):
|
def on_roster_window_key_press_event(self, widget, event):
|
||||||
if event.keyval == gtk.keysyms.Escape:
|
if event.keyval == gtk.keysyms.Escape:
|
||||||
|
if self.rfilter_enabled:
|
||||||
|
self.disable_rfilter()
|
||||||
|
return
|
||||||
if gajim.interface.msg_win_mgr.mode == \
|
if gajim.interface.msg_win_mgr.mode == \
|
||||||
MessageWindowMgr.ONE_MSG_WINDOW_ALWAYS_WITH_ROSTER and \
|
MessageWindowMgr.ONE_MSG_WINDOW_ALWAYS_WITH_ROSTER and \
|
||||||
gajim.interface.msg_win_mgr.one_window_opened():
|
gajim.interface.msg_win_mgr.one_window_opened():
|
||||||
|
@ -4226,6 +4232,15 @@ class RosterWindow:
|
||||||
if self.rfilter_string == '':
|
if self.rfilter_string == '':
|
||||||
self.disable_rfilter()
|
self.disable_rfilter()
|
||||||
self.refilter_shown_roster_items()
|
self.refilter_shown_roster_items()
|
||||||
|
# select first row
|
||||||
|
self.tree.get_selection().unselect_all()
|
||||||
|
def _func(model, path, iter_):
|
||||||
|
if model[iter_][C_TYPE] == 'contact' and self.rfilter_string in \
|
||||||
|
model[iter_][C_NAME].lower():
|
||||||
|
col = self.tree.get_column(0)
|
||||||
|
self.tree.set_cursor_on_cell(path, col)
|
||||||
|
return True
|
||||||
|
self.modelfilter.foreach(_func)
|
||||||
|
|
||||||
def on_rfilter_entry_icon_press(self, widget, icon, event):
|
def on_rfilter_entry_icon_press(self, widget, icon, event):
|
||||||
"""
|
"""
|
||||||
|
@ -4233,16 +4248,32 @@ class RosterWindow:
|
||||||
"""
|
"""
|
||||||
self.disable_rfilter()
|
self.disable_rfilter()
|
||||||
|
|
||||||
|
def on_rfilter_entry_key_press_event(self, widget, event):
|
||||||
|
if event.keyval == gtk.keysyms.Escape:
|
||||||
|
self.disable_rfilter()
|
||||||
|
elif event.keyval == gtk.keysyms.Return:
|
||||||
|
self.tree.grab_focus()
|
||||||
|
self.tree.emit('key_press_event', event)
|
||||||
|
self.disable_rfilter()
|
||||||
|
elif event.keyval in (gtk.keysyms.Up, gtk.keysyms.Down):
|
||||||
|
self.tree.grab_focus()
|
||||||
|
self.tree.emit('key_press_event', event)
|
||||||
|
|
||||||
def enable_rfilter(self, search_string):
|
def enable_rfilter(self, search_string):
|
||||||
self.rfilter_enabled = True
|
if self.rfilter_enabled:
|
||||||
|
self.rfilter_entry.set_text(self.rfilter_entry.get_text() + \
|
||||||
|
search_string)
|
||||||
|
else:
|
||||||
|
self.rfilter_enabled = True
|
||||||
|
self.rfilter_entry.set_text(search_string)
|
||||||
self.rfilter_entry.set_visible(True)
|
self.rfilter_entry.set_visible(True)
|
||||||
self.rfilter_entry.set_editable(True)
|
self.rfilter_entry.set_editable(True)
|
||||||
self.rfilter_entry.set_text(search_string)
|
|
||||||
self.rfilter_entry.grab_focus()
|
self.rfilter_entry.grab_focus()
|
||||||
self.rfilter_entry.set_position(-1)
|
self.rfilter_entry.set_position(-1)
|
||||||
|
|
||||||
def disable_rfilter(self):
|
def disable_rfilter(self):
|
||||||
self.rfilter_enabled = False
|
self.rfilter_enabled = False
|
||||||
|
self.rfilter_entry.set_text('')
|
||||||
self.rfilter_entry.set_visible(False)
|
self.rfilter_entry.set_visible(False)
|
||||||
self.rfilter_entry.set_editable(False)
|
self.rfilter_entry.set_editable(False)
|
||||||
self.refilter_shown_roster_items()
|
self.refilter_shown_roster_items()
|
||||||
|
@ -6436,6 +6467,8 @@ class RosterWindow:
|
||||||
self.rfilter_entry = self.xml.get_object('rfilter_entry')
|
self.rfilter_entry = self.xml.get_object('rfilter_entry')
|
||||||
self.rfilter_string = ''
|
self.rfilter_string = ''
|
||||||
self.rfilter_enabled = False
|
self.rfilter_enabled = False
|
||||||
|
self.rfilter_entry.connect('key-press-event',
|
||||||
|
self.on_rfilter_entry_key_press_event)
|
||||||
|
|
||||||
gajim.ged.register_event_handler('presence-received', ged.GUI1,
|
gajim.ged.register_event_handler('presence-received', ged.GUI1,
|
||||||
self._nec_presence_received)
|
self._nec_presence_received)
|
||||||
|
|
Loading…
Add table
Reference in a new issue