Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sessionhistory.py23
-rwxr-xr-xwebtoolbar.py37
2 files changed, 55 insertions, 5 deletions
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)
+