diff --git a/addon/globalPlugins/webAccess/overlay.py b/addon/globalPlugins/webAccess/overlay.py index 77fd0423..8d18e581 100644 --- a/addon/globalPlugins/webAccess/overlay.py +++ b/addon/globalPlugins/webAccess/overlay.py @@ -1104,6 +1104,30 @@ def script_quickNavToPreviousResultLevel3(self, gesture): script_quickNavToPreviousResultLevel3.ignoreTreeInterceptorPassThrough = True script_quickNavToPreviousResultLevel3.passThroughIfNoWebModule = True + @script( + # Translators: The description for the quickNavToNextResultSameRule script + description=_("Move to next result of the same rule."), + category=SCRCAT_WEBACCESS, + gesture="kb:control+shift+pagedown" + ) + def script_quickNavToNextResultSameRule(self, gesture): + self.webAccess.ruleManager.quickNavToNextSame() + + + script_quickNavToNextResultSameRule.ignoreTreeInterceptorPassThrough = True + script_quickNavToNextResultSameRule.passThroughIfNoWebModule = True + + @script( + # Translators: The description for the quickNavToPreviousResultSameRule script + description=_("Move to previous result of the same rule."), + category=SCRCAT_WEBACCESS, + gesture="kb:control+shift+pageup" + ) + def script_quickNavToPreviousResultSameRule(self, gesture): + self.webAccess.ruleManager.quickNavToPreviousSame() + + script_quickNavToPreviousResultSameRule.ignoreTreeInterceptorPassThrough = True + script_quickNavToPreviousResultSameRule.passThroughIfNoWebModule = True @script( # Translators: The description for the refreshResults script diff --git a/addon/globalPlugins/webAccess/ruleHandler/__init__.py b/addon/globalPlugins/webAccess/ruleHandler/__init__.py index 9c606c51..d1a6ff6c 100644 --- a/addon/globalPlugins/webAccess/ruleHandler/__init__.py +++ b/addon/globalPlugins/webAccess/ruleHandler/__init__.py @@ -138,6 +138,7 @@ def __init__(self, webModule): self.triggeredIdentifiers = {} self.lastAutoMoveto = None self.lastAutoMovetoTime = 0 + self.lastMoveto = None self.defaultScripts = DefaultScripts("Aucun marqueur associé à cette touche") self.timerCheckAutoAction = None self._zone: Zone = None @@ -828,7 +829,17 @@ def quickNav( # Translator: Error message in quickNav (page up/down) ui.message(_("No zone")) return False - if cycle: + if name: + if cycle: + # Translator: Error message in quickNav (page up/down) + msg = _("No other result") + elif previous: + # Translator: Error message in quickNav (page up/down) + msg = _("No previous result") + else: + # Translator: Error message in quickNav (page up/down) + msg = _("No next result") + elif cycle: # Translator: Error message in quickNav (page up/down) msg = _("No marker") elif previous: @@ -878,6 +889,30 @@ def quickNavToPreviousLevel3(self): cycle=False ) + def quickNavToNextSame(self): + name = self.lastMoveto + if not name: + wx.Bell() + return + self.quickNav( + name=name, + respectZone=True, + honourSkip=False, + cycle=False + ) + + def quickNavToPreviousSame(self): + name = self.lastMoveto + if not name: + wx.Bell() + return + self.quickNav( + previous=True, + name=name, + respectZone=True, + honourSkip=False, + cycle=False + ) class SubModules(AutoPropertyObject): @@ -1292,6 +1327,8 @@ def mouseMove(self): mouseHandler.executeMouseMoveEvent(x, y) def moveto(self): + rule = self.rule + rule.ruleManager.lastMoveto = rule.name info = self.getTextInfo() info.collapse() self.ti.selection = info