Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Kaufmann <humitos@gmail.com>2012-05-07 12:08:00 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2012-05-09 18:07:35 (GMT)
commitbe9a9ba437ddf78457240473f256a7379e9f07fa (patch)
tree11a24b9c7238d373445317547a4b3be1588488cb
parent5de2c5f7f74c0764d54bcc89173e38d5e8a6ce99 (diff)
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> Reviewed-by: James Cameron <quozl@laptop.org>
-rw-r--r--logviewer.py32
1 files changed, 23 insertions, 9 deletions
diff --git a/logviewer.py b/logviewer.py
index 88fe2e6..7ba2178 100644
--- a/logviewer.py
+++ b/logviewer.py
@@ -41,6 +41,9 @@ from sugar.activity.widgets import CopyButton, StopButton
from sugar.datastore import datastore
+_AUTOSEARCH_TIMEOUT = 1000
+
+
# Should be builtin to sugar.graphics.alert.NotifyAlert...
def _notify_response_cb(notify, response, activity):
activity.remove_alert(notify)
@@ -347,6 +350,8 @@ class LogActivity(activity.Activity):
def __init__(self, handle):
activity.Activity.__init__(self, handle)
+ self._autosearch_timer = None
+
# Paths to watch: ~/.sugar/someuser/logs, /var/log
paths = []
paths.append(env.get_profile_path('logs'))
@@ -383,15 +388,15 @@ class LogActivity(activity.Activity):
wrap_btn.connect('clicked', self._wrap_cb)
toolbar_box.toolbar.insert(wrap_btn, -1)
- search_entry = iconentry.IconEntry()
- search_entry.set_size_request(gtk.gdk.screen_width() / 3, -1)
- search_entry.set_icon_from_name(
+ self.search_entry = iconentry.IconEntry()
+ self.search_entry.set_size_request(gtk.gdk.screen_width() / 3, -1)
+ self.search_entry.set_icon_from_name(
iconentry.ICON_ENTRY_PRIMARY, 'system-search')
- search_entry.add_clear_button()
- search_entry.connect('activate', self._search_entry_activate_cb)
- search_entry.connect('changed', self._search_entry_changed_cb)
+ self.search_entry.add_clear_button()
+ self.search_entry.connect('activate', self._search_entry_activate_cb)
+ self.search_entry.connect('changed', self._search_entry_changed_cb)
search_item = gtk.ToolItem()
- search_item.add(search_entry)
+ search_item.add(self.search_entry)
toolbar_box.toolbar.insert(search_item, -1)
self._search_prev = ToolButton('go-previous-paired')
@@ -439,12 +444,21 @@ class LogActivity(activity.Activity):
self.viewer._textview.set_wrap_mode(gtk.WRAP_NONE)
def _search_entry_activate_cb(self, entry):
+ if self._autosearch_timer:
+ gobject.source_remove(self._autosearch_timer)
self.viewer.set_search_text(entry.props.text)
self._update_search_buttons()
def _search_entry_changed_cb(self, entry):
- self.viewer.set_search_text(entry.props.text)
- self._update_search_buttons()
+ if self._autosearch_timer:
+ gobject.source_remove(self._autosearch_timer)
+ self._autosearch_timer = gobject.timeout_add(_AUTOSEARCH_TIMEOUT,
+ self.__autosearch_timer_cb)
+
+ def __autosearch_timer_cb(self):
+ self._autosearch_timer = None
+ self.search_entry.activate()
+ return False
def _search_prev_cb(self, button):
self.viewer.search_next('backward')