%PDF- %PDF-
| Direktori : /lib/python3/dist-packages/orca/ |
| Current File : //lib/python3/dist-packages/orca/sleep_mode_manager.py |
# Orca
#
# Copyright 2024 Igalia, S.L.
# 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.
"""Module for sleep mode"""
__id__ = "$Id$"
__version__ = "$Revision$"
__date__ = "$Date$"
__copyright__ = "Copyright (c) 2024 Igalia, S.L."
__license__ = "LGPL"
from . import cmdnames
from . import debug
from . import input_event
from . import keybindings
from . import messages
from . import script_manager
from .ax_object import AXObject
class SleepModeManager:
"""Provides sleep mode implementation."""
def __init__(self):
self._handlers = self.get_handlers(True)
self._bindings = keybindings.KeyBindings()
self._apps = []
def get_bindings(self, refresh=False, is_desktop=True):
"""Returns the sleep-mode-manager keybindings."""
if refresh:
msg = "SLEEP MODE MANAGER: Refreshing bindings."
debug.printMessage(debug.LEVEL_INFO, msg, True)
self._setup_bindings()
elif self._bindings.isEmpty():
self._setup_bindings()
return self._bindings
def get_handlers(self, refresh=False):
"""Returns the sleep-mode-manager handlers."""
if refresh:
msg = "SLEEP MODE MANAGER: Refreshing handlers."
debug.printMessage(debug.LEVEL_INFO, msg, True)
self._setup_handlers()
return self._handlers
def is_active_for_app(self, app):
"""Returns True if sleep mode is active for app."""
result = app and hash(app) in self._apps
if result:
tokens = ["SLEEP MODE MANAGER: Is active for", app]
debug.printTokens(debug.LEVEL_INFO, tokens, True)
return result
def _setup_handlers(self):
"""Sets up and returns the sleep-mode-manager input event handlers."""
self._handlers = {}
self._handlers["toggle_sleep_mode"] = \
input_event.InputEventHandler(
self.toggle_sleep_mode,
cmdnames.TOGGLE_SLEEP_MODE)
msg = "SLEEP MODE MANAGER: Handlers set up."
debug.printMessage(debug.LEVEL_INFO, msg, True)
def _setup_bindings(self):
"""Sets up and returns the sleep-mode-manager key bindings."""
self._bindings = keybindings.KeyBindings()
self._bindings.add(
keybindings.KeyBinding(
"q",
keybindings.defaultModifierMask,
keybindings.SHIFT_ALT_CTRL_MODIFIER_MASK,
self._handlers.get("toggle_sleep_mode")))
msg = "SLEEP MODE MANAGER: Bindings set up."
debug.printMessage(debug.LEVEL_INFO, msg, True)
def toggle_sleep_mode(self, script, event=None):
"""Toggles sleep mode."""
if not (script and script.app):
return True
_script_manager = script_manager.getManager()
if self.is_active_for_app(script.app):
self._apps.remove(hash(script.app))
new_script = _script_manager.getScript(script.app)
new_script.presentMessage(
messages.SLEEP_MODE_DISABLED_FOR % AXObject.get_name(script.app))
_script_manager.setActiveScript(new_script, "Sleep mode toggled off")
return True
script.clearBraille()
script.presentMessage(messages.SLEEP_MODE_ENABLED_FOR % AXObject.get_name(script.app))
_script_manager.setActiveScript(_script_manager.getOrCreateSleepModeScript(script.app),
"Sleep mode toggled on")
self._apps.append(hash(script.app))
return True
_manager = SleepModeManager()
def getManager():
return _manager