Ticket #2734: 0001-Don-t-update-search-results-every-keystroke-SL-2734.patch

File 0001-Don-t-update-search-results-every-keystroke-SL-2734.patch, 3.6 KB (added by humitos, 12 years ago)
  • logviewer.py

    From be278615fa92bad51a631bb36c3f339046bfb458 Mon Sep 17 00:00:00 2001
    Message-Id: <be278615fa92bad51a631bb36c3f339046bfb458.1336392445.git.humitos@gmail.com>
    From: Manuel Kaufmann <humitos@gmail.com>
    Date: Mon, 7 May 2012 09:07:14 -0300
    Subject: [PATCH Log v3] Don't update search results every keystroke SL #2734
    
    If the log file is long and we search for new results every time that a key is
    pressed this action could consume a lot of CPU. Even more if we search for a
    single char.
    
    So, I changed the way that it works to update the search results every time the
    user presses the Enter key or the _AUTOSEARCH_TIMEOUT expired like the Sugar's Home does.
    
    Signed-off-by: Manuel Kaufmann <humitos@gmail.com>
    ---
     logviewer.py |   32 +++++++++++++++++++++++---------
     1 file changed, 23 insertions(+), 9 deletions(-)
    
    diff --git a/logviewer.py b/logviewer.py
    index 88fe2e6..7ba2178 100644
    a b from sugar.activity.widgets import CopyButton, StopButton 
    4141from sugar.datastore import datastore
    4242
    4343
     44_AUTOSEARCH_TIMEOUT = 1000
     45
     46
    4447# Should be builtin to sugar.graphics.alert.NotifyAlert...
    4548def _notify_response_cb(notify, response, activity):
    4649    activity.remove_alert(notify)
    class LogActivity(activity.Activity): 
    347350    def __init__(self, handle):
    348351        activity.Activity.__init__(self, handle)
    349352
     353        self._autosearch_timer = None
     354
    350355        # Paths to watch: ~/.sugar/someuser/logs, /var/log
    351356        paths = []
    352357        paths.append(env.get_profile_path('logs'))
    class LogActivity(activity.Activity): 
    383388        wrap_btn.connect('clicked', self._wrap_cb)
    384389        toolbar_box.toolbar.insert(wrap_btn, -1)
    385390
    386         search_entry = iconentry.IconEntry()
    387         search_entry.set_size_request(gtk.gdk.screen_width() / 3, -1)
    388         search_entry.set_icon_from_name(
     391        self.search_entry = iconentry.IconEntry()
     392        self.search_entry.set_size_request(gtk.gdk.screen_width() / 3, -1)
     393        self.search_entry.set_icon_from_name(
    389394                iconentry.ICON_ENTRY_PRIMARY, 'system-search')
    390         search_entry.add_clear_button()
    391         search_entry.connect('activate', self._search_entry_activate_cb)
    392         search_entry.connect('changed', self._search_entry_changed_cb)
     395        self.search_entry.add_clear_button()
     396        self.search_entry.connect('activate', self._search_entry_activate_cb)
     397        self.search_entry.connect('changed', self._search_entry_changed_cb)
    393398        search_item = gtk.ToolItem()
    394         search_item.add(search_entry)
     399        search_item.add(self.search_entry)
    395400        toolbar_box.toolbar.insert(search_item, -1)
    396401
    397402        self._search_prev = ToolButton('go-previous-paired')
    class LogActivity(activity.Activity): 
    439444            self.viewer._textview.set_wrap_mode(gtk.WRAP_NONE)
    440445
    441446    def _search_entry_activate_cb(self, entry):
     447        if self._autosearch_timer:
     448            gobject.source_remove(self._autosearch_timer)
    442449        self.viewer.set_search_text(entry.props.text)
    443450        self._update_search_buttons()
    444451
    445452    def _search_entry_changed_cb(self, entry):
    446         self.viewer.set_search_text(entry.props.text)
    447         self._update_search_buttons()
     453        if self._autosearch_timer:
     454            gobject.source_remove(self._autosearch_timer)
     455        self._autosearch_timer = gobject.timeout_add(_AUTOSEARCH_TIMEOUT,
     456            self.__autosearch_timer_cb)
     457
     458    def __autosearch_timer_cb(self):
     459        self._autosearch_timer = None
     460        self.search_entry.activate()
     461        return False
    448462
    449463    def _search_prev_cb(self, button):
    450464        self.viewer.search_next('backward')