modeman: Make it possible to override a locked mode.

This commit is contained in:
Florian Bruhin 2014-09-30 07:11:37 +02:00
parent 61ea26b7b2
commit 8864c042c8

View File

@ -70,9 +70,9 @@ def init():
modeman.register(KM.yesno, keyparsers[KM.yesno].handle) modeman.register(KM.yesno, keyparsers[KM.yesno].handle)
def enter(mode, reason=None): def enter(mode, reason=None, override=False):
"""Enter the mode 'mode'.""" """Enter the mode 'mode'."""
objreg.get('mode-manager').enter(mode, reason) objreg.get('mode-manager').enter(mode, reason, override)
def leave(mode, reason=None): def leave(mode, reason=None):
@ -80,10 +80,10 @@ def leave(mode, reason=None):
objreg.get('mode-manager').leave(mode, reason) objreg.get('mode-manager').leave(mode, reason)
def maybe_enter(mode, reason=None): def maybe_enter(mode, reason=None, override=False):
"""Convenience method to enter 'mode' without exceptions.""" """Convenience method to enter 'mode' without exceptions."""
try: try:
objreg.get('mode-manager').enter(mode, reason) objreg.get('mode-manager').enter(mode, reason, override=False)
except ModeLockedError: except ModeLockedError:
pass pass
@ -220,12 +220,13 @@ class ModeManager(QObject):
if passthrough: if passthrough:
self.passthrough.append(mode) self.passthrough.append(mode)
def enter(self, mode, reason=None): def enter(self, mode, reason=None, override=False):
"""Enter a new mode. """Enter a new mode.
Args: Args:
mode: The mode to enter as a KeyMode member. mode: The mode to enter as a KeyMode member.
reason: Why the mode was entered. reason: Why the mode was entered.
override: Override a locked mode.
Emit: Emit:
entered: With the new mode name. entered: With the new mode name.
@ -233,8 +234,12 @@ class ModeManager(QObject):
if not isinstance(mode, usertypes.KeyMode): if not isinstance(mode, usertypes.KeyMode):
raise TypeError("Mode {} is no KeyMode member!".format(mode)) raise TypeError("Mode {} is no KeyMode member!".format(mode))
if self.locked: if self.locked:
log.modes.debug("Not entering mode {} because mode is locked to " if override:
"{}.".format(mode, self.mode())) log.modes.debug("Locked to mode {}, but overriding to "
"{}.".format(self.mode(), mode))
else:
log.modes.debug("Not entering mode {} because mode is locked "
"to {}.".format(mode, self.mode()))
raise ModeLockedError("Mode is currently locked to {}".format( raise ModeLockedError("Mode is currently locked to {}".format(
self.mode())) self.mode()))
log.modes.debug("Entering mode {}{}".format( log.modes.debug("Entering mode {}{}".format(