From 7072ec5913ff6e1447666adf825c46edb0074a93 Mon Sep 17 00:00:00 2001 From: Gonzalo Odiard Date: Wed, 08 Jun 2011 20:09:14 +0000 Subject: Set and restore index in the history (OLPC #10779 / SL #2499) Restoring the history index instead of (re)loading the active URL will "distribute" the history over the Back and Forward buttons exactly the same as before Stop + Resume instead of putting it all on the Back button. [tweaked description] Signed-off-by: Sascha Silbe Acked-By: Sascha Silbe --- diff --git a/browser.py b/browser.py index 649a71e..e93bac5 100644 --- a/browser.py +++ b/browser.py @@ -287,7 +287,6 @@ class Browser(WebView): def do_setup(self): WebView.do_setup(self) - listener = xpcom.server.WrapObject(ContentInvoker(self), interfaces.nsIDOMEventListener) self.window_root.addEventListener('click', listener, False) @@ -357,6 +356,12 @@ class Browser(WebView): interfaces.nsIMarkupDocumentViewer) markupDocumentViewer.fullZoom -= _ZOOM_AMOUNT + def get_history_index(self): + return self.web_navigation.sessionHistory.index + + def set_history_index(self, index): + self.web_navigation.gotoIndex(index) + class PopupDialog(gtk.Window): def __init__(self): diff --git a/webactivity.py b/webactivity.py index fc9e913..dade56a 100644 --- a/webactivity.py +++ b/webactivity.py @@ -459,6 +459,10 @@ class WebActivity(activity.Activity): link['owner'], -1, link['hash']) logging.debug('########## reading %s', data) self._tabbed_view.set_session(self.model.data['history']) + for number, tab in enumerate(self.model.data['currents']): + browser = self._tabbed_view.get_nth_page(number) + browser.set_history_index(tab['history_index']) + self._tabbed_view.set_current_page(self.model.data['current_tab']) elif self.metadata['mime_type'] == 'text/uri-list': data = self._get_data_from_file_path(file_path) @@ -470,19 +474,6 @@ class WebActivity(activity.Activity): 'list of multiple uris by now.') else: self._tabbed_view.props.current_browser.load_uri(file_path) - self._load_urls() - - def _load_urls(self): - if self.model.data['currents'] != None: - first = True - for current_tab in self.model.data['currents']: - if first: - browser = self._tabbed_view.current_browser - first = False - else: - browser = Browser() - self._tabbed_view._append_tab(browser) - browser.load_uri(current_tab['url']) def write_file(self, file_path): if not self.metadata['mime_type']: @@ -504,9 +495,12 @@ class WebActivity(activity.Activity): for n in range(0, self._tabbed_view.get_n_pages()): n_browser = self._tabbed_view.get_nth_page(n) if n_browser != None: - nsiuri = browser.progress.location - ui_uri = browser.get_url_from_nsiuri(nsiuri) - info = {'title': browser.props.title, 'url': ui_uri} + nsiuri = n_browser.progress.location + ui_uri = n_browser.get_url_from_nsiuri(nsiuri) + history_index = n_browser.get_history_index() + info = {'title': n_browser.props.title, 'url': ui_uri, + 'history_index': history_index} + self.model.data['currents'].append(info) f = open(file_path, 'w') diff --git a/webtoolbar.py b/webtoolbar.py index 8b0e108..6cb3ee7 100644 --- a/webtoolbar.py +++ b/webtoolbar.py @@ -355,6 +355,7 @@ class PrimaryToolbar(ToolbarBase): self._history = browser.history self._session_history_changed_hid = self._history.connect( 'session-history-changed', self._session_history_changed_cb) + self._reload_session_history() if self._browser is not None: self._browser.disconnect(self._title_changed_hid) -- cgit v0.9.1