[PATCH] RFC: ReadActivity fullscreen, paging changes

Michael Stone michael at laptop.org
Sun Jan 27 14:17:04 EST 2008


Klaus,

While I can't say how your efforts will wind up being used, I very much
want to thank you for stepping up to work on these issues and for
submitting such clear patches.

Keep up the hard work, and let everyone know if you'd like help
packaging your changes (to ease testing) or in working with the upstream
maintainers of Read and Evince.

Yours,

Michael



On Sun, Jan 27, 2008 at 02:36:55AM -0600, Klaus Weidner wrote:
> Hello,
> 
> here's a patch to enhance the Read activity, unfortunately it needed
> modification of the evince lib also.
> 
> By popular request, it adds a "fullscreen" button to the View tab. 
> 
> For the scroll/paging changes, my main motivation was that I think it's
> important to be able to scroll page by page, especially if using "zoom to fit"
> mode, instead of having to manually (and slowly) align the top of the
> page with the top of the screen with the arrow keys.
> 
> - add "continuous pages" and "single pages" to the "zoom to width" menu
>   (this should probably be a toggle instead).
> 
> - modify evince to map PageUp/PageDown buttons (Fn-Up, Fn-Down, or
>   gamepad O/X) - without these buttons, "continuous pages" mode can't
>   advance pages via keyboard.
> 
> I'm not sure what the best way to submit these is, please let me know in
> case I should get in touch with maintainers directly, or if I should set
> up a pull-able git repo.
> 
> I wanted to try fixing the nonrotated rocker switch in e-book mode also,
> but haven't found a good place to do that yet. Apparently the rotation
> happens directly via a shell call to xrandr from the Sugar keyboard
> manager, and I'm not sure which signal (if any) the activity could catch
> to be notified of the rotation.
> 
> Also, I'm not sure if this should be done on a per-application basis, or
> if a lower level should always rotate the rocker switch to match the
> screen rotation automatically. That may mess up apps that expect the
> current behavior though - are there any? Should the game buttons stay
> static even when rotating?
> 
> Is it intentional to keep the keyboard mapping hardcoded in the evince
> lib?  The usual evince key binding mechanism appears not to work via the
> activity (I think that's why PageUp/PageDown weren't responding). I think
> it would be cleaner and more flexible to revive an interface to that and
> do the mapping from the activity.
> 
> Please send me feedback if you have ideas or suggestions how this should
> work.
> 
> -Klaus

> diff --git a/readactivity.py b/readactivity.py
> index 956e3b0..99b9244 100644
> --- a/readactivity.py
> +++ b/readactivity.py
> @@ -95,7 +95,7 @@ class ReadActivity(activity.Activity):
>          toolbox.add_toolbar(_('Read'), self._read_toolbar)
>          self._read_toolbar.show()
>  
> -        self._view_toolbar = ViewToolbar(self._view)
> +        self._view_toolbar = ViewToolbar(self._view, self)
>          self._view_toolbar.connect('needs-update-size',
>                  self.__view_toolbar_needs_update_size_cb)
>          toolbox.add_toolbar(_('View'), self._view_toolbar)
> diff --git a/readtoolbar.py b/readtoolbar.py
> index 332e4fa..be475b2 100644
> --- a/readtoolbar.py
> +++ b/readtoolbar.py
> @@ -258,9 +258,10 @@ class ViewToolbar(gtk.Toolbar):
>                                ([]))
>      }
>  
> -    def __init__(self, evince_view):
> +    def __init__(self, evince_view, activity):
>          gtk.Toolbar.__init__(self)
>  
> +        self._activity = activity
>          self._evince_view = evince_view
>          self._document = None
>              
> @@ -293,6 +294,16 @@ class ViewToolbar(gtk.Toolbar):
>          palette.menu.append(menu_item)
>          menu_item.show()
>  
> +        menu_item = MenuItem(_('Single pages'))
> +        menu_item.connect('activate', self._continuous_false_menu_item_activate_cb)
> +        palette.menu.append(menu_item)
> +        menu_item.show()
> +
> +        menu_item = MenuItem(_('Continuous pages'))
> +        menu_item.connect('activate', self._continuous_true_menu_item_activate_cb)
> +        palette.menu.append(menu_item)
> +        menu_item.show()
> +
>          tool_item = gtk.ToolItem()
>          self.insert(tool_item, -1)
>          tool_item.show()
> @@ -313,6 +324,14 @@ class ViewToolbar(gtk.Toolbar):
>          self.insert(tool_item_zoom_perc_label, -1)
>          tool_item_zoom_perc_label.show()
>  
> +        self._view_fullscreen = ToolButton('view-fullscreen')
> +        self._view_fullscreen.set_tooltip(_('Fullscreen mode'))
> +        self._view_fullscreen.connect('clicked', self._view_fullscreen_cb)
> +        self.insert(self._view_fullscreen, -1)
> +        self._view_fullscreen.show()
> +
> +        self._zoom_to_width.show()
> +
>          self._view_notify_zoom_handler = self._evince_view.connect(
>                  'notify::zoom', self._view_notify_zoom_cb)
>  
> @@ -364,3 +383,12 @@ class ViewToolbar(gtk.Toolbar):
>          self._evince_view.props.zoom = 1.0
>          self._update_zoom_buttons()
>  
> +    def _continuous_false_menu_item_activate_cb(self, menu_item):
> +        self._evince_view.set_continuous(False)
> +
> +    def _continuous_true_menu_item_activate_cb(self, menu_item):
> +        self._evince_view.set_continuous(True)
> +
> +    def _view_fullscreen_cb(self, button):
> +        self._activity.fullscreen()
> +

> diff --git a/shell/ev-view.c b/shell/ev-view.c
> index b464c3f..39fc0e7 100644
> --- a/shell/ev-view.c
> +++ b/shell/ev-view.c
> @@ -3996,6 +3996,8 @@ ev_view_class_init (EvViewClass *class)
>  
>  	binding_set = gtk_binding_set_by_class (class);
>  
> +	add_scroll_binding_keypad (binding_set, GDK_Page_Up,  0, EV_SCROLL_PAGE_BACKWARD, TRUE);
> +	add_scroll_binding_keypad (binding_set, GDK_Page_Down, 0, EV_SCROLL_PAGE_FORWARD,  TRUE);
>  	add_scroll_binding_keypad (binding_set, GDK_Left,  0, EV_SCROLL_STEP_BACKWARD, TRUE);
>  	add_scroll_binding_keypad (binding_set, GDK_Right, 0, EV_SCROLL_STEP_FORWARD,  TRUE);
>  	add_scroll_binding_keypad (binding_set, GDK_Left,  GDK_MOD1_MASK, EV_SCROLL_STEP_DOWN, TRUE);

> _______________________________________________
> Devel mailing list
> Devel at lists.laptop.org
> http://lists.laptop.org/listinfo/devel




More information about the Devel mailing list