On Sun, 27 Jan 2008, Klaus Weidner wrote:
On Sun, Jan 27, 2008 at 03:08:34AM -0800, [EMAIL PROTECTED] wrote:
Klaus Weidner wrote:
How about the following:
- by default, the rotate key rotates both the screen and the rocker
switch, so that pressing the rocker towards the (logical) top of the
screen always generates an "Up" arrow keystroke. The game keys don't
rotate.
- applications can choose to get notified of rotation events and the
new
orientation in case they want to add actions to the default ones, such
as optimizing the screen layout for the new orientation.
- applications can disable auto-rotation, making the rotate button
available for the application as a normal input. The rocker switch
doesn't get auto-modified and stays under app control.
I think it would be important to have something sane happen by default,
and that would let non-rotation-aware apps have basic functionality.
I would agree with this proposal. if an application chooses to disable
auto-rotation they should be able to re-map all 9 of the game keys. it
would be nice to have this done in a way that would be able to be
scripted
(for use in the terminal window for example)
note that the rotation could still take place when other applications are
active, so the application still needs to be able to respond to resize
events (which should be standard for apps that live in a GUI environment
anyway, even if they are text apps that run in an xterm)
It's not just resizing - if a different application rotates the screen,
that happens via xrandr, and the X server rearranges its framebuffer
internally to match the orientation. All apps will be flipped if they
want to be or not, not just resized. It would have to tell the X server
to flip back if it needed a specific orientation.
So a non-rotating app would need to check for rotations and force a
specific orientation when it starts, and whenever it regains its status
as active app if the user had switched away.
since the app has no idea why the user did the rotation, I don't think it
has any justification in forcing the rotation to anything.
while I understand the desire to avoid modal operation and also to not
have the e-book mode operate by moving a pointer around, I think that the
ability to switch to a mode where you can toggle between the existing
functions of the gamepad keys and a mode where the arrows move the mouse
pointer and X and O mimic the mouse buttons (with matching lables) would
be extremely useful for applications that have not been converted yet.
in fact, how's this for an idea?
in e-book mode (screen rotated and flat against the keyboard) the rotate
button doesn't rotate the screen, instead it toggles between existing
behavior and pointer mode. you could change the shape of the exit icon
when in pointer mode to indicate what mode you are in.
I can see how this can be useful (I once did similar things to run X apps
that need 3 mouse buttons on a touchscren handheld), but the modality
combined with moving the pointer with cursor keys quickly gets
frustrating. I think it's probably better to use the e-book mode just for
applications that are designed to work with it - you can just use the
normal notebook mode for non-converted apps if necessary.
sometimes it's just a lot more convienient to fold the screen down (when
walking for example). e-book mode isn't just for running book
applications. browsing is a case where you have no control over what's
happening, and there are cases where you need a pointer to navigate
reasonably (you aren't going to fix every website in the world to work
with your app, microsoft tried and failed, and you don't have nearly the
power they did)
Also, you lose the function of the rotate button to rotate the screen,
and I think people expect that to work. I guess you could use something
like a long press as opposed to a short press, but that violates the
principle of least surprise.
all you would have to do to get the rotation functionality back is to lift
the screen an inch or two and hit the rotation button.
David Lang
diff --git a/shell/ev-view.c b/shell/ev-view.c
index b464c3f..3bfe7da 100644
--- a/shell/ev-view.c
+++ b/shell/ev-view.c
@@ -360,7 +360,7 @@ scroll_to_current_page (EvView *view, GtkOrientation
orientation)
view_point.y +
view->vadjustment->page_size);
} else {
gtk_adjustment_set_value (view->vadjustment,
- CLAMP (view_point.y,
+ CLAMP
(view->vadjustment->value,
view->vadjustment->lower,
view->vadjustment->upper -
view->vadjustment->page_size));
@@ -372,7 +372,7 @@ scroll_to_current_page (EvView *view, GtkOrientation
orientation)
view_point.x +
view->hadjustment->page_size);
} else {
gtk_adjustment_set_value (view->hadjustment,
- CLAMP (view_point.x,
+ CLAMP
(view->hadjustment->value,
view->hadjustment->lower,
view->hadjustment->upper -
view->hadjustment->page_size));
@@ -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, FALSE);
+ add_scroll_binding_keypad (binding_set, GDK_Page_Down, 0,
EV_SCROLL_PAGE_FORWARD, FALSE);
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);
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()
+
_______________________________________________
Devel mailing list
Devel@lists.laptop.org
http://lists.laptop.org/listinfo/devel
_______________________________________________
Devel mailing list
Devel@lists.laptop.org
http://lists.laptop.org/listinfo/devel