[orca] Chromium: Hack around missing hyperlink implementation for non-links
- From: Joanmarie Diggs <joanied src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [orca] Chromium: Hack around missing hyperlink implementation for non-links
- Date: Sat, 13 Jul 2019 19:08:00 +0000 (UTC)
commit d0fab641a7c09b671317f388023e3e1b525f0301
Author: Joanmarie Diggs <jdiggs igalia com>
Date: Sat Jul 13 15:04:58 2019 -0400
Chromium: Hack around missing hyperlink implementation for non-links
src/orca/script_utilities.py | 17 ++++++++++------
.../scripts/toolkits/Chromium/script_utilities.py | 23 ++++++++++++++++++++++
src/orca/scripts/web/script_utilities.py | 16 ---------------
3 files changed, 34 insertions(+), 22 deletions(-)
---
diff --git a/src/orca/script_utilities.py b/src/orca/script_utilities.py
index 8d9e34d93..60407f7ac 100644
--- a/src/orca/script_utilities.py
+++ b/src/orca/script_utilities.py
@@ -3602,17 +3602,22 @@ class Utilities:
return root, offset
- @staticmethod
- def getHyperlinkRange(obj):
- """Returns the start and end indices associated with the embedded
- object, obj."""
+ def getHyperlinkRange(self, obj):
+ """Returns the text range in parent associated with obj."""
try:
hyperlink = obj.queryHyperlink()
+ start, end = hyperlink.startIndex, hyperlink.endIndex
except NotImplementedError:
- return 0, 0
+ msg = "INFO: %s does not implement the hyperlink interface" % obj
+ debug.println(debug.LEVEL_INFO, msg, True)
+ return -1, -1
+ except:
+ msg = "INFO: Exception getting hyperlink indices for %s" % obj
+ debug.println(debug.LEVEL_INFO, msg, True)
+ return -1, -1
- return hyperlink.startIndex, hyperlink.endIndex
+ return start, end
def selectedChildren(self, obj):
try:
diff --git a/src/orca/scripts/toolkits/Chromium/script_utilities.py
b/src/orca/scripts/toolkits/Chromium/script_utilities.py
index 38c2ff008..11fea1a94 100644
--- a/src/orca/scripts/toolkits/Chromium/script_utilities.py
+++ b/src/orca/scripts/toolkits/Chromium/script_utilities.py
@@ -32,6 +32,7 @@ __copyright__ = "Copyright (c) 2018 Igalia, S.L."
__license__ = "LGPL"
import pyatspi
+import re
import time
from orca import debug
@@ -332,3 +333,25 @@ class Utilities(web.Utilities):
msg = "CHROMIUM: HACK: Grabbing focus on %s's ancestor %s" % (obj, link)
debug.println(debug.LEVEL_INFO, msg, True)
self.grabFocus(link)
+
+ def getHyperlinkRange(self, obj):
+ """Returns the text range in parent associated with obj."""
+
+ start, end = super().getHyperlinkRange(obj)
+ if (start, end) != (-1, -1):
+ return start, end
+
+ if not (obj.parent and "Text" in pyatspi.listInterfaces(obj.parent)):
+ return start, end
+
+ # At the present time, Chromium is only implementing the hyperlink interface
+ # for actual links. We need that fixed. This hack may or may not be reliable.
+ parentText = obj.parent.queryText().getText(0, -1)
+ eocs = [x.span() for x in re.finditer("\ufffc", parentText)]
+ index = obj.getIndexInParent()
+ if 0 <= index < len(eocs):
+ start, end = eocs[index]
+ msg = "CHROMIUM: HACK: Hyperlink range of %s is (%i,%i)" % (obj, start, end)
+ debug.println(debug.LEVEL_INFO, msg, True)
+
+ return start, end
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index 12fdd8ecb..c1f38841c 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -3686,22 +3686,6 @@ class Utilities(script_utilities.Utilities):
self._isContentEditableWithEmbeddedObjects[hash(obj)] = rv
return rv
- @staticmethod
- def getHyperlinkRange(obj):
- try:
- hyperlink = obj.queryHyperlink()
- start, end = hyperlink.startIndex, hyperlink.endIndex
- except NotImplementedError:
- msg = "WEB: %s does not implement the hyperlink interface" % obj
- debug.println(debug.LEVEL_INFO, msg, True)
- return -1, -1
- except:
- msg = "WEB: Exception getting hyperlink indices for %s" % obj
- debug.println(debug.LEVEL_INFO, msg, True)
- return -1, -1
-
- return start, end
-
def characterOffsetInParent(self, obj):
start, end, length = self._rangeInParentWithLength(obj)
return start
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]