From 4e9bbfd778515d347bc1b33c35bfab3a0d871d78 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Tue, 26 Jun 2007 16:23:34 +0000 Subject: Show session history entries on the back/forward buttons' palettes. --- diff --git a/sessionhistory.py b/sessionhistory.py index 566a9ef..5d058c7 100644 --- a/sessionhistory.py +++ b/sessionhistory.py @@ -22,32 +22,47 @@ from xpcom.components import interfaces class HistoryListener(gobject.GObject): _com_interfaces_ = interfaces.nsISHistoryListener - + + __gsignals__ = { + 'session-history-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([int])) + } + def __init__(self, browser): gobject.GObject.__init__(self) self._wrapped_self = xpcom.server.WrapObject(self, interfaces.nsISHistoryListener) weak_ref = xpcom.client.WeakReference(self._wrapped_self) - session_history = browser.web_navigation.sessionHistory - session_history.addSHistoryListener(self._wrapped_self) + self._session_history = browser.web_navigation.sessionHistory + self._session_history.addSHistoryListener(self._wrapped_self) def OnHistoryGoBack(self, back_uri): + logging.debug("OnHistoryGoBack: %s" % back_uri.spec) + self.emit('session-history-changed', self._session_history.index - 1) return True def OnHistoryGoForward(self, forward_uri): + logging.debug("OnHistoryGoForward: %s" % forward_uri.spec) + self.emit('session-history-changed', self._session_history.index + 1) return True def OnHistoryGotoIndex(self, index, goto_uri): + logging.debug("OnHistoryGotoIndex: %i %s" % (index, goto_uri.spec)) + self.emit('session-history-changed', index) return True def OnHistoryNewEntry(self, new_uri): - logging.debug(new_uri.spec) + logging.debug("OnHistoryNewEntry: %s" % new_uri.spec) + self.emit('session-history-changed', self._session_history.index + 1) def OnHistoryPurge(self, num_entries): + logging.debug("OnHistoryPurge: %i" % num_entries) + #self.emit('session-history-changed') return True def OnHistoryReload(self, reload_uri, reload_flags): + logging.debug("OnHistoryReload: %s" % reload_uri.spec) return True _session_history_listener = None diff --git a/webtoolbar.py b/webtoolbar.py index e52c969..df290a3 100755 --- a/webtoolbar.py +++ b/webtoolbar.py @@ -19,6 +19,7 @@ import os import logging from gettext import gettext as _ +import gobject import gtk import xpcom from xpcom.components import interfaces @@ -72,10 +73,14 @@ class WebToolbar(gtk.Toolbar): progress_listener.connect('loading-progress', self._loading_progress_cb) session_history = sessionhistory.get_instance() - #session_history.connect('location-changed', self._location_changed_cb) + session_history.connect('session-history-changed', self._session_history_changed_cb) self._browser.connect("notify::title", self._title_changed_cb) + def _session_history_changed_cb(self, session_history, current_page_index): + # We have to wait until the history info is updated. + gobject.idle_add(self._reload_session_history, current_page_index) + def _location_changed_cb(self, progress_listener, uri): self._set_address(uri) self._update_navigation_buttons() @@ -143,3 +148,33 @@ class WebToolbar(gtk.Toolbar): else: self._show_reload_icon() self._stop_and_reload.set_tooltip(_('Reload')) + + def _reload_session_history(self, current_page_index=None): + if current_page_index is None: + current_page_index = session_history.index + + for palette in (self._back.get_palette(), self._forward.get_palette()): + while palette.menu_item_count(): + palette.remove_menu_item(0) + + session_history = self._browser.web_navigation.sessionHistory + for i in range(0, session_history.count): + if i == current_page_index: + continue + + entry = session_history.getEntryAtIndex(i, False) + menu_item = gtk.MenuItem(entry.title) + menu_item.connect('activate', self._history_item_activated_cb, i) + + if i < current_page_index: + palette = self._back.get_palette() + palette.insert_menu_item(menu_item, 0) + elif i > current_page_index: + palette = self._forward.get_palette() + palette.insert_menu_item(menu_item, -1) + + menu_item.show() + + def _history_item_activated_cb(self, menu_item, index): + self._browser.web_navigation.gotoIndex(index) + -- cgit v0.9.1