[orca] Handle Evince text selection events that cross into a different page
- From: Joanmarie Diggs <joanied src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [orca] Handle Evince text selection events that cross into a different page
- Date: Sun, 21 Jul 2013 01:37:43 +0000 (UTC)
commit 686ee8df47e44dde5b6407091a93eaf738f50001
Author: Joanmarie Diggs <jdiggs igalia com>
Date: Sat Jul 20 21:16:24 2013 -0400
Handle Evince text selection events that cross into a different page
src/orca/scripts/apps/evince/Makefile.am | 3 +-
src/orca/scripts/apps/evince/script.py | 6 ++
src/orca/scripts/apps/evince/script_utilities.py | 73 ++++++++++++++++++++++
3 files changed, 81 insertions(+), 1 deletions(-)
---
diff --git a/src/orca/scripts/apps/evince/Makefile.am b/src/orca/scripts/apps/evince/Makefile.am
index 41c13c1..0959766 100644
--- a/src/orca/scripts/apps/evince/Makefile.am
+++ b/src/orca/scripts/apps/evince/Makefile.am
@@ -2,6 +2,7 @@ orca_pathdir=$(pyexecdir)
orca_python_PYTHON = \
__init__.py \
- script.py
+ script.py \
+ script_utilities.py
orca_pythondir=$(pyexecdir)/orca/scripts/apps/evince
diff --git a/src/orca/scripts/apps/evince/script.py b/src/orca/scripts/apps/evince/script.py
index 9246fb8..73148c9 100644
--- a/src/orca/scripts/apps/evince/script.py
+++ b/src/orca/scripts/apps/evince/script.py
@@ -32,6 +32,7 @@ import orca.orca_state as orca_state
import orca.scripts.default as default
import orca.settings as settings
from orca.structural_navigation import StructuralNavigation
+from .script_utilities import Utilities
########################################################################
# #
@@ -68,6 +69,11 @@ class Script(default.Script):
return keyBindings
+ def getUtilities(self):
+ """Returns the utilites for this script."""
+
+ return Utilities(self)
+
def getStructuralNavigation(self):
"""Returns the 'structural navigation' class for this script."""
diff --git a/src/orca/scripts/apps/evince/script_utilities.py
b/src/orca/scripts/apps/evince/script_utilities.py
new file mode 100644
index 0000000..02938ee
--- /dev/null
+++ b/src/orca/scripts/apps/evince/script_utilities.py
@@ -0,0 +1,73 @@
+# Orca
+#
+# Copyright 2013 The Orca Team.
+#
+# Author: Joanmarie Diggs <jdiggs igalia com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., Franklin Street, Fifth Floor,
+# Boston MA 02110-1301 USA.
+
+__id__ = "$Id$"
+__version__ = "$Revision$"
+__date__ = "$Date$"
+__copyright__ = "Copyright (c) 2013 The Orca Team"
+__license__ = "LGPL"
+
+import pyatspi
+
+import orca.script_utilities as script_utilities
+
+class Utilities(script_utilities.Utilities):
+
+ def __init__(self, script):
+ script_utilities.Utilities.__init__(self, script)
+
+ def offsetsForPhrase(self, obj):
+ """Return the start and end offset for the given phrase. Overriden
+ here because two functionally different objects (pages of a PDF)
+ are currently contained in a single accessible object whose contents
+ change. As a result, when a new text selection spans two pages, we
+ have a stored offset for our previous location that makes no sense
+ because that location no longer exists.
+
+ Arguments:
+ - obj: the Accessible object
+ """
+
+ try:
+ text = obj.queryText()
+ except:
+ return [0, 0]
+
+ if obj.getRole() != pyatspi.ROLE_DOCUMENT_FRAME:
+ return script_utilities.Utilities.offsetsForPhrase(self, obj)
+
+ lastPos = self._script.pointOfReference.get("lastCursorPosition")
+ keyString, mods = self.lastKeyAndModifiers()
+ if keyString in ["Up", "Page_Up", "Left", "Home"]:
+ # The previous location should have a larger offset. If it does
+ # not, we've crossed pages.
+ if lastPos[1] <= text.caretOffset:
+ return [text.caretOffset, text.characterCount]
+ return [text.caretOffset, lastPos[1]]
+
+ if keyString in ["Down", "Page_Down", "Right", "End"]:
+ # The previous location should have a smaller offset. If it does
+ # not, we've crossed pages.
+ if lastPos[1] >= text.caretOffset:
+ return [0, text.caretOffset]
+ return [lastPos[1], text.caretOffset]
+
+ return script_utilities.Utilities.offsetsForPhrase(self, obj)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]