[sugar] [PATCH] Browse - Find in Page

Tomeu Vizoso tomeu at tomeuvizoso.net
Fri Jun 13 06:31:09 EDT 2008


r+ if Eben is ok with

> +        width = int(gtk.gdk.screen_width() / 3)
> +        self.search_entry.set_size_request(width, -1)

I'm wondering if this will be ok in other screen resolutions.

Cheers,

Tomeu

On Thu, Jun 12, 2008 at 11:35 PM, Simon Schampijer <simon at schampijer.de> wrote:
> Simon Schampijer wrote:
>>
>> Hi,
>>
>> this patch adds an entry field and a previous and next button to the edit
>> toolbar to search in the context. You can use (ctrl+f) to focus the search
>> entry in the edit toolbar. The find is typeahead. Hitting 'Enter' will find
>> the next occurrence.
>>
>> I used the xpcom interface nsITypeAheadFind since it allows find() and
>> findAgain() compared to nsIWebBrowserFind.
>>
>> Open questions:
>>  - what feedback do we give when no occurrence was found (firefox paints
>> the entry red)
>
> I use now a light gray to change the color of the text (works as well in
> grayscale mode). The buttons for next, prev are inactive as well in that
> case.
>
> Simon
>
> diff --git a/edittoolbar.py b/edittoolbar.py
> index 91e8d6a..b9b270a 100644
> --- a/edittoolbar.py
> +++ b/edittoolbar.py
> @@ -14,9 +14,16 @@
>  # along with this program; if not, write to the Free Software
>  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
>  USA
>
> +import gtk
> +from gettext import gettext as _
> +
> +from xpcom import components
>  from xpcom.components import interfaces
>
>  from sugar.activity import activity
> +from sugar.graphics import iconentry
> +from sugar.graphics.toolbutton import ToolButton
> +from sugar.graphics import style
>
>  class EditToolbar(activity.EditToolbar):
>
> @@ -25,14 +32,12 @@ class EditToolbar(activity.EditToolbar):
>     def __init__(self, browser):
>         activity.EditToolbar.__init__(self)
>
> -        self._browser = browser
> -
>         self.undo.connect('clicked', self.__undo_cb)
>         self.redo.connect('clicked', self.__redo_cb)
>         self.copy.connect('clicked', self.__copy_cb)
>         self.paste.connect('clicked', self.__paste_cb)
>
> -    """
> +        """
>         Notifications are not working right now:
>         https://bugzilla.mozilla.org/show_bug.cgi?id=207339
>
> @@ -54,7 +59,48 @@ class EditToolbar(activity.EditToolbar):
>
>     def observe(self, subject, topic, data):
>         logging.debug('observe: %r %r %r' % (subject, topic, data))
> -    """
> +        """
> +
> +        separator = gtk.SeparatorToolItem()
> +        separator.set_draw(False)
> +        separator.set_expand(True)
> +        self.insert(separator, -1)
> +        separator.show()
> +
> +        cls = components.classes["@mozilla.org/typeaheadfind;1"]
> +        self._typeahead = cls.createInstance(interfaces.nsITypeAheadFind)
> +        self._typeahead.init(browser.doc_shell)
> +
> +        search_item = gtk.ToolItem()
> +        self.search_entry = iconentry.IconEntry()
> +        self.search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY,
> +                                             'system-search')
> +        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)
> +
> +        width = int(gtk.gdk.screen_width() / 3)
> +        self.search_entry.set_size_request(width, -1)
> +
> +        search_item.add(self.search_entry)
> +        self.search_entry.show()
> +
> +        self.insert(search_item, -1)
> +        search_item.show()
> +
> +        self._prev = ToolButton('go-previous-paired')
> +        self._prev.set_tooltip(_('Previous'))
> +        self._prev.props.sensitive = False
> +        self._prev.connect('clicked', self.__find_previous_cb)
> +        self.insert(self._prev, -1)
> +        self._prev.show()
> +
> +        self._next = ToolButton('go-next-paired')
> +        self._next.set_tooltip(_('Next'))
> +        self._next.props.sensitive = False
> +        self._next.connect('clicked', self.__find_next_cb)
> +        self.insert(self._next, -1)
> +        self._next.show()
>
>     def __undo_cb(self, button):
>         command_manager = self._get_command_manager()
> @@ -77,3 +123,24 @@ class EditToolbar(activity.EditToolbar):
>         requestor =
> web_browser.queryInterface(interfaces.nsIInterfaceRequestor)
>         return requestor.getInterface(interfaces.nsICommandManager)
>
> +    def __search_entry_activate_cb(self, entry):
> +        self._typeahead.findAgain(False, False)
> +
> +    def __search_entry_changed_cb(self, entry):
> +        found = self._typeahead.find(entry.props.text, False)
> +        if found == interfaces.nsITypeAheadFind.FIND_NOTFOUND:
> +            self._prev.props.sensitive = False
> +            self._next.props.sensitive = False
> +            entry.modify_text(gtk.STATE_NORMAL,
> +                              style.COLOR_BUTTON_GREY.get_gdk_color())
> +        else:
> +            self._prev.props.sensitive = True
> +            self._next.props.sensitive = True
> +            entry.modify_text(gtk.STATE_NORMAL,
> +                              style.COLOR_BLACK.get_gdk_color())
> +
> +    def __find_previous_cb(self, button):
> +        self._typeahead.findAgain(True, False)
> +
> +    def __find_next_cb(self, button):
> +        self._typeahead.findAgain(False, False)
> diff --git a/webactivity.py b/webactivity.py
> index 4b4544a..f0d5021 100755
> --- a/webactivity.py
> +++ b/webactivity.py
> @@ -83,6 +83,7 @@ SERVICE = "org.laptop.WebActivity"
>  IFACE = SERVICE
>  PATH = "/org/laptop/WebActivity"
>
> +_TOOLBAR_EDIT = 1
>  _TOOLBAR_BROWSE = 2
>
>  _logger = logging.getLogger('web-activity')
> @@ -347,6 +348,11 @@ class WebActivity(activity.Activity):
>                 _logger.debug('keyboard: Add link: %s.' % self.current)
>                 self._add_link()
>                 return True
> +            elif gtk.gdk.keyval_name(event.keyval) == "f":
> +                _logger.debug('keyboard: Find')
> +                self.toolbox.set_current_toolbar(_TOOLBAR_EDIT)
> +                self._edit_toolbar.search_entry.grab_focus()
> +                return True
>             elif gtk.gdk.keyval_name(event.keyval) == "u":
>                 _logger.debug('keyboard: Show source of the current page')
>                 self._show_source()
>
> _______________________________________________
> Sugar mailing list
> Sugar at lists.laptop.org
> http://lists.laptop.org/listinfo/sugar
>
>


More information about the Sugar mailing list