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 |
41 | 41 | from sugar.datastore import datastore |
42 | 42 | |
43 | 43 | |
| 44 | _AUTOSEARCH_TIMEOUT = 1000 |
| 45 | |
| 46 | |
44 | 47 | # Should be builtin to sugar.graphics.alert.NotifyAlert... |
45 | 48 | def _notify_response_cb(notify, response, activity): |
46 | 49 | activity.remove_alert(notify) |
… |
… |
class LogActivity(activity.Activity): |
347 | 350 | def __init__(self, handle): |
348 | 351 | activity.Activity.__init__(self, handle) |
349 | 352 | |
| 353 | self._autosearch_timer = None |
| 354 | |
350 | 355 | # Paths to watch: ~/.sugar/someuser/logs, /var/log |
351 | 356 | paths = [] |
352 | 357 | paths.append(env.get_profile_path('logs')) |
… |
… |
class LogActivity(activity.Activity): |
383 | 388 | wrap_btn.connect('clicked', self._wrap_cb) |
384 | 389 | toolbar_box.toolbar.insert(wrap_btn, -1) |
385 | 390 | |
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( |
389 | 394 | 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) |
393 | 398 | search_item = gtk.ToolItem() |
394 | | search_item.add(search_entry) |
| 399 | search_item.add(self.search_entry) |
395 | 400 | toolbar_box.toolbar.insert(search_item, -1) |
396 | 401 | |
397 | 402 | self._search_prev = ToolButton('go-previous-paired') |
… |
… |
class LogActivity(activity.Activity): |
439 | 444 | self.viewer._textview.set_wrap_mode(gtk.WRAP_NONE) |
440 | 445 | |
441 | 446 | def _search_entry_activate_cb(self, entry): |
| 447 | if self._autosearch_timer: |
| 448 | gobject.source_remove(self._autosearch_timer) |
442 | 449 | self.viewer.set_search_text(entry.props.text) |
443 | 450 | self._update_search_buttons() |
444 | 451 | |
445 | 452 | 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 |
448 | 462 | |
449 | 463 | def _search_prev_cb(self, button): |
450 | 464 | self.viewer.search_next('backward') |