diff options
-rw-r--r-- | browser.py | 27 | ||||
-rw-r--r-- | webactivity.py | 29 | ||||
-rw-r--r-- | webtoolbar.py | 51 |
3 files changed, 102 insertions, 5 deletions
@@ -27,6 +27,7 @@ from gi.repository import Gdk from gi.repository import Pango from gi.repository import WebKit from gi.repository import Soup +from gi.repository import GConf from sugar3 import env from sugar3.activity import activity @@ -42,7 +43,7 @@ from pdfviewer import PDFTabPage ZOOM_ORIGINAL = 1.0 _ZOOM_AMOUNT = 0.1 -_LIBRARY_PATH = '/usr/share/library-common/index.html' +LIBRARY_PATH = '/usr/share/library-common/index.html' _WEB_SCHEMES = ['http', 'https', 'ftp', 'file', 'javascript', 'data', 'about', 'gopher', 'mailto'] @@ -62,6 +63,8 @@ _NON_SEARCH_REGEX = re.compile(''' DEFAULT_ERROR_PAGE = os.path.join(activity.get_bundle_path(), 'data/error_page.tmpl') +HOME_PAGE_GCONF_KEY = '/desktop/sugar/browser/home_page' + class CommandListener(object): def __init__(self, window): @@ -342,17 +345,31 @@ class TabbedView(BrowserNotebook): else: first_label.show_close_button() - def load_homepage(self): + def load_homepage(self, ignore_gconf=False): browser = self.current_browser - - if os.path.isfile(_LIBRARY_PATH): - browser.load_uri('file://' + _LIBRARY_PATH) + uri_homepage = None + if not ignore_gconf: + client = GConf.Client.get_default() + uri_homepage = client.get_string(HOME_PAGE_GCONF_KEY) + if uri_homepage is not None: + browser.load_uri(uri_homepage) + elif os.path.isfile(LIBRARY_PATH): + browser.load_uri('file://' + LIBRARY_PATH) else: default_page = os.path.join(activity.get_bundle_path(), "data/index.html") browser.load_uri('file://' + default_page) browser.grab_focus() + def set_homepage(self): + uri = self.current_browser.get_uri() + client = GConf.Client.get_default() + client.set_string(HOME_PAGE_GCONF_KEY, uri) + + def reset_homepage(self): + client = GConf.Client.get_default() + client.unset(HOME_PAGE_GCONF_KEY) + def _get_current_browser(self): if self.get_n_pages(): return self.get_nth_page(self.get_current_page()).browser diff --git a/webactivity.py b/webactivity.py index ecf84b6..c74f54a 100644 --- a/webactivity.py +++ b/webactivity.py @@ -50,6 +50,7 @@ from sugar3.presence import presenceservice from sugar3.graphics.tray import HTray from sugar3 import profile from sugar3.graphics.alert import Alert +from sugar3.graphics.alert import NotifyAlert from sugar3.graphics.icon import Icon from sugar3 import mime @@ -187,6 +188,12 @@ class WebActivity(activity.Activity): self._primary_toolbar.connect('go-home', self._go_home_button_cb) + self._primary_toolbar.connect('go-library', self._go_library_button_cb) + + self._primary_toolbar.connect('set-home', self._set_home_button_cb) + + self._primary_toolbar.connect('reset-home', self._reset_home_button_cb) + self._edit_toolbar_button = ToolbarButton( page=self._edit_toolbar, icon_name='toolbar-edit') @@ -475,6 +482,28 @@ class WebActivity(activity.Activity): def _go_home_button_cb(self, button): self._tabbed_view.load_homepage() + def _go_library_button_cb(self, button): + self._tabbed_view.load_homepage(ignore_gconf=True) + + def _set_home_button_cb(self, button): + self._tabbed_view.set_homepage() + self._alert(_('The initial page was configured')) + + def _reset_home_button_cb(self, button): + self._tabbed_view.reset_homepage() + self._alert(_('The default initial page was configured')) + + def _alert(self, title, text=None): + alert = NotifyAlert(timeout=5) + alert.props.title = title + alert.props.msg = text + self.add_alert(alert) + alert.connect('response', self._alert_cancel_cb) + alert.show() + + def _alert_cancel_cb(self, alert, response_id): + self.remove_alert(alert) + def _key_press_cb(self, widget, event): key_name = Gdk.keyval_name(event.keyval) browser = self._tabbed_view.props.current_browser diff --git a/webtoolbar.py b/webtoolbar.py index f3c5541..2d013a5 100644 --- a/webtoolbar.py +++ b/webtoolbar.py @@ -16,11 +16,13 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +import os from gettext import gettext as _ from gi.repository import GObject from gi.repository import Gtk from gi.repository import Gdk +from gi.repository import GConf from gi.repository import Pango from gi.repository import WebKit @@ -28,6 +30,7 @@ from sugar3.graphics.toolbutton import ToolButton from sugar3.graphics import iconentry from sugar3.graphics.toolbarbox import ToolbarBox as ToolbarBase from sugar3.graphics.palettemenu import PaletteMenuItem +from sugar3.graphics.palettemenu import PaletteMenuBox from sugar3.graphics import style from sugar3.activity.widgets import ActivityToolbarButton from sugar3.activity.widgets import StopButton @@ -35,6 +38,8 @@ from sugar3.activity.widgets import StopButton import filepicker import places from browser import Browser +from browser import HOME_PAGE_GCONF_KEY, LIBRARY_PATH + from pdfviewer import DummyBrowser _MAX_HISTORY_ENTRIES = 15 @@ -255,6 +260,15 @@ class PrimaryToolbar(ToolbarBase): 'go-home': (GObject.SignalFlags.RUN_FIRST, None, ([])), + 'set-home': (GObject.SignalFlags.RUN_FIRST, + None, + ([])), + 'reset-home': (GObject.SignalFlags.RUN_FIRST, + None, + ([])), + 'go-library': (GObject.SignalFlags.RUN_FIRST, + None, + ([])), } def __init__(self, tabbed_view, act): @@ -273,6 +287,32 @@ class PrimaryToolbar(ToolbarBase): self._go_home = ToolButton('go-home') self._go_home.set_tooltip(_('Home page')) self._go_home.connect('clicked', self._go_home_cb) + # add a menu to save the home page + menu_box = PaletteMenuBox() + self._go_home.props.palette.set_content(menu_box) + menu_item = PaletteMenuItem() + menu_item.set_label(_('Select as initial page')) + menu_item.connect('activate', self._set_home_cb) + menu_box.append_item(menu_item) + + self._reset_home_menu = PaletteMenuItem() + self._reset_home_menu.set_label(_('Reset initial page')) + self._reset_home_menu.connect('activate', self._reset_home_cb) + menu_box.append_item(self._reset_home_menu) + + if os.path.isfile(LIBRARY_PATH): + library_menu = PaletteMenuItem() + library_menu.set_label(_('Library')) + library_menu.connect('activate', self._go_library_cb) + menu_box.append_item(library_menu) + + menu_box.show_all() + + # verify if the home page is configured + client = GConf.Client.get_default() + self._reset_home_menu.set_visible( + client.get_string(HOME_PAGE_GCONF_KEY) is not None) + toolbar.insert(self._go_home, -1) self._go_home.show() @@ -487,6 +527,17 @@ class PrimaryToolbar(ToolbarBase): def _go_home_cb(self, button): self.emit('go-home') + def _go_library_cb(self, button): + self.emit('go-library') + + def _set_home_cb(self, button): + self._reset_home_menu.set_visible(True) + self.emit('set-home') + + def _reset_home_cb(self, button): + self._reset_home_menu.set_visible(False) + self.emit('reset-home') + def _go_back_cb(self, button): self._browser.go_back() |