[Sugar-devel] [PATCH] Browse: Set and restore index in the history - Fix OLPC #10779 / SL #2499

godiard at sugarlabs.org godiard at sugarlabs.org
Wed Jun 8 11:09:14 EDT 2011


From: Gonzalo Odiard <godiard at gmail.com>

If the user go back, or select any page in the history and
close the activity, need restore at the next start, the history,
and the index in the history too.
---
 browser.py     |    7 ++++++-
 webactivity.py |   26 ++++++++++----------------
 webtoolbar.py  |    1 +
 3 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/browser.py b/browser.py
index b9c1f69..3cef766 100644
--- a/browser.py
+++ b/browser.py
@@ -281,7 +281,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)
@@ -351,6 +350,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 48cb3ed..8ad95a6 100644
--- a/webactivity.py
+++ b/webactivity.py
@@ -458,6 +458,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)
@@ -469,19 +473,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']:
@@ -503,9 +494,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)
-- 
1.7.4.4



More information about the Sugar-devel mailing list