Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAriel Calzada <ariel@acivitycentral.com>2013-01-03 16:16:33 (GMT)
committer Ariel Calzada <ariel@acivitycentral.com>2013-01-03 16:16:33 (GMT)
commite4b78ea13c1980f4560bfb568b9476ef1abbd470 (patch)
treee5fade2e07650596f817c91810b6dc601b7722da
parent7b33af5cf841faef274a6511d94ec5a2c584fe1d (diff)
sdxo #310 Custom start/home page in Browse and #2769 Applying downstream changes to Browse-webkit
-rw-r--r--0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch40
-rw-r--r--0002-sdxo-2316-Browse-don-t-remember-the-last-zoom-used.-.patch1261
-rw-r--r--0003-deleted-.patch-file.patch59
-rw-r--r--activity/activity.info2
-rw-r--r--browser.py25
-rw-r--r--data/homepage.conf1
-rw-r--r--hometoolbar.py45
-rw-r--r--icons/browse-change-homepage.svg11
-rw-r--r--icons/browse-go-homepage.svg11
-rw-r--r--webactivity.py13
-rw-r--r--webactivity.py.orig686
-rw-r--r--webtoolbar.py14
12 files changed, 2152 insertions, 16 deletions
diff --git a/0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch b/0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch
new file mode 100644
index 0000000..57df173
--- /dev/null
+++ b/0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch
@@ -0,0 +1,40 @@
+From 40215fa274b74a54da9cfdaa5f4733952395fddb Mon Sep 17 00:00:00 2001
+From: Ajay Garg <ajay@activitycentral.com>
+Date: Wed, 26 Dec 2012 23:35:50 +0530
+Subject: [PATCH 1/3] sdxo#2572: Add "Load_URI" signal-handler in "Browse"
+ activity. When this signal is received (with the "uri"
+ as the argument), this "uri" is reloaded in the
+ "Browse" instance.
+
+---
+ webactivity.py | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/webactivity.py b/webactivity.py
+index 3c0d337..7024b40 100644
+--- a/webactivity.py
++++ b/webactivity.py
+@@ -20,6 +20,7 @@ import logging
+ from gettext import gettext as _
+ from gettext import ngettext
+ import os
++import dbus
+
+ from gi.repository import GObject
+ GObject.threads_init()
+@@ -247,6 +248,12 @@ class WebActivity(activity.Activity):
+ # http://bugs.sugarlabs.org/ticket/3973
+ self._cleanup_temp_files()
+
++ dbus.SessionBus().add_signal_receiver(self._load_uri, 'Load_URI',
++ IFACE)
++
++ def _load_uri(self, uri):
++ self._link_clicked_cb(None, uri)
++
+ def _cleanup_temp_files(self):
+ """Removes temporary files generated by Download Manager that
+ were cancelled by the user or failed for any reason.
+--
+1.7.10.4
+
diff --git a/0002-sdxo-2316-Browse-don-t-remember-the-last-zoom-used.-.patch b/0002-sdxo-2316-Browse-don-t-remember-the-last-zoom-used.-.patch
new file mode 100644
index 0000000..1184504
--- /dev/null
+++ b/0002-sdxo-2316-Browse-don-t-remember-the-last-zoom-used.-.patch
@@ -0,0 +1,1261 @@
+From 4d8014f369bf457a743363d38ce4bfa8e3f56e67 Mon Sep 17 00:00:00 2001
+From: Ariel Calzada <ariel@acivitycentral.com>
+Date: Wed, 2 Jan 2013 08:29:55 -0500
+Subject: [PATCH 2/3] sdxo#2316: Browse don't remember the last zoom used. In
+ the read_file and write_file method
+ self.model.data['current_zoom_level'] is
+ restored/written
+
+---
+ ...dd-Load_URI-signal-handler-in-Browse-acti.patch | 40 ++++++++++++++++++++
+ locale/af/activity.linfo | 2 +
+ locale/ak/activity.linfo | 2 +
+ locale/am/activity.linfo | 2 +
+ locale/ar/activity.linfo | 2 +
+ locale/ayc/activity.linfo | 2 +
+ locale/aym/activity.linfo | 2 +
+ locale/be/activity.linfo | 2 +
+ locale/be@latin/activity.linfo | 2 +
+ locale/bg/activity.linfo | 2 +
+ locale/bi/activity.linfo | 2 +
+ locale/bn/activity.linfo | 2 +
+ locale/bn_IN/activity.linfo | 2 +
+ locale/br/activity.linfo | 2 +
+ locale/bs/activity.linfo | 2 +
+ locale/ca/activity.linfo | 2 +
+ locale/cpp/activity.linfo | 2 +
+ locale/cs/activity.linfo | 2 +
+ locale/cy/activity.linfo | 2 +
+ locale/da/activity.linfo | 2 +
+ locale/de/activity.linfo | 2 +
+ locale/dz/activity.linfo | 2 +
+ locale/el/activity.linfo | 2 +
+ locale/en/activity.linfo | 2 +
+ locale/en_GB/activity.linfo | 2 +
+ locale/en_US/activity.linfo | 2 +
+ locale/es/activity.linfo | 2 +
+ locale/fa/activity.linfo | 2 +
+ locale/fa_AF/activity.linfo | 2 +
+ locale/ff/activity.linfo | 2 +
+ locale/fi/activity.linfo | 2 +
+ locale/fil/activity.linfo | 2 +
+ locale/fr/activity.linfo | 2 +
+ locale/gl/activity.linfo | 2 +
+ locale/gn/activity.linfo | 2 +
+ locale/gom/activity.linfo | 2 +
+ locale/gom@latin/activity.linfo | 2 +
+ locale/gu/activity.linfo | 2 +
+ locale/ha/activity.linfo | 2 +
+ locale/he/activity.linfo | 2 +
+ locale/hi/activity.linfo | 2 +
+ locale/hr/activity.linfo | 2 +
+ locale/ht/activity.linfo | 2 +
+ locale/hu/activity.linfo | 2 +
+ locale/hus/activity.linfo | 2 +
+ locale/hy/activity.linfo | 2 +
+ locale/id/activity.linfo | 2 +
+ locale/ig/activity.linfo | 2 +
+ locale/is/activity.linfo | 2 +
+ locale/it/activity.linfo | 2 +
+ locale/ja/activity.linfo | 2 +
+ locale/km/activity.linfo | 2 +
+ locale/kn/activity.linfo | 2 +
+ locale/ko/activity.linfo | 2 +
+ locale/kos/activity.linfo | 2 +
+ locale/ku/activity.linfo | 2 +
+ locale/ky/activity.linfo | 2 +
+ locale/lg/activity.linfo | 2 +
+ locale/lt/activity.linfo | 2 +
+ locale/lv/activity.linfo | 2 +
+ locale/mg/activity.linfo | 2 +
+ locale/mi/activity.linfo | 2 +
+ locale/mk/activity.linfo | 2 +
+ locale/ml/activity.linfo | 2 +
+ locale/mn/activity.linfo | 2 +
+ locale/mr/activity.linfo | 2 +
+ locale/ms/activity.linfo | 2 +
+ locale/mvo/activity.linfo | 2 +
+ locale/na/activity.linfo | 2 +
+ locale/nah/activity.linfo | 2 +
+ locale/nb/activity.linfo | 2 +
+ locale/ne/activity.linfo | 2 +
+ locale/niu/activity.linfo | 2 +
+ locale/nl/activity.linfo | 2 +
+ locale/nn/activity.linfo | 2 +
+ locale/or/activity.linfo | 2 +
+ locale/pa/activity.linfo | 2 +
+ locale/pap/activity.linfo | 2 +
+ locale/pbs/activity.linfo | 2 +
+ locale/pl/activity.linfo | 2 +
+ locale/ps/activity.linfo | 2 +
+ locale/pt/activity.linfo | 2 +
+ locale/pt_BR/activity.linfo | 2 +
+ locale/quy/activity.linfo | 2 +
+ locale/quz/activity.linfo | 2 +
+ locale/ro/activity.linfo | 2 +
+ locale/ru/activity.linfo | 2 +
+ locale/rw/activity.linfo | 2 +
+ locale/sd/activity.linfo | 2 +
+ locale/si/activity.linfo | 2 +
+ locale/sk/activity.linfo | 2 +
+ locale/sl/activity.linfo | 2 +
+ locale/sm/activity.linfo | 2 +
+ locale/son/activity.linfo | 2 +
+ locale/sq/activity.linfo | 2 +
+ locale/sr/activity.linfo | 2 +
+ locale/st/activity.linfo | 2 +
+ locale/sv/activity.linfo | 2 +
+ locale/sw/activity.linfo | 2 +
+ locale/ta/activity.linfo | 2 +
+ locale/te/activity.linfo | 2 +
+ locale/th/activity.linfo | 2 +
+ locale/to/activity.linfo | 2 +
+ locale/tr/activity.linfo | 2 +
+ locale/tvl/activity.linfo | 2 +
+ locale/tyv/activity.linfo | 2 +
+ locale/tzm/activity.linfo | 2 +
+ locale/tzo/activity.linfo | 2 +
+ locale/ug/activity.linfo | 2 +
+ locale/uk/activity.linfo | 2 +
+ locale/ur/activity.linfo | 2 +
+ locale/vi/activity.linfo | 2 +
+ locale/wa/activity.linfo | 2 +
+ locale/wo/activity.linfo | 2 +
+ locale/yo/activity.linfo | 2 +
+ locale/zh_CN/activity.linfo | 2 +
+ locale/zh_HK/activity.linfo | 2 +
+ locale/zh_TW/activity.linfo | 2 +
+ webactivity.py | 10 +++++
+ 119 files changed, 284 insertions(+)
+ create mode 100644 0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch
+ create mode 100644 locale/af/activity.linfo
+ create mode 100644 locale/ak/activity.linfo
+ create mode 100644 locale/am/activity.linfo
+ create mode 100644 locale/ar/activity.linfo
+ create mode 100644 locale/ayc/activity.linfo
+ create mode 100644 locale/aym/activity.linfo
+ create mode 100644 locale/be/activity.linfo
+ create mode 100644 locale/be@latin/activity.linfo
+ create mode 100644 locale/bg/activity.linfo
+ create mode 100644 locale/bi/activity.linfo
+ create mode 100644 locale/bn/activity.linfo
+ create mode 100644 locale/bn_IN/activity.linfo
+ create mode 100644 locale/br/activity.linfo
+ create mode 100644 locale/bs/activity.linfo
+ create mode 100644 locale/ca/activity.linfo
+ create mode 100644 locale/cpp/activity.linfo
+ create mode 100644 locale/cs/activity.linfo
+ create mode 100644 locale/cy/activity.linfo
+ create mode 100644 locale/da/activity.linfo
+ create mode 100644 locale/de/activity.linfo
+ create mode 100644 locale/dz/activity.linfo
+ create mode 100644 locale/el/activity.linfo
+ create mode 100644 locale/en/activity.linfo
+ create mode 100644 locale/en_GB/activity.linfo
+ create mode 100644 locale/en_US/activity.linfo
+ create mode 100644 locale/es/activity.linfo
+ create mode 100644 locale/fa/activity.linfo
+ create mode 100644 locale/fa_AF/activity.linfo
+ create mode 100644 locale/ff/activity.linfo
+ create mode 100644 locale/fi/activity.linfo
+ create mode 100644 locale/fil/activity.linfo
+ create mode 100644 locale/fr/activity.linfo
+ create mode 100644 locale/gl/activity.linfo
+ create mode 100644 locale/gn/activity.linfo
+ create mode 100644 locale/gom/activity.linfo
+ create mode 100644 locale/gom@latin/activity.linfo
+ create mode 100644 locale/gu/activity.linfo
+ create mode 100644 locale/ha/activity.linfo
+ create mode 100644 locale/he/activity.linfo
+ create mode 100644 locale/hi/activity.linfo
+ create mode 100644 locale/hr/activity.linfo
+ create mode 100644 locale/ht/activity.linfo
+ create mode 100644 locale/hu/activity.linfo
+ create mode 100644 locale/hus/activity.linfo
+ create mode 100644 locale/hy/activity.linfo
+ create mode 100644 locale/id/activity.linfo
+ create mode 100644 locale/ig/activity.linfo
+ create mode 100644 locale/is/activity.linfo
+ create mode 100644 locale/it/activity.linfo
+ create mode 100644 locale/ja/activity.linfo
+ create mode 100644 locale/km/activity.linfo
+ create mode 100644 locale/kn/activity.linfo
+ create mode 100644 locale/ko/activity.linfo
+ create mode 100644 locale/kos/activity.linfo
+ create mode 100644 locale/ku/activity.linfo
+ create mode 100644 locale/ky/activity.linfo
+ create mode 100644 locale/lg/activity.linfo
+ create mode 100644 locale/lt/activity.linfo
+ create mode 100644 locale/lv/activity.linfo
+ create mode 100644 locale/mg/activity.linfo
+ create mode 100644 locale/mi/activity.linfo
+ create mode 100644 locale/mk/activity.linfo
+ create mode 100644 locale/ml/activity.linfo
+ create mode 100644 locale/mn/activity.linfo
+ create mode 100644 locale/mr/activity.linfo
+ create mode 100644 locale/ms/activity.linfo
+ create mode 100644 locale/mvo/activity.linfo
+ create mode 100644 locale/na/activity.linfo
+ create mode 100644 locale/nah/activity.linfo
+ create mode 100644 locale/nb/activity.linfo
+ create mode 100644 locale/ne/activity.linfo
+ create mode 100644 locale/niu/activity.linfo
+ create mode 100644 locale/nl/activity.linfo
+ create mode 100644 locale/nn/activity.linfo
+ create mode 100644 locale/or/activity.linfo
+ create mode 100644 locale/pa/activity.linfo
+ create mode 100644 locale/pap/activity.linfo
+ create mode 100644 locale/pbs/activity.linfo
+ create mode 100644 locale/pl/activity.linfo
+ create mode 100644 locale/ps/activity.linfo
+ create mode 100644 locale/pt/activity.linfo
+ create mode 100644 locale/pt_BR/activity.linfo
+ create mode 100644 locale/quy/activity.linfo
+ create mode 100644 locale/quz/activity.linfo
+ create mode 100644 locale/ro/activity.linfo
+ create mode 100644 locale/ru/activity.linfo
+ create mode 100644 locale/rw/activity.linfo
+ create mode 100644 locale/sd/activity.linfo
+ create mode 100644 locale/si/activity.linfo
+ create mode 100644 locale/sk/activity.linfo
+ create mode 100644 locale/sl/activity.linfo
+ create mode 100644 locale/sm/activity.linfo
+ create mode 100644 locale/son/activity.linfo
+ create mode 100644 locale/sq/activity.linfo
+ create mode 100644 locale/sr/activity.linfo
+ create mode 100644 locale/st/activity.linfo
+ create mode 100644 locale/sv/activity.linfo
+ create mode 100644 locale/sw/activity.linfo
+ create mode 100644 locale/ta/activity.linfo
+ create mode 100644 locale/te/activity.linfo
+ create mode 100644 locale/th/activity.linfo
+ create mode 100644 locale/to/activity.linfo
+ create mode 100644 locale/tr/activity.linfo
+ create mode 100644 locale/tvl/activity.linfo
+ create mode 100644 locale/tyv/activity.linfo
+ create mode 100644 locale/tzm/activity.linfo
+ create mode 100644 locale/tzo/activity.linfo
+ create mode 100644 locale/ug/activity.linfo
+ create mode 100644 locale/uk/activity.linfo
+ create mode 100644 locale/ur/activity.linfo
+ create mode 100644 locale/vi/activity.linfo
+ create mode 100644 locale/wa/activity.linfo
+ create mode 100644 locale/wo/activity.linfo
+ create mode 100644 locale/yo/activity.linfo
+ create mode 100644 locale/zh_CN/activity.linfo
+ create mode 100644 locale/zh_HK/activity.linfo
+ create mode 100644 locale/zh_TW/activity.linfo
+
+diff --git a/0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch b/0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch
+new file mode 100644
+index 0000000..c0bc0dc
+--- /dev/null
++++ b/0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch
+@@ -0,0 +1,40 @@
++From 40215fa274b74a54da9cfdaa5f4733952395fddb Mon Sep 17 00:00:00 2001
++From: Ajay Garg <ajay@activitycentral.com>
++Date: Wed, 26 Dec 2012 23:35:50 +0530
++Subject: [PATCH] sdxo#2572: Add "Load_URI" signal-handler in "Browse"
++ activity. When this signal is received (with the "uri" as
++ the argument), this "uri" is reloaded in the "Browse"
++ instance.
++
++---
++ webactivity.py | 7 +++++++
++ 1 file changed, 7 insertions(+)
++
++diff --git a/webactivity.py b/webactivity.py
++index 3c0d337..7024b40 100644
++--- a/webactivity.py
+++++ b/webactivity.py
++@@ -20,6 +20,7 @@ import logging
++ from gettext import gettext as _
++ from gettext import ngettext
++ import os
+++import dbus
++
++ from gi.repository import GObject
++ GObject.threads_init()
++@@ -247,6 +248,12 @@ class WebActivity(activity.Activity):
++ # http://bugs.sugarlabs.org/ticket/3973
++ self._cleanup_temp_files()
++
+++ dbus.SessionBus().add_signal_receiver(self._load_uri, 'Load_URI',
+++ IFACE)
+++
+++ def _load_uri(self, uri):
+++ self._link_clicked_cb(None, uri)
+++
++ def _cleanup_temp_files(self):
++ """Removes temporary files generated by Download Manager that
++ were cancelled by the user or failed for any reason.
++--
++1.7.10.4
++
+diff --git a/locale/af/activity.linfo b/locale/af/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/af/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/ak/activity.linfo b/locale/ak/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/ak/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/am/activity.linfo b/locale/am/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/am/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/ar/activity.linfo b/locale/ar/activity.linfo
+new file mode 100644
+index 0000000..f1351c5
+--- /dev/null
++++ b/locale/ar/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = تصفّح
+diff --git a/locale/ayc/activity.linfo b/locale/ayc/activity.linfo
+new file mode 100644
+index 0000000..61ff690
+--- /dev/null
++++ b/locale/ayc/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Internet taypita yatiña
+diff --git a/locale/aym/activity.linfo b/locale/aym/activity.linfo
+new file mode 100644
+index 0000000..61ff690
+--- /dev/null
++++ b/locale/aym/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Internet taypita yatiña
+diff --git a/locale/be/activity.linfo b/locale/be/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/be/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/be@latin/activity.linfo b/locale/be@latin/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/be@latin/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/bg/activity.linfo b/locale/bg/activity.linfo
+new file mode 100644
+index 0000000..ee23742
+--- /dev/null
++++ b/locale/bg/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Разглеждане
+diff --git a/locale/bi/activity.linfo b/locale/bi/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/bi/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/bn/activity.linfo b/locale/bn/activity.linfo
+new file mode 100644
+index 0000000..0a2f930
+--- /dev/null
++++ b/locale/bn/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = ব্রাউজ করো
+diff --git a/locale/bn_IN/activity.linfo b/locale/bn_IN/activity.linfo
+new file mode 100644
+index 0000000..0a2f930
+--- /dev/null
++++ b/locale/bn_IN/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = ব্রাউজ করো
+diff --git a/locale/br/activity.linfo b/locale/br/activity.linfo
+new file mode 100644
+index 0000000..a1fe5cd
+--- /dev/null
++++ b/locale/br/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Merdeiñ
+diff --git a/locale/bs/activity.linfo b/locale/bs/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/bs/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/ca/activity.linfo b/locale/ca/activity.linfo
+new file mode 100644
+index 0000000..e4b5c75
+--- /dev/null
++++ b/locale/ca/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Navegar
+diff --git a/locale/cpp/activity.linfo b/locale/cpp/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/cpp/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/cs/activity.linfo b/locale/cs/activity.linfo
+new file mode 100644
+index 0000000..9648a70
+--- /dev/null
++++ b/locale/cs/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Procházet
+diff --git a/locale/cy/activity.linfo b/locale/cy/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/cy/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/da/activity.linfo b/locale/da/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/da/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/de/activity.linfo b/locale/de/activity.linfo
+new file mode 100644
+index 0000000..278475f
+--- /dev/null
++++ b/locale/de/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browser
+diff --git a/locale/dz/activity.linfo b/locale/dz/activity.linfo
+new file mode 100644
+index 0000000..d2ef92b
+--- /dev/null
++++ b/locale/dz/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = ཕབ་ལེན།
+diff --git a/locale/el/activity.linfo b/locale/el/activity.linfo
+new file mode 100644
+index 0000000..3c9bd29
+--- /dev/null
++++ b/locale/el/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Περιήγηση
+diff --git a/locale/en/activity.linfo b/locale/en/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/en/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/en_GB/activity.linfo b/locale/en_GB/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/en_GB/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/en_US/activity.linfo b/locale/en_US/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/en_US/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/es/activity.linfo b/locale/es/activity.linfo
+new file mode 100644
+index 0000000..e4b5c75
+--- /dev/null
++++ b/locale/es/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Navegar
+diff --git a/locale/fa/activity.linfo b/locale/fa/activity.linfo
+new file mode 100644
+index 0000000..f4f96d7
+--- /dev/null
++++ b/locale/fa/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = مرور
+diff --git a/locale/fa_AF/activity.linfo b/locale/fa_AF/activity.linfo
+new file mode 100644
+index 0000000..fa50622
+--- /dev/null
++++ b/locale/fa_AF/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = جستجو
+diff --git a/locale/ff/activity.linfo b/locale/ff/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/ff/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/fi/activity.linfo b/locale/fi/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/fi/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/fil/activity.linfo b/locale/fil/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/fil/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/fr/activity.linfo b/locale/fr/activity.linfo
+new file mode 100644
+index 0000000..aaff8f4
+--- /dev/null
++++ b/locale/fr/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Naviguer
+diff --git a/locale/gl/activity.linfo b/locale/gl/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/gl/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/gn/activity.linfo b/locale/gn/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/gn/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/gom/activity.linfo b/locale/gom/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/gom/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/gom@latin/activity.linfo b/locale/gom@latin/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/gom@latin/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/gu/activity.linfo b/locale/gu/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/gu/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/ha/activity.linfo b/locale/ha/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/ha/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/he/activity.linfo b/locale/he/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/he/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/hi/activity.linfo b/locale/hi/activity.linfo
+new file mode 100644
+index 0000000..70d617f
+--- /dev/null
++++ b/locale/hi/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = विचरण
+diff --git a/locale/hr/activity.linfo b/locale/hr/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/hr/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/ht/activity.linfo b/locale/ht/activity.linfo
+new file mode 100644
+index 0000000..48d2e6f
+--- /dev/null
++++ b/locale/ht/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Navige
+diff --git a/locale/hu/activity.linfo b/locale/hu/activity.linfo
+new file mode 100644
+index 0000000..60bc626
+--- /dev/null
++++ b/locale/hu/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Böngészés
+diff --git a/locale/hus/activity.linfo b/locale/hus/activity.linfo
+new file mode 100644
+index 0000000..eb5f2c2
+--- /dev/null
++++ b/locale/hus/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Aliy
+diff --git a/locale/hy/activity.linfo b/locale/hy/activity.linfo
+new file mode 100644
+index 0000000..373a86b
+--- /dev/null
++++ b/locale/hy/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Զննել
+diff --git a/locale/id/activity.linfo b/locale/id/activity.linfo
+new file mode 100644
+index 0000000..2c1be69
+--- /dev/null
++++ b/locale/id/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Ramban
+diff --git a/locale/ig/activity.linfo b/locale/ig/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/ig/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/is/activity.linfo b/locale/is/activity.linfo
+new file mode 100644
+index 0000000..509a7fb
+--- /dev/null
++++ b/locale/is/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Flakka
+diff --git a/locale/it/activity.linfo b/locale/it/activity.linfo
+new file mode 100644
+index 0000000..2afd383
+--- /dev/null
++++ b/locale/it/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Naviga
+diff --git a/locale/ja/activity.linfo b/locale/ja/activity.linfo
+new file mode 100644
+index 0000000..f4341d7
+--- /dev/null
++++ b/locale/ja/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = ブラウズ
+diff --git a/locale/km/activity.linfo b/locale/km/activity.linfo
+new file mode 100644
+index 0000000..5a14f9d
+--- /dev/null
++++ b/locale/km/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = រក​មើល
+diff --git a/locale/kn/activity.linfo b/locale/kn/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/kn/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/ko/activity.linfo b/locale/ko/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/ko/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/kos/activity.linfo b/locale/kos/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/kos/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/ku/activity.linfo b/locale/ku/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/ku/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/ky/activity.linfo b/locale/ky/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/ky/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/lg/activity.linfo b/locale/lg/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/lg/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/lt/activity.linfo b/locale/lt/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/lt/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/lv/activity.linfo b/locale/lv/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/lv/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/mg/activity.linfo b/locale/mg/activity.linfo
+new file mode 100644
+index 0000000..3da6525
+--- /dev/null
++++ b/locale/mg/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Tetezo
+diff --git a/locale/mi/activity.linfo b/locale/mi/activity.linfo
+new file mode 100644
+index 0000000..79ce140
+--- /dev/null
++++ b/locale/mi/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Tirotiro
+diff --git a/locale/mk/activity.linfo b/locale/mk/activity.linfo
+new file mode 100644
+index 0000000..0cc0421
+--- /dev/null
++++ b/locale/mk/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Разгледај
+diff --git a/locale/ml/activity.linfo b/locale/ml/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/ml/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/mn/activity.linfo b/locale/mn/activity.linfo
+new file mode 100644
+index 0000000..97c490c
+--- /dev/null
++++ b/locale/mn/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Интэрнэт
+diff --git a/locale/mr/activity.linfo b/locale/mr/activity.linfo
+new file mode 100644
+index 0000000..7ff9016
+--- /dev/null
++++ b/locale/mr/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = वेब भटकंती
+diff --git a/locale/ms/activity.linfo b/locale/ms/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/ms/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/mvo/activity.linfo b/locale/mvo/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/mvo/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/na/activity.linfo b/locale/na/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/na/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/nah/activity.linfo b/locale/nah/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/nah/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/nb/activity.linfo b/locale/nb/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/nb/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/ne/activity.linfo b/locale/ne/activity.linfo
+new file mode 100644
+index 0000000..6b75ec0
+--- /dev/null
++++ b/locale/ne/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = ब्राउज
+diff --git a/locale/niu/activity.linfo b/locale/niu/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/niu/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/nl/activity.linfo b/locale/nl/activity.linfo
+new file mode 100644
+index 0000000..cd1e90d
+--- /dev/null
++++ b/locale/nl/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Surfen
+diff --git a/locale/nn/activity.linfo b/locale/nn/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/nn/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/or/activity.linfo b/locale/or/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/or/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/pa/activity.linfo b/locale/pa/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/pa/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/pap/activity.linfo b/locale/pap/activity.linfo
+new file mode 100644
+index 0000000..e68f609
+--- /dev/null
++++ b/locale/pap/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Nabegá
+diff --git a/locale/pbs/activity.linfo b/locale/pbs/activity.linfo
+new file mode 100644
+index 0000000..bfbae95
+--- /dev/null
++++ b/locale/pbs/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Manjui' manad-eú
+diff --git a/locale/pl/activity.linfo b/locale/pl/activity.linfo
+new file mode 100644
+index 0000000..ca41c07
+--- /dev/null
++++ b/locale/pl/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Internet
+diff --git a/locale/ps/activity.linfo b/locale/ps/activity.linfo
+new file mode 100644
+index 0000000..18db16e
+--- /dev/null
++++ b/locale/ps/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = لټول
+diff --git a/locale/pt/activity.linfo b/locale/pt/activity.linfo
+new file mode 100644
+index 0000000..e4b5c75
+--- /dev/null
++++ b/locale/pt/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Navegar
+diff --git a/locale/pt_BR/activity.linfo b/locale/pt_BR/activity.linfo
+new file mode 100644
+index 0000000..e4b5c75
+--- /dev/null
++++ b/locale/pt_BR/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Navegar
+diff --git a/locale/quy/activity.linfo b/locale/quy/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/quy/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/quz/activity.linfo b/locale/quz/activity.linfo
+new file mode 100644
+index 0000000..b6e532f
+--- /dev/null
++++ b/locale/quz/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Wayp'uq
+diff --git a/locale/ro/activity.linfo b/locale/ro/activity.linfo
+new file mode 100644
+index 0000000..45f600b
+--- /dev/null
++++ b/locale/ro/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Navighează
+diff --git a/locale/ru/activity.linfo b/locale/ru/activity.linfo
+new file mode 100644
+index 0000000..9b6be8f
+--- /dev/null
++++ b/locale/ru/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Смотреть
+diff --git a/locale/rw/activity.linfo b/locale/rw/activity.linfo
+new file mode 100644
+index 0000000..bf79953
+--- /dev/null
++++ b/locale/rw/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Shakisha
+diff --git a/locale/sd/activity.linfo b/locale/sd/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/sd/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/si/activity.linfo b/locale/si/activity.linfo
+new file mode 100644
+index 0000000..d1656d1
+--- /dev/null
++++ b/locale/si/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = සැරිසරන්න
+diff --git a/locale/sk/activity.linfo b/locale/sk/activity.linfo
+new file mode 100644
+index 0000000..cd022cf
+--- /dev/null
++++ b/locale/sk/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Prezerať
+diff --git a/locale/sl/activity.linfo b/locale/sl/activity.linfo
+new file mode 100644
+index 0000000..2d33205
+--- /dev/null
++++ b/locale/sl/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Prebrskaj
+diff --git a/locale/sm/activity.linfo b/locale/sm/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/sm/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/son/activity.linfo b/locale/son/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/son/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/sq/activity.linfo b/locale/sq/activity.linfo
+new file mode 100644
+index 0000000..20ca65a
+--- /dev/null
++++ b/locale/sq/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Shfleto
+diff --git a/locale/sr/activity.linfo b/locale/sr/activity.linfo
+new file mode 100644
+index 0000000..d54fc01
+--- /dev/null
++++ b/locale/sr/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Прегледај
+diff --git a/locale/st/activity.linfo b/locale/st/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/st/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/sv/activity.linfo b/locale/sv/activity.linfo
+new file mode 100644
+index 0000000..9232dbf
+--- /dev/null
++++ b/locale/sv/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Surfa
+diff --git a/locale/sw/activity.linfo b/locale/sw/activity.linfo
+new file mode 100644
+index 0000000..e733328
+--- /dev/null
++++ b/locale/sw/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Kuvinjari
+diff --git a/locale/ta/activity.linfo b/locale/ta/activity.linfo
+new file mode 100644
+index 0000000..77809b4
+--- /dev/null
++++ b/locale/ta/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = உவாவு
+diff --git a/locale/te/activity.linfo b/locale/te/activity.linfo
+new file mode 100644
+index 0000000..a0f8783
+--- /dev/null
++++ b/locale/te/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = వెబ్ చూడు
+diff --git a/locale/th/activity.linfo b/locale/th/activity.linfo
+new file mode 100644
+index 0000000..8838502
+--- /dev/null
++++ b/locale/th/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = เรียกดู
+diff --git a/locale/to/activity.linfo b/locale/to/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/to/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/tr/activity.linfo b/locale/tr/activity.linfo
+new file mode 100644
+index 0000000..87e9a0a
+--- /dev/null
++++ b/locale/tr/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = göz atmak
+diff --git a/locale/tvl/activity.linfo b/locale/tvl/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/tvl/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/tyv/activity.linfo b/locale/tyv/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/tyv/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/tzm/activity.linfo b/locale/tzm/activity.linfo
+new file mode 100644
+index 0000000..5e8d7d9
+--- /dev/null
++++ b/locale/tzm/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = ⵉⵏⵉⴳ
+diff --git a/locale/tzo/activity.linfo b/locale/tzo/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/tzo/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/ug/activity.linfo b/locale/ug/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/ug/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/uk/activity.linfo b/locale/uk/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/uk/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/ur/activity.linfo b/locale/ur/activity.linfo
+new file mode 100644
+index 0000000..8d9f2ec
+--- /dev/null
++++ b/locale/ur/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = براؤز
+diff --git a/locale/vi/activity.linfo b/locale/vi/activity.linfo
+new file mode 100644
+index 0000000..6d05dbd
+--- /dev/null
++++ b/locale/vi/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Duyệt
+diff --git a/locale/wa/activity.linfo b/locale/wa/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/wa/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/wo/activity.linfo b/locale/wo/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/wo/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/yo/activity.linfo b/locale/yo/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/yo/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/zh_CN/activity.linfo b/locale/zh_CN/activity.linfo
+new file mode 100644
+index 0000000..dfefeb4
+--- /dev/null
++++ b/locale/zh_CN/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = 浏览
+diff --git a/locale/zh_HK/activity.linfo b/locale/zh_HK/activity.linfo
+new file mode 100644
+index 0000000..0b2e50b
+--- /dev/null
++++ b/locale/zh_HK/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = Browse
+diff --git a/locale/zh_TW/activity.linfo b/locale/zh_TW/activity.linfo
+new file mode 100644
+index 0000000..8a1e81c
+--- /dev/null
++++ b/locale/zh_TW/activity.linfo
+@@ -0,0 +1,2 @@
++[Activity]
++name = 瀏覽
+diff --git a/webactivity.py b/webactivity.py
+index 7024b40..fdc12dd 100644
+--- a/webactivity.py
++++ b/webactivity.py
+@@ -421,6 +421,13 @@ class WebActivity(activity.Activity):
+ tab_page.browser.grab_focus()
+
+ self._tabbed_view.set_current_page(self.model.data['current_tab'])
++
++ # zoom level
++ if 'current_zoom_level' in self.model.data:
++ self._tabbed_view.props.current_browser.set_zoom_level(self.model.data['current_zoom_level'])
++ else:
++ self._tabbed_view.props.current_browser.set_zoom_level(ZOOM_ORIGINAL)
++
+ elif self.metadata['mime_type'] == 'text/uri-list':
+ data = self._get_data_from_file_path(file_path)
+ uris = mime.split_uri_list(data)
+@@ -442,6 +449,9 @@ class WebActivity(activity.Activity):
+
+ browser = self._tabbed_view.current_browser
+
++ # zoom level
++ self.model.data['current_zoom_level'] = browser.get_zoom_level()
++
+ if not self._jobject.metadata['title_set_by_user'] == '1':
+ if browser.props.title is None:
+ self.metadata['title'] = _('Untitled')
+--
+1.7.10.4
+
diff --git a/0003-deleted-.patch-file.patch b/0003-deleted-.patch-file.patch
new file mode 100644
index 0000000..0ee6006
--- /dev/null
+++ b/0003-deleted-.patch-file.patch
@@ -0,0 +1,59 @@
+From 7b33af5cf841faef274a6511d94ec5a2c584fe1d Mon Sep 17 00:00:00 2001
+From: Ariel Calzada <ariel@acivitycentral.com>
+Date: Wed, 2 Jan 2013 08:47:56 -0500
+Subject: [PATCH 3/3] deleted .patch file
+
+---
+ ...dd-Load_URI-signal-handler-in-Browse-acti.patch | 40 --------------------
+ 1 file changed, 40 deletions(-)
+ delete mode 100644 0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch
+
+diff --git a/0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch b/0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch
+deleted file mode 100644
+index c0bc0dc..0000000
+--- a/0001-sdxo-2572-Add-Load_URI-signal-handler-in-Browse-acti.patch
++++ /dev/null
+@@ -1,40 +0,0 @@
+-From 40215fa274b74a54da9cfdaa5f4733952395fddb Mon Sep 17 00:00:00 2001
+-From: Ajay Garg <ajay@activitycentral.com>
+-Date: Wed, 26 Dec 2012 23:35:50 +0530
+-Subject: [PATCH] sdxo#2572: Add "Load_URI" signal-handler in "Browse"
+- activity. When this signal is received (with the "uri" as
+- the argument), this "uri" is reloaded in the "Browse"
+- instance.
+-
+----
+- webactivity.py | 7 +++++++
+- 1 file changed, 7 insertions(+)
+-
+-diff --git a/webactivity.py b/webactivity.py
+-index 3c0d337..7024b40 100644
+---- a/webactivity.py
+-+++ b/webactivity.py
+-@@ -20,6 +20,7 @@ import logging
+- from gettext import gettext as _
+- from gettext import ngettext
+- import os
+-+import dbus
+-
+- from gi.repository import GObject
+- GObject.threads_init()
+-@@ -247,6 +248,12 @@ class WebActivity(activity.Activity):
+- # http://bugs.sugarlabs.org/ticket/3973
+- self._cleanup_temp_files()
+-
+-+ dbus.SessionBus().add_signal_receiver(self._load_uri, 'Load_URI',
+-+ IFACE)
+-+
+-+ def _load_uri(self, uri):
+-+ self._link_clicked_cb(None, uri)
+-+
+- def _cleanup_temp_files(self):
+- """Removes temporary files generated by Download Manager that
+- were cancelled by the user or failed for any reason.
+---
+-1.7.10.4
+-
+--
+1.7.10.4
+
diff --git a/activity/activity.info b/activity/activity.info
index 293c2ea..ff73a47 100644
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -1,6 +1,6 @@
[Activity]
name = Browse
-activity_version = 149
+activity_version = 149.3
bundle_id = org.laptop.WebActivity
icon = activity-web
exec = sugar-activity webactivity.WebActivity -s
diff --git a/browser.py b/browser.py
index 7419d2d..80936fa 100644
--- a/browser.py
+++ b/browser.py
@@ -342,12 +342,37 @@ class TabbedView(BrowserNotebook):
if os.path.isfile(_LIBRARY_PATH):
browser.load_uri('file://' + _LIBRARY_PATH)
+
+ elif os.path.isfile(activity.get_bundle_path() + "/data/homepage.conf"):
+ confFile = os.path.join(activity.get_bundle_path(),"data/homepage.conf")
+ f = open(confFile,"r")
+ contents = f.read().strip()
+ f.close()
+
+ if contents != "":
+ default_page = contents
+ else:
+ default_page = os.path.join(activity.get_bundle_path(),"data/index.html")
+
+ browser.load_uri(default_page)
else:
default_page = os.path.join(activity.get_bundle_path(),
"data/index.html")
browser.load_uri('file://' + default_page)
+
browser.grab_focus()
+ def change_homepage(self):
+ """ Change data/homepage.conf with current URL
+ """
+ confFile = os.path.join(activity.get_bundle_path(),"data/homepage.conf")
+ index = self.get_current_page()
+ ui_uri = self.get_nth_page(index).browser.get_uri()
+
+ f = open ( confFile,"w")
+ f.write(ui_uri)
+ f.close()
+
def _get_current_browser(self):
if self.get_n_pages():
return self.get_nth_page(self.get_current_page()).browser
diff --git a/data/homepage.conf b/data/homepage.conf
new file mode 100644
index 0000000..f693ef6
--- /dev/null
+++ b/data/homepage.conf
@@ -0,0 +1 @@
+http://www.google.com.co/ \ No newline at end of file
diff --git a/hometoolbar.py b/hometoolbar.py
new file mode 100644
index 0000000..3d5e6a6
--- /dev/null
+++ b/hometoolbar.py
@@ -0,0 +1,45 @@
+# Copyright (C) 2007, One Laptop Per Child
+# Copyright (C) 2012, Ariel Calzada
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+from gettext import gettext as _
+from gi.repository import Gtk
+from sugar3.graphics.toolbutton import ToolButton
+
+class HomeToolbar(Gtk.Toolbar):
+ def __init__(self, activity):
+ Gtk.Toolbar.__init__(self)
+
+ self._activity = activity
+
+ self.gohome = ToolButton('browse-go-homepage')
+ self.gohome.set_tooltip(_('Go to home page'))
+ self.gohome.connect('clicked', self.__gohome_clicked_cb)
+ self.insert(self.gohome, -1)
+ self.gohome.show()
+
+ self.changehome = ToolButton('browse-change-homepage')
+ self.changehome.set_tooltip(_('Set current page as home page'))
+ self.changehome.connect('clicked', self.__changehome_clicked_cb)
+ self.insert(self.changehome, -1)
+ self.changehome.show()
+
+ def __changehome_clicked_cb(self, button):
+ self._activity._change_home_button_cb(button)
+
+ def __gohome_clicked_cb(self, button):
+ self._activity._go_home_button_cb(button)
+
diff --git a/icons/browse-change-homepage.svg b/icons/browse-change-homepage.svg
new file mode 100644
index 0000000..c79c6d9
--- /dev/null
+++ b/icons/browse-change-homepage.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY fill_color "#FF0000">
+ <!ENTITY stroke_color "#010101">
+]>
+<svg xmlns="http://www.w3.org/2000/svg" width="55" height="55">
+ <g id="go-home">
+ <path d="M 27.5 15.96256 L 8.48131 32.4005 L 8.55256 48.0374 L 17 48.0052 L 17 30.9243 L 26 30.9243 L 26 48.0052 L 47.59 48.0052 L 47.4221 32.2792 Z M 31.5 30.9243 l 8 0 l 0 8 l -8 0 Z" stroke="none" fill="&fill_color;" stroke-linecap="round" stroke-width="3.5" />
+ <path d="M 5.48131 27.4005 L 27.5 8.96256 L 38.8997 18.0775 L 38.8637 9.26122 L 42.8936 9.27163 L 42.8832 21.3246 L 50.4221 27.2792" stroke="&fill_color;" fill="none" stroke-linecap="round" stroke-width="4.5" />
+ </g>
+</svg>
diff --git a/icons/browse-go-homepage.svg b/icons/browse-go-homepage.svg
new file mode 100644
index 0000000..a4fd762
--- /dev/null
+++ b/icons/browse-go-homepage.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY fill_color "#00cb00">
+ <!ENTITY stroke_color "#010101">
+]>
+<svg xmlns="http://www.w3.org/2000/svg" width="55" height="55">
+ <g id="go-home">
+ <path d="M 27.5 15.96256 L 8.48131 32.4005 L 8.55256 48.0374 L 17 48.0052 L 17 30.9243 L 26 30.9243 L 26 48.0052 L 47.59 48.0052 L 47.4221 32.2792 Z M 31.5 30.9243 l 8 0 l 0 8 l -8 0 Z" stroke="none" fill="&fill_color;" stroke-linecap="round" stroke-width="3.5" />
+ <path d="M 5.48131 27.4005 L 27.5 8.96256 L 38.8997 18.0775 L 38.8637 9.26122 L 42.8936 9.27163 L 42.8832 21.3246 L 50.4221 27.2792" stroke="&fill_color;" fill="none" stroke-linecap="round" stroke-width="4.5" />
+ </g>
+</svg>
diff --git a/webactivity.py b/webactivity.py
index fdc12dd..86d38f5 100644
--- a/webactivity.py
+++ b/webactivity.py
@@ -133,6 +133,7 @@ from browser import ZOOM_ORIGINAL
from webtoolbar import PrimaryToolbar
from edittoolbar import EditToolbar
from viewtoolbar import ViewToolbar
+from hometoolbar import HomeToolbar
import downloadmanager
# TODO: make the registration clearer SL #3087
@@ -183,11 +184,10 @@ class WebActivity(activity.Activity):
self._primary_toolbar = PrimaryToolbar(self._tabbed_view, self)
self._edit_toolbar = EditToolbar(self)
self._view_toolbar = ViewToolbar(self)
+ self._home_toolbar = HomeToolbar(self)
self._primary_toolbar.connect('add-link', self._link_add_button_cb)
- self._primary_toolbar.connect('go-home', self._go_home_button_cb)
-
self._edit_toolbar_button = ToolbarButton(
page=self._edit_toolbar,
icon_name='toolbar-edit')
@@ -201,6 +201,12 @@ class WebActivity(activity.Activity):
self._primary_toolbar.toolbar.insert(
view_toolbar_button, 2)
+ home_toolbar_button = ToolbarButton(
+ page=self._home_toolbar,
+ icon_name='go-home')
+ self._primary_toolbar.toolbar.insert(
+ home_toolbar_button, 3)
+
self._primary_toolbar.show_all()
self.set_toolbar_box(self._primary_toolbar)
@@ -487,6 +493,9 @@ class WebActivity(activity.Activity):
def _go_home_button_cb(self, button):
self._tabbed_view.load_homepage()
+ def _change_home_button_cb(self, button):
+ self._tabbed_view.change_homepage()
+
def _key_press_cb(self, widget, event):
key_name = Gdk.keyval_name(event.keyval)
browser = self._tabbed_view.props.current_browser
diff --git a/webactivity.py.orig b/webactivity.py.orig
new file mode 100644
index 0000000..fdc12dd
--- /dev/null
+++ b/webactivity.py.orig
@@ -0,0 +1,686 @@
+# Copyright (C) 2006, Red Hat, Inc.
+# Copyright (C) 2009 Martin Langhoff, Simon Schampijer, Daniel Drake,
+# Tomeu Vizoso
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+import logging
+from gettext import gettext as _
+from gettext import ngettext
+import os
+import dbus
+
+from gi.repository import GObject
+GObject.threads_init()
+
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import WebKit
+from gi.repository import Soup
+from gi.repository import SoupGNOME
+
+import base64
+import time
+import shutil
+import sqlite3
+import json
+from gi.repository import GConf
+import locale
+import cairo
+import StringIO
+from hashlib import sha1
+
+from sugar3.activity import activity
+from sugar3.graphics import style
+import telepathy
+import telepathy.client
+from sugar3.presence import presenceservice
+from sugar3.graphics.tray import HTray
+from sugar3 import profile
+from sugar3.graphics.alert import Alert
+from sugar3.graphics.icon import Icon
+from sugar3 import mime
+
+from sugar3.graphics.toolbarbox import ToolbarButton
+
+PROFILE_VERSION = 2
+
+_profile_version = 0
+_profile_path = os.path.join(activity.get_activity_root(), 'data/gecko')
+_version_file = os.path.join(_profile_path, 'version')
+_cookies_db_path = os.path.join(_profile_path, 'cookies.sqlite')
+
+if os.path.exists(_version_file):
+ f = open(_version_file)
+ _profile_version = int(f.read())
+ f.close()
+
+if _profile_version < PROFILE_VERSION:
+ if not os.path.exists(_profile_path):
+ os.mkdir(_profile_path)
+
+ shutil.copy('cert8.db', _profile_path)
+ os.chmod(os.path.join(_profile_path, 'cert8.db'), 0660)
+
+ f = open(_version_file, 'w')
+ f.write(str(PROFILE_VERSION))
+ f.close()
+
+
+def _seed_xs_cookie(cookie_jar):
+ """Create a HTTP Cookie to authenticate with the Schoolserver.
+
+ Do nothing if the laptop is not registered with Schoolserver, or
+ if the cookie already exists.
+
+ """
+ client = GConf.Client.get_default()
+ backup_url = client.get_string('/desktop/sugar/backup_url')
+ if backup_url == '':
+ _logger.debug('seed_xs_cookie: Not registered with Schoolserver')
+ return
+
+ jabber_server = client.get_string(
+ '/desktop/sugar/collaboration/jabber_server')
+
+ soup_uri = Soup.URI()
+ soup_uri.set_scheme('xmpp')
+ soup_uri.set_host(jabber_server)
+ soup_uri.set_path('/')
+ xs_cookie = cookie_jar.get_cookies(soup_uri, for_http=False)
+ if xs_cookie is not None:
+ _logger.debug('seed_xs_cookie: Cookie exists already')
+ return
+
+ pubkey = profile.get_profile().pubkey
+ cookie_data = {'color': profile.get_color().to_string(),
+ 'pkey_hash': sha1(pubkey).hexdigest()}
+
+ expire = int(time.time()) + 10 * 365 * 24 * 60 * 60
+
+ xs_cookie = Soup.Cookie()
+ xs_cookie.set_name('xoid')
+ xs_cookie.set_value(json.dumps(cookie_data))
+ xs_cookie.set_domain(jabber_server)
+ xs_cookie.set_path('/')
+ xs_cookie.set_max_age(expire)
+ cookie_jar.add_cookie(xs_cookie)
+ _logger.debug('seed_xs_cookie: Updated cookie successfully')
+
+
+def _set_char_preference(name, value):
+ cls = components.classes["@mozilla.org/preferences-service;1"]
+ prefService = cls.getService(components.interfaces.nsIPrefService)
+ branch = prefService.getBranch('')
+ branch.setCharPref(name, value)
+
+
+from browser import TabbedView
+from browser import ZOOM_ORIGINAL
+from webtoolbar import PrimaryToolbar
+from edittoolbar import EditToolbar
+from viewtoolbar import ViewToolbar
+import downloadmanager
+
+# TODO: make the registration clearer SL #3087
+
+from model import Model
+from sugar3.presence.tubeconn import TubeConnection
+from messenger import Messenger
+from linkbutton import LinkButton
+
+SERVICE = "org.laptop.WebActivity"
+IFACE = SERVICE
+PATH = "/org/laptop/WebActivity"
+
+_logger = logging.getLogger('web-activity')
+
+
+class WebActivity(activity.Activity):
+ def __init__(self, handle):
+ activity.Activity.__init__(self, handle)
+
+ _logger.debug('Starting the web activity')
+
+ session = WebKit.get_default_session()
+ session.set_property('accept-language-auto', True)
+ session.set_property('ssl-use-system-ca-file', True)
+ session.set_property('ssl-strict', False)
+
+ # By default, cookies are not stored persistently, we have to
+ # add a cookie jar so that they get saved to disk. We use one
+ # with a SQlite database:
+ cookie_jar = SoupGNOME.CookieJarSqlite(filename=_cookies_db_path,
+ read_only=False)
+ session.add_feature(cookie_jar)
+
+ _seed_xs_cookie(cookie_jar)
+
+ # FIXME
+ # downloadmanager.remove_old_parts()
+
+ self._force_close = False
+ self._tabbed_view = TabbedView()
+ self._tabbed_view.connect('focus-url-entry', self._on_focus_url_entry)
+ self._tabbed_view.connect('switch-page', self.__switch_page_cb)
+
+ self._tray = HTray()
+ self.set_tray(self._tray, Gtk.PositionType.BOTTOM)
+
+ self._primary_toolbar = PrimaryToolbar(self._tabbed_view, self)
+ self._edit_toolbar = EditToolbar(self)
+ self._view_toolbar = ViewToolbar(self)
+
+ self._primary_toolbar.connect('add-link', self._link_add_button_cb)
+
+ self._primary_toolbar.connect('go-home', self._go_home_button_cb)
+
+ self._edit_toolbar_button = ToolbarButton(
+ page=self._edit_toolbar,
+ icon_name='toolbar-edit')
+
+ self._primary_toolbar.toolbar.insert(
+ self._edit_toolbar_button, 1)
+
+ view_toolbar_button = ToolbarButton(
+ page=self._view_toolbar,
+ icon_name='toolbar-view')
+ self._primary_toolbar.toolbar.insert(
+ view_toolbar_button, 2)
+
+ self._primary_toolbar.show_all()
+ self.set_toolbar_box(self._primary_toolbar)
+
+ self.set_canvas(self._tabbed_view)
+ self._tabbed_view.show()
+
+ self.model = Model()
+ self.model.connect('add_link', self._add_link_model_cb)
+
+ self.connect('key-press-event', self._key_press_cb)
+
+ if handle.uri:
+ self._tabbed_view.current_browser.load_uri(handle.uri)
+ elif not self._jobject.file_path:
+ # TODO: we need this hack until we extend the activity API for
+ # opening URIs and default docs.
+ self._tabbed_view.load_homepage()
+
+ self.messenger = None
+ self.connect('shared', self._shared_cb)
+
+ # Get the Presence Service
+ self.pservice = presenceservice.get_instance()
+ try:
+ name, path = self.pservice.get_preferred_connection()
+ self.tp_conn_name = name
+ self.tp_conn_path = path
+ self.conn = telepathy.client.Connection(name, path)
+ except TypeError:
+ _logger.debug('Offline')
+ self.initiating = None
+
+ if self.get_shared_activity() is not None:
+ _logger.debug('shared: %s', self.get_shared())
+ # We are joining the activity
+ _logger.debug('Joined activity')
+ self.connect('joined', self._joined_cb)
+ if self.get_shared():
+ # We've already joined
+ self._joined_cb()
+ else:
+ _logger.debug('Created activity')
+
+ # README: this is a workaround to remove old temp file
+ # http://bugs.sugarlabs.org/ticket/3973
+ self._cleanup_temp_files()
+
+ dbus.SessionBus().add_signal_receiver(self._load_uri, 'Load_URI',
+ IFACE)
+
+ def _load_uri(self, uri):
+ self._link_clicked_cb(None, uri)
+
+ def _cleanup_temp_files(self):
+ """Removes temporary files generated by Download Manager that
+ were cancelled by the user or failed for any reason.
+
+ There is a bug in GLib that makes this to happen:
+ https://bugzilla.gnome.org/show_bug.cgi?id=629301
+ """
+
+ try:
+ uptime_proc = open('/proc/uptime', 'r').read()
+ uptime = int(float(uptime_proc.split()[0]))
+ except EnvironmentError:
+ logging.warning('/proc/uptime could not be read')
+ uptime = None
+
+ temp_path = os.path.join(self.get_activity_root(), 'instance')
+ now = int(time.time())
+ cutoff = now - 24 * 60 * 60 # yesterday
+ if uptime is not None:
+ boot_time = now - uptime
+ cutoff = max(cutoff, boot_time)
+
+ for f in os.listdir(temp_path):
+ if f.startswith('.goutputstream-'):
+ fpath = os.path.join(temp_path, f)
+ mtime = int(os.path.getmtime(fpath))
+ if mtime < cutoff:
+ logging.warning('Removing old temporary file: %s', fpath)
+ try:
+ os.remove(fpath)
+ except EnvironmentError:
+ logging.error('Temporary file could not be '
+ 'removed: %s', fpath)
+
+ def _on_focus_url_entry(self, gobject):
+ self._primary_toolbar.entry.grab_focus()
+
+ def _shared_cb(self, activity_):
+ _logger.debug('My activity was shared')
+ self.initiating = True
+ self._setup()
+
+ _logger.debug('This is my activity: making a tube...')
+ self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES].OfferDBusTube(SERVICE,
+ {})
+
+ def _setup(self):
+ if self.get_shared_activity() is None:
+ _logger.debug('Failed to share or join activity')
+ return
+
+ bus_name, conn_path, channel_paths = \
+ self.get_shared_activity().get_channels()
+
+ # Work out what our room is called and whether we have Tubes already
+ room = None
+ tubes_chan = None
+ text_chan = None
+ for channel_path in channel_paths:
+ channel = telepathy.client.Channel(bus_name, channel_path)
+ htype, handle = channel.GetHandle()
+ if htype == telepathy.HANDLE_TYPE_ROOM:
+ _logger.debug('Found our room: it has handle#%d "%s"',
+ handle,
+ self.conn.InspectHandles(htype, [handle])[0])
+ room = handle
+ ctype = channel.GetChannelType()
+ if ctype == telepathy.CHANNEL_TYPE_TUBES:
+ _logger.debug('Found our Tubes channel at %s',
+ channel_path)
+ tubes_chan = channel
+ elif ctype == telepathy.CHANNEL_TYPE_TEXT:
+ _logger.debug('Found our Text channel at %s',
+ channel_path)
+ text_chan = channel
+
+ if room is None:
+ _logger.debug("Presence service didn't create a room")
+ return
+ if text_chan is None:
+ _logger.debug("Presence service didn't create a text channel")
+ return
+
+ # Make sure we have a Tubes channel - PS doesn't yet provide one
+ if tubes_chan is None:
+ _logger.debug("Didn't find our Tubes channel, requesting one...")
+ tubes_chan = self.conn.request_channel(
+ telepathy.CHANNEL_TYPE_TUBES, telepathy.HANDLE_TYPE_ROOM,
+ room, True)
+
+ self.tubes_chan = tubes_chan
+ self.text_chan = text_chan
+
+ tubes_chan[telepathy.CHANNEL_TYPE_TUBES].connect_to_signal( \
+ 'NewTube', self._new_tube_cb)
+
+ def _list_tubes_reply_cb(self, tubes):
+ for tube_info in tubes:
+ self._new_tube_cb(*tube_info)
+
+ def _list_tubes_error_cb(self, e):
+ _logger.debug('ListTubes() failed: %s', e)
+
+ def _joined_cb(self, activity_):
+ if not self.get_shared_activity():
+ return
+
+ _logger.debug('Joined an existing shared activity')
+
+ self.initiating = False
+ self._setup()
+
+ _logger.debug('This is not my activity: waiting for a tube...')
+ self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES].ListTubes(
+ reply_handler=self._list_tubes_reply_cb,
+ error_handler=self._list_tubes_error_cb)
+
+ def _new_tube_cb(self, identifier, initiator, type, service, params,
+ state):
+ _logger.debug('New tube: ID=%d initator=%d type=%d service=%s '
+ 'params=%r state=%d', identifier, initiator, type,
+ service, params, state)
+
+ if (type == telepathy.TUBE_TYPE_DBUS and
+ service == SERVICE):
+ if state == telepathy.TUBE_STATE_LOCAL_PENDING:
+ self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES].AcceptDBusTube(
+ identifier)
+
+ self.tube_conn = TubeConnection(self.conn,
+ self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES],
+ identifier, group_iface=self.text_chan[
+ telepathy.CHANNEL_INTERFACE_GROUP])
+
+ _logger.debug('Tube created')
+ self.messenger = Messenger(self.tube_conn, self.initiating,
+ self.model)
+
+ def _get_data_from_file_path(self, file_path):
+ fd = open(file_path, 'r')
+ try:
+ data = fd.read()
+ finally:
+ fd.close()
+ return data
+
+ def read_file(self, file_path):
+ if self.metadata['mime_type'] == 'text/plain':
+ data = self._get_data_from_file_path(file_path)
+ self.model.deserialize(data)
+
+ for link in self.model.data['shared_links']:
+ _logger.debug('read: url=%s title=%s d=%s' % (link['url'],
+ link['title'],
+ link['color']))
+ self._add_link_totray(link['url'],
+ base64.b64decode(link['thumb']),
+ link['color'], link['title'],
+ link['owner'], -1, link['hash'])
+ logging.debug('########## reading %s', data)
+ self._tabbed_view.set_history(self.model.data['history'])
+ for number, tab in enumerate(self.model.data['currents']):
+ tab_page = self._tabbed_view.get_nth_page(number)
+ tab_page.browser.set_history_index(tab['history_index'])
+ tab_page.browser.grab_focus()
+
+ self._tabbed_view.set_current_page(self.model.data['current_tab'])
+
+ # zoom level
+ if 'current_zoom_level' in self.model.data:
+ self._tabbed_view.props.current_browser.set_zoom_level(self.model.data['current_zoom_level'])
+ else:
+ self._tabbed_view.props.current_browser.set_zoom_level(ZOOM_ORIGINAL)
+
+ elif self.metadata['mime_type'] == 'text/uri-list':
+ data = self._get_data_from_file_path(file_path)
+ uris = mime.split_uri_list(data)
+ if len(uris) == 1:
+ self._tabbed_view.props.current_browser.load_uri(uris[0])
+ else:
+ _logger.error('Open uri-list: Does not support'
+ 'list of multiple uris by now.')
+ else:
+ file_uri = 'file://' + file_path
+ self._tabbed_view.props.current_browser.load_uri(file_uri)
+ self._tabbed_view.props.current_browser.grab_focus()
+
+ def write_file(self, file_path):
+ if not self.metadata['mime_type']:
+ self.metadata['mime_type'] = 'text/plain'
+
+ if self.metadata['mime_type'] == 'text/plain':
+
+ browser = self._tabbed_view.current_browser
+
+ # zoom level
+ self.model.data['current_zoom_level'] = browser.get_zoom_level()
+
+ if not self._jobject.metadata['title_set_by_user'] == '1':
+ if browser.props.title is None:
+ self.metadata['title'] = _('Untitled')
+ else:
+ self.metadata['title'] = browser.props.title
+
+ self.model.data['history'] = self._tabbed_view.get_history()
+ current_tab = self._tabbed_view.get_current_page()
+ self.model.data['current_tab'] = current_tab
+
+ self.model.data['currents'] = []
+ for n in range(0, self._tabbed_view.get_n_pages()):
+ tab_page = self._tabbed_view.get_nth_page(n)
+ n_browser = tab_page.browser
+ if n_browser != None:
+ uri = n_browser.get_uri()
+ history_index = n_browser.get_history_index()
+ info = {'title': n_browser.props.title, 'url': uri,
+ 'history_index': history_index}
+
+ self.model.data['currents'].append(info)
+
+ f = open(file_path, 'w')
+ try:
+ logging.debug('########## writing %s', self.model.serialize())
+ f.write(self.model.serialize())
+ finally:
+ f.close()
+
+ def _link_add_button_cb(self, button):
+ self._add_link()
+
+ def _go_home_button_cb(self, button):
+ self._tabbed_view.load_homepage()
+
+ def _key_press_cb(self, widget, event):
+ key_name = Gdk.keyval_name(event.keyval)
+ browser = self._tabbed_view.props.current_browser
+
+ if event.get_state() & Gdk.ModifierType.CONTROL_MASK:
+
+ if key_name == 'd':
+ self._add_link()
+ elif key_name == 'f':
+ _logger.debug('keyboard: Find')
+ self._edit_toolbar_button.set_expanded(True)
+ self._edit_toolbar.search_entry.grab_focus()
+ elif key_name == 'l':
+ _logger.debug('keyboard: Focus url entry')
+ self._primary_toolbar.entry.grab_focus()
+ elif key_name == 'minus':
+ _logger.debug('keyboard: Zoom out')
+ browser.zoom_out()
+ elif key_name in ['plus', 'equal']:
+ _logger.debug('keyboard: Zoom in')
+ browser.zoom_in()
+ elif key_name == '0':
+ _logger.debug('keyboard: Actual size')
+ browser.set_zoom_level(ZOOM_ORIGINAL)
+ elif key_name == 'Left':
+ _logger.debug('keyboard: Go back')
+ browser.go_back()
+ elif key_name == 'Right':
+ _logger.debug('keyboard: Go forward')
+ browser.go_forward()
+ elif key_name == 'r':
+ _logger.debug('keyboard: Reload')
+ browser.reload()
+ elif Gdk.keyval_name(event.keyval) == "t":
+ self._tabbed_view.add_tab()
+ else:
+ return False
+
+ return True
+
+ elif key_name in ('KP_Up', 'KP_Down', 'KP_Left', 'KP_Right'):
+ scrolled_window = browser.get_parent()
+
+ if key_name in ('KP_Up', 'KP_Down'):
+ adjustment = scrolled_window.get_vadjustment()
+ elif key_name in ('KP_Left', 'KP_Right'):
+ adjustment = scrolled_window.get_hadjustment()
+ value = adjustment.get_value()
+ step = adjustment.get_step_increment()
+
+ if key_name in ('KP_Up', 'KP_Left'):
+ adjustment.set_value(value - step)
+ elif key_name in ('KP_Down', 'KP_Right'):
+ adjustment.set_value(value + step)
+
+ return True
+
+ elif key_name == 'Escape':
+ status = browser.get_load_status()
+ loading = WebKit.LoadStatus.PROVISIONAL <= status \
+ < WebKit.LoadStatus.FINISHED
+ if loading:
+ _logger.debug('keyboard: Stop loading')
+ browser.stop_loading()
+
+ return False
+
+ def _add_link(self):
+ ''' take screenshot and add link info to the model '''
+
+ browser = self._tabbed_view.props.current_browser
+ ui_uri = browser.get_uri()
+
+ for link in self.model.data['shared_links']:
+ if link['hash'] == sha1(ui_uri).hexdigest():
+ _logger.debug('_add_link: link exist already a=%s b=%s',
+ link['hash'], sha1(ui_uri).hexdigest())
+ return
+ buf = self._get_screenshot()
+ timestamp = time.time()
+ self.model.add_link(ui_uri, browser.props.title, buf,
+ profile.get_nick_name(),
+ profile.get_color().to_string(), timestamp)
+
+ if self.messenger is not None:
+ self.messenger._add_link(ui_uri, browser.props.title,
+ profile.get_color().to_string(),
+ profile.get_nick_name(),
+ base64.b64encode(buf), timestamp)
+
+ def _add_link_model_cb(self, model, index):
+ ''' receive index of new link from the model '''
+ link = self.model.data['shared_links'][index]
+ self._add_link_totray(link['url'], base64.b64decode(link['thumb']),
+ link['color'], link['title'],
+ link['owner'], index, link['hash'])
+
+ def _add_link_totray(self, url, buf, color, title, owner, index, hash):
+ ''' add a link to the tray '''
+ item = LinkButton(buf, color, title, owner, hash)
+ item.connect('clicked', self._link_clicked_cb, url)
+ item.connect('remove_link', self._link_removed_cb)
+ # use index to add to the tray
+ self._tray.add_item(item, index)
+ item.show()
+ self._view_toolbar.traybutton.props.sensitive = True
+ self._view_toolbar.traybutton.props.active = True
+
+ def _link_removed_cb(self, button, hash):
+ ''' remove a link from tray and delete it in the model '''
+ self.model.remove_link(hash)
+ self._tray.remove_item(button)
+ if len(self._tray.get_children()) == 0:
+ self._view_toolbar.traybutton.props.sensitive = False
+ self._view_toolbar.traybutton.props.active = False
+
+ def _link_clicked_cb(self, button, url):
+ ''' an item of the link tray has been clicked '''
+ self._tabbed_view.props.current_browser.load_uri(url)
+
+ def _get_screenshot(self):
+ browser = self._tabbed_view.props.current_browser
+ window = browser.get_window()
+ width, height = window.get_width(), window.get_height()
+
+ thumb_width, thumb_height = style.zoom(100), style.zoom(80)
+
+ thumb_surface = Gdk.Window.create_similar_surface(window,
+ cairo.CONTENT_COLOR, thumb_width, thumb_height)
+
+ cairo_context = cairo.Context(thumb_surface)
+ thumb_scale_w = thumb_width * 1.0 / width
+ thumb_scale_h = thumb_height * 1.0 / height
+ cairo_context.scale(thumb_scale_w, thumb_scale_h)
+ Gdk.cairo_set_source_window(cairo_context, window, 0, 0)
+ cairo_context.paint()
+
+ thumb_str = StringIO.StringIO()
+ thumb_surface.write_to_png(thumb_str)
+ return thumb_str.getvalue()
+
+ def can_close(self):
+ if self._force_close:
+ return True
+ elif downloadmanager.can_quit():
+ return True
+ else:
+ alert = Alert()
+ alert.props.title = ngettext('Download in progress',
+ 'Downloads in progress',
+ downloadmanager.num_downloads())
+ message = ngettext('Stopping now will erase your download',
+ 'Stopping now will erase your downloads',
+ downloadmanager.num_downloads())
+ alert.props.msg = message
+ cancel_icon = Icon(icon_name='dialog-cancel')
+ cancel_label = ngettext('Continue download', 'Continue downloads',
+ downloadmanager.num_downloads())
+ alert.add_button(Gtk.ResponseType.CANCEL, cancel_label,
+ cancel_icon)
+ stop_icon = Icon(icon_name='dialog-ok')
+ alert.add_button(Gtk.ResponseType.OK, _('Stop'), stop_icon)
+ stop_icon.show()
+ self.add_alert(alert)
+ alert.connect('response', self.__inprogress_response_cb)
+ alert.show()
+ self.present()
+ return False
+
+ def __inprogress_response_cb(self, alert, response_id):
+ self.remove_alert(alert)
+ if response_id is Gtk.ResponseType.CANCEL:
+ logging.debug('Keep on')
+ elif response_id == Gtk.ResponseType.OK:
+ logging.debug('Stop downloads and quit')
+ self._force_close = True
+ downloadmanager.remove_all_downloads()
+ self.close()
+
+ def __switch_page_cb(self, tabbed_view, page, page_num):
+ browser = page._browser
+ status = browser.get_load_status()
+
+ if status in (WebKit.LoadStatus.COMMITTED,
+ WebKit.LoadStatus.FIRST_VISUALLY_NON_EMPTY_LAYOUT):
+ self.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH))
+ elif status in (WebKit.LoadStatus.PROVISIONAL,
+ WebKit.LoadStatus.FAILED,
+ WebKit.LoadStatus.FINISHED):
+ self.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.LEFT_PTR))
+
+ def get_document_path(self, async_cb, async_err_cb):
+ browser = self._tabbed_view.props.current_browser
+ browser.get_source(async_cb, async_err_cb)
+
+ def get_canvas(self):
+ return self._tabbed_view
diff --git a/webtoolbar.py b/webtoolbar.py
index dc0b3de..35a699a 100644
--- a/webtoolbar.py
+++ b/webtoolbar.py
@@ -252,9 +252,6 @@ class PrimaryToolbar(ToolbarBase):
'add-link': (GObject.SignalFlags.RUN_FIRST,
None,
([])),
- 'go-home': (GObject.SignalFlags.RUN_FIRST,
- None,
- ([])),
}
def __init__(self, tabbed_view, act):
@@ -270,12 +267,6 @@ class PrimaryToolbar(ToolbarBase):
activity_button = ActivityToolbarButton(self._activity)
toolbar.insert(activity_button, 0)
- self._go_home = ToolButton('go-home')
- self._go_home.set_tooltip(_('Home page'))
- self._go_home.connect('clicked', self._go_home_cb)
- toolbar.insert(self._go_home, -1)
- self._go_home.show()
-
self.entry = WebEntry()
self.entry.set_icon_from_name(iconentry.ICON_ENTRY_SECONDARY,
'browse-dialog-cancel')
@@ -451,7 +442,7 @@ class PrimaryToolbar(ToolbarBase):
is_webkit_browser = isinstance(self._browser, Browser)
self._link_add.props.sensitive = is_webkit_browser
- self._go_home.props.sensitive = is_webkit_browser
+ #self._go_home.props.sensitive = is_webkit_browser
if is_webkit_browser:
self._reload_session_history()
@@ -463,9 +454,6 @@ class PrimaryToolbar(ToolbarBase):
self.entry.props.address = effective_url
self._browser.grab_focus()
- def _go_home_cb(self, button):
- self.emit('go-home')
-
def _go_back_cb(self, button):
self._browser.go_back()