Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2013-06-13 18:51:28 (GMT)
committer Manuel QuiƱones <manuq@laptop.org>2013-06-28 00:54:42 (GMT)
commit9b1a12229202860fb291c50b4181e3897c4fc47d (patch)
treef4c870129fe99be62b3d3328e739f50e2c73cc16
parent110e6f4f9d3f08336cfadfd4dc9f3858227d7a65 (diff)
Add a option to set the home page
This feature was requested by AU. A menu in the home button is added, with options to set the home page, reset the home page, and go to the Library. The items in the menu are shown or hidden as needed. The configuration is stored using GConf Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
-rw-r--r--browser.py27
-rw-r--r--webactivity.py29
-rw-r--r--webtoolbar.py51
3 files changed, 102 insertions, 5 deletions
diff --git a/browser.py b/browser.py
index dd23999..b03b0e3 100644
--- a/browser.py
+++ b/browser.py
@@ -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()