diff options
author | Lucian 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) |
commit | 37af8355dee5def2288c5301bc8bcad0091ce73f (patch) | |
tree | e02fe640ee40bf166fd5f70454850159dddf1702 | |
parent | 27d4e293e7381d5ce575af00904a0d420ef2e479 (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.py | 26 | ||||
-rw-r--r-- | readtoolbar.py | 58 | ||||
-rw-r--r-- | readtopbar.py | 13 |
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) |