Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucian Branescu Mihaila <lucian.branescu@gmail.com>2010-07-20 00:50:25 (GMT)
committer Lucian Branescu Mihaila <lucian.branescu@gmail.com>2010-07-20 00:50:25 (GMT)
commit37af8355dee5def2288c5301bc8bcad0091ce73f (patch)
treee02fe640ee40bf166fd5f70454850159dddf1702
parent27d4e293e7381d5ce575af00904a0d420ef2e479 (diff)
Full port to libevview 2.30, with backwards compatibility for 2.28. Code's a bit messy and doesn't quite work yet.
-rw-r--r--readactivity.py26
-rw-r--r--readtoolbar.py58
-rw-r--r--readtopbar.py13
3 files changed, 76 insertions, 21 deletions
diff --git a/readactivity.py b/readactivity.py
index d17d6cd..0b52df0 100644
--- a/readactivity.py
+++ b/readactivity.py
@@ -57,6 +57,8 @@ try:
except:
_EPUB_SUPPORT = False
+# Handle libevview 2.80's new API trac#1900
+_EVINCE_2_80 = hasattr(evince, 'document_factory_get_document')
_HARDWARE_MANAGER_INTERFACE = 'org.laptop.HardwareManager'
_HARDWARE_MANAGER_SERVICE = 'org.laptop.HardwareManager'
@@ -798,26 +800,28 @@ class ReadActivity(activity.Activity):
else:
self._setup_evince_viewer()
try:
- try: # assume libevview <=2.28
- self._document = evince.factory_get_document(filepath)
- except AttributeError: # must be on libevview >=2.30
+ if _EVINCE_2_80:
self._document = evince.document_factory_get_document(
filepath)
+ else:
+ self._document = evince.factory_get_document(filepath)
except GError, e:
_logger.error('Can not load document: %s', e)
return
- self._view_toolbar.set_view(self._view)
- self._edit_toolbar.set_view(self._view)
-
self._want_document = False
-
- try: # assume libevview <=2.28
- self._view.set_document(self._document)
- except AttributeError: #must be on libevview >=2.30
+
+ if _EVINCE_2_80:
self._model = evince.DocumentModel()
self._model.set_document(self._document)
- selv._view.set_model(self._model)
+ self._view.set_model(self._model)
+
+ self._view_toolbar.set_model(self._model)
+ else:
+ self._view.set_document(self._document)
+
+ self._view_toolbar.set_view(self._view)
+ self._edit_toolbar.set_view(self._view)
self._edit_toolbar.set_document(self._document)
self._topbar.set_document(self._document)
diff --git a/readtoolbar.py b/readtoolbar.py
index 53a756f..2785ed8 100644
--- a/readtoolbar.py
+++ b/readtoolbar.py
@@ -15,6 +15,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
from gettext import gettext as _
+import logging
import gobject
import gtk
@@ -30,6 +31,10 @@ from sugar.graphics.menuitem import MenuItem
from sugar.graphics import iconentry
from sugar.activity import activity
+# Handle libevview 2.80's new API trac#1900
+_EVINCE_2_80 = hasattr(evince, 'document_factory_get_document')
+
+
class EditToolbar(activity.EditToolbar):
__gtype_name__ = 'EditToolbar'
@@ -243,24 +248,41 @@ class ViewToolbar(gtk.Toolbar):
self._fullscreen.show()
self._view_notify_zoom_handler = None
+ self._view_notify_scale_handler = None
def set_view(self, view):
self._evince_view = view
- self._zoom_spin.props.value = self._evince_view.props.zoom * 100
- self._view_notify_zoom_handler = self._evince_view.connect(
- 'notify::zoom', self._view_notify_zoom_cb)
+
+ if _EVINCE_2_80:
+ self._zoom_spin.props.value = self._evince_model.props.scale * 100
+ self._view_notify_scale_handler = self._evince_model.connect(
+ 'notify::scale', self._view_notify_scale_cb)
+ else:
+ self._zoom_spin.props.value = self._evince_view.props.zoom * 100
+ self._view_notify_zoom_handler = self._evince_view.connect(
+ 'notify::zoom', self._view_notify_zoom_cb)
self._update_zoom_buttons()
+ def set_model(self, model):
+ self._evince_model = model
def _zoom_spin_notify_value_cb(self, zoom_spin, pspec):
if not self._view_notify_zoom_handler:
return
- self._evince_view.disconnect(self._view_notify_zoom_handler)
+
+ if _EVINCE_2_80:
+ self._evince_model.disconnect(self._view_notify_scale_handler)
+ else:
+ self._evince_view.disconnect(self._view_notify_zoom_handler)
+
try:
if hasattr(self._evince_view.props, 'sizing_mode'):
self._evince_view.props.sizing_mode = evince.SIZING_FREE
- self._evince_view.props.zoom = zoom_spin.props.value / 100.0
+ if _EVINCE_2_80:
+ self._evince_model.props.scale = zoom_spin.props.value / 100.0
+ else:
+ self._evince_view.props.zoom = zoom_spin.props.value / 100.0
finally:
self._view_notify_zoom_handler = self._evince_view.connect(
'notify::zoom', self._view_notify_zoom_cb)
@@ -273,9 +295,20 @@ class ViewToolbar(gtk.Toolbar):
self._zoom_spin_notify_value_handler = self._zoom_spin.connect(
'notify::value', self._zoom_spin_notify_value_cb)
+ def _view_notify_scale_cb(self, evince_model, pspec):
+ self._zoom_spin.disconnect(self._zoom_spin_notify_value_handler)
+ try:
+ self._zoom_spin.props.value = round(evince_model.props.scale *
+ 100.0)
+ finally:
+ self._zoom_spin_notify_value_handler = self._zoom_spin.connect(
+ 'notify::value', self._zoom_spin_notify_value_cb)
+
def zoom_in(self):
if hasattr(self._evince_view.props, 'sizing_mode'):
self._evince_view.props.sizing_mode = evince.SIZING_FREE
+ if hasattr(self._evince_model.props, 'sizing-mode'):
+ self._evince_model.set_property('sizing-mode', evince.SIZING_FREE)
self._evince_view.zoom_in()
self._update_zoom_buttons()
@@ -285,6 +318,8 @@ class ViewToolbar(gtk.Toolbar):
def zoom_out(self):
if hasattr(self._evince_view.props, 'sizing_mode'):
self._evince_view.props.sizing_mode = evince.SIZING_FREE
+ if hasattr(self._evince_model.props, 'sizing-mode'):
+ self._evince_model.set_property('sizing-mode', evince.SIZING_FREE)
self._evince_view.zoom_out()
self._update_zoom_buttons()
@@ -294,6 +329,9 @@ class ViewToolbar(gtk.Toolbar):
def zoom_to_width(self):
if hasattr(self._evince_view.props, 'sizing_mode'):
self._evince_view.props.sizing_mode = evince.SIZING_FIT_WIDTH
+ if hasattr(self._evince_model.props, 'sizing-mode'):
+ self._evince_model.set_property('sizing-mode',
+ evince.SIZING_FIT_WIDTH)
self.emit('needs-update-size')
self._update_zoom_buttons()
@@ -307,13 +345,21 @@ class ViewToolbar(gtk.Toolbar):
def _zoom_to_fit_menu_item_activate_cb(self, menu_item):
if hasattr(self._evince_view.props, 'sizing_mode'): #XXX
self._evince_view.props.sizing_mode = evince.SIZING_BEST_FIT
+ if hasattr(self._evince_model.props, 'sizing-mode'):
+ self._evince_model.set_property('sizing-mode',
+ evince.SIZING_BEST_FIT)
self.emit('needs-update-size')
self._update_zoom_buttons()
def _actual_size_menu_item_activate_cb(self, menu_item):
if hasattr(self._evince_view.props, 'sizing_mode'):
self._evince_view.props.sizing_mode = evince.SIZING_FREE
- self._evince_view.props.zoom = 1.0
+ if hasattr(self._evince_model.props, 'sizing-mode'):
+ self._evince_model.set_property('sizing-mode', evince.SIZING_FREE)
+ if _EVINCE_2_80:
+ self._evince_model.props.scale = 1.0
+ else:
+ self._evince_view.props.zoom = 1.0
self._update_zoom_buttons()
def _fullscreen_cb(self, button):
diff --git a/readtopbar.py b/readtopbar.py
index 936fff0..48aeabd 100644
--- a/readtopbar.py
+++ b/readtopbar.py
@@ -20,11 +20,16 @@ import gtk, gobject
import dbus
import logging
+import evince
+
from sugar.graphics import style
from sugar.graphics.icon import Icon, get_icon_state
from gettext import gettext as _
+# Handle libevview 2.80's new API trac#1900
+_EVINCE_2_80 = hasattr(evince, 'document_factory_get_document')
+
_LEVEL_PROP = 'battery.charge_level.percentage'
_CHARGING_PROP = 'battery.rechargeable.is_charging'
_DISCHARGING_PROP = 'battery.rechargeable.is_discharging'
@@ -149,8 +154,8 @@ class _TopBar(gtk.HBox):
self._battery = None
except dbus.exceptions.DBusException:
self._battery = None
- logging.warning("HAL dbus service not found, disabling power \
- management during reading.")
+ logging.warning('Hardware manager service not found, no idle \
+ suspend.')
self._icon = None
@@ -194,11 +199,11 @@ class TopBar(_TopBar):
def set_document(self, document):
self._document = document
- page_cache = self._document.get_page_cache()
+ page_cache = evince.PageCache(self._document)
page_cache.connect('page-changed', self._page_changed_cb)
def _page_changed_cb(self, page, proxy = None):
- current_page = self._document.get_page_cache().get_current_page()
+ current_page = evince.DocumentModel(self._document).props.page
n_pages = self._document.get_n_pages()
self.set_completion_level(current_page * 100/n_pages)