diff --git a/CHANGELOG.md b/CHANGELOG.md index c5a5fe29..edd3732e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,29 @@ +# 1.1.17 + +* Add dark icons +* Permit onboard profiles version 5 +* Update Russian and Polish translations +* Add onboard profiles warning to sensitivity tooltip +* Better error messages for solaar profile +* Remove Solaar name for mice with WPID 4008 +* Prevent lock failure when showing debug messages +* Replace color picker (#3028) +* Add setting for HAPTIC feature +* Add setting to adjust force needed for force-sensing buttons +* Expand new settings type +* Add new settings type for structure-backed setting +* Use PATH instead of hardcoded absolute paths (#3014) +* Add scroll ratchet force setting +* Fix debug messages for MouseClick rule +* Improve debug message for rule evaluation +* App wrapper and launch agent scripts for MacOS +* Ignore hidden features +* Don't pop up window in response to ADC changes +* Update bug report template +* Fixed malformed doc file by adding closing tag +* Fix error in low-level request for device with no recevier +* Update documentation files + # 1.1.16 * Add new flags for reprogrammable keys feature diff --git a/Release_Notes.md b/Release_Notes.md index 4572ca1e..2c459a9a 100644 --- a/Release_Notes.md +++ b/Release_Notes.md @@ -1,5 +1,13 @@ # Notes on Major Changes in Releases +## Version 1.1.17 + +* Several new features have been added related to the MX Master 4 + * The scroll ratchet force can be adjusted + * The force required to click the button under your thumb can be adjusted + * The haptic force can be adjusted + * Haptic feeback can be triggered by commands like `solaar config 'mx master 4' haptic-play 'HAPPY ALER'` + ## Version 1.1.16 * Two bugs that were affecting users in 1.1.15 are fixed. diff --git a/docs/capabilities.md b/docs/capabilities.md index 4bd45b3b..4f1502eb 100644 --- a/docs/capabilities.md +++ b/docs/capabilities.md @@ -178,7 +178,7 @@ For more information on Mouse Gestures rule conditions see Solaar uses the standard Logitech names for keyboard keys. Some Logitech keyboards have different icons on some of their keys and have different functionality than suggested by these names. -Solaar is uses the standard US keyboard layout. This currently only matters for the `Per-key Lighting` setting. Users who want to have the key names for this setting reflect the keyboard layout that they use can create and edit `~/.config/solaar/keys.yaml` which contains a YAML dictionary of key names and locations. For example, switching the `Y` and `Z` keys can be done as: +Solaar uses the standard US keyboard layout. This currently only matters for the `Per-key Lighting` setting. Users who want to have the key names for this setting reflect the keyboard layout that they use can create and edit `~/.config/solaar/keys.yaml` which contains a YAML dictionary of key names and locations. For example, switching the `Y` and `Z` keys can be done as: Z: 25 Y: 26 diff --git a/docs/installation.md b/docs/installation.md index 74d033b7..06b4d925 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -7,8 +7,7 @@ layout: page An easy way to install the most recent release version of Solaar is from the PyPI repository. First install pip, and then run -`pip install --user solaar` or `pipx install --system-site-packages solaar` or -If you are using pipx add the `` flag. +`pip install --user solaar` or `pipx install --system-site-packages solaar`. This will not install the Solaar udev rule, which you will need to install manually by copying `~/.local/lib/udev/rules.d/42-logitech-unify-permissions.rules` @@ -31,12 +30,12 @@ brew install hidapi gtk+3 pygobject3 * Option A (recommended): Configure a LaunchAgent to automatically start Solaar and keep it running in the background. It will also automatically restart Solaar if it crashed or closed. ``` -bash <(curl -fsSL https://raw.githubusercontent.com/pwr-Solaar/Solaar/refs/heads/master/tools/create-macos-app.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/pwr-Solaar/Solaar/refs/heads/master/tools/create-macos-launchagent.sh) ``` * Option B: Create Solaar.app launcher in /Applications. It can be added to Login Items to start on login, but it will not automatically recover on crashes. ``` -bash <(curl -fsSL https://raw.githubusercontent.com/pwr-Solaar/Solaar/refs/heads/master/tools/create-macos-launchagent.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/pwr-Solaar/Solaar/refs/heads/master/tools/create-macos-app.sh) ``` # Installating from GitHub diff --git a/lib/logitech_receiver/descriptors.py b/lib/logitech_receiver/descriptors.py index 03c06e74..e6b08151 100644 --- a/lib/logitech_receiver/descriptors.py +++ b/lib/logitech_receiver/descriptors.py @@ -381,7 +381,7 @@ _D( ), ) _D("Couch Mouse M515", codename="M515", protocol=2.0, wpid="4007") -_D("Wireless Mouse M175", codename="M175", protocol=2.0, wpid="4008") +# _D("Wireless Mouse M175", codename="M175", protocol=2.0, wpid="4008") _D("Wireless Mouse M325", codename="M325", protocol=2.0, wpid="400A") _D("Wireless Mouse M525", codename="M525", protocol=2.0, wpid="4013") _D("Wireless Mouse M345", codename="M345", protocol=2.0, wpid="4017") diff --git a/lib/logitech_receiver/device.py b/lib/logitech_receiver/device.py index 111704b8..82e4ae12 100644 --- a/lib/logitech_receiver/device.py +++ b/lib/logitech_receiver/device.py @@ -140,7 +140,7 @@ class Device: self._modelId = None # model id (contains identifiers for the transports of the device) self._tid_map = None # map from transports to product identifiers self._persister = None # persister holds settings - self._led_effects = self._firmware = self._keys = self._remap_keys = self._gestures = None + self._led_effects = self._firmware = self._keys = self._remap_keys = self._gestures = self._force_buttons = None self._profiles = self._backlight = self._settings = None self.registers = [] self.notification_flags = None @@ -346,6 +346,12 @@ class Device: self._profiles = _hidpp20.get_profiles(self) return self._profiles + def force_buttons(self): + if self._force_buttons is None: + if self.online and self.protocol >= 2.0: + self._force_buttons = _hidpp20.get_force_buttons(self) or () + return self._force_buttons + def set_configuration(self, configuration_, no_reply=False): if self.online and self.protocol >= 2.0: _hidpp20.config_change(self, configuration_, no_reply=no_reply) diff --git a/lib/logitech_receiver/hidpp10.py b/lib/logitech_receiver/hidpp10.py index 29399c8c..ae4798b7 100644 --- a/lib/logitech_receiver/hidpp10.py +++ b/lib/logitech_receiver/hidpp10.py @@ -189,7 +189,7 @@ class Hidpp10: write_register(device, Registers.THREE_LEDS, v1, v2) def get_notification_flags(self, device: Device): - return self._get_register(device, Registers.NOTIFICATIONS) + return NotificationFlag(self._get_register(device, Registers.NOTIFICATIONS)) def set_notification_flags(self, device: Device, *flag_bits: NotificationFlag): assert device is not None diff --git a/lib/logitech_receiver/hidpp20.py b/lib/logitech_receiver/hidpp20.py index 1db43090..05295846 100644 --- a/lib/logitech_receiver/hidpp20.py +++ b/lib/logitech_receiver/hidpp20.py @@ -21,6 +21,7 @@ import socket import struct import threading +from collections import UserDict from enum import Flag from enum import IntEnum from typing import Any @@ -1449,7 +1450,7 @@ class OnboardProfiles: device.ping() response = device.feature_request(SupportedFeature.ONBOARD_PROFILES, 0x00) memory, profile, _macro = struct.unpack("!BBB", response[0:3]) - if memory != 0x01 or profile > 0x04: + if memory != 0x01 or profile > 0x05: return count, oob, buttons, sectors, size, shift = struct.unpack("!BBBBHB", response[3:10]) gbuttons = buttons if (shift & 0x3 == 0x2) else 0 @@ -1713,6 +1714,12 @@ class Hidpp20: if SupportedFeature.BACKLIGHT2 in device.features: return Backlight(device) + def get_force_buttons(self, device: Device): + if getattr(device, "_force_buttons", None) is not None: + return device._force_buttons + if SupportedFeature.FORCE_SENSING_BUTTON in device.features: + return ForceSensingButtonArray(device) + def get_profiles(self, device: Device): if getattr(device, "_profiles", None) is not None: return device._profiles @@ -2021,3 +2028,94 @@ def estimate_battery_level_percentage(value_millivolt: int) -> int | None: percent = p_low + (p_high - p_low) * (value_millivolt - v_low) / (v_high - v_low) return round(percent) return 0 + + +class ForceSensingButton: + """A button that has a force value at which to trigger the button""" + + @classmethod + def create(cls, device, number: int): + buttondata = device.feature_request(SupportedFeature.FORCE_SENSING_BUTTON, 0x10, number) + buttoncurrent = device.feature_request(SupportedFeature.FORCE_SENSING_BUTTON, 0x20, number) + if buttondata is not None and buttoncurrent is not None: + changeable, default, max_value, min_value = struct.unpack("!HHHH", buttondata[:8]) + changeable = changeable & 0x01 + current = struct.unpack("!H", buttoncurrent[:2])[0] + return cls(device, number, changeable, default, max_value, min_value, current) + + def __init__(self, device, number: int, changeable: bool, default: int, max_value: int, min_value: int, current: int): + self._device = device + self.number = number + self.changeable = changeable + self.default = default + self.min_value = min_value + self.max_value = max_value + self._current = current + + def get_current(self) -> int: + return self._current + + def set_current(self, current: int) -> None: + if not self.changeable: + logger.warning(f"FORCE_SENSING_BUTTON on device {self._device} does not allow changing force.") + if self.min_value <= current <= self.max_value: + ret = self._device.feature_request( + SupportedFeature.FORCE_SENSING_BUTTON, 0x30, struct.pack("!BH", self.number, current) + ) + if ret is None and logger.isEnabledFor(logging.DEBUG): + logger.debug(f"FORCE_SENSING_BUTTON setButtonConfig on device {self._device} didn't respond.") + + def acceptable_current(self, value: int) -> bool: + return self.min_value <= value <= self.max_value + + +class ForceSensingButtonArray(UserDict): + """A map of buttons supporting force sensing""" + + def __new__(cls, device: Device): + assert device is not None + count = device.feature_request(SupportedFeature.FORCE_SENSING_BUTTON, 0x00) + if count: + instance = super().__new__(cls) + instance._count = ord(count[:1]) + return instance + + def __init__(self, device: Device): + super().__init__(self) + self.device = device + for index in range(0, self._count): + self[index] = None + + def __getitem__(self, index: int): + item = super().__getitem__(index) + if item is None: + self.query_key(index) + return super().__getitem__(index) + + def query_key(self, index): + if index not in self: + raise IndexError(index) + button = ForceSensingButton.create(self.device, index) + if button: + self[index] = button + return button + + def query(self): + for index in self: + button = ForceSensingButton.create(self.device, index) + if button: + self[index] = button + return self + + # interface for single force button + def get_current(self): + return self[0].get_current() + + def set_current(self, current: int) -> None: + self[0].set_current(current) + + def acceptable(self, value: int) -> bool: + return self[0].acceptable(value) + + def acceptable_current_key(self, index: int, value: int) -> bool: + return self[index].acceptable(value) diff --git a/lib/logitech_receiver/hidpp20_constants.py b/lib/logitech_receiver/hidpp20_constants.py index bb345218..e5c7f85d 100644 --- a/lib/logitech_receiver/hidpp20_constants.py +++ b/lib/logitech_receiver/hidpp20_constants.py @@ -65,6 +65,8 @@ class SupportedFeature(IntEnum): BACKLIGHT2 = 0x1982 BACKLIGHT3 = 0x1983 ILLUMINATION = 0x1990 + FORCE_SENSING_BUTTON = 0x19C0 + HAPTIC = 0x19B0 PRESENTER_CONTROL = 0x1A00 SENSOR_3D = 0x1A01 REPROG_CONTROLS = 0x1B00 @@ -276,3 +278,23 @@ class ParamId(IntEnum): PIXEL_ZONE = 2 # 4 2-byte integers, left, bottom, width, height; pixels RATIO_ZONE = 3 # 4 bytes, left, bottom, width, height; unit 1/240 pad size SCALE_FACTOR = 4 # 2-byte integer, with 256 as normal scale + + +HapticWaveForms = NamedInts( + SHARP_STATE_CHANGE=0x00, + DAMP_STATE_CHANGE=0x01, + SHARP_COLLISION=0x02, + DAMP_COLLISION=0x03, + SUBTLE_COLLISION=0x04, + HAPPY_ALERT=0x05, + ANGRY_ALERT=0x06, + COMPLETED=0x07, + SQUARE=0x08, + WAVE=0x09, + FIREWORK=0x0A, + MAD=0x0B, + KNOCK=0x0C, + JINGLE=0x0D, + RINGING=0xE, + WHISPER_COLLISION=0x1B, +) diff --git a/lib/logitech_receiver/settings.py b/lib/logitech_receiver/settings.py index 9fe57cc2..25257910 100644 --- a/lib/logitech_receiver/settings.py +++ b/lib/logitech_receiver/settings.py @@ -35,6 +35,7 @@ SENSITIVITY_IGNORE = "ignore" class Kind(IntEnum): + NONE = 0 TOGGLE = 0x01 CHOICE = 0x02 RANGE = 0x04 @@ -43,6 +44,8 @@ class Kind(IntEnum): PACKED_RANGE = 0x20 MULTIPLE_RANGE = 0x40 HETERO = 0x80 + MAP_RANGE = 0x102 + COLOR = 0x200 class Setting: @@ -55,6 +58,7 @@ class Setting: rw_options = {} validator_class = None validator_options = {} + display = True # display setting in UI def __init__(self, device, rw, validator): self._device = device diff --git a/lib/logitech_receiver/settings_new.py b/lib/logitech_receiver/settings_new.py new file mode 100644 index 00000000..9e1161ab --- /dev/null +++ b/lib/logitech_receiver/settings_new.py @@ -0,0 +1,206 @@ +## Copyright (C) 2025 Solaar contributors +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program 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 General Public License for more details. +## +## You should have received a copy of the GNU General Public License along +## with this program; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +## A new way of supporting settings, using a feature-specifi device class to store, read, and write relevant information +## The setting uses the device class to interact with the device feature. +## The setting uses a persist class to keep track of the setting. + +## Interface: + +import logging + +from .settings import Kind + +logger = logging.getLogger(__name__) + + +class Setting: + name = None # Solaar internal name for the setting + label = None # Solaar user name for the setting (translatable) + description = None # Solaar extra desciption for the setting (translatable) + feature = None # Logitech feature that the setting uses + min_version = 0 # Minimum version of the feature needed + setup = None # method name on Device class to get the device object + get = None # method name on the device object to get the setting value + set = None # method name on the device object to set the setting value + acceptable = None # method name on the device object to check for acceptable values + choices_universe = None # All possible acceptable keys, for settings with keys + kind = Kind.NONE # What GUI interface to use + persist = True # Whether to remember the setting + display = True # display setting in UI + _device = None # The device that this setting is for + _device_object = None # The object that interacts with the feature for the device + _value = None # Stored value as maintained by Solaar, used for persistence + + def __init__(self, device, device_object): + self._device = device + self._device_object = device_object + + @classmethod + def build(cls, device): + cls.check_properties(cls) + device_object = getattr(device, cls.setup)() + if device_object: + setting = cls(device, device_object) + return setting + + @classmethod + def check_properties(cl, cls): + assert cls.name and cls.label and cls.description, "New settings require a name, label, and description" + assert cls.feature, "New settings require a feature" + assert cls.setup, "New settings require a setup device method" + assert cls.get and cls.set and cls.acceptable, "New settings require get, set, and acceptable methods" + + def setup_from_class(self, clss): + """Copy settings methods for a new setting from a settting class""" + self.name = clss.name + self.label = clss.label + self.description = clss.description + self.feature = clss.feature + self.min_version = clss.min_version + self.setup = clss.setup + self.get = clss.get + self.set = clss.set + self.acceptable = clss.acceptable + self.choices_universe = clss.choices_universe + self.kind = clss.kind + self.persist = clss.persist + + def _pre_read(self, cached): + """Get information from and save information to the persister""" + # Get the persister map if available and not done already + if self.persist and self._value is None and getattr(self._device, "persister", None): + self._value = self._device.persister.get(self.name) + # If this is new save its current value for the next time + if cached and self._value is not None: + if getattr(self._device, "persister", None) and self.name not in self._device.persister: + self._device.persister[self.name] = self._value if self.persist else None + + def read(self, cached=True): + """Get all the data for the setting. If cached is True the data in the _value can be used.""" + self._pre_read(cached) + if logger.isEnabledFor(logging.DEBUG): + logger.debug("%s: setting read %r from %s", self.name, self._value, self._device) + if cached and self._value is not None: + return self._value + if cached: + self._value = getattr(self._device_object, self.get)() + return self._value + if self._device.online: + self._value = getattr(self._device_object.query(), self.get)() + return self._value + + def write(self, value, save=True): + """Write the value to the device. If saved is True also save in the persister""" + pass ## fill out + + def apply(self): + """Write saved data to the device, using persisted data if available""" + if logger.isEnabledFor(logging.DEBUG): + logger.debug("%s: apply (%s)", self.name, self._device) + value = None + try: + value = self.read(self.persist) # Don't use persisted value if setting doesn't persist + if self.persist and value is not None: # If setting doesn't persist no need to write value just read + self.write(value, save=False) + except Exception as e: + if logger.isEnabledFor(logging.WARNING): + logger.warning("%s: error applying %s so ignore it (%s): %s", self.name, value, self._device, repr(e)) + + @property + def range(self): + if self.kind == Kind.RANGE: + return self.min_value, self.max_value + + def val_to_string(self, value): + return str(value) + + +## key mapping from symbols to values???? + + +class Settings(Setting): + """A setting descriptor for multiple keys. + Supported by a class that provides the interface to the device, see ForceSensingButtonArray in hidpp20.py + Picks out a field from the mapped device feature objects.""" + + # setup creates a dictionary with entries for all the keys + # _value is a map from keys to values + # get, set, and acceptable are methods of dict value objects, not of the device object itself #### FIX THIS! MAYBE?? + + def __init__(self, device, device_object): + super().__init__(device, device_object) + self._value = {} + + def read(self, cached=True): + self._pre_read(cached) + if logger.isEnabledFor(logging.DEBUG): + logger.debug("%s: settings read %r from %s", self.name, self._value, self._device) + for key in self._device_object: + self.read_key(key, cached) + return self._value + + def read_key(self, key, cached=True): + """Get the data for the key. If cached is True the data in the device_object can be used.""" + self._pre_read(cached) + if key not in self._device_object: + logger.error("%s: settings illegal read key %r for %s", self.name, key, self._device) + return None + if logger.isEnabledFor(logging.DEBUG): + logger.debug("%s: settings key %r read %r from %s", self.name, key, self._value, self._device) + if cached and key in self._value and self._value[key] is not None: + return self._value[key] + if cached: + data = self._device_object[key] + self._value[key] = getattr(data, self.get)() + return self._value[key] + if self._device.online: + data = self._device_object.query_key(key) + self._value[key] = getattr(data, self.get)() + return self._value[key] + + def write(self, value, save=True): + if logger.isEnabledFor(logging.DEBUG): + logger.debug("%s: settings read %r from %s", self.name, self._value, self._device) + if isinstance(value, dict): + for key, val in value.items(): + self.write_key_value(key, val, save) + else: # to mimic interface for non-dict setting + key = next(iter(self._device_object)) + self.write_key_value(key, value, save) + return value + + def write_key_value(self, key, value, save=True): + """Write the data for the key. If saved is True also save in the persister""" + if key not in self._device_object: + logger.error("%s: settings illegal write key %r for %s", self.name, key, self._device) + return None + if logger.isEnabledFor(logging.DEBUG): + logger.debug("%s: settings write key %r value %r to %s", self.name, key, value, self._device) + if self._device.online: + if self._device_object[key] is None: + self.read_key(key) + if self._device_object[key] is None: + logger.error("%s: settings illegal write key %r for %s", self.name, key, self._device) + return None + if not getattr(self._device_object[key], self.acceptable)(value): + logger.error("%s: settings illegal write key %r value %r for %s", self.name, key, value, self._device) + return None + self._value[key] = value + if self._device.persister and self.persist and save: + self._device.persister[self.name][key] = value + getattr(self._device_object[key], self.set)(value) + return value diff --git a/lib/logitech_receiver/settings_templates.py b/lib/logitech_receiver/settings_templates.py index 9f1616e0..616c5b82 100644 --- a/lib/logitech_receiver/settings_templates.py +++ b/lib/logitech_receiver/settings_templates.py @@ -36,6 +36,7 @@ from . import exceptions from . import hidpp20 from . import hidpp20_constants from . import settings +from . import settings_new from . import settings_validator from . import special_keys from .hidpp10_constants import Registers @@ -1015,7 +1016,7 @@ def produce_dpi_list(feature, function, ignore, device, direction): class AdjustableDpi(settings.Setting): name = "dpi" label = _("Sensitivity (DPI)") - description = _("Mouse movement sensitivity") + description = _("Mouse movement sensitivity") + "\n" + _("May need Onboard Profiles set to Disable to be effective.") feature = _F.ADJUSTABLE_DPI rw_options = {"read_fnid": 0x20, "write_fnid": 0x30} choices_universe = common.NamedInts.range(100, 4000, str, 50) @@ -1643,7 +1644,7 @@ class LEDZoneSetting(settings.Setting): label = _("LED Zone Effects") description = _("Set effect for LED Zone") + "\n" + _("LED Control needs to be set to Solaar to be effective.") feature = _F.COLOR_LED_EFFECTS - color_field = {"name": _LEDP.color, "kind": settings.Kind.CHOICE, "label": None, "choices": colors} + color_field = {"name": _LEDP.color, "kind": settings.Kind.COLOR, "label": _("Color")} speed_field = {"name": _LEDP.speed, "kind": settings.Kind.RANGE, "label": _("Speed"), "min": 0, "max": 255} period_field = {"name": _LEDP.period, "kind": settings.Kind.RANGE, "label": _("Period"), "min": 100, "max": 5000} intensity_field = {"name": _LEDP.intensity, "kind": settings.Kind.RANGE, "label": _("Intensity"), "min": 0, "max": 100} @@ -1779,6 +1780,101 @@ class PerKeyLighting(settings.Settings): return result +# Allow changes to force sensing buttons +class ForceSensing(settings_new.Settings): + name = "force-sensing" + label = _("Force Sensing Buttons") + description = _("Change the force required to activate button.") + feature = _F.FORCE_SENSING_BUTTON + setup = "force_buttons" + get = "get_current" + set = "set_current" + acceptable = "acceptable_current_key" + choices_universe = list(range(0, 256)) + kind = settings.Kind.MAP_RANGE + + @classmethod + def build(cls, device): + cls.check_properties(cls) + device_object = getattr(device, cls.setup)() + if device_object: + setting = cls(device, device_object) + if setting and len(device_object) == 1: + ## If there is only one force button a simpler interface can be used + setting.label = _("Force Sensing Button") + setting.acceptable = "acceptable_current" + setting.min_value = device_object[0].min_value + setting.max_value = device_object[0].max_value + setting.kind = settings.Kind.RANGE + return setting + + +class HapticLevel(settings.Setting): + name = "haptic-level" + label = _("Haptic Feeback Level") + description = _("Change power of haptic feedback. (Zero to turn off.)") + feature = _F.HAPTIC + choices_universe = common.NamedInts(Off=0, Low=25, Medium=50, High=75, Maximum=100) + min_value = 0 + max_value = 100 + + class rw_class(settings.FeatureRW): + def __init__(self, feature): + super().__init__(feature, read_fnid=0x10, write_fnid=0x20) + + def read(self, device, data_bytes=b""): + result = device.feature_request(self.feature, 0x10) + if result[0] & 0x01 == 0: # disabled, return 0 + return b"\x00" + else: # enabled, return second byte + return result[1:2] + + def write(self, device, data_bytes): + if data_bytes == b"\x00": + write_bytes = b"\x00\x32" # disable, at 50 percent + else: + write_bytes = b"\x01" + data_bytes + reply = device.feature_request(self.feature, 0x20, write_bytes) + return reply + + @classmethod + def build(cls, device): + response = device.feature_request(cls.feature, 0x10) + if response: + rw = cls.rw_class(cls.feature) + levels = response[2] & 0x01 + if levels: # device only has four levels + validator = settings_validator.ChoicesValidator(choices=cls.choices_universe) + else: # device has all levels + validator = settings_validator.RangeValidator(min_value=cls.min_value, max_value=cls.max_value) + return cls(device, rw, validator) + + +# This setting is not displayed in the UI +# Use `solaar config haptic-play
` to play a haptic form +class PlayHapticWaveForm(settings.Setting): + name = "haptic-play" + label = _("Play Haptic Waveform") + description = _("Tell device to play a haptic waveform.") + feature = _F.HAPTIC + choices_universe = hidpp20_constants.HapticWaveForms + rw_options = {"read_fnid": None, "write_fnid": 0x40} # nothing to read + persist = False # persisting this setting is useless + display = False # don't display in UI, interact using `solaar config ...` + + class validator_class(settings_validator.ChoicesValidator): + @classmethod + def build(cls, setting_class, device): + response = device.feature_request(_F.HAPTIC, 0x00) + if response: + waves = common.NamedInts() + waveforms = int.from_bytes(response[4:8]) + for waveform in hidpp20_constants.HapticWaveForms: + if (1 << int(waveform)) & waveforms: + waves[int(waveform)] = str(waveform) + return cls(choices=waves, byte_count=1) + + SETTINGS: list[settings.Setting] = [ RegisterHandDetection, # simple RegisterSmoothScroll, # simple @@ -1824,6 +1920,7 @@ SETTINGS: list[settings.Setting] = [ PersistentRemappableAction, DivertKeys, # working DisableKeyboardKeys, # working + ForceSensing, CrownSmooth, # working DivertCrown, # working DivertGkeys, # working @@ -1835,6 +1932,8 @@ SETTINGS: list[settings.Setting] = [ Gesture2Gestures, # working Gesture2Divert, Gesture2Params, # working + HapticLevel, + PlayHapticWaveForm, Sidetone, Equalizer, ADCPower, @@ -1939,7 +2038,7 @@ def check_feature(device, settings_class: SettingsProtocol) -> None | bool | Set try: detected = settings_class.build(device) if logger.isEnabledFor(logging.DEBUG): - logger.debug("check_feature %s [%s] detected %s", settings_class.name, settings_class.feature, detected) + logger.debug("check_feature %s [%s] detected", settings_class.name, settings_class.feature) return detected except Exception as e: logger.error( diff --git a/lib/solaar/cli/config.py b/lib/solaar/cli/config.py index c1b71f39..c5d1f1dd 100644 --- a/lib/solaar/cli/config.py +++ b/lib/solaar/cli/config.py @@ -278,6 +278,8 @@ def set(dev, setting: SettingsProtocol, args, save): key = args.value_key all_keys = getattr(setting, "choices_universe", None) ikey = all_keys[int(key) if key.isdigit() else key] if isinstance(all_keys, NamedInts) else to_int(key) + print("S", args.extra2, key, type(all_keys), ikey) + print("SS", args) if args.extra2 is None or to_int(args.extra2) is None: raise Exception(f"{setting.name}: setting needs an integer value, not {args.extra2}") if not setting._value: # ensure that there are values to look through @@ -295,7 +297,19 @@ def set(dev, setting: SettingsProtocol, args, save): result = setting.write_key_value(int(k), item, save=save) value = item + elif setting.kind == settings.Kind.MAP_RANGE: + if args.extra_subkey is None: + _print_setting_keyed(setting, args.value_key) + return None, None, None + key = int(args.value_key) + value = int(args.extra_subkey) + if key not in setting._device_object: + raise Exception(f"{setting.name}: key '{key}' not in setting") + message = f"Setting {setting.name} of {dev.name} key {key} to {value}" + result = setting.write_key_value(key, value, save=save) + else: + print("KIND", setting.kind) raise Exception("NotImplemented") return result, message, value diff --git a/lib/solaar/cli/pair.py b/lib/solaar/cli/pair.py index 21343de6..e2888799 100644 --- a/lib/solaar/cli/pair.py +++ b/lib/solaar/cli/pair.py @@ -38,7 +38,7 @@ def run(receivers, args, find_receiver, _ignore): assert receiver # check if it's necessary to set the notification flags - old_notification_flags = _hidpp10.get_notification_flags(receiver) or 0 + old_notification_flags = _hidpp10.get_notification_flags(receiver) if not (old_notification_flags & hidpp10_constants.NotificationFlag.WIRELESS): _hidpp10.set_notification_flags(receiver, old_notification_flags | hidpp10_constants.NotificationFlag.WIRELESS) diff --git a/lib/solaar/cli/profiles.py b/lib/solaar/cli/profiles.py index d080a3ad..d697fbcb 100644 --- a/lib/solaar/cli/profiles.py +++ b/lib/solaar/cli/profiles.py @@ -38,8 +38,10 @@ def run(receivers, args, find_receiver, find_device): if not dev: raise Exception(f"no online device found matching '{device_name}'") - if not (dev.online and dev.profiles): - print(f"Device {dev.name} is either offline or has no onboard profiles") + if not dev.online: + print(f"Device {dev.name} is offline.") + elif not dev.profiles: + print(f"Device {dev.name} has no onboard profiles that Solaar supports.") elif not profiles_file: print(f"#Dumping profiles from {dev.name}") print(yaml.dump(dev.profiles)) diff --git a/lib/solaar/cli/show.py b/lib/solaar/cli/show.py index a0a9e5f6..c5d2fbb0 100644 --- a/lib/solaar/cli/show.py +++ b/lib/solaar/cli/show.py @@ -260,7 +260,8 @@ def _print_device(dev, num=None): v = setting.val_to_string(setting._device.persister.get(setting.name)) print(f" {setting.label} (saved): {v}") try: - v = setting.val_to_string(setting.read(False)) + v = setting.read(False) + v = setting.val_to_string(v) except exceptions.FeatureCallError as e: v = "HID++ error " + str(e) except AssertionError as e: diff --git a/lib/solaar/ui/config_panel.py b/lib/solaar/ui/config_panel.py index 45dcc830..4c6e1a51 100644 --- a/lib/solaar/ui/config_panel.py +++ b/lib/solaar/ui/config_panel.py @@ -16,7 +16,6 @@ ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import logging -import traceback from enum import Enum from threading import Timer @@ -47,6 +46,7 @@ class GtkSignal(Enum): NOTIFY_ACTIVE = "notify::active" TOGGLED = "toggled" VALUE_CHANGED = "value-changed" + COLOR_SET = "color-set" def _read_async(setting, force_read, sbox, device_is_online, sensitive): @@ -70,7 +70,6 @@ def _write_async(setting, value, sbox, sensitive=True, key=None): v = setting.write_key_value(key, v) v = {key: v} except Exception: - traceback.print_exc() v = None if sb: GLib.idle_add(_update_setting_item, sb, v, True, sensitive, priority=99) @@ -147,6 +146,11 @@ class SliderControl(Gtk.Scale, Control): self.set_increments(1, 5) self.connect(GtkSignal.VALUE_CHANGED.value, self.changed) + def set_value(self, value): + if isinstance(value, dict): + value = next(iter(value.values())) + return super().set_value(value) + def get_value(self): return int(super().get_value()) @@ -562,6 +566,10 @@ class HeteroKeyControl(Gtk.HBox, Control): item_box.set_active(0) item_box.connect(GtkSignal.CHANGED.value, self.changed) self.pack_start(item_box, False, False, 0) + elif item["kind"] == settings.Kind.COLOR: + item_box = Gtk.ColorButton() + item_box.connect(GtkSignal.COLOR_SET.value, self.changed) + self.pack_start(item_box, False, False, 0) elif item["kind"] == settings.Kind.RANGE: item_box = Scale() item_box.set_range(item["min"], item["max"]) @@ -576,7 +584,14 @@ class HeteroKeyControl(Gtk.HBox, Control): def get_value(self): result = {} for k, (_lblbox, box) in self._items.items(): - result[str(k)] = box.get_value() + if isinstance(box, Gtk.ColorButton): + rgba = box.get_rgba() + r = int(rgba.red * 255) + g = int(rgba.green * 255) + b = int(rgba.blue * 255) + result[str(k)] = (r << 16) | (g << 8) | b + else: + result[str(k)] = box.get_value() result = hidpp20.LEDEffectSetting(**result) return result @@ -586,7 +601,13 @@ class HeteroKeyControl(Gtk.HBox, Control): for k, v in value.__dict__.items(): if k in self._items: (lblbox, box) = self._items[k] - box.set_value(v) + if isinstance(box, Gtk.ColorButton): + rgba = Gdk.RGBA() + color_string = f"#{v:06X}" # e.g. "#FF0000" + rgba.parse(color_string) + box.set_rgba(rgba) + else: + box.set_value(v) else: self.sbox._failed.set_visible(True) self.setup_visibles(value.ID if value is not None else 0) @@ -655,6 +676,8 @@ def _change_icon(allowed, icon): def _create_sbox(s, _device): + if not s.display: + return sbox = Gtk.HBox(homogeneous=False, spacing=6) sbox.setting = s sbox.kind = s.kind diff --git a/lib/solaar/version b/lib/solaar/version index 63b283b2..cbb8cbae 100644 --- a/lib/solaar/version +++ b/lib/solaar/version @@ -1 +1 @@ -1.1.16 +1.1.17 diff --git a/po/pl.po b/po/pl.po index 82ef7ff9..d542bdc8 100644 --- a/po/pl.po +++ b/po/pl.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: solaar 1.1.15\n" +"Project-Id-Version: solaar 1.1.17\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-10 20:08+0200\n" -"PO-Revision-Date: 2025-10-10 20:14+0200\n" +"POT-Creation-Date: 2025-12-01 19:29+0100\n" +"PO-Revision-Date: 2025-12-01 19:46+0100\n" "Last-Translator: Matthaiks\n" "Language-Team: none\n" "Language: pl\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.8\n" #: lib/logitech_receiver/base_usb.py:52 msgid "Bolt Receiver" @@ -50,100 +50,100 @@ msgstr "Akumulator: %(level)s (%(status)s)" msgid "Battery: %(percent)d%% (%(status)s)" msgstr "Akumulator: %(percent)d%% (%(status)s)" -#: lib/logitech_receiver/hidpp20.py:1023 -#: lib/logitech_receiver/settings_templates.py:295 +#: lib/logitech_receiver/hidpp20.py:1048 +#: lib/logitech_receiver/settings_templates.py:299 msgid "Disabled" msgstr "Wyłączone" -#: lib/logitech_receiver/hidpp20.py:1024 +#: lib/logitech_receiver/hidpp20.py:1049 msgid "Static" msgstr "Statyczny" -#: lib/logitech_receiver/hidpp20.py:1025 +#: lib/logitech_receiver/hidpp20.py:1050 msgid "Pulse" msgstr "Puls" -#: lib/logitech_receiver/hidpp20.py:1026 +#: lib/logitech_receiver/hidpp20.py:1051 msgid "Cycle" msgstr "Cykl" -#: lib/logitech_receiver/hidpp20.py:1027 +#: lib/logitech_receiver/hidpp20.py:1052 msgid "Boot" msgstr "Rozruch" -#: lib/logitech_receiver/hidpp20.py:1028 +#: lib/logitech_receiver/hidpp20.py:1053 msgid "Demo" msgstr "Demo" -#: lib/logitech_receiver/hidpp20.py:1030 +#: lib/logitech_receiver/hidpp20.py:1055 msgid "Breathe" msgstr "Oddech" -#: lib/logitech_receiver/hidpp20.py:1033 +#: lib/logitech_receiver/hidpp20.py:1058 msgid "Ripple" msgstr "Plusk" -#: lib/logitech_receiver/hidpp20.py:1034 +#: lib/logitech_receiver/hidpp20.py:1059 msgid "Decomposition" msgstr "Dekompozycja" -#: lib/logitech_receiver/hidpp20.py:1035 +#: lib/logitech_receiver/hidpp20.py:1060 msgid "Signature1" msgstr "Podpis1" -#: lib/logitech_receiver/hidpp20.py:1036 +#: lib/logitech_receiver/hidpp20.py:1061 msgid "Signature2" msgstr "Podpis2" -#: lib/logitech_receiver/hidpp20.py:1037 +#: lib/logitech_receiver/hidpp20.py:1062 msgid "CycleS" msgstr "Cykle" -#: lib/logitech_receiver/hidpp20.py:1101 +#: lib/logitech_receiver/hidpp20.py:1126 msgid "Unknown Location" msgstr "Nieznana lokalizacja" -#: lib/logitech_receiver/hidpp20.py:1102 +#: lib/logitech_receiver/hidpp20.py:1127 msgid "Primary" msgstr "Podstawowy" -#: lib/logitech_receiver/hidpp20.py:1103 +#: lib/logitech_receiver/hidpp20.py:1128 msgid "Logo" msgstr "Logo" -#: lib/logitech_receiver/hidpp20.py:1104 +#: lib/logitech_receiver/hidpp20.py:1129 msgid "Left Side" msgstr "Lewa strona" -#: lib/logitech_receiver/hidpp20.py:1105 +#: lib/logitech_receiver/hidpp20.py:1130 msgid "Right Side" msgstr "Prawa strona" -#: lib/logitech_receiver/hidpp20.py:1106 +#: lib/logitech_receiver/hidpp20.py:1131 msgid "Combined" msgstr "Łączony" -#: lib/logitech_receiver/hidpp20.py:1107 +#: lib/logitech_receiver/hidpp20.py:1132 msgid "Primary 1" msgstr "Podstawowy 1" -#: lib/logitech_receiver/hidpp20.py:1108 +#: lib/logitech_receiver/hidpp20.py:1133 msgid "Primary 2" msgstr "Podstawowy 2" -#: lib/logitech_receiver/hidpp20.py:1109 +#: lib/logitech_receiver/hidpp20.py:1134 msgid "Primary 3" msgstr "Podstawowy 3" -#: lib/logitech_receiver/hidpp20.py:1110 +#: lib/logitech_receiver/hidpp20.py:1135 msgid "Primary 4" msgstr "Podstawowy 4" -#: lib/logitech_receiver/hidpp20.py:1111 +#: lib/logitech_receiver/hidpp20.py:1136 msgid "Primary 5" msgstr "Podstawowy 5" -#: lib/logitech_receiver/hidpp20.py:1112 +#: lib/logitech_receiver/hidpp20.py:1137 msgid "Primary 6" msgstr "Podstawowy 6" @@ -385,19 +385,19 @@ msgstr[0] "%(count)s sparowane urządzenie." msgstr[1] "%(count)s sparowane urządzenia." msgstr[2] "%(count)s sparowanych urządzeń." -#: lib/logitech_receiver/settings.py:598 +#: lib/logitech_receiver/settings.py:602 msgid "register" msgstr "rejestr" -#: lib/logitech_receiver/settings.py:612 lib/logitech_receiver/settings.py:650 +#: lib/logitech_receiver/settings.py:616 lib/logitech_receiver/settings.py:654 msgid "feature" msgstr "funkcja" -#: lib/logitech_receiver/settings_templates.py:134 +#: lib/logitech_receiver/settings_templates.py:138 msgid "Swap Fx function" msgstr "Zamień funkcję Fx" -#: lib/logitech_receiver/settings_templates.py:137 +#: lib/logitech_receiver/settings_templates.py:141 msgid "" "When set, the F1..F12 keys will activate their special function,\n" "and you must hold the FN key to activate their standard function." @@ -406,7 +406,7 @@ msgstr "" "ich funkcja pomocnicza. Aby aktywować funkcję standardową, należy\n" "przytrzymać klawisz FN." -#: lib/logitech_receiver/settings_templates.py:142 +#: lib/logitech_receiver/settings_templates.py:146 msgid "" "When unset, the F1..F12 keys will activate their standard function,\n" "and you must hold the FN key to activate their special function." @@ -415,31 +415,31 @@ msgstr "" "ich funkcja standardowa. Aby aktywować funkcję pomocniczą, należy\n" "przytrzymać klawisz FN." -#: lib/logitech_receiver/settings_templates.py:150 +#: lib/logitech_receiver/settings_templates.py:154 msgid "Hand Detection" msgstr "Wykrywanie dłoni" -#: lib/logitech_receiver/settings_templates.py:151 +#: lib/logitech_receiver/settings_templates.py:155 msgid "Turn on illumination when the hands hover over the keyboard." msgstr "Włącz podświetlenie, gdy dłonie znajdą się nad klawiaturą." -#: lib/logitech_receiver/settings_templates.py:158 +#: lib/logitech_receiver/settings_templates.py:162 msgid "Scroll Wheel Smooth Scrolling" msgstr "Płynne przewijanie kółkiem przewijania" -#: lib/logitech_receiver/settings_templates.py:159 -#: lib/logitech_receiver/settings_templates.py:406 -#: lib/logitech_receiver/settings_templates.py:435 +#: lib/logitech_receiver/settings_templates.py:163 +#: lib/logitech_receiver/settings_templates.py:410 +#: lib/logitech_receiver/settings_templates.py:439 msgid "High-sensitivity mode for vertical scroll with the wheel." msgstr "" "Tryb wysokiej rozdzielczości do przewijania pionowego\n" "przy użyciu kółka myszy." -#: lib/logitech_receiver/settings_templates.py:166 +#: lib/logitech_receiver/settings_templates.py:170 msgid "Side Scrolling" msgstr "Przewijanie na boki" -#: lib/logitech_receiver/settings_templates.py:168 +#: lib/logitech_receiver/settings_templates.py:172 msgid "" "When disabled, pushing the wheel sideways sends custom button events\n" "instead of the standard side-scrolling events." @@ -448,30 +448,30 @@ msgstr "" "niestandardowych\n" "zdarzeń przycisków zamiast standardowych zdarzeń przewijania na boki." -#: lib/logitech_receiver/settings_templates.py:178 +#: lib/logitech_receiver/settings_templates.py:182 msgid "Sensitivity (DPI - older mice)" msgstr "Czułość (DPI - starsze myszy)" -#: lib/logitech_receiver/settings_templates.py:179 -#: lib/logitech_receiver/settings_templates.py:983 -#: lib/logitech_receiver/settings_templates.py:1011 +#: lib/logitech_receiver/settings_templates.py:183 +#: lib/logitech_receiver/settings_templates.py:1019 +#: lib/logitech_receiver/settings_templates.py:1047 msgid "Mouse movement sensitivity" msgstr "Czułość ruchu myszy" -#: lib/logitech_receiver/settings_templates.py:252 +#: lib/logitech_receiver/settings_templates.py:256 msgid "Backlight Timed" msgstr "Podświetlenie czasowe" -#: lib/logitech_receiver/settings_templates.py:253 -#: lib/logitech_receiver/settings_templates.py:393 +#: lib/logitech_receiver/settings_templates.py:257 +#: lib/logitech_receiver/settings_templates.py:397 msgid "Set illumination time for keyboard." msgstr "Ustaw czas podświetlenia klawiatury." -#: lib/logitech_receiver/settings_templates.py:264 +#: lib/logitech_receiver/settings_templates.py:268 msgid "Backlight" msgstr "Podświetlenie" -#: lib/logitech_receiver/settings_templates.py:265 +#: lib/logitech_receiver/settings_templates.py:269 msgid "" "Illumination level on keyboard. Changes made are only applied in Manual " "mode." @@ -479,76 +479,76 @@ msgstr "" "Poziom podświetlenia klawiatury. Wprowadzone zmiany zostaną zastosowane " "wyłącznie w trybie ręcznym." -#: lib/logitech_receiver/settings_templates.py:297 +#: lib/logitech_receiver/settings_templates.py:301 msgid "Automatic" msgstr "Automatyczne" -#: lib/logitech_receiver/settings_templates.py:299 +#: lib/logitech_receiver/settings_templates.py:303 msgid "Manual" msgstr "Ręczne" -#: lib/logitech_receiver/settings_templates.py:301 +#: lib/logitech_receiver/settings_templates.py:305 msgid "Enabled" msgstr "Włączone" -#: lib/logitech_receiver/settings_templates.py:307 +#: lib/logitech_receiver/settings_templates.py:311 msgid "Backlight Level" msgstr "Poziom podświetlenia" -#: lib/logitech_receiver/settings_templates.py:308 +#: lib/logitech_receiver/settings_templates.py:312 msgid "Illumination level on keyboard when in Manual mode." msgstr "Poziom podświetlenia klawiatury w trybie ręcznym." -#: lib/logitech_receiver/settings_templates.py:365 +#: lib/logitech_receiver/settings_templates.py:369 msgid "Backlight Delay Hands Out" msgstr "Opóźnienie podświetlenia bez rąk" -#: lib/logitech_receiver/settings_templates.py:366 +#: lib/logitech_receiver/settings_templates.py:370 msgid "" "Delay in seconds until backlight fades out with hands away from keyboard." msgstr "" "Opóźnienie w sekundach, aż podświetlenie zniknie, gdy ręce będą oddalone od " "klawiatury." -#: lib/logitech_receiver/settings_templates.py:374 +#: lib/logitech_receiver/settings_templates.py:378 msgid "Backlight Delay Hands In" msgstr "Opóźnienie podświetlenia z rękoma" -#: lib/logitech_receiver/settings_templates.py:375 +#: lib/logitech_receiver/settings_templates.py:379 msgid "Delay in seconds until backlight fades out with hands near keyboard." msgstr "" "Opóźnienie w sekundach, aż podświetlenie zniknie, gdy ręce będą blisko " "klawiatury." -#: lib/logitech_receiver/settings_templates.py:383 +#: lib/logitech_receiver/settings_templates.py:387 msgid "Backlight Delay Powered" msgstr "Opóźnienie podświetlenia z zasilanem" -#: lib/logitech_receiver/settings_templates.py:384 +#: lib/logitech_receiver/settings_templates.py:388 msgid "Delay in seconds until backlight fades out with external power." msgstr "" "Opóźnienie w sekundach, aż podświetlenie zaniknie przy zasilaniu zewnętrznym." -#: lib/logitech_receiver/settings_templates.py:392 +#: lib/logitech_receiver/settings_templates.py:396 msgid "Backlight (Seconds)" msgstr "Podświetlenie (sekundy)" -#: lib/logitech_receiver/settings_templates.py:404 +#: lib/logitech_receiver/settings_templates.py:408 msgid "Scroll Wheel High Resolution" msgstr "Wysoka rozdzielczość kółka przewijania" -#: lib/logitech_receiver/settings_templates.py:408 -#: lib/logitech_receiver/settings_templates.py:437 +#: lib/logitech_receiver/settings_templates.py:412 +#: lib/logitech_receiver/settings_templates.py:441 msgid "Set to ignore if scrolling is abnormally fast or slow" msgstr "" "Ustaw, aby ignorować, jeśli przewijanie jest nienormalnie szybkie lub wolne" -#: lib/logitech_receiver/settings_templates.py:415 -#: lib/logitech_receiver/settings_templates.py:446 +#: lib/logitech_receiver/settings_templates.py:419 +#: lib/logitech_receiver/settings_templates.py:450 msgid "Scroll Wheel Diversion" msgstr "Przekierowanie kółka przewijania" -#: lib/logitech_receiver/settings_templates.py:417 +#: lib/logitech_receiver/settings_templates.py:421 msgid "" "Make scroll wheel send LOWRES_WHEEL HID++ notifications (which trigger " "Solaar rules but are otherwise ignored)." @@ -556,19 +556,19 @@ msgstr "" "Spraw, aby kółko przewijania wysyłało powiadomienia LOWRES_WHEEL HID++ " "(które wyzwalają reguły Solaar, ale w przeciwnym razie są ignorowane)." -#: lib/logitech_receiver/settings_templates.py:424 +#: lib/logitech_receiver/settings_templates.py:428 msgid "Scroll Wheel Direction" msgstr "Kierunek kółka przewijania" -#: lib/logitech_receiver/settings_templates.py:425 +#: lib/logitech_receiver/settings_templates.py:429 msgid "Invert direction for vertical scroll with wheel." msgstr "Odwróć kierunek przewijania w pionie za pomocą kółka." -#: lib/logitech_receiver/settings_templates.py:433 +#: lib/logitech_receiver/settings_templates.py:437 msgid "Scroll Wheel Resolution" msgstr "Rozdzielczość kółka przewijania" -#: lib/logitech_receiver/settings_templates.py:448 +#: lib/logitech_receiver/settings_templates.py:452 msgid "" "Make scroll wheel send HIRES_WHEEL HID++ notifications (which trigger Solaar " "rules but are otherwise ignored)." @@ -576,19 +576,19 @@ msgstr "" "Spraw, aby kółko przewijania wysyłało powiadomienia HIRES_WHEEL HID++ (które " "wyzwalają reguły Solaar, ale w przeciwnym razie są ignorowane)." -#: lib/logitech_receiver/settings_templates.py:457 +#: lib/logitech_receiver/settings_templates.py:461 msgid "Sensitivity (Pointer Speed)" msgstr "Czułość (prędkość wskaźnika)" -#: lib/logitech_receiver/settings_templates.py:458 +#: lib/logitech_receiver/settings_templates.py:462 msgid "Speed multiplier for mouse (256 is normal multiplier)." msgstr "Mnożnik prędkości myszy (256 to normalny mnożnik)." -#: lib/logitech_receiver/settings_templates.py:468 +#: lib/logitech_receiver/settings_templates.py:472 msgid "Thumb Wheel Diversion" msgstr "Przekierowanie kółka obsługiwanego kciukiem" -#: lib/logitech_receiver/settings_templates.py:470 +#: lib/logitech_receiver/settings_templates.py:474 msgid "" "Make thumb wheel send THUMB_WHEEL HID++ notifications (which trigger Solaar " "rules but are otherwise ignored)." @@ -596,19 +596,19 @@ msgstr "" "Spraw, aby kółko obsługiwane kciukiem wysyłało powiadomienia THUMB_WHEEL HID+" "+ (które wyzwalają reguły Solaar, ale w przeciwnym razie są ignorowane)." -#: lib/logitech_receiver/settings_templates.py:479 +#: lib/logitech_receiver/settings_templates.py:483 msgid "Thumb Wheel Direction" msgstr "Kierunek kółka obsługiwanego kciukiem" -#: lib/logitech_receiver/settings_templates.py:480 +#: lib/logitech_receiver/settings_templates.py:484 msgid "Invert thumb wheel scroll direction." msgstr "Odwróć kierunek przewijania kółkiem obsługiwanym kciukiem." -#: lib/logitech_receiver/settings_templates.py:500 +#: lib/logitech_receiver/settings_templates.py:504 msgid "Onboard Profiles" msgstr "Profile wbudowane" -#: lib/logitech_receiver/settings_templates.py:501 +#: lib/logitech_receiver/settings_templates.py:505 msgid "" "Enable an onboard profile, which controls report rate, sensitivity, and " "button actions" @@ -616,29 +616,30 @@ msgstr "" "Włącz wbudowany profil, który kontroluje częstotliwość raportowania, czułość " "i czynności przycisków" -#: lib/logitech_receiver/settings_templates.py:545 -#: lib/logitech_receiver/settings_templates.py:578 +#: lib/logitech_receiver/settings_templates.py:549 +#: lib/logitech_receiver/settings_templates.py:582 msgid "Report Rate" msgstr "Szybkość raportów" -#: lib/logitech_receiver/settings_templates.py:547 -#: lib/logitech_receiver/settings_templates.py:580 +#: lib/logitech_receiver/settings_templates.py:551 +#: lib/logitech_receiver/settings_templates.py:584 msgid "Frequency of device movement reports" msgstr "Częstotliwość raportów o ruchu urządzenia" -#: lib/logitech_receiver/settings_templates.py:547 -#: lib/logitech_receiver/settings_templates.py:580 -#: lib/logitech_receiver/settings_templates.py:1011 -#: lib/logitech_receiver/settings_templates.py:1385 -#: lib/logitech_receiver/settings_templates.py:1416 +#: lib/logitech_receiver/settings_templates.py:551 +#: lib/logitech_receiver/settings_templates.py:584 +#: lib/logitech_receiver/settings_templates.py:1019 +#: lib/logitech_receiver/settings_templates.py:1047 +#: lib/logitech_receiver/settings_templates.py:1421 +#: lib/logitech_receiver/settings_templates.py:1452 msgid "May need Onboard Profiles set to Disable to be effective." msgstr "Aby działało, może być konieczne wyłączenie profili wbudowanych." -#: lib/logitech_receiver/settings_templates.py:608 +#: lib/logitech_receiver/settings_templates.py:612 msgid "Divert crown events" msgstr "Przekieruj zdarzenia korony" -#: lib/logitech_receiver/settings_templates.py:609 +#: lib/logitech_receiver/settings_templates.py:613 msgid "" "Make crown send CROWN HID++ notifications (which trigger Solaar rules but " "are otherwise ignored)." @@ -646,19 +647,19 @@ msgstr "" "Spraw, aby korona wysyłała powiadomienia CROWN HID++ (które wyzwalają reguły " "Solaar, ale w przeciwnym razie są ignorowane)." -#: lib/logitech_receiver/settings_templates.py:617 +#: lib/logitech_receiver/settings_templates.py:621 msgid "Crown smooth scroll" msgstr "Płynne przewijanie koroną" -#: lib/logitech_receiver/settings_templates.py:618 +#: lib/logitech_receiver/settings_templates.py:622 msgid "Set crown smooth scroll" msgstr "Ustaw płynne przewijanie koroną" -#: lib/logitech_receiver/settings_templates.py:626 +#: lib/logitech_receiver/settings_templates.py:630 msgid "Divert G and M Keys" msgstr "Przekieruj klawisze G i M" -#: lib/logitech_receiver/settings_templates.py:627 +#: lib/logitech_receiver/settings_templates.py:631 msgid "" "Make G and M keys send HID++ notifications (which trigger Solaar rules but " "are otherwise ignored)." @@ -666,11 +667,11 @@ msgstr "" "Spraw, aby klawisze G i M wysyłały powiadomienia HID++ (które wyzwalają " "reguły Solaar, ale w przeciwnym razie są ignorowane)." -#: lib/logitech_receiver/settings_templates.py:641 +#: lib/logitech_receiver/settings_templates.py:645 msgid "Scroll Wheel Ratcheted" msgstr "Zapadkowe kółko przewijania" -#: lib/logitech_receiver/settings_templates.py:642 +#: lib/logitech_receiver/settings_templates.py:646 msgid "" "Switch the mouse wheel between speed-controlled ratcheting and always " "freespin." @@ -678,19 +679,19 @@ msgstr "" "Przełącz kółko myszy między zapadką z kontrolowaną prędkością a zawsze " "swobodnym obrotem." -#: lib/logitech_receiver/settings_templates.py:644 +#: lib/logitech_receiver/settings_templates.py:648 msgid "Freespinning" msgstr "Obrót swobodny" -#: lib/logitech_receiver/settings_templates.py:644 +#: lib/logitech_receiver/settings_templates.py:648 msgid "Ratcheted" msgstr "Obrót zapadkowy" -#: lib/logitech_receiver/settings_templates.py:651 +#: lib/logitech_receiver/settings_templates.py:655 msgid "Scroll Wheel Ratchet Speed" msgstr "Prędkość zapadki kółka przewijania" -#: lib/logitech_receiver/settings_templates.py:653 +#: lib/logitech_receiver/settings_templates.py:657 msgid "" "Use the mouse wheel speed to switch between ratcheted and freespinning.\n" "The mouse wheel is always ratcheted at 50." @@ -700,18 +701,26 @@ msgstr "" "Kółko myszy jest zawsze ustawione na 50." #: lib/logitech_receiver/settings_templates.py:707 +msgid "Scroll Wheel Ratchet Torque" +msgstr "Moment obrotowy zapadki kółka przewijania" + +#: lib/logitech_receiver/settings_templates.py:708 +msgid "Change the torque needed to overcome the ratchet." +msgstr "Zmień moment obrotowy potrzebny do przejścia zapadki." + +#: lib/logitech_receiver/settings_templates.py:743 msgid "Key/Button Actions" msgstr "Czynności klawiszy/przycisków" -#: lib/logitech_receiver/settings_templates.py:709 +#: lib/logitech_receiver/settings_templates.py:745 msgid "Change the action for the key or button." msgstr "Zmień czynność klawisza lub przycisku." -#: lib/logitech_receiver/settings_templates.py:711 +#: lib/logitech_receiver/settings_templates.py:747 msgid "Overridden by diversion." msgstr "Omijane przez przekierowanie." -#: lib/logitech_receiver/settings_templates.py:713 +#: lib/logitech_receiver/settings_templates.py:749 msgid "" "Changing important actions (such as for the left mouse button) can result in " "an unusable system." @@ -719,11 +728,11 @@ msgstr "" "Zmiana ważnych czynności (np. lewego przycisku myszy) może spowodować, że " "system będzie nieużywalny." -#: lib/logitech_receiver/settings_templates.py:888 +#: lib/logitech_receiver/settings_templates.py:924 msgid "Key/Button Diversion" msgstr "Przekierowanie klawiszy/przycisków" -#: lib/logitech_receiver/settings_templates.py:889 +#: lib/logitech_receiver/settings_templates.py:925 msgid "" "Make the key or button send HID++ notifications (Diverted) or initiate Mouse " "Gestures or Sliding DPI" @@ -731,37 +740,37 @@ msgstr "" "Spraw, aby klawisz lub przycisk wysyłał powiadomienia HID++ (przekierowany) " "lub inicjował gesty myszy lub przesuwnie DPI" -#: lib/logitech_receiver/settings_templates.py:892 -#: lib/logitech_receiver/settings_templates.py:893 -#: lib/logitech_receiver/settings_templates.py:894 +#: lib/logitech_receiver/settings_templates.py:928 +#: lib/logitech_receiver/settings_templates.py:929 +#: lib/logitech_receiver/settings_templates.py:930 msgid "Diverted" msgstr "Przekierowany" -#: lib/logitech_receiver/settings_templates.py:892 -#: lib/logitech_receiver/settings_templates.py:893 +#: lib/logitech_receiver/settings_templates.py:928 +#: lib/logitech_receiver/settings_templates.py:929 msgid "Mouse Gestures" msgstr "Gesty myszy" -#: lib/logitech_receiver/settings_templates.py:892 -#: lib/logitech_receiver/settings_templates.py:893 -#: lib/logitech_receiver/settings_templates.py:894 +#: lib/logitech_receiver/settings_templates.py:928 +#: lib/logitech_receiver/settings_templates.py:929 +#: lib/logitech_receiver/settings_templates.py:930 msgid "Regular" msgstr "Zwykły" -#: lib/logitech_receiver/settings_templates.py:892 +#: lib/logitech_receiver/settings_templates.py:928 msgid "Sliding DPI" msgstr "Przesuwnie DPI" -#: lib/logitech_receiver/settings_templates.py:982 -#: lib/logitech_receiver/settings_templates.py:1010 +#: lib/logitech_receiver/settings_templates.py:1018 +#: lib/logitech_receiver/settings_templates.py:1046 msgid "Sensitivity (DPI)" msgstr "Czułość (DPI)" -#: lib/logitech_receiver/settings_templates.py:1087 +#: lib/logitech_receiver/settings_templates.py:1123 msgid "Sensitivity Switching" msgstr "Przełączanie czułości" -#: lib/logitech_receiver/settings_templates.py:1089 +#: lib/logitech_receiver/settings_templates.py:1125 msgid "" "Switch the current sensitivity and the remembered sensitivity when the key " "or button is pressed.\n" @@ -771,329 +780,329 @@ msgstr "" "przycisku.\n" "Jeśli nie ma zapamiętanej czułości, po prostu zapamiętaj bieżącą czułość" -#: lib/logitech_receiver/settings_templates.py:1093 +#: lib/logitech_receiver/settings_templates.py:1129 msgid "Off" msgstr "Wyłączone" -#: lib/logitech_receiver/settings_templates.py:1124 +#: lib/logitech_receiver/settings_templates.py:1160 msgid "Disable keys" msgstr "Wyłącz klawisze" -#: lib/logitech_receiver/settings_templates.py:1125 +#: lib/logitech_receiver/settings_templates.py:1161 msgid "Disable specific keyboard keys." msgstr "Wyłącz określone klawisze klawiatury." -#: lib/logitech_receiver/settings_templates.py:1128 +#: lib/logitech_receiver/settings_templates.py:1164 #, python-format msgid "Disables the %s key." msgstr "Wyłącza klawisz %s." -#: lib/logitech_receiver/settings_templates.py:1141 -#: lib/logitech_receiver/settings_templates.py:1198 +#: lib/logitech_receiver/settings_templates.py:1177 +#: lib/logitech_receiver/settings_templates.py:1234 msgid "Set OS" msgstr "Ustaw system operacyjny" -#: lib/logitech_receiver/settings_templates.py:1142 -#: lib/logitech_receiver/settings_templates.py:1199 +#: lib/logitech_receiver/settings_templates.py:1178 +#: lib/logitech_receiver/settings_templates.py:1235 msgid "Change keys to match OS." msgstr "Zmień klawisze, aby pasowały do systemu operacyjnego." -#: lib/logitech_receiver/settings_templates.py:1211 +#: lib/logitech_receiver/settings_templates.py:1247 msgid "Change Host" msgstr "Zmiana hosta" -#: lib/logitech_receiver/settings_templates.py:1212 +#: lib/logitech_receiver/settings_templates.py:1248 msgid "Switch connection to a different host" msgstr "Przełącz połączenie na innego hosta" -#: lib/logitech_receiver/settings_templates.py:1236 +#: lib/logitech_receiver/settings_templates.py:1272 msgid "Performs a left click." msgstr "Wykonuje kliknięcie lewym przyciskiem myszy." -#: lib/logitech_receiver/settings_templates.py:1236 +#: lib/logitech_receiver/settings_templates.py:1272 msgid "Single tap" msgstr "Pojedyncze stuknięcie" -#: lib/logitech_receiver/settings_templates.py:1237 +#: lib/logitech_receiver/settings_templates.py:1273 msgid "Performs a right click." msgstr "Wykonuje kliknięcie prawym przyciskiem myszy." -#: lib/logitech_receiver/settings_templates.py:1237 +#: lib/logitech_receiver/settings_templates.py:1273 msgid "Single tap with two fingers" msgstr "Pojedyncze stuknięcie dwoma palcami" -#: lib/logitech_receiver/settings_templates.py:1238 +#: lib/logitech_receiver/settings_templates.py:1274 msgid "Single tap with three fingers" msgstr "Pojedyncze stuknięcie trzema palcami" -#: lib/logitech_receiver/settings_templates.py:1242 +#: lib/logitech_receiver/settings_templates.py:1278 msgid "Double tap" msgstr "Podwójne stuknięcie" -#: lib/logitech_receiver/settings_templates.py:1242 +#: lib/logitech_receiver/settings_templates.py:1278 msgid "Performs a double click." msgstr "Wykonuje podwójne kliknięcie." -#: lib/logitech_receiver/settings_templates.py:1243 +#: lib/logitech_receiver/settings_templates.py:1279 msgid "Double tap with two fingers" msgstr "Podwójne stuknięcie dwoma palcami" -#: lib/logitech_receiver/settings_templates.py:1244 +#: lib/logitech_receiver/settings_templates.py:1280 msgid "Double tap with three fingers" msgstr "Podwójne stuknięcie trzema palcami" -#: lib/logitech_receiver/settings_templates.py:1247 +#: lib/logitech_receiver/settings_templates.py:1283 msgid "Drags items by dragging the finger after double tapping." msgstr "" "Przeciąga elementy poprzez przeciąganie palcem po dwukrotnym stuknięciu." -#: lib/logitech_receiver/settings_templates.py:1247 +#: lib/logitech_receiver/settings_templates.py:1283 msgid "Tap and drag" msgstr "Stuknięcie i przeciągnięcie" -#: lib/logitech_receiver/settings_templates.py:1249 +#: lib/logitech_receiver/settings_templates.py:1285 msgid "Tap and drag with two fingers" msgstr "Stuknięcie i przeciągnięcie dwoma palcami" -#: lib/logitech_receiver/settings_templates.py:1250 +#: lib/logitech_receiver/settings_templates.py:1286 msgid "Drags items by dragging the fingers after double tapping." msgstr "" "Przeciąga elementy poprzez przeciąganie palcami po dwukrotnym stuknięciu." -#: lib/logitech_receiver/settings_templates.py:1252 +#: lib/logitech_receiver/settings_templates.py:1288 msgid "Tap and drag with three fingers" msgstr "Stuknięcie i przeciągnięcie trzema palcami" -#: lib/logitech_receiver/settings_templates.py:1255 +#: lib/logitech_receiver/settings_templates.py:1291 msgid "Suppress tap and edge gestures" msgstr "Stłumienie gestów stukania i krawędziowych" -#: lib/logitech_receiver/settings_templates.py:1256 +#: lib/logitech_receiver/settings_templates.py:1292 msgid "Disables tap and edge gestures (equivalent to pressing Fn+LeftClick)." msgstr "" "Wyłącza gesty stukania i krawędziowe (odpowiednik naciśnięcia Fn + lewy " "przycisk myszy)." -#: lib/logitech_receiver/settings_templates.py:1258 +#: lib/logitech_receiver/settings_templates.py:1294 msgid "Scroll with one finger" msgstr "Przewijanie jednym palcem" -#: lib/logitech_receiver/settings_templates.py:1258 -#: lib/logitech_receiver/settings_templates.py:1259 -#: lib/logitech_receiver/settings_templates.py:1262 +#: lib/logitech_receiver/settings_templates.py:1294 +#: lib/logitech_receiver/settings_templates.py:1295 +#: lib/logitech_receiver/settings_templates.py:1298 msgid "Scrolls." msgstr "Przewija." -#: lib/logitech_receiver/settings_templates.py:1259 -#: lib/logitech_receiver/settings_templates.py:1262 +#: lib/logitech_receiver/settings_templates.py:1295 +#: lib/logitech_receiver/settings_templates.py:1298 msgid "Scroll with two fingers" msgstr "Przewijanie dwoma palcami" -#: lib/logitech_receiver/settings_templates.py:1260 +#: lib/logitech_receiver/settings_templates.py:1296 msgid "Scroll horizontally with two fingers" msgstr "Przewijanie w poziomie dwoma palcami" -#: lib/logitech_receiver/settings_templates.py:1260 +#: lib/logitech_receiver/settings_templates.py:1296 msgid "Scrolls horizontally." msgstr "Przewija w poziomie." -#: lib/logitech_receiver/settings_templates.py:1261 +#: lib/logitech_receiver/settings_templates.py:1297 msgid "Scroll vertically with two fingers" msgstr "Przewijanie w pionie dwoma palcami" -#: lib/logitech_receiver/settings_templates.py:1261 +#: lib/logitech_receiver/settings_templates.py:1297 msgid "Scrolls vertically." msgstr "Przewija w pionie." -#: lib/logitech_receiver/settings_templates.py:1263 +#: lib/logitech_receiver/settings_templates.py:1299 msgid "Inverts the scrolling direction." msgstr "Odwraca kierunek przewijania." -#: lib/logitech_receiver/settings_templates.py:1263 +#: lib/logitech_receiver/settings_templates.py:1299 msgid "Natural scrolling" msgstr "Przewijanie naturalne" -#: lib/logitech_receiver/settings_templates.py:1264 +#: lib/logitech_receiver/settings_templates.py:1300 msgid "Enables the thumbwheel." msgstr "Włącza kółko obsługiwane kciukiem." -#: lib/logitech_receiver/settings_templates.py:1264 +#: lib/logitech_receiver/settings_templates.py:1300 msgid "Thumbwheel" msgstr "Kółko obsługiwane kciukiem" -#: lib/logitech_receiver/settings_templates.py:1275 -#: lib/logitech_receiver/settings_templates.py:1279 +#: lib/logitech_receiver/settings_templates.py:1311 +#: lib/logitech_receiver/settings_templates.py:1315 msgid "Swipe from the top edge" msgstr "Przesuwanie od górnej krawędzi" -#: lib/logitech_receiver/settings_templates.py:1276 +#: lib/logitech_receiver/settings_templates.py:1312 msgid "Swipe from the left edge" msgstr "Przesuwanie od lewej krawędzi" -#: lib/logitech_receiver/settings_templates.py:1277 +#: lib/logitech_receiver/settings_templates.py:1313 msgid "Swipe from the right edge" msgstr "Przesuwanie od prawej krawędzi" -#: lib/logitech_receiver/settings_templates.py:1278 +#: lib/logitech_receiver/settings_templates.py:1314 msgid "Swipe from the bottom edge" msgstr "Przesuwanie od dolnej krawędzi" -#: lib/logitech_receiver/settings_templates.py:1280 +#: lib/logitech_receiver/settings_templates.py:1316 msgid "Swipe two fingers from the left edge" msgstr "Przesuwanie dwoma palcami od lewej krawędzi" -#: lib/logitech_receiver/settings_templates.py:1281 +#: lib/logitech_receiver/settings_templates.py:1317 msgid "Swipe two fingers from the right edge" msgstr "Przesuwanie dwoma palcami od prawej krawędzi" -#: lib/logitech_receiver/settings_templates.py:1282 +#: lib/logitech_receiver/settings_templates.py:1318 msgid "Swipe two fingers from the bottom edge" msgstr "Przesuwanie dwoma palcami od dolnej krawędzi" -#: lib/logitech_receiver/settings_templates.py:1283 +#: lib/logitech_receiver/settings_templates.py:1319 msgid "Swipe two fingers from the top edge" msgstr "Przesuwanie dwoma palcami od górnej krawędzi" -#: lib/logitech_receiver/settings_templates.py:1284 -#: lib/logitech_receiver/settings_templates.py:1288 +#: lib/logitech_receiver/settings_templates.py:1320 +#: lib/logitech_receiver/settings_templates.py:1324 msgid "Pinch to zoom out; spread to zoom in." msgstr "Ściśnięcie, aby pomniejszyć; rozłożenie, aby powiększyć." -#: lib/logitech_receiver/settings_templates.py:1284 +#: lib/logitech_receiver/settings_templates.py:1320 msgid "Zoom with two fingers." msgstr "Zoom dwoma palcami." -#: lib/logitech_receiver/settings_templates.py:1285 +#: lib/logitech_receiver/settings_templates.py:1321 msgid "Pinch to zoom out." msgstr "Ściśnięcie, aby pomniejszyć." -#: lib/logitech_receiver/settings_templates.py:1286 +#: lib/logitech_receiver/settings_templates.py:1322 msgid "Spread to zoom in." msgstr "Rozłożenie, aby powiększyć." -#: lib/logitech_receiver/settings_templates.py:1287 +#: lib/logitech_receiver/settings_templates.py:1323 msgid "Zoom with three fingers." msgstr "Zoom trzema palcami." -#: lib/logitech_receiver/settings_templates.py:1288 +#: lib/logitech_receiver/settings_templates.py:1324 msgid "Zoom with two fingers" msgstr "Zoom dwoma palcami" -#: lib/logitech_receiver/settings_templates.py:1306 +#: lib/logitech_receiver/settings_templates.py:1342 msgid "Pixel zone" msgstr "Strefa pikseli" -#: lib/logitech_receiver/settings_templates.py:1307 +#: lib/logitech_receiver/settings_templates.py:1343 msgid "Ratio zone" msgstr "Strefa współczynnika" -#: lib/logitech_receiver/settings_templates.py:1308 +#: lib/logitech_receiver/settings_templates.py:1344 msgid "Scale factor" msgstr "Współczynnik skalowania" -#: lib/logitech_receiver/settings_templates.py:1308 +#: lib/logitech_receiver/settings_templates.py:1344 msgid "Sets the cursor speed." msgstr "Ustawia szybkość kursora." -#: lib/logitech_receiver/settings_templates.py:1312 +#: lib/logitech_receiver/settings_templates.py:1348 msgid "Left" msgstr "Lewo" -#: lib/logitech_receiver/settings_templates.py:1312 +#: lib/logitech_receiver/settings_templates.py:1348 msgid "Left-most coordinate." msgstr "Współrzędna najbardziej z lewej." -#: lib/logitech_receiver/settings_templates.py:1313 +#: lib/logitech_receiver/settings_templates.py:1349 msgid "Bottom" msgstr "Dół" -#: lib/logitech_receiver/settings_templates.py:1313 +#: lib/logitech_receiver/settings_templates.py:1349 msgid "Bottom coordinate." msgstr "Współrzędna dolna." -#: lib/logitech_receiver/settings_templates.py:1314 +#: lib/logitech_receiver/settings_templates.py:1350 msgid "Width" msgstr "Szerokość" -#: lib/logitech_receiver/settings_templates.py:1314 +#: lib/logitech_receiver/settings_templates.py:1350 msgid "Width." msgstr "Szerokość." -#: lib/logitech_receiver/settings_templates.py:1315 +#: lib/logitech_receiver/settings_templates.py:1351 msgid "Height" msgstr "Wysokość" -#: lib/logitech_receiver/settings_templates.py:1315 +#: lib/logitech_receiver/settings_templates.py:1351 msgid "Height." msgstr "Wysokość." -#: lib/logitech_receiver/settings_templates.py:1316 +#: lib/logitech_receiver/settings_templates.py:1352 msgid "Cursor speed." msgstr "Prędkość kursora." -#: lib/logitech_receiver/settings_templates.py:1316 +#: lib/logitech_receiver/settings_templates.py:1352 msgid "Scale" msgstr "Skala" -#: lib/logitech_receiver/settings_templates.py:1322 +#: lib/logitech_receiver/settings_templates.py:1358 msgid "Gestures" msgstr "Gesty" -#: lib/logitech_receiver/settings_templates.py:1323 +#: lib/logitech_receiver/settings_templates.py:1359 msgid "Tweak the mouse/touchpad behaviour." msgstr "Dostosuj zachowania myszy/panelu dotykowego." -#: lib/logitech_receiver/settings_templates.py:1339 +#: lib/logitech_receiver/settings_templates.py:1375 msgid "Gestures Diversion" msgstr "Przekierowanie gestów" -#: lib/logitech_receiver/settings_templates.py:1340 +#: lib/logitech_receiver/settings_templates.py:1376 msgid "Divert mouse/touchpad gestures." msgstr "Przekieruj gesty myszy/panelu dotykowego." -#: lib/logitech_receiver/settings_templates.py:1356 +#: lib/logitech_receiver/settings_templates.py:1392 msgid "Gesture params" msgstr "Parametry gestu" -#: lib/logitech_receiver/settings_templates.py:1357 +#: lib/logitech_receiver/settings_templates.py:1393 msgid "Change numerical parameters of a mouse/touchpad." msgstr "Zmień parametry numeryczne myszy/panelu dotykowego." -#: lib/logitech_receiver/settings_templates.py:1381 +#: lib/logitech_receiver/settings_templates.py:1417 msgid "M-Key LEDs" msgstr "Diody LED klawiszy M" -#: lib/logitech_receiver/settings_templates.py:1383 +#: lib/logitech_receiver/settings_templates.py:1419 msgid "Control the M-Key LEDs." msgstr "Kontroluj diody LED klawiszy M." -#: lib/logitech_receiver/settings_templates.py:1387 -#: lib/logitech_receiver/settings_templates.py:1418 +#: lib/logitech_receiver/settings_templates.py:1423 +#: lib/logitech_receiver/settings_templates.py:1454 msgid "May need G Keys diverted to be effective." msgstr "Aby działało, może być konieczne włączenie przekierowania klawiszy G." -#: lib/logitech_receiver/settings_templates.py:1393 +#: lib/logitech_receiver/settings_templates.py:1429 #, python-format msgid "Lights up the %s key." msgstr "Zapala klawisz %s." -#: lib/logitech_receiver/settings_templates.py:1412 +#: lib/logitech_receiver/settings_templates.py:1448 msgid "MR-Key LED" msgstr "Dioda LED klawisza MR" -#: lib/logitech_receiver/settings_templates.py:1414 +#: lib/logitech_receiver/settings_templates.py:1450 msgid "Control the MR-Key LED." msgstr "Kontroluj diody LED klawiszy MR." -#: lib/logitech_receiver/settings_templates.py:1435 +#: lib/logitech_receiver/settings_templates.py:1471 msgid "Persistent Key/Button Mapping" msgstr "Trwałe mapowanie klawiszy/przycisków" -#: lib/logitech_receiver/settings_templates.py:1437 +#: lib/logitech_receiver/settings_templates.py:1473 msgid "Permanently change the mapping for the key or button." msgstr "Trwale zmień mapowania klawisza lub przycisku." -#: lib/logitech_receiver/settings_templates.py:1439 +#: lib/logitech_receiver/settings_templates.py:1475 msgid "" "Changing important keys or buttons (such as for the left mouse button) can " "result in an unusable system." @@ -1101,96 +1110,129 @@ msgstr "" "Zmiana ważnych klawiszy lub przycisków (takich jak lewy przycisk myszy) może " "spowodować, że system stanie się bezużyteczny." -#: lib/logitech_receiver/settings_templates.py:1496 +#: lib/logitech_receiver/settings_templates.py:1532 msgid "Sidetone" msgstr "Efekt lokalny" -#: lib/logitech_receiver/settings_templates.py:1497 +#: lib/logitech_receiver/settings_templates.py:1533 msgid "Set sidetone level." msgstr "Ustaw poziom efektu lokalnego." -#: lib/logitech_receiver/settings_templates.py:1506 +#: lib/logitech_receiver/settings_templates.py:1542 msgid "Equalizer" msgstr "Korektor" -#: lib/logitech_receiver/settings_templates.py:1507 +#: lib/logitech_receiver/settings_templates.py:1543 msgid "Set equalizer levels." msgstr "Ustaw poziomy korektora." -#: lib/logitech_receiver/settings_templates.py:1529 +#: lib/logitech_receiver/settings_templates.py:1565 msgid "Hz" msgstr "Hz" -#: lib/logitech_receiver/settings_templates.py:1535 +#: lib/logitech_receiver/settings_templates.py:1571 msgid "Power Management" msgstr "Zarządzanie energią" -#: lib/logitech_receiver/settings_templates.py:1536 +#: lib/logitech_receiver/settings_templates.py:1572 msgid "Power off in minutes (0 for never)." msgstr "Wyłączenie zasilania w minutach (0 oznacza nigdy)." -#: lib/logitech_receiver/settings_templates.py:1548 +#: lib/logitech_receiver/settings_templates.py:1584 msgid "Brightness Control" msgstr "Sterowanie jasnością" -#: lib/logitech_receiver/settings_templates.py:1549 +#: lib/logitech_receiver/settings_templates.py:1585 msgid "Control overall brightness" msgstr "Steruj ogólną jasnością" -#: lib/logitech_receiver/settings_templates.py:1592 -#: lib/logitech_receiver/settings_templates.py:1645 +#: lib/logitech_receiver/settings_templates.py:1628 +#: lib/logitech_receiver/settings_templates.py:1681 msgid "LED Control" msgstr "Sterowanie diodami LED" -#: lib/logitech_receiver/settings_templates.py:1593 -#: lib/logitech_receiver/settings_templates.py:1646 +#: lib/logitech_receiver/settings_templates.py:1629 +#: lib/logitech_receiver/settings_templates.py:1682 msgid "Switch control of LED zones between device and Solaar" msgstr "Przełącz sterowanie strefami LED pomiędzy urządzeniem a Solaar" -#: lib/logitech_receiver/settings_templates.py:1608 -#: lib/logitech_receiver/settings_templates.py:1656 +#: lib/logitech_receiver/settings_templates.py:1644 +#: lib/logitech_receiver/settings_templates.py:1692 msgid "LED Zone Effects" msgstr "Efekty strefowe diod LED" -#: lib/logitech_receiver/settings_templates.py:1609 -#: lib/logitech_receiver/settings_templates.py:1657 +#: lib/logitech_receiver/settings_templates.py:1645 +#: lib/logitech_receiver/settings_templates.py:1693 msgid "LED Control needs to be set to Solaar to be effective." msgstr "" "Sterowanie diodami LED musi być ustawione na Solaar, aby było skuteczne." -#: lib/logitech_receiver/settings_templates.py:1609 -#: lib/logitech_receiver/settings_templates.py:1657 +#: lib/logitech_receiver/settings_templates.py:1645 +#: lib/logitech_receiver/settings_templates.py:1693 msgid "Set effect for LED Zone" msgstr "Ustaw efekt dla strefy diod LED" -#: lib/logitech_receiver/settings_templates.py:1612 +#: lib/logitech_receiver/settings_templates.py:1647 +msgid "Color" +msgstr "Kolor" + +#: lib/logitech_receiver/settings_templates.py:1648 msgid "Speed" msgstr "Szybkość" -#: lib/logitech_receiver/settings_templates.py:1613 +#: lib/logitech_receiver/settings_templates.py:1649 msgid "Period" msgstr "Okres" -#: lib/logitech_receiver/settings_templates.py:1614 +#: lib/logitech_receiver/settings_templates.py:1650 msgid "Intensity" msgstr "Intensywność" -#: lib/logitech_receiver/settings_templates.py:1615 +#: lib/logitech_receiver/settings_templates.py:1651 msgid "Ramp" msgstr "Narastanie" -#: lib/logitech_receiver/settings_templates.py:1630 +#: lib/logitech_receiver/settings_templates.py:1666 msgid "LEDs" msgstr "Diody LED" -#: lib/logitech_receiver/settings_templates.py:1667 +#: lib/logitech_receiver/settings_templates.py:1703 msgid "Per-key Lighting" msgstr "Podświetlenie poszczególnych klawiszy" -#: lib/logitech_receiver/settings_templates.py:1668 +#: lib/logitech_receiver/settings_templates.py:1704 msgid "Control per-key lighting." msgstr "Steruj podświetleniem poszczególnych klawiszy." +#: lib/logitech_receiver/settings_templates.py:1786 +msgid "Force Sensing Buttons" +msgstr "Przyciski wykrywające siłę" + +#: lib/logitech_receiver/settings_templates.py:1787 +msgid "Change the force required to activate button." +msgstr "Zmień siłę potrzebną do aktywowania przycisku." + +#: lib/logitech_receiver/settings_templates.py:1804 +msgid "Force Sensing Button" +msgstr "Przycisk wykrywający siłę" + +#: lib/logitech_receiver/settings_templates.py:1814 +msgid "Haptic Feeback Level" +msgstr "Poziom haptycznego sprzężenia zwrotnego" + +#: lib/logitech_receiver/settings_templates.py:1815 +msgid "Change power of haptic feedback. (Zero to turn off.)" +msgstr "" +"Zmień moc haptycznego sprzężenia zwrotnego. (Zero powoduje wyłączenie.)" + +#: lib/logitech_receiver/settings_templates.py:1857 +msgid "Play Haptic Waveform" +msgstr "Odtwórz falę haptyczną" + +#: lib/logitech_receiver/settings_templates.py:1858 +msgid "Tell device to play a haptic waveform." +msgstr "Poleć urządzeniu odtworzenie fali haptycznej." + #: lib/solaar/ui/__init__.py:120 msgid "Another Solaar process is already running so just expose its window" msgstr "Inny proces programu Solaar już działa, więc po prostu pokaż jego okno" @@ -1283,15 +1325,15 @@ msgstr "Nie udało się sparować %{device} z %{receiver}." msgid "The receiver returned an error, with no further details." msgstr "Odbiornik zwrócił błąd bez dodatkowych informacji." -#: lib/solaar/ui/config_panel.py:241 +#: lib/solaar/ui/config_panel.py:245 msgid "Complete - ENTER to change" msgstr "Kompletne - ENTER, aby zmienić" -#: lib/solaar/ui/config_panel.py:241 +#: lib/solaar/ui/config_panel.py:245 msgid "Incomplete" msgstr "Niekompletne" -#: lib/solaar/ui/config_panel.py:487 lib/solaar/ui/config_panel.py:539 +#: lib/solaar/ui/config_panel.py:491 lib/solaar/ui/config_panel.py:543 #, python-format msgid "%d value" msgid_plural "%d values" @@ -1299,23 +1341,23 @@ msgstr[0] "%d wartość" msgstr[1] "%d wartości" msgstr[2] "%d wartości" -#: lib/solaar/ui/config_panel.py:621 +#: lib/solaar/ui/config_panel.py:642 msgid "Changes allowed" msgstr "Zmiany dozwolone" -#: lib/solaar/ui/config_panel.py:622 +#: lib/solaar/ui/config_panel.py:643 msgid "No changes allowed" msgstr "Zmiany niedozwolone" -#: lib/solaar/ui/config_panel.py:623 +#: lib/solaar/ui/config_panel.py:644 msgid "Ignore this setting" msgstr "Ignoruj to ustawienie" -#: lib/solaar/ui/config_panel.py:667 +#: lib/solaar/ui/config_panel.py:690 msgid "Working" msgstr "Pracuję" -#: lib/solaar/ui/config_panel.py:670 +#: lib/solaar/ui/config_panel.py:693 msgid "Read/write operation failed." msgstr "Operacja odczytu/zapisu nie powiodła się." @@ -1504,7 +1546,7 @@ msgstr "Naciśnięcie klawisza" msgid "Mouse scroll" msgstr "Przewijanie myszą" -#: lib/solaar/ui/diversion_rules.py:409 lib/solaar/ui/rule_actions.py:254 +#: lib/solaar/ui/diversion_rules.py:409 lib/solaar/ui/rule_actions.py:256 msgid "Mouse click" msgstr "Kliknięcie myszą" @@ -1512,7 +1554,7 @@ msgstr "Kliknięcie myszą" msgid "Set" msgstr "Ustaw" -#: lib/solaar/ui/diversion_rules.py:411 lib/solaar/ui/rule_actions.py:326 +#: lib/solaar/ui/diversion_rules.py:411 lib/solaar/ui/rule_actions.py:328 msgid "Execute" msgstr "Wykonaj" @@ -1525,7 +1567,7 @@ msgid "Insert new rule" msgstr "Wstaw nową regułę" #: lib/solaar/ui/diversion_rules.py:461 lib/solaar/ui/rule_actions.py:82 -#: lib/solaar/ui/rule_actions.py:285 lib/solaar/ui/rule_conditions.py:556 +#: lib/solaar/ui/rule_actions.py:287 lib/solaar/ui/rule_conditions.py:556 msgid "Delete" msgstr "Usuń" @@ -1811,15 +1853,15 @@ msgstr "" msgid "Button" msgstr "Przycisk" -#: lib/solaar/ui/rule_actions.py:217 -msgid "Count and Action" -msgstr "Liczba i czynność" +#: lib/solaar/ui/rule_actions.py:218 +msgid "Action (and Count, if click)" +msgstr "Czynność (i liczba, jeśli kliknięcie)" -#: lib/solaar/ui/rule_actions.py:267 +#: lib/solaar/ui/rule_actions.py:269 msgid "Execute a command with arguments." msgstr "Wykonaj polecenie z argumentami." -#: lib/solaar/ui/rule_actions.py:271 +#: lib/solaar/ui/rule_actions.py:273 msgid "Add argument" msgstr "Dodaj argument" diff --git a/po/ru.po b/po/ru.po index 54887655..5f027121 100644 --- a/po/ru.po +++ b/po/ru.po @@ -10,7 +10,7 @@ msgid "" msgstr "Project-Id-Version: solaar 1.1.13\n" "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2025-10-15 00:20+0300\n" + "POT-Creation-Date: 2025-12-01 21:43+0300\n" "PO-Revision-Date: 2024-04-21 01:38+0300\n" "Last-Translator: MistificaT0r <0mistificator0@gmail.com>\n" "Language-Team: ru\n" @@ -53,100 +53,100 @@ msgstr "Батарея: %(level)s (%(status)s)" msgid "Battery: %(percent)d%% (%(status)s)" msgstr "Батарея: %(percent)d%% (%(status)s)" -#: lib/logitech_receiver/hidpp20.py:1023 -#: lib/logitech_receiver/settings_templates.py:295 +#: lib/logitech_receiver/hidpp20.py:1048 +#: lib/logitech_receiver/settings_templates.py:299 msgid "Disabled" msgstr "Отключено" -#: lib/logitech_receiver/hidpp20.py:1024 +#: lib/logitech_receiver/hidpp20.py:1049 msgid "Static" msgstr "Статичный" -#: lib/logitech_receiver/hidpp20.py:1025 +#: lib/logitech_receiver/hidpp20.py:1050 msgid "Pulse" msgstr "Пульс" -#: lib/logitech_receiver/hidpp20.py:1026 +#: lib/logitech_receiver/hidpp20.py:1051 msgid "Cycle" msgstr "Цикл" -#: lib/logitech_receiver/hidpp20.py:1027 +#: lib/logitech_receiver/hidpp20.py:1052 msgid "Boot" msgstr "Запуск" -#: lib/logitech_receiver/hidpp20.py:1028 +#: lib/logitech_receiver/hidpp20.py:1053 msgid "Demo" msgstr "Демонстрация" -#: lib/logitech_receiver/hidpp20.py:1030 +#: lib/logitech_receiver/hidpp20.py:1055 msgid "Breathe" msgstr "Дышать" -#: lib/logitech_receiver/hidpp20.py:1033 +#: lib/logitech_receiver/hidpp20.py:1058 msgid "Ripple" msgstr "Пульсация" -#: lib/logitech_receiver/hidpp20.py:1034 +#: lib/logitech_receiver/hidpp20.py:1059 msgid "Decomposition" msgstr "Разложение" -#: lib/logitech_receiver/hidpp20.py:1035 +#: lib/logitech_receiver/hidpp20.py:1060 msgid "Signature1" msgstr "Подпись1" -#: lib/logitech_receiver/hidpp20.py:1036 +#: lib/logitech_receiver/hidpp20.py:1061 msgid "Signature2" msgstr "Подпись2" -#: lib/logitech_receiver/hidpp20.py:1037 +#: lib/logitech_receiver/hidpp20.py:1062 msgid "CycleS" msgstr "Циклы" -#: lib/logitech_receiver/hidpp20.py:1101 +#: lib/logitech_receiver/hidpp20.py:1126 msgid "Unknown Location" msgstr "Неизвестное местоположение" -#: lib/logitech_receiver/hidpp20.py:1102 +#: lib/logitech_receiver/hidpp20.py:1127 msgid "Primary" msgstr "Первичный" -#: lib/logitech_receiver/hidpp20.py:1103 +#: lib/logitech_receiver/hidpp20.py:1128 msgid "Logo" msgstr "Логотип" -#: lib/logitech_receiver/hidpp20.py:1104 +#: lib/logitech_receiver/hidpp20.py:1129 msgid "Left Side" msgstr "Левая сторона" -#: lib/logitech_receiver/hidpp20.py:1105 +#: lib/logitech_receiver/hidpp20.py:1130 msgid "Right Side" msgstr "Правая сторона" -#: lib/logitech_receiver/hidpp20.py:1106 +#: lib/logitech_receiver/hidpp20.py:1131 msgid "Combined" msgstr "Комбинированный" -#: lib/logitech_receiver/hidpp20.py:1107 +#: lib/logitech_receiver/hidpp20.py:1132 msgid "Primary 1" msgstr "Первичный 1" -#: lib/logitech_receiver/hidpp20.py:1108 +#: lib/logitech_receiver/hidpp20.py:1133 msgid "Primary 2" msgstr "Первичный 2" -#: lib/logitech_receiver/hidpp20.py:1109 +#: lib/logitech_receiver/hidpp20.py:1134 msgid "Primary 3" msgstr "Первичный 3" -#: lib/logitech_receiver/hidpp20.py:1110 +#: lib/logitech_receiver/hidpp20.py:1135 msgid "Primary 4" msgstr "Первичный 4" -#: lib/logitech_receiver/hidpp20.py:1111 +#: lib/logitech_receiver/hidpp20.py:1136 msgid "Primary 5" msgstr "Первичный 5" -#: lib/logitech_receiver/hidpp20.py:1112 +#: lib/logitech_receiver/hidpp20.py:1137 msgid "Primary 6" msgstr "Первичный 6" @@ -182,7 +182,7 @@ msgstr "разряжается" msgid "recharging" msgstr "перезаряжается" -#: lib/logitech_receiver/i18n.py:37 +#: lib/logitech_receiver/i18n.py:37 lib/solaar/ui/window.py:700 msgid "charging" msgstr "заряжается" @@ -242,7 +242,7 @@ msgstr "слишком много устройств" msgid "sequence timeout" msgstr "тайм-аут последовательности" -#: lib/logitech_receiver/i18n.py:54 +#: lib/logitech_receiver/i18n.py:54 lib/solaar/ui/window.py:555 msgid "Firmware" msgstr "Прошивка" @@ -388,53 +388,53 @@ msgstr[0] "%(count)s сопряжённое устройство." msgstr[1] "%(count)s сопряжённых устройства." msgstr[2] "%(count)s сопряжённых устройств." -#: lib/logitech_receiver/settings.py:598 +#: lib/logitech_receiver/settings.py:602 msgid "register" msgstr "зарегистрировано" -#: lib/logitech_receiver/settings.py:612 lib/logitech_receiver/settings.py:650 +#: lib/logitech_receiver/settings.py:616 lib/logitech_receiver/settings.py:654 msgid "feature" msgstr "особенность" -#: lib/logitech_receiver/settings_templates.py:134 +#: lib/logitech_receiver/settings_templates.py:138 msgid "Swap Fx function" msgstr "Сменить поведение Fx" -#: lib/logitech_receiver/settings_templates.py:137 +#: lib/logitech_receiver/settings_templates.py:141 msgid "When set, the F1..F12 keys will activate their special function,\n" "and you must hold the FN key to activate their standard function." msgstr "Когда включено, кнопки F1..F12 работают по дополнительным функциям,\n" "а выбор основных производится с зажатой кнопкой «FN»." -#: lib/logitech_receiver/settings_templates.py:142 +#: lib/logitech_receiver/settings_templates.py:146 msgid "When unset, the F1..F12 keys will activate their standard function,\n" "and you must hold the FN key to activate their special function." msgstr "Когда выключено, кнопки F1..F12 работают по основным функциям,\n" "а выбор дополнительных производится с зажатой кнопкой «FN»." -#: lib/logitech_receiver/settings_templates.py:150 +#: lib/logitech_receiver/settings_templates.py:154 msgid "Hand Detection" msgstr "Обнаружение рук" -#: lib/logitech_receiver/settings_templates.py:151 +#: lib/logitech_receiver/settings_templates.py:155 msgid "Turn on illumination when the hands hover over the keyboard." msgstr "Включать подсветку, когда руки над клавиатурой." -#: lib/logitech_receiver/settings_templates.py:158 +#: lib/logitech_receiver/settings_templates.py:162 msgid "Scroll Wheel Smooth Scrolling" msgstr "Плавная прокрутка колесом мыши" -#: lib/logitech_receiver/settings_templates.py:159 -#: lib/logitech_receiver/settings_templates.py:406 -#: lib/logitech_receiver/settings_templates.py:435 +#: lib/logitech_receiver/settings_templates.py:163 +#: lib/logitech_receiver/settings_templates.py:410 +#: lib/logitech_receiver/settings_templates.py:439 msgid "High-sensitivity mode for vertical scroll with the wheel." msgstr "Режим высокой чувствительности для вертикальной прокрутки колесом." -#: lib/logitech_receiver/settings_templates.py:166 +#: lib/logitech_receiver/settings_templates.py:170 msgid "Side Scrolling" msgstr "Горизонтальная прокрутка" -#: lib/logitech_receiver/settings_templates.py:168 +#: lib/logitech_receiver/settings_templates.py:172 msgid "When disabled, pushing the wheel sideways sends custom button " "events\n" "instead of the standard side-scrolling events." @@ -442,232 +442,233 @@ msgstr "Когда отключено, нажатие на колесо сбо "вместо стандартных событий горизонтальной прокрутки\n" "будет отправлять пользовательские события нажатия." -#: lib/logitech_receiver/settings_templates.py:178 +#: lib/logitech_receiver/settings_templates.py:182 msgid "Sensitivity (DPI - older mice)" msgstr "Чувствительность (тчк/дюйм — старые мыши)" -#: lib/logitech_receiver/settings_templates.py:179 -#: lib/logitech_receiver/settings_templates.py:983 -#: lib/logitech_receiver/settings_templates.py:1011 +#: lib/logitech_receiver/settings_templates.py:183 +#: lib/logitech_receiver/settings_templates.py:1019 +#: lib/logitech_receiver/settings_templates.py:1047 msgid "Mouse movement sensitivity" msgstr "Чувствительность перемещения мыши" -#: lib/logitech_receiver/settings_templates.py:252 +#: lib/logitech_receiver/settings_templates.py:256 msgid "Backlight Timed" msgstr "Подсветка по времени" -#: lib/logitech_receiver/settings_templates.py:253 -#: lib/logitech_receiver/settings_templates.py:393 +#: lib/logitech_receiver/settings_templates.py:257 +#: lib/logitech_receiver/settings_templates.py:397 msgid "Set illumination time for keyboard." msgstr "Настройка времени подсветки клавиатуры." -#: lib/logitech_receiver/settings_templates.py:264 +#: lib/logitech_receiver/settings_templates.py:268 msgid "Backlight" msgstr "Подсветка" -#: lib/logitech_receiver/settings_templates.py:265 +#: lib/logitech_receiver/settings_templates.py:269 msgid "Illumination level on keyboard. Changes made are only applied in " "Manual mode." msgstr "Уровень подсветки клавиатуры. Внесенные изменения применяются только " "в Ручном режиме." -#: lib/logitech_receiver/settings_templates.py:297 +#: lib/logitech_receiver/settings_templates.py:301 msgid "Automatic" msgstr "Автоматический" -#: lib/logitech_receiver/settings_templates.py:299 +#: lib/logitech_receiver/settings_templates.py:303 msgid "Manual" msgstr "Ручной" -#: lib/logitech_receiver/settings_templates.py:301 +#: lib/logitech_receiver/settings_templates.py:305 msgid "Enabled" msgstr "Включенный" -#: lib/logitech_receiver/settings_templates.py:307 +#: lib/logitech_receiver/settings_templates.py:311 msgid "Backlight Level" msgstr "Уровень подсветки" -#: lib/logitech_receiver/settings_templates.py:308 +#: lib/logitech_receiver/settings_templates.py:312 msgid "Illumination level on keyboard when in Manual mode." msgstr "Уровень освещенности клавиатуры в ручном режиме." -#: lib/logitech_receiver/settings_templates.py:365 +#: lib/logitech_receiver/settings_templates.py:369 msgid "Backlight Delay Hands Out" msgstr "Задержка подсветки" -#: lib/logitech_receiver/settings_templates.py:366 +#: lib/logitech_receiver/settings_templates.py:370 msgid "Delay in seconds until backlight fades out with hands away from " "keyboard." msgstr "Задержка в секундах, пока подсветка не погаснет, если руки не будут " "лежать на клавиатуре." -#: lib/logitech_receiver/settings_templates.py:374 +#: lib/logitech_receiver/settings_templates.py:378 msgid "Backlight Delay Hands In" msgstr "Задержка подсветки стрелок в" -#: lib/logitech_receiver/settings_templates.py:375 +#: lib/logitech_receiver/settings_templates.py:379 msgid "Delay in seconds until backlight fades out with hands near keyboard." msgstr "Задержка в секундах, пока подсветка не погаснет, если руки находятся " "рядом с клавиатурой." -#: lib/logitech_receiver/settings_templates.py:383 +#: lib/logitech_receiver/settings_templates.py:387 msgid "Backlight Delay Powered" msgstr "Включение подсветки с задержкой" -#: lib/logitech_receiver/settings_templates.py:384 +#: lib/logitech_receiver/settings_templates.py:388 msgid "Delay in seconds until backlight fades out with external power." msgstr "Задержка в секундах до тех пор, пока подсветка не погаснет при " "включении внешнего питания." -#: lib/logitech_receiver/settings_templates.py:392 +#: lib/logitech_receiver/settings_templates.py:396 msgid "Backlight (Seconds)" msgstr "Подсветка (секунды)" -#: lib/logitech_receiver/settings_templates.py:404 +#: lib/logitech_receiver/settings_templates.py:408 msgid "Scroll Wheel High Resolution" msgstr "Высокое разрешение колеса прокрутки" -#: lib/logitech_receiver/settings_templates.py:408 -#: lib/logitech_receiver/settings_templates.py:437 +#: lib/logitech_receiver/settings_templates.py:412 +#: lib/logitech_receiver/settings_templates.py:441 msgid "Set to ignore if scrolling is abnormally fast or slow" msgstr "Настройка игнорирования слишком быстрой или медленной прокрутки" -#: lib/logitech_receiver/settings_templates.py:415 -#: lib/logitech_receiver/settings_templates.py:446 +#: lib/logitech_receiver/settings_templates.py:419 +#: lib/logitech_receiver/settings_templates.py:450 msgid "Scroll Wheel Diversion" msgstr "Поведение колеса прокрутки" -#: lib/logitech_receiver/settings_templates.py:417 +#: lib/logitech_receiver/settings_templates.py:421 msgid "Make scroll wheel send LOWRES_WHEEL HID++ notifications (which " "trigger Solaar rules but are otherwise ignored)." msgstr "Заставить колесо прокрутки отправлять уведомления LOWRES_WHEEL HID++ " "(которые запускают правила Solaar, но в остальном игнорируются)." -#: lib/logitech_receiver/settings_templates.py:424 +#: lib/logitech_receiver/settings_templates.py:428 msgid "Scroll Wheel Direction" msgstr "Направление прокрутки" -#: lib/logitech_receiver/settings_templates.py:425 +#: lib/logitech_receiver/settings_templates.py:429 msgid "Invert direction for vertical scroll with wheel." msgstr "Обратная прокрутка колесом." -#: lib/logitech_receiver/settings_templates.py:433 +#: lib/logitech_receiver/settings_templates.py:437 msgid "Scroll Wheel Resolution" msgstr "Разрешение прокрутки колесом" -#: lib/logitech_receiver/settings_templates.py:448 +#: lib/logitech_receiver/settings_templates.py:452 msgid "Make scroll wheel send HIRES_WHEEL HID++ notifications (which " "trigger Solaar rules but are otherwise ignored)." msgstr "Заставить колесо прокрутки отправлять уведомления HIRES_WHEEL HID++ " "(которые запускают правила Solaar, но в остальном игнорируются)." -#: lib/logitech_receiver/settings_templates.py:457 +#: lib/logitech_receiver/settings_templates.py:461 msgid "Sensitivity (Pointer Speed)" msgstr "Чувствительность (скорость указателя)" -#: lib/logitech_receiver/settings_templates.py:458 +#: lib/logitech_receiver/settings_templates.py:462 msgid "Speed multiplier for mouse (256 is normal multiplier)." msgstr "Множитель скорости мыши (обычно - 256)." -#: lib/logitech_receiver/settings_templates.py:468 +#: lib/logitech_receiver/settings_templates.py:472 msgid "Thumb Wheel Diversion" msgstr "Поведение бокового колеса" -#: lib/logitech_receiver/settings_templates.py:470 +#: lib/logitech_receiver/settings_templates.py:474 msgid "Make thumb wheel send THUMB_WHEEL HID++ notifications (which trigger " "Solaar rules but are otherwise ignored)." msgstr "Заставить колесо большого пальца отправлять уведомления THUMB_WHEEL " "HID++ (которые запускают Правила Solaar, но в остальном " "игнорируются)." -#: lib/logitech_receiver/settings_templates.py:479 +#: lib/logitech_receiver/settings_templates.py:483 msgid "Thumb Wheel Direction" msgstr "Направление вращения бокового колеса" -#: lib/logitech_receiver/settings_templates.py:480 +#: lib/logitech_receiver/settings_templates.py:484 msgid "Invert thumb wheel scroll direction." msgstr "Изменяет направление вращения бокового колеса." -#: lib/logitech_receiver/settings_templates.py:500 +#: lib/logitech_receiver/settings_templates.py:504 msgid "Onboard Profiles" msgstr "Встроенные профили" -#: lib/logitech_receiver/settings_templates.py:501 +#: lib/logitech_receiver/settings_templates.py:505 msgid "Enable an onboard profile, which controls report rate, sensitivity, " "and button actions" msgstr "Включите встроенный профиль, который контролирует частоту отчетов, " "чувствительность, и действия кнопок" -#: lib/logitech_receiver/settings_templates.py:545 -#: lib/logitech_receiver/settings_templates.py:578 +#: lib/logitech_receiver/settings_templates.py:549 +#: lib/logitech_receiver/settings_templates.py:582 msgid "Report Rate" msgstr "Частота отчетов" -#: lib/logitech_receiver/settings_templates.py:547 -#: lib/logitech_receiver/settings_templates.py:580 +#: lib/logitech_receiver/settings_templates.py:551 +#: lib/logitech_receiver/settings_templates.py:584 msgid "Frequency of device movement reports" msgstr "Частота сообщений о перемещении устройства" -#: lib/logitech_receiver/settings_templates.py:547 -#: lib/logitech_receiver/settings_templates.py:580 -#: lib/logitech_receiver/settings_templates.py:1011 -#: lib/logitech_receiver/settings_templates.py:1385 -#: lib/logitech_receiver/settings_templates.py:1416 +#: lib/logitech_receiver/settings_templates.py:551 +#: lib/logitech_receiver/settings_templates.py:584 +#: lib/logitech_receiver/settings_templates.py:1019 +#: lib/logitech_receiver/settings_templates.py:1047 +#: lib/logitech_receiver/settings_templates.py:1421 +#: lib/logitech_receiver/settings_templates.py:1452 msgid "May need Onboard Profiles set to Disable to be effective." msgstr "Для работы может потребоваться отключить параметр «Встроенные " "профили»." -#: lib/logitech_receiver/settings_templates.py:608 +#: lib/logitech_receiver/settings_templates.py:612 msgid "Divert crown events" msgstr "Поведение верньера" -#: lib/logitech_receiver/settings_templates.py:609 +#: lib/logitech_receiver/settings_templates.py:613 msgid "Make crown send CROWN HID++ notifications (which trigger Solaar " "rules but are otherwise ignored)." msgstr "Включает отправку верньером оповещения CROWN HID++ (применимо только " "к правилам Solaar, остальными игнорируется)." -#: lib/logitech_receiver/settings_templates.py:617 +#: lib/logitech_receiver/settings_templates.py:621 msgid "Crown smooth scroll" msgstr "Плавная прокрутка верньера" -#: lib/logitech_receiver/settings_templates.py:618 +#: lib/logitech_receiver/settings_templates.py:622 msgid "Set crown smooth scroll" msgstr "Настройка плавной прокрутки верньера" -#: lib/logitech_receiver/settings_templates.py:626 +#: lib/logitech_receiver/settings_templates.py:630 msgid "Divert G and M Keys" msgstr "Перенаправление клавиш G и M" -#: lib/logitech_receiver/settings_templates.py:627 +#: lib/logitech_receiver/settings_templates.py:631 msgid "Make G and M keys send HID++ notifications (which trigger Solaar " "rules but are otherwise ignored)." msgstr "Заставить клавиши G и M отправлять уведомления HID++ (которые " "запускают Solaar правила, но в остальном игнорируются)." -#: lib/logitech_receiver/settings_templates.py:641 +#: lib/logitech_receiver/settings_templates.py:645 msgid "Scroll Wheel Ratcheted" msgstr "Колесо прокрутки с храповым механизмом" -#: lib/logitech_receiver/settings_templates.py:642 +#: lib/logitech_receiver/settings_templates.py:646 msgid "Switch the mouse wheel between speed-controlled ratcheting and " "always freespin." msgstr "Переключение колеса мыши между вращением с храповым механизмом и " "свободным вращением." -#: lib/logitech_receiver/settings_templates.py:644 +#: lib/logitech_receiver/settings_templates.py:648 msgid "Freespinning" msgstr "Свободное вращение" -#: lib/logitech_receiver/settings_templates.py:644 +#: lib/logitech_receiver/settings_templates.py:648 msgid "Ratcheted" msgstr "Вращение с храповым механизмом" -#: lib/logitech_receiver/settings_templates.py:651 +#: lib/logitech_receiver/settings_templates.py:655 msgid "Scroll Wheel Ratchet Speed" msgstr "Скорость вращения колеса прокрутки" -#: lib/logitech_receiver/settings_templates.py:653 +#: lib/logitech_receiver/settings_templates.py:657 msgid "Use the mouse wheel speed to switch between ratcheted and " "freespinning.\n" "The mouse wheel is always ratcheted at 50." @@ -676,65 +677,73 @@ msgstr "Используйте скорость вращения колесик "Колесо мыши всегда вращается с храповым механизмом на 50 градусов." #: lib/logitech_receiver/settings_templates.py:707 +msgid "Scroll Wheel Ratchet Torque" +msgstr "Крутящий момент храпового механизма прокручивающего колеса" + +#: lib/logitech_receiver/settings_templates.py:708 +msgid "Change the torque needed to overcome the ratchet." +msgstr "Измените крутящий момент, необходимый для преодоления храпового механизма." + +#: lib/logitech_receiver/settings_templates.py:743 msgid "Key/Button Actions" msgstr "Действия с клавишами/кнопками" -#: lib/logitech_receiver/settings_templates.py:709 +#: lib/logitech_receiver/settings_templates.py:745 msgid "Change the action for the key or button." msgstr "Изменить действие кнопки или клавиши." -#: lib/logitech_receiver/settings_templates.py:711 +#: lib/logitech_receiver/settings_templates.py:747 msgid "Overridden by diversion." msgstr "Отменено перенаправлением." -#: lib/logitech_receiver/settings_templates.py:713 +#: lib/logitech_receiver/settings_templates.py:749 msgid "Changing important actions (such as for the left mouse button) can " "result in an unusable system." msgstr "(изменение важных действий — например, левой кнопки мыши - может " "вывести систему из строя)." -#: lib/logitech_receiver/settings_templates.py:888 +#: lib/logitech_receiver/settings_templates.py:924 msgid "Key/Button Diversion" msgstr "Поведение клавиш/кнопок" -#: lib/logitech_receiver/settings_templates.py:889 +#: lib/logitech_receiver/settings_templates.py:925 msgid "Make the key or button send HID++ notifications (Diverted) or " "initiate Mouse Gestures or Sliding DPI" msgstr "Заставьте клавишу или кнопку отправлять уведомления HID++ " "(перенаправленные) или инициировать жесты мыши или скользящее " "значение DPI" -#: lib/logitech_receiver/settings_templates.py:892 -#: lib/logitech_receiver/settings_templates.py:893 -#: lib/logitech_receiver/settings_templates.py:894 +#: lib/logitech_receiver/settings_templates.py:928 +#: lib/logitech_receiver/settings_templates.py:929 +#: lib/logitech_receiver/settings_templates.py:930 msgid "Diverted" msgstr "Перенаправлено" -#: lib/logitech_receiver/settings_templates.py:892 -#: lib/logitech_receiver/settings_templates.py:893 +#: lib/logitech_receiver/settings_templates.py:928 +#: lib/logitech_receiver/settings_templates.py:929 msgid "Mouse Gestures" msgstr "Жесты мышью" -#: lib/logitech_receiver/settings_templates.py:892 -#: lib/logitech_receiver/settings_templates.py:893 -#: lib/logitech_receiver/settings_templates.py:894 +#: lib/logitech_receiver/settings_templates.py:928 +#: lib/logitech_receiver/settings_templates.py:929 +#: lib/logitech_receiver/settings_templates.py:930 msgid "Regular" msgstr "Обычное" -#: lib/logitech_receiver/settings_templates.py:892 +#: lib/logitech_receiver/settings_templates.py:928 msgid "Sliding DPI" msgstr "Скользящий тчк/дюйм" -#: lib/logitech_receiver/settings_templates.py:982 -#: lib/logitech_receiver/settings_templates.py:1010 +#: lib/logitech_receiver/settings_templates.py:1018 +#: lib/logitech_receiver/settings_templates.py:1046 msgid "Sensitivity (DPI)" msgstr "Чувствительность (тчк/дюйм)" -#: lib/logitech_receiver/settings_templates.py:1087 +#: lib/logitech_receiver/settings_templates.py:1123 msgid "Sensitivity Switching" msgstr "Переключение чувствительности" -#: lib/logitech_receiver/settings_templates.py:1089 +#: lib/logitech_receiver/settings_templates.py:1125 msgid "Switch the current sensitivity and the remembered sensitivity when " "the key or button is pressed.\n" "If there is no remembered sensitivity, just remember the current " @@ -744,421 +753,453 @@ msgstr "Переключение текущей чувствительност "Если сохранённой чувствительности нет, сохраняется текущая " "чувствительность" -#: lib/logitech_receiver/settings_templates.py:1093 +#: lib/logitech_receiver/settings_templates.py:1129 msgid "Off" msgstr "Откл" -#: lib/logitech_receiver/settings_templates.py:1124 +#: lib/logitech_receiver/settings_templates.py:1160 msgid "Disable keys" msgstr "Отключить клавиши" -#: lib/logitech_receiver/settings_templates.py:1125 +#: lib/logitech_receiver/settings_templates.py:1161 msgid "Disable specific keyboard keys." msgstr "Отключение определённых клавиш клавиатуры." -#: lib/logitech_receiver/settings_templates.py:1128 +#: lib/logitech_receiver/settings_templates.py:1164 #, python-format msgid "Disables the %s key." msgstr "Отключение клавиши %s." -#: lib/logitech_receiver/settings_templates.py:1141 -#: lib/logitech_receiver/settings_templates.py:1198 +#: lib/logitech_receiver/settings_templates.py:1177 +#: lib/logitech_receiver/settings_templates.py:1234 msgid "Set OS" msgstr "Операционная система" -#: lib/logitech_receiver/settings_templates.py:1142 -#: lib/logitech_receiver/settings_templates.py:1199 +#: lib/logitech_receiver/settings_templates.py:1178 +#: lib/logitech_receiver/settings_templates.py:1235 msgid "Change keys to match OS." msgstr "Изменяет назначение клавиш соответственно ОС." -#: lib/logitech_receiver/settings_templates.py:1211 +#: lib/logitech_receiver/settings_templates.py:1247 msgid "Change Host" msgstr "Подключено к" -#: lib/logitech_receiver/settings_templates.py:1212 +#: lib/logitech_receiver/settings_templates.py:1248 msgid "Switch connection to a different host" msgstr "Переключает соединение на выбранный хост." -#: lib/logitech_receiver/settings_templates.py:1236 +#: lib/logitech_receiver/settings_templates.py:1272 msgid "Performs a left click." msgstr "Осуществляет щелчок левой кнопкой." -#: lib/logitech_receiver/settings_templates.py:1236 +#: lib/logitech_receiver/settings_templates.py:1272 msgid "Single tap" msgstr "Одиночное касание" -#: lib/logitech_receiver/settings_templates.py:1237 +#: lib/logitech_receiver/settings_templates.py:1273 msgid "Performs a right click." msgstr "Осуществляет щелчок правой кнопкой." -#: lib/logitech_receiver/settings_templates.py:1237 +#: lib/logitech_receiver/settings_templates.py:1273 msgid "Single tap with two fingers" msgstr "Одиночное касание двумя пальцами" -#: lib/logitech_receiver/settings_templates.py:1238 +#: lib/logitech_receiver/settings_templates.py:1274 msgid "Single tap with three fingers" msgstr "Одиночное касание тремя пальцами" -#: lib/logitech_receiver/settings_templates.py:1242 +#: lib/logitech_receiver/settings_templates.py:1278 msgid "Double tap" msgstr "Двойное касание" -#: lib/logitech_receiver/settings_templates.py:1242 +#: lib/logitech_receiver/settings_templates.py:1278 msgid "Performs a double click." msgstr "Осуществление двойного щелчка." -#: lib/logitech_receiver/settings_templates.py:1243 +#: lib/logitech_receiver/settings_templates.py:1279 msgid "Double tap with two fingers" msgstr "Двойное касание двумя пальцами" -#: lib/logitech_receiver/settings_templates.py:1244 +#: lib/logitech_receiver/settings_templates.py:1280 msgid "Double tap with three fingers" msgstr "Двойное касание тремя пальцами" -#: lib/logitech_receiver/settings_templates.py:1247 +#: lib/logitech_receiver/settings_templates.py:1283 msgid "Drags items by dragging the finger after double tapping." msgstr "Перетаскивать объекты перемещением пальца после двойного касания." -#: lib/logitech_receiver/settings_templates.py:1247 +#: lib/logitech_receiver/settings_templates.py:1283 msgid "Tap and drag" msgstr "Касание и перетаскивание" -#: lib/logitech_receiver/settings_templates.py:1249 +#: lib/logitech_receiver/settings_templates.py:1285 msgid "Tap and drag with two fingers" msgstr "Касание и перетаскивание двумя пальцами" -#: lib/logitech_receiver/settings_templates.py:1250 +#: lib/logitech_receiver/settings_templates.py:1286 msgid "Drags items by dragging the fingers after double tapping." msgstr "Перетаскивать объекты перемещением пальцев после двойного касания." -#: lib/logitech_receiver/settings_templates.py:1252 +#: lib/logitech_receiver/settings_templates.py:1288 msgid "Tap and drag with three fingers" msgstr "Касание и перетаскивание тремя пальцами" -#: lib/logitech_receiver/settings_templates.py:1255 +#: lib/logitech_receiver/settings_templates.py:1291 msgid "Suppress tap and edge gestures" msgstr "Подавление касаний и жестов по краям" -#: lib/logitech_receiver/settings_templates.py:1256 +#: lib/logitech_receiver/settings_templates.py:1292 msgid "Disables tap and edge gestures (equivalent to pressing Fn+LeftClick)." msgstr "Отключает касания и жесты по краям (то же что FN+ЩелчокЛевойКнопкой)." -#: lib/logitech_receiver/settings_templates.py:1258 +#: lib/logitech_receiver/settings_templates.py:1294 msgid "Scroll with one finger" msgstr "Вертикальная прокрутка одним пальцем" -#: lib/logitech_receiver/settings_templates.py:1258 -#: lib/logitech_receiver/settings_templates.py:1259 -#: lib/logitech_receiver/settings_templates.py:1262 +#: lib/logitech_receiver/settings_templates.py:1294 +#: lib/logitech_receiver/settings_templates.py:1295 +#: lib/logitech_receiver/settings_templates.py:1298 msgid "Scrolls." msgstr "Прокручивать вертикально." -#: lib/logitech_receiver/settings_templates.py:1259 -#: lib/logitech_receiver/settings_templates.py:1262 +#: lib/logitech_receiver/settings_templates.py:1295 +#: lib/logitech_receiver/settings_templates.py:1298 msgid "Scroll with two fingers" msgstr "Вертикальная прокрутка двумя пальцами" -#: lib/logitech_receiver/settings_templates.py:1260 +#: lib/logitech_receiver/settings_templates.py:1296 msgid "Scroll horizontally with two fingers" msgstr "Горизонтальная прокрутка двумя пальцами" -#: lib/logitech_receiver/settings_templates.py:1260 +#: lib/logitech_receiver/settings_templates.py:1296 msgid "Scrolls horizontally." msgstr "Прокручивать горизонтально." -#: lib/logitech_receiver/settings_templates.py:1261 +#: lib/logitech_receiver/settings_templates.py:1297 msgid "Scroll vertically with two fingers" msgstr "Вертикальная прокрутка двумя пальцами" -#: lib/logitech_receiver/settings_templates.py:1261 +#: lib/logitech_receiver/settings_templates.py:1297 msgid "Scrolls vertically." msgstr "Прокручивать вертикально." -#: lib/logitech_receiver/settings_templates.py:1263 +#: lib/logitech_receiver/settings_templates.py:1299 msgid "Inverts the scrolling direction." msgstr "Инвертирует направления прокрутки." -#: lib/logitech_receiver/settings_templates.py:1263 +#: lib/logitech_receiver/settings_templates.py:1299 msgid "Natural scrolling" msgstr "Естественная прокрутка" -#: lib/logitech_receiver/settings_templates.py:1264 +#: lib/logitech_receiver/settings_templates.py:1300 msgid "Enables the thumbwheel." msgstr "Включение бокового колеса прокрутки." -#: lib/logitech_receiver/settings_templates.py:1264 +#: lib/logitech_receiver/settings_templates.py:1300 msgid "Thumbwheel" msgstr "Боковое колесо прокрутки" -#: lib/logitech_receiver/settings_templates.py:1275 -#: lib/logitech_receiver/settings_templates.py:1279 +#: lib/logitech_receiver/settings_templates.py:1311 +#: lib/logitech_receiver/settings_templates.py:1315 msgid "Swipe from the top edge" msgstr "Листание от верхнего края" -#: lib/logitech_receiver/settings_templates.py:1276 +#: lib/logitech_receiver/settings_templates.py:1312 msgid "Swipe from the left edge" msgstr "Листание от левого края" -#: lib/logitech_receiver/settings_templates.py:1277 +#: lib/logitech_receiver/settings_templates.py:1313 msgid "Swipe from the right edge" msgstr "Листание от правого края" -#: lib/logitech_receiver/settings_templates.py:1278 +#: lib/logitech_receiver/settings_templates.py:1314 msgid "Swipe from the bottom edge" msgstr "Листание от нижнего края" -#: lib/logitech_receiver/settings_templates.py:1280 +#: lib/logitech_receiver/settings_templates.py:1316 msgid "Swipe two fingers from the left edge" msgstr "Листание двумя пальцами от левого края" -#: lib/logitech_receiver/settings_templates.py:1281 +#: lib/logitech_receiver/settings_templates.py:1317 msgid "Swipe two fingers from the right edge" msgstr "Листание двумя пальцами от правого края" -#: lib/logitech_receiver/settings_templates.py:1282 +#: lib/logitech_receiver/settings_templates.py:1318 msgid "Swipe two fingers from the bottom edge" msgstr "Листание двумя пальцами от нижнего края" -#: lib/logitech_receiver/settings_templates.py:1283 +#: lib/logitech_receiver/settings_templates.py:1319 msgid "Swipe two fingers from the top edge" msgstr "Листание двумя пальцами от верхнего края" -#: lib/logitech_receiver/settings_templates.py:1284 -#: lib/logitech_receiver/settings_templates.py:1288 +#: lib/logitech_receiver/settings_templates.py:1320 +#: lib/logitech_receiver/settings_templates.py:1324 msgid "Pinch to zoom out; spread to zoom in." msgstr "Щипок - уменьшить, раздвинуть - увеличить." -#: lib/logitech_receiver/settings_templates.py:1284 +#: lib/logitech_receiver/settings_templates.py:1320 msgid "Zoom with two fingers." msgstr "Масштабирование двумя пальцами." -#: lib/logitech_receiver/settings_templates.py:1285 +#: lib/logitech_receiver/settings_templates.py:1321 msgid "Pinch to zoom out." msgstr "Щипок - уменьшить." -#: lib/logitech_receiver/settings_templates.py:1286 +#: lib/logitech_receiver/settings_templates.py:1322 msgid "Spread to zoom in." msgstr "Раздвинуть - увеличить." -#: lib/logitech_receiver/settings_templates.py:1287 +#: lib/logitech_receiver/settings_templates.py:1323 msgid "Zoom with three fingers." msgstr "Масштабирование тремя пальцами." -#: lib/logitech_receiver/settings_templates.py:1288 +#: lib/logitech_receiver/settings_templates.py:1324 msgid "Zoom with two fingers" msgstr "Масштабирование двумя пальцами" -#: lib/logitech_receiver/settings_templates.py:1306 +#: lib/logitech_receiver/settings_templates.py:1342 msgid "Pixel zone" msgstr "Зона пикселей" -#: lib/logitech_receiver/settings_templates.py:1307 +#: lib/logitech_receiver/settings_templates.py:1343 msgid "Ratio zone" msgstr "Зона масштаба" -#: lib/logitech_receiver/settings_templates.py:1308 +#: lib/logitech_receiver/settings_templates.py:1344 msgid "Scale factor" msgstr "Коэффициент масштабирования" -#: lib/logitech_receiver/settings_templates.py:1308 +#: lib/logitech_receiver/settings_templates.py:1344 msgid "Sets the cursor speed." msgstr "Установка скорости курсора." -#: lib/logitech_receiver/settings_templates.py:1312 +#: lib/logitech_receiver/settings_templates.py:1348 msgid "Left" msgstr "Лево" -#: lib/logitech_receiver/settings_templates.py:1312 +#: lib/logitech_receiver/settings_templates.py:1348 msgid "Left-most coordinate." msgstr "Самая левая позиция." -#: lib/logitech_receiver/settings_templates.py:1313 +#: lib/logitech_receiver/settings_templates.py:1349 msgid "Bottom" msgstr "Низ" -#: lib/logitech_receiver/settings_templates.py:1313 +#: lib/logitech_receiver/settings_templates.py:1349 msgid "Bottom coordinate." msgstr "Нижняя позиция." -#: lib/logitech_receiver/settings_templates.py:1314 +#: lib/logitech_receiver/settings_templates.py:1350 msgid "Width" msgstr "Ширина" -#: lib/logitech_receiver/settings_templates.py:1314 +#: lib/logitech_receiver/settings_templates.py:1350 msgid "Width." msgstr "Ширина." -#: lib/logitech_receiver/settings_templates.py:1315 +#: lib/logitech_receiver/settings_templates.py:1351 msgid "Height" msgstr "Высота" -#: lib/logitech_receiver/settings_templates.py:1315 +#: lib/logitech_receiver/settings_templates.py:1351 msgid "Height." msgstr "Высота." -#: lib/logitech_receiver/settings_templates.py:1316 +#: lib/logitech_receiver/settings_templates.py:1352 msgid "Cursor speed." msgstr "Скорость курсора." -#: lib/logitech_receiver/settings_templates.py:1316 +#: lib/logitech_receiver/settings_templates.py:1352 msgid "Scale" msgstr "Масштаб" -#: lib/logitech_receiver/settings_templates.py:1322 +#: lib/logitech_receiver/settings_templates.py:1358 msgid "Gestures" msgstr "Жесты" -#: lib/logitech_receiver/settings_templates.py:1323 +#: lib/logitech_receiver/settings_templates.py:1359 msgid "Tweak the mouse/touchpad behaviour." msgstr "Регулировка поведения мыши/сенсорной панели." -#: lib/logitech_receiver/settings_templates.py:1339 +#: lib/logitech_receiver/settings_templates.py:1375 msgid "Gestures Diversion" msgstr "Поведение жестов" -#: lib/logitech_receiver/settings_templates.py:1340 +#: lib/logitech_receiver/settings_templates.py:1376 msgid "Divert mouse/touchpad gestures." msgstr "Регулировка поведения жестов мыши/сенсорной панели." -#: lib/logitech_receiver/settings_templates.py:1356 +#: lib/logitech_receiver/settings_templates.py:1392 msgid "Gesture params" msgstr "Параметры жестов" -#: lib/logitech_receiver/settings_templates.py:1357 +#: lib/logitech_receiver/settings_templates.py:1393 msgid "Change numerical parameters of a mouse/touchpad." msgstr "Изменение числовых параметров мыши/сенсорной панели." -#: lib/logitech_receiver/settings_templates.py:1381 +#: lib/logitech_receiver/settings_templates.py:1417 msgid "M-Key LEDs" msgstr "Светодиоды клавиш M" -#: lib/logitech_receiver/settings_templates.py:1383 +#: lib/logitech_receiver/settings_templates.py:1419 msgid "Control the M-Key LEDs." msgstr "Управление светодиодами клавиш M." -#: lib/logitech_receiver/settings_templates.py:1387 -#: lib/logitech_receiver/settings_templates.py:1418 +#: lib/logitech_receiver/settings_templates.py:1423 +#: lib/logitech_receiver/settings_templates.py:1454 msgid "May need G Keys diverted to be effective." msgstr "Возможно, для эффективности потребуется перенаправить G-клавиши." -#: lib/logitech_receiver/settings_templates.py:1393 +#: lib/logitech_receiver/settings_templates.py:1429 #, python-format msgid "Lights up the %s key." msgstr "Подсветка клавиши %s." -#: lib/logitech_receiver/settings_templates.py:1412 +#: lib/logitech_receiver/settings_templates.py:1448 msgid "MR-Key LED" msgstr "Светодиод клавиши MR" -#: lib/logitech_receiver/settings_templates.py:1414 +#: lib/logitech_receiver/settings_templates.py:1450 msgid "Control the MR-Key LED." msgstr "Управление светодиодом клавиши MR." -#: lib/logitech_receiver/settings_templates.py:1435 +#: lib/logitech_receiver/settings_templates.py:1471 msgid "Persistent Key/Button Mapping" msgstr "Постоянное сопоставление клавиши или кнопки" -#: lib/logitech_receiver/settings_templates.py:1437 +#: lib/logitech_receiver/settings_templates.py:1473 msgid "Permanently change the mapping for the key or button." msgstr "Навсегда изменить сопоставление для клавиши или кнопки." -#: lib/logitech_receiver/settings_templates.py:1439 +#: lib/logitech_receiver/settings_templates.py:1475 msgid "Changing important keys or buttons (such as for the left mouse " "button) can result in an unusable system." msgstr "Изменение важных клавиш или кнопок (например, левой мыши кнопку) " "может привести к выводу системы из строя." -#: lib/logitech_receiver/settings_templates.py:1496 +#: lib/logitech_receiver/settings_templates.py:1532 msgid "Sidetone" msgstr "Самопрослушивание" -#: lib/logitech_receiver/settings_templates.py:1497 +#: lib/logitech_receiver/settings_templates.py:1533 msgid "Set sidetone level." msgstr "Установите уровень самопрослушивания." -#: lib/logitech_receiver/settings_templates.py:1506 +#: lib/logitech_receiver/settings_templates.py:1542 msgid "Equalizer" msgstr "Эквалайзер" -#: lib/logitech_receiver/settings_templates.py:1507 +#: lib/logitech_receiver/settings_templates.py:1543 msgid "Set equalizer levels." msgstr "Установите уровни эквалайзера." -#: lib/logitech_receiver/settings_templates.py:1529 +#: lib/logitech_receiver/settings_templates.py:1565 msgid "Hz" msgstr "Гц" -#: lib/logitech_receiver/settings_templates.py:1535 +#: lib/logitech_receiver/settings_templates.py:1571 msgid "Power Management" msgstr "Управление питанием" -#: lib/logitech_receiver/settings_templates.py:1536 +#: lib/logitech_receiver/settings_templates.py:1572 msgid "Power off in minutes (0 for never)." msgstr "Выключите питание через несколько минут (0 означает \"никогда\")." -#: lib/logitech_receiver/settings_templates.py:1548 +#: lib/logitech_receiver/settings_templates.py:1584 msgid "Brightness Control" msgstr "Регулировка яркости" -#: lib/logitech_receiver/settings_templates.py:1549 +#: lib/logitech_receiver/settings_templates.py:1585 msgid "Control overall brightness" msgstr "Контролируйте общую яркость" -#: lib/logitech_receiver/settings_templates.py:1592 -#: lib/logitech_receiver/settings_templates.py:1645 +#: lib/logitech_receiver/settings_templates.py:1628 +#: lib/logitech_receiver/settings_templates.py:1681 msgid "LED Control" msgstr "Светодиодное управление" -#: lib/logitech_receiver/settings_templates.py:1593 -#: lib/logitech_receiver/settings_templates.py:1646 +#: lib/logitech_receiver/settings_templates.py:1629 +#: lib/logitech_receiver/settings_templates.py:1682 msgid "Switch control of LED zones between device and Solaar" msgstr "Переключайте управление светодиодными зонами между устройством и " "Solaar" -#: lib/logitech_receiver/settings_templates.py:1608 -#: lib/logitech_receiver/settings_templates.py:1656 +#: lib/logitech_receiver/settings_templates.py:1644 +#: lib/logitech_receiver/settings_templates.py:1692 msgid "LED Zone Effects" msgstr "Эффекты светодиодной зоны" -#: lib/logitech_receiver/settings_templates.py:1609 -#: lib/logitech_receiver/settings_templates.py:1657 +#: lib/logitech_receiver/settings_templates.py:1645 +#: lib/logitech_receiver/settings_templates.py:1693 msgid "LED Control needs to be set to Solaar to be effective." msgstr "Для эффективного управления светодиодом необходимо установить режим " "Solaar." -#: lib/logitech_receiver/settings_templates.py:1609 -#: lib/logitech_receiver/settings_templates.py:1657 +#: lib/logitech_receiver/settings_templates.py:1645 +#: lib/logitech_receiver/settings_templates.py:1693 msgid "Set effect for LED Zone" msgstr "Установите эффект для светодиодной зоны" -#: lib/logitech_receiver/settings_templates.py:1612 +#: lib/logitech_receiver/settings_templates.py:1647 +msgid "Color" +msgstr "Цвет" + +#: lib/logitech_receiver/settings_templates.py:1648 msgid "Speed" msgstr "Скорость" -#: lib/logitech_receiver/settings_templates.py:1613 +#: lib/logitech_receiver/settings_templates.py:1649 msgid "Period" msgstr "Период" -#: lib/logitech_receiver/settings_templates.py:1614 +#: lib/logitech_receiver/settings_templates.py:1650 msgid "Intensity" msgstr "Интенсивность" -#: lib/logitech_receiver/settings_templates.py:1615 +#: lib/logitech_receiver/settings_templates.py:1651 msgid "Ramp" msgstr "Рампа" -#: lib/logitech_receiver/settings_templates.py:1630 +#: lib/logitech_receiver/settings_templates.py:1666 msgid "LEDs" msgstr "Светодиоды" -#: lib/logitech_receiver/settings_templates.py:1667 +#: lib/logitech_receiver/settings_templates.py:1703 msgid "Per-key Lighting" msgstr "Индивидуальное освещение" -#: lib/logitech_receiver/settings_templates.py:1668 +#: lib/logitech_receiver/settings_templates.py:1704 msgid "Control per-key lighting." msgstr "Управление подсветкой каждой клавиши." +#: lib/logitech_receiver/settings_templates.py:1786 +msgid "Force Sensing Buttons" +msgstr "Кнопки с датчиками силы нажатия" + +#: lib/logitech_receiver/settings_templates.py:1787 +msgid "Change the force required to activate button." +msgstr "Измените усилие, необходимое для активации кнопки." + +#: lib/logitech_receiver/settings_templates.py:1804 +msgid "Force Sensing Button" +msgstr "Кнопка измерения усилия" + +#: lib/logitech_receiver/settings_templates.py:1814 +msgid "Haptic Feeback Level" +msgstr "Уровень тактильной обратной связи" + +#: lib/logitech_receiver/settings_templates.py:1815 +msgid "Change power of haptic feedback. (Zero to turn off.)" +msgstr "Измените мощность тактильной обратной связи. (Ноль - отключение.)" + +#: lib/logitech_receiver/settings_templates.py:1857 +msgid "Play Haptic Waveform" +msgstr "Воспроизведение тактильной формы сигнала" + +#: lib/logitech_receiver/settings_templates.py:1858 +msgid "Tell device to play a haptic waveform." +msgstr "Дайте команду устройству воспроизвести тактильный сигнал." + #: lib/solaar/ui/__init__.py:120 msgid "Another Solaar process is already running so just expose its window" msgstr "Другой Solaar процесс уже запущен, так что просто откройте его окно" @@ -1240,15 +1281,15 @@ msgstr "Отмена сопряжения %{device} с %{receiver} не уда msgid "The receiver returned an error, with no further details." msgstr "Приёмник вернул ошибку без дополнительных сведений." -#: lib/solaar/ui/config_panel.py:241 +#: lib/solaar/ui/config_panel.py:245 msgid "Complete - ENTER to change" msgstr "Завершено - «ВВОД» для изменения" -#: lib/solaar/ui/config_panel.py:241 +#: lib/solaar/ui/config_panel.py:245 msgid "Incomplete" msgstr "Незавершено" -#: lib/solaar/ui/config_panel.py:487 lib/solaar/ui/config_panel.py:539 +#: lib/solaar/ui/config_panel.py:491 lib/solaar/ui/config_panel.py:543 #, python-format msgid "%d value" msgid_plural "%d values" @@ -1256,23 +1297,23 @@ msgstr[0] "%d значение" msgstr[1] "%d значения" msgstr[2] "%d значений" -#: lib/solaar/ui/config_panel.py:621 +#: lib/solaar/ui/config_panel.py:642 msgid "Changes allowed" msgstr "Изменения разрешены" -#: lib/solaar/ui/config_panel.py:622 +#: lib/solaar/ui/config_panel.py:643 msgid "No changes allowed" msgstr "Изменения запрещены" -#: lib/solaar/ui/config_panel.py:623 +#: lib/solaar/ui/config_panel.py:644 msgid "Ignore this setting" msgstr "Игнорировать данный параметр" -#: lib/solaar/ui/config_panel.py:667 +#: lib/solaar/ui/config_panel.py:690 msgid "Working" msgstr "Работает" -#: lib/solaar/ui/config_panel.py:670 +#: lib/solaar/ui/config_panel.py:693 msgid "Read/write operation failed." msgstr "Операция чтения/записи не удалась." @@ -1461,7 +1502,7 @@ msgstr "Нажатие клавиши" msgid "Mouse scroll" msgstr "Прокрутка мышью" -#: lib/solaar/ui/diversion_rules.py:409 lib/solaar/ui/rule_actions.py:254 +#: lib/solaar/ui/diversion_rules.py:409 lib/solaar/ui/rule_actions.py:256 msgid "Mouse click" msgstr "Щелчок мышью" @@ -1469,7 +1510,7 @@ msgstr "Щелчок мышью" msgid "Set" msgstr "Установить" -#: lib/solaar/ui/diversion_rules.py:411 lib/solaar/ui/rule_actions.py:326 +#: lib/solaar/ui/diversion_rules.py:411 lib/solaar/ui/rule_actions.py:328 msgid "Execute" msgstr "Исполнить" @@ -1482,7 +1523,7 @@ msgid "Insert new rule" msgstr "Добавить правило" #: lib/solaar/ui/diversion_rules.py:461 lib/solaar/ui/rule_actions.py:82 -#: lib/solaar/ui/rule_actions.py:285 lib/solaar/ui/rule_conditions.py:556 +#: lib/solaar/ui/rule_actions.py:287 lib/solaar/ui/rule_conditions.py:556 msgid "Delete" msgstr "Удалить" @@ -1607,7 +1648,8 @@ msgstr "Другие ресиверы совместимы только с не #: lib/solaar/ui/pair_window.py:55 msgid "For most devices, turn on the device you want to pair." -msgstr "Обычно достаточно включить устройство, с которым вы хотите установить соединение." +msgstr "Обычно достаточно включить устройство, с которым вы хотите " + "установить соединение." #: lib/solaar/ui/pair_window.py:56 msgid "If the device is already turned on, turn it off and on again." @@ -1623,10 +1665,11 @@ msgid "For devices with multiple channels, press, hold, and release the " "button for the channel you wish to pair\n" "or use the channel switch button to select a channel and then press, " "hold, and release the channel switch button." -msgstr "Для устройств с несколькими каналами нажмите, удерживайте и отпустите " - "кнопку соответствующего канала, который требуется подключить, или " - "используйте кнопку переключения каналов, чтобы выбрать нужный канал, " - "затем нажмите, удерживайте и отпустите кнопку переключения каналов." +msgstr "Для устройств с несколькими каналами нажмите, удерживайте и " + "отпустите кнопку соответствующего канала, который требуется " + "подключить, или используйте кнопку переключения каналов, чтобы " + "выбрать нужный канал, затем нажмите, удерживайте и отпустите кнопку " + "переключения каналов." #: lib/solaar/ui/pair_window.py:68 msgid "The channel indicator light should be blinking rapidly." @@ -1747,15 +1790,15 @@ msgstr "Имитация щелчка мыши.В Wayland требуется д msgid "Button" msgstr "Кнопка" -#: lib/solaar/ui/rule_actions.py:217 -msgid "Count and Action" -msgstr "Счет и действие" +#: lib/solaar/ui/rule_actions.py:218 +msgid "Action (and Count, if click)" +msgstr "Действие (и количество, если кликнуть)" -#: lib/solaar/ui/rule_actions.py:267 +#: lib/solaar/ui/rule_actions.py:269 msgid "Execute a command with arguments." msgstr "Выполните команду с аргументами." -#: lib/solaar/ui/rule_actions.py:271 +#: lib/solaar/ui/rule_actions.py:273 msgid "Add argument" msgstr "Добавить аргумент" @@ -1888,6 +1931,7 @@ msgid "no receiver" msgstr "отсутствует приёмник" #: lib/solaar/ui/tray.py:294 lib/solaar/ui/tray.py:299 +#: lib/solaar/ui/window.py:728 msgid "offline" msgstr "нет соединения" @@ -1968,6 +2012,10 @@ msgstr "Част. опроса" msgid "Unit ID" msgstr "ID устройства" +#: lib/solaar/ui/window.py:559 +msgid "none" +msgstr "никто" + #: lib/solaar/ui/window.py:560 msgid "Notifications" msgstr "Уведомления" @@ -1987,6 +2035,10 @@ msgstr[1] "С этим приёмником может быть сопря msgstr[2] "С этим приёмником может быть сопряжено до %(max_count)s " "устройств." +#: lib/solaar/ui/window.py:620 +msgid "Only one device can be paired to this receiver." +msgstr "К этому приемнику может быть подключено только одно устройство." + #: lib/solaar/ui/window.py:624 #, python-format msgid "This receiver has %d pairing remaining." @@ -2020,6 +2072,10 @@ msgid " and next level to be reported." msgstr " \n" "(следующий уровень для отчёта)." +#: lib/solaar/ui/window.py:702 +msgid "last known" +msgstr "последний известный" + #: lib/solaar/ui/window.py:713 msgid "encrypted" msgstr "зашифровано" diff --git a/po/solaar.pot b/po/solaar.pot index fbfdc037..5dae40bc 100644 --- a/po/solaar.pot +++ b/po/solaar.pot @@ -5,9 +5,9 @@ # #, fuzzy msgid "" -msgstr "Project-Id-Version: solaar 1.1.14\n" +msgstr "Project-Id-Version: solaar 1.1.17rc3\n" "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2025-10-16 18:53+0300\n" + "POT-Creation-Date: 2025-12-01 21:43+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -48,100 +48,100 @@ msgstr "" msgid "Battery: %(percent)d%% (%(status)s)" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1023 -#: lib/logitech_receiver/settings_templates.py:295 +#: lib/logitech_receiver/hidpp20.py:1048 +#: lib/logitech_receiver/settings_templates.py:299 msgid "Disabled" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1024 +#: lib/logitech_receiver/hidpp20.py:1049 msgid "Static" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1025 +#: lib/logitech_receiver/hidpp20.py:1050 msgid "Pulse" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1026 +#: lib/logitech_receiver/hidpp20.py:1051 msgid "Cycle" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1027 +#: lib/logitech_receiver/hidpp20.py:1052 msgid "Boot" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1028 +#: lib/logitech_receiver/hidpp20.py:1053 msgid "Demo" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1030 +#: lib/logitech_receiver/hidpp20.py:1055 msgid "Breathe" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1033 +#: lib/logitech_receiver/hidpp20.py:1058 msgid "Ripple" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1034 +#: lib/logitech_receiver/hidpp20.py:1059 msgid "Decomposition" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1035 +#: lib/logitech_receiver/hidpp20.py:1060 msgid "Signature1" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1036 +#: lib/logitech_receiver/hidpp20.py:1061 msgid "Signature2" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1037 +#: lib/logitech_receiver/hidpp20.py:1062 msgid "CycleS" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1101 +#: lib/logitech_receiver/hidpp20.py:1126 msgid "Unknown Location" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1102 +#: lib/logitech_receiver/hidpp20.py:1127 msgid "Primary" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1103 +#: lib/logitech_receiver/hidpp20.py:1128 msgid "Logo" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1104 +#: lib/logitech_receiver/hidpp20.py:1129 msgid "Left Side" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1105 +#: lib/logitech_receiver/hidpp20.py:1130 msgid "Right Side" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1106 +#: lib/logitech_receiver/hidpp20.py:1131 msgid "Combined" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1107 +#: lib/logitech_receiver/hidpp20.py:1132 msgid "Primary 1" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1108 +#: lib/logitech_receiver/hidpp20.py:1133 msgid "Primary 2" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1109 +#: lib/logitech_receiver/hidpp20.py:1134 msgid "Primary 3" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1110 +#: lib/logitech_receiver/hidpp20.py:1135 msgid "Primary 4" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1111 +#: lib/logitech_receiver/hidpp20.py:1136 msgid "Primary 5" msgstr "" -#: lib/logitech_receiver/hidpp20.py:1112 +#: lib/logitech_receiver/hidpp20.py:1137 msgid "Primary 6" msgstr "" @@ -382,749 +382,790 @@ msgid_plural "%(count)s paired devices." msgstr[0] "" msgstr[1] "" -#: lib/logitech_receiver/settings.py:598 +#: lib/logitech_receiver/settings.py:602 msgid "register" msgstr "" -#: lib/logitech_receiver/settings.py:612 lib/logitech_receiver/settings.py:650 +#: lib/logitech_receiver/settings.py:616 lib/logitech_receiver/settings.py:654 msgid "feature" msgstr "" -#: lib/logitech_receiver/settings_templates.py:134 +#: lib/logitech_receiver/settings_templates.py:138 msgid "Swap Fx function" msgstr "" -#: lib/logitech_receiver/settings_templates.py:137 +#: lib/logitech_receiver/settings_templates.py:141 msgid "When set, the F1..F12 keys will activate their special function,\n" "and you must hold the FN key to activate their standard function." msgstr "" -#: lib/logitech_receiver/settings_templates.py:142 +#: lib/logitech_receiver/settings_templates.py:146 msgid "When unset, the F1..F12 keys will activate their standard function,\n" "and you must hold the FN key to activate their special function." msgstr "" -#: lib/logitech_receiver/settings_templates.py:150 +#: lib/logitech_receiver/settings_templates.py:154 msgid "Hand Detection" msgstr "" -#: lib/logitech_receiver/settings_templates.py:151 +#: lib/logitech_receiver/settings_templates.py:155 msgid "Turn on illumination when the hands hover over the keyboard." msgstr "" -#: lib/logitech_receiver/settings_templates.py:158 +#: lib/logitech_receiver/settings_templates.py:162 msgid "Scroll Wheel Smooth Scrolling" msgstr "" -#: lib/logitech_receiver/settings_templates.py:159 -#: lib/logitech_receiver/settings_templates.py:406 -#: lib/logitech_receiver/settings_templates.py:435 +#: lib/logitech_receiver/settings_templates.py:163 +#: lib/logitech_receiver/settings_templates.py:410 +#: lib/logitech_receiver/settings_templates.py:439 msgid "High-sensitivity mode for vertical scroll with the wheel." msgstr "" -#: lib/logitech_receiver/settings_templates.py:166 +#: lib/logitech_receiver/settings_templates.py:170 msgid "Side Scrolling" msgstr "" -#: lib/logitech_receiver/settings_templates.py:168 +#: lib/logitech_receiver/settings_templates.py:172 msgid "When disabled, pushing the wheel sideways sends custom button " "events\n" "instead of the standard side-scrolling events." msgstr "" -#: lib/logitech_receiver/settings_templates.py:178 +#: lib/logitech_receiver/settings_templates.py:182 msgid "Sensitivity (DPI - older mice)" msgstr "" -#: lib/logitech_receiver/settings_templates.py:179 -#: lib/logitech_receiver/settings_templates.py:983 -#: lib/logitech_receiver/settings_templates.py:1011 +#: lib/logitech_receiver/settings_templates.py:183 +#: lib/logitech_receiver/settings_templates.py:1019 +#: lib/logitech_receiver/settings_templates.py:1047 msgid "Mouse movement sensitivity" msgstr "" -#: lib/logitech_receiver/settings_templates.py:252 +#: lib/logitech_receiver/settings_templates.py:256 msgid "Backlight Timed" msgstr "" -#: lib/logitech_receiver/settings_templates.py:253 -#: lib/logitech_receiver/settings_templates.py:393 +#: lib/logitech_receiver/settings_templates.py:257 +#: lib/logitech_receiver/settings_templates.py:397 msgid "Set illumination time for keyboard." msgstr "" -#: lib/logitech_receiver/settings_templates.py:264 +#: lib/logitech_receiver/settings_templates.py:268 msgid "Backlight" msgstr "" -#: lib/logitech_receiver/settings_templates.py:265 +#: lib/logitech_receiver/settings_templates.py:269 msgid "Illumination level on keyboard. Changes made are only applied in " "Manual mode." msgstr "" -#: lib/logitech_receiver/settings_templates.py:297 +#: lib/logitech_receiver/settings_templates.py:301 msgid "Automatic" msgstr "" -#: lib/logitech_receiver/settings_templates.py:299 +#: lib/logitech_receiver/settings_templates.py:303 msgid "Manual" msgstr "" -#: lib/logitech_receiver/settings_templates.py:301 +#: lib/logitech_receiver/settings_templates.py:305 msgid "Enabled" msgstr "" -#: lib/logitech_receiver/settings_templates.py:307 +#: lib/logitech_receiver/settings_templates.py:311 msgid "Backlight Level" msgstr "" -#: lib/logitech_receiver/settings_templates.py:308 +#: lib/logitech_receiver/settings_templates.py:312 msgid "Illumination level on keyboard when in Manual mode." msgstr "" -#: lib/logitech_receiver/settings_templates.py:365 +#: lib/logitech_receiver/settings_templates.py:369 msgid "Backlight Delay Hands Out" msgstr "" -#: lib/logitech_receiver/settings_templates.py:366 +#: lib/logitech_receiver/settings_templates.py:370 msgid "Delay in seconds until backlight fades out with hands away from " "keyboard." msgstr "" -#: lib/logitech_receiver/settings_templates.py:374 +#: lib/logitech_receiver/settings_templates.py:378 msgid "Backlight Delay Hands In" msgstr "" -#: lib/logitech_receiver/settings_templates.py:375 +#: lib/logitech_receiver/settings_templates.py:379 msgid "Delay in seconds until backlight fades out with hands near keyboard." msgstr "" -#: lib/logitech_receiver/settings_templates.py:383 +#: lib/logitech_receiver/settings_templates.py:387 msgid "Backlight Delay Powered" msgstr "" -#: lib/logitech_receiver/settings_templates.py:384 +#: lib/logitech_receiver/settings_templates.py:388 msgid "Delay in seconds until backlight fades out with external power." msgstr "" -#: lib/logitech_receiver/settings_templates.py:392 +#: lib/logitech_receiver/settings_templates.py:396 msgid "Backlight (Seconds)" msgstr "" -#: lib/logitech_receiver/settings_templates.py:404 +#: lib/logitech_receiver/settings_templates.py:408 msgid "Scroll Wheel High Resolution" msgstr "" -#: lib/logitech_receiver/settings_templates.py:408 -#: lib/logitech_receiver/settings_templates.py:437 +#: lib/logitech_receiver/settings_templates.py:412 +#: lib/logitech_receiver/settings_templates.py:441 msgid "Set to ignore if scrolling is abnormally fast or slow" msgstr "" -#: lib/logitech_receiver/settings_templates.py:415 -#: lib/logitech_receiver/settings_templates.py:446 +#: lib/logitech_receiver/settings_templates.py:419 +#: lib/logitech_receiver/settings_templates.py:450 msgid "Scroll Wheel Diversion" msgstr "" -#: lib/logitech_receiver/settings_templates.py:417 +#: lib/logitech_receiver/settings_templates.py:421 msgid "Make scroll wheel send LOWRES_WHEEL HID++ notifications (which " "trigger Solaar rules but are otherwise ignored)." msgstr "" -#: lib/logitech_receiver/settings_templates.py:424 +#: lib/logitech_receiver/settings_templates.py:428 msgid "Scroll Wheel Direction" msgstr "" -#: lib/logitech_receiver/settings_templates.py:425 +#: lib/logitech_receiver/settings_templates.py:429 msgid "Invert direction for vertical scroll with wheel." msgstr "" -#: lib/logitech_receiver/settings_templates.py:433 +#: lib/logitech_receiver/settings_templates.py:437 msgid "Scroll Wheel Resolution" msgstr "" -#: lib/logitech_receiver/settings_templates.py:448 +#: lib/logitech_receiver/settings_templates.py:452 msgid "Make scroll wheel send HIRES_WHEEL HID++ notifications (which " "trigger Solaar rules but are otherwise ignored)." msgstr "" -#: lib/logitech_receiver/settings_templates.py:457 +#: lib/logitech_receiver/settings_templates.py:461 msgid "Sensitivity (Pointer Speed)" msgstr "" -#: lib/logitech_receiver/settings_templates.py:458 +#: lib/logitech_receiver/settings_templates.py:462 msgid "Speed multiplier for mouse (256 is normal multiplier)." msgstr "" -#: lib/logitech_receiver/settings_templates.py:468 +#: lib/logitech_receiver/settings_templates.py:472 msgid "Thumb Wheel Diversion" msgstr "" -#: lib/logitech_receiver/settings_templates.py:470 +#: lib/logitech_receiver/settings_templates.py:474 msgid "Make thumb wheel send THUMB_WHEEL HID++ notifications (which trigger " "Solaar rules but are otherwise ignored)." msgstr "" -#: lib/logitech_receiver/settings_templates.py:479 +#: lib/logitech_receiver/settings_templates.py:483 msgid "Thumb Wheel Direction" msgstr "" -#: lib/logitech_receiver/settings_templates.py:480 +#: lib/logitech_receiver/settings_templates.py:484 msgid "Invert thumb wheel scroll direction." msgstr "" -#: lib/logitech_receiver/settings_templates.py:500 +#: lib/logitech_receiver/settings_templates.py:504 msgid "Onboard Profiles" msgstr "" -#: lib/logitech_receiver/settings_templates.py:501 +#: lib/logitech_receiver/settings_templates.py:505 msgid "Enable an onboard profile, which controls report rate, sensitivity, " "and button actions" msgstr "" -#: lib/logitech_receiver/settings_templates.py:545 -#: lib/logitech_receiver/settings_templates.py:578 +#: lib/logitech_receiver/settings_templates.py:549 +#: lib/logitech_receiver/settings_templates.py:582 msgid "Report Rate" msgstr "" -#: lib/logitech_receiver/settings_templates.py:547 -#: lib/logitech_receiver/settings_templates.py:580 +#: lib/logitech_receiver/settings_templates.py:551 +#: lib/logitech_receiver/settings_templates.py:584 msgid "Frequency of device movement reports" msgstr "" -#: lib/logitech_receiver/settings_templates.py:547 -#: lib/logitech_receiver/settings_templates.py:580 -#: lib/logitech_receiver/settings_templates.py:1011 -#: lib/logitech_receiver/settings_templates.py:1385 -#: lib/logitech_receiver/settings_templates.py:1416 +#: lib/logitech_receiver/settings_templates.py:551 +#: lib/logitech_receiver/settings_templates.py:584 +#: lib/logitech_receiver/settings_templates.py:1019 +#: lib/logitech_receiver/settings_templates.py:1047 +#: lib/logitech_receiver/settings_templates.py:1421 +#: lib/logitech_receiver/settings_templates.py:1452 msgid "May need Onboard Profiles set to Disable to be effective." msgstr "" -#: lib/logitech_receiver/settings_templates.py:608 +#: lib/logitech_receiver/settings_templates.py:612 msgid "Divert crown events" msgstr "" -#: lib/logitech_receiver/settings_templates.py:609 +#: lib/logitech_receiver/settings_templates.py:613 msgid "Make crown send CROWN HID++ notifications (which trigger Solaar " "rules but are otherwise ignored)." msgstr "" -#: lib/logitech_receiver/settings_templates.py:617 +#: lib/logitech_receiver/settings_templates.py:621 msgid "Crown smooth scroll" msgstr "" -#: lib/logitech_receiver/settings_templates.py:618 +#: lib/logitech_receiver/settings_templates.py:622 msgid "Set crown smooth scroll" msgstr "" -#: lib/logitech_receiver/settings_templates.py:626 +#: lib/logitech_receiver/settings_templates.py:630 msgid "Divert G and M Keys" msgstr "" -#: lib/logitech_receiver/settings_templates.py:627 +#: lib/logitech_receiver/settings_templates.py:631 msgid "Make G and M keys send HID++ notifications (which trigger Solaar " "rules but are otherwise ignored)." msgstr "" -#: lib/logitech_receiver/settings_templates.py:641 +#: lib/logitech_receiver/settings_templates.py:645 msgid "Scroll Wheel Ratcheted" msgstr "" -#: lib/logitech_receiver/settings_templates.py:642 +#: lib/logitech_receiver/settings_templates.py:646 msgid "Switch the mouse wheel between speed-controlled ratcheting and " "always freespin." msgstr "" -#: lib/logitech_receiver/settings_templates.py:644 +#: lib/logitech_receiver/settings_templates.py:648 msgid "Freespinning" msgstr "" -#: lib/logitech_receiver/settings_templates.py:644 +#: lib/logitech_receiver/settings_templates.py:648 msgid "Ratcheted" msgstr "" -#: lib/logitech_receiver/settings_templates.py:651 +#: lib/logitech_receiver/settings_templates.py:655 msgid "Scroll Wheel Ratchet Speed" msgstr "" -#: lib/logitech_receiver/settings_templates.py:653 +#: lib/logitech_receiver/settings_templates.py:657 msgid "Use the mouse wheel speed to switch between ratcheted and " "freespinning.\n" "The mouse wheel is always ratcheted at 50." msgstr "" #: lib/logitech_receiver/settings_templates.py:707 +msgid "Scroll Wheel Ratchet Torque" +msgstr "" + +#: lib/logitech_receiver/settings_templates.py:708 +msgid "Change the torque needed to overcome the ratchet." +msgstr "" + +#: lib/logitech_receiver/settings_templates.py:743 msgid "Key/Button Actions" msgstr "" -#: lib/logitech_receiver/settings_templates.py:709 +#: lib/logitech_receiver/settings_templates.py:745 msgid "Change the action for the key or button." msgstr "" -#: lib/logitech_receiver/settings_templates.py:711 +#: lib/logitech_receiver/settings_templates.py:747 msgid "Overridden by diversion." msgstr "" -#: lib/logitech_receiver/settings_templates.py:713 +#: lib/logitech_receiver/settings_templates.py:749 msgid "Changing important actions (such as for the left mouse button) can " "result in an unusable system." msgstr "" -#: lib/logitech_receiver/settings_templates.py:888 +#: lib/logitech_receiver/settings_templates.py:924 msgid "Key/Button Diversion" msgstr "" -#: lib/logitech_receiver/settings_templates.py:889 +#: lib/logitech_receiver/settings_templates.py:925 msgid "Make the key or button send HID++ notifications (Diverted) or " "initiate Mouse Gestures or Sliding DPI" msgstr "" -#: lib/logitech_receiver/settings_templates.py:892 -#: lib/logitech_receiver/settings_templates.py:893 -#: lib/logitech_receiver/settings_templates.py:894 +#: lib/logitech_receiver/settings_templates.py:928 +#: lib/logitech_receiver/settings_templates.py:929 +#: lib/logitech_receiver/settings_templates.py:930 msgid "Diverted" msgstr "" -#: lib/logitech_receiver/settings_templates.py:892 -#: lib/logitech_receiver/settings_templates.py:893 +#: lib/logitech_receiver/settings_templates.py:928 +#: lib/logitech_receiver/settings_templates.py:929 msgid "Mouse Gestures" msgstr "" -#: lib/logitech_receiver/settings_templates.py:892 -#: lib/logitech_receiver/settings_templates.py:893 -#: lib/logitech_receiver/settings_templates.py:894 +#: lib/logitech_receiver/settings_templates.py:928 +#: lib/logitech_receiver/settings_templates.py:929 +#: lib/logitech_receiver/settings_templates.py:930 msgid "Regular" msgstr "" -#: lib/logitech_receiver/settings_templates.py:892 +#: lib/logitech_receiver/settings_templates.py:928 msgid "Sliding DPI" msgstr "" -#: lib/logitech_receiver/settings_templates.py:982 -#: lib/logitech_receiver/settings_templates.py:1010 +#: lib/logitech_receiver/settings_templates.py:1018 +#: lib/logitech_receiver/settings_templates.py:1046 msgid "Sensitivity (DPI)" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1087 +#: lib/logitech_receiver/settings_templates.py:1123 msgid "Sensitivity Switching" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1089 +#: lib/logitech_receiver/settings_templates.py:1125 msgid "Switch the current sensitivity and the remembered sensitivity when " "the key or button is pressed.\n" "If there is no remembered sensitivity, just remember the current " "sensitivity" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1093 +#: lib/logitech_receiver/settings_templates.py:1129 msgid "Off" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1124 +#: lib/logitech_receiver/settings_templates.py:1160 msgid "Disable keys" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1125 +#: lib/logitech_receiver/settings_templates.py:1161 msgid "Disable specific keyboard keys." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1128 +#: lib/logitech_receiver/settings_templates.py:1164 #, python-format msgid "Disables the %s key." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1141 -#: lib/logitech_receiver/settings_templates.py:1198 +#: lib/logitech_receiver/settings_templates.py:1177 +#: lib/logitech_receiver/settings_templates.py:1234 msgid "Set OS" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1142 -#: lib/logitech_receiver/settings_templates.py:1199 +#: lib/logitech_receiver/settings_templates.py:1178 +#: lib/logitech_receiver/settings_templates.py:1235 msgid "Change keys to match OS." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1211 +#: lib/logitech_receiver/settings_templates.py:1247 msgid "Change Host" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1212 +#: lib/logitech_receiver/settings_templates.py:1248 msgid "Switch connection to a different host" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1236 +#: lib/logitech_receiver/settings_templates.py:1272 msgid "Performs a left click." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1236 +#: lib/logitech_receiver/settings_templates.py:1272 msgid "Single tap" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1237 +#: lib/logitech_receiver/settings_templates.py:1273 msgid "Performs a right click." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1237 +#: lib/logitech_receiver/settings_templates.py:1273 msgid "Single tap with two fingers" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1238 +#: lib/logitech_receiver/settings_templates.py:1274 msgid "Single tap with three fingers" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1242 +#: lib/logitech_receiver/settings_templates.py:1278 msgid "Double tap" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1242 +#: lib/logitech_receiver/settings_templates.py:1278 msgid "Performs a double click." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1243 +#: lib/logitech_receiver/settings_templates.py:1279 msgid "Double tap with two fingers" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1244 +#: lib/logitech_receiver/settings_templates.py:1280 msgid "Double tap with three fingers" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1247 +#: lib/logitech_receiver/settings_templates.py:1283 msgid "Drags items by dragging the finger after double tapping." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1247 +#: lib/logitech_receiver/settings_templates.py:1283 msgid "Tap and drag" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1249 +#: lib/logitech_receiver/settings_templates.py:1285 msgid "Tap and drag with two fingers" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1250 +#: lib/logitech_receiver/settings_templates.py:1286 msgid "Drags items by dragging the fingers after double tapping." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1252 +#: lib/logitech_receiver/settings_templates.py:1288 msgid "Tap and drag with three fingers" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1255 +#: lib/logitech_receiver/settings_templates.py:1291 msgid "Suppress tap and edge gestures" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1256 +#: lib/logitech_receiver/settings_templates.py:1292 msgid "Disables tap and edge gestures (equivalent to pressing Fn+LeftClick)." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1258 +#: lib/logitech_receiver/settings_templates.py:1294 msgid "Scroll with one finger" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1258 -#: lib/logitech_receiver/settings_templates.py:1259 -#: lib/logitech_receiver/settings_templates.py:1262 +#: lib/logitech_receiver/settings_templates.py:1294 +#: lib/logitech_receiver/settings_templates.py:1295 +#: lib/logitech_receiver/settings_templates.py:1298 msgid "Scrolls." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1259 -#: lib/logitech_receiver/settings_templates.py:1262 +#: lib/logitech_receiver/settings_templates.py:1295 +#: lib/logitech_receiver/settings_templates.py:1298 msgid "Scroll with two fingers" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1260 +#: lib/logitech_receiver/settings_templates.py:1296 msgid "Scroll horizontally with two fingers" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1260 +#: lib/logitech_receiver/settings_templates.py:1296 msgid "Scrolls horizontally." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1261 +#: lib/logitech_receiver/settings_templates.py:1297 msgid "Scroll vertically with two fingers" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1261 +#: lib/logitech_receiver/settings_templates.py:1297 msgid "Scrolls vertically." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1263 +#: lib/logitech_receiver/settings_templates.py:1299 msgid "Inverts the scrolling direction." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1263 +#: lib/logitech_receiver/settings_templates.py:1299 msgid "Natural scrolling" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1264 +#: lib/logitech_receiver/settings_templates.py:1300 msgid "Enables the thumbwheel." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1264 +#: lib/logitech_receiver/settings_templates.py:1300 msgid "Thumbwheel" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1275 -#: lib/logitech_receiver/settings_templates.py:1279 +#: lib/logitech_receiver/settings_templates.py:1311 +#: lib/logitech_receiver/settings_templates.py:1315 msgid "Swipe from the top edge" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1276 +#: lib/logitech_receiver/settings_templates.py:1312 msgid "Swipe from the left edge" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1277 +#: lib/logitech_receiver/settings_templates.py:1313 msgid "Swipe from the right edge" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1278 +#: lib/logitech_receiver/settings_templates.py:1314 msgid "Swipe from the bottom edge" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1280 +#: lib/logitech_receiver/settings_templates.py:1316 msgid "Swipe two fingers from the left edge" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1281 +#: lib/logitech_receiver/settings_templates.py:1317 msgid "Swipe two fingers from the right edge" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1282 +#: lib/logitech_receiver/settings_templates.py:1318 msgid "Swipe two fingers from the bottom edge" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1283 +#: lib/logitech_receiver/settings_templates.py:1319 msgid "Swipe two fingers from the top edge" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1284 -#: lib/logitech_receiver/settings_templates.py:1288 +#: lib/logitech_receiver/settings_templates.py:1320 +#: lib/logitech_receiver/settings_templates.py:1324 msgid "Pinch to zoom out; spread to zoom in." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1284 +#: lib/logitech_receiver/settings_templates.py:1320 msgid "Zoom with two fingers." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1285 +#: lib/logitech_receiver/settings_templates.py:1321 msgid "Pinch to zoom out." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1286 +#: lib/logitech_receiver/settings_templates.py:1322 msgid "Spread to zoom in." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1287 +#: lib/logitech_receiver/settings_templates.py:1323 msgid "Zoom with three fingers." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1288 +#: lib/logitech_receiver/settings_templates.py:1324 msgid "Zoom with two fingers" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1306 +#: lib/logitech_receiver/settings_templates.py:1342 msgid "Pixel zone" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1307 +#: lib/logitech_receiver/settings_templates.py:1343 msgid "Ratio zone" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1308 +#: lib/logitech_receiver/settings_templates.py:1344 msgid "Scale factor" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1308 +#: lib/logitech_receiver/settings_templates.py:1344 msgid "Sets the cursor speed." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1312 +#: lib/logitech_receiver/settings_templates.py:1348 msgid "Left" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1312 +#: lib/logitech_receiver/settings_templates.py:1348 msgid "Left-most coordinate." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1313 +#: lib/logitech_receiver/settings_templates.py:1349 msgid "Bottom" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1313 +#: lib/logitech_receiver/settings_templates.py:1349 msgid "Bottom coordinate." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1314 +#: lib/logitech_receiver/settings_templates.py:1350 msgid "Width" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1314 +#: lib/logitech_receiver/settings_templates.py:1350 msgid "Width." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1315 +#: lib/logitech_receiver/settings_templates.py:1351 msgid "Height" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1315 +#: lib/logitech_receiver/settings_templates.py:1351 msgid "Height." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1316 +#: lib/logitech_receiver/settings_templates.py:1352 msgid "Cursor speed." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1316 +#: lib/logitech_receiver/settings_templates.py:1352 msgid "Scale" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1322 +#: lib/logitech_receiver/settings_templates.py:1358 msgid "Gestures" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1323 +#: lib/logitech_receiver/settings_templates.py:1359 msgid "Tweak the mouse/touchpad behaviour." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1339 +#: lib/logitech_receiver/settings_templates.py:1375 msgid "Gestures Diversion" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1340 +#: lib/logitech_receiver/settings_templates.py:1376 msgid "Divert mouse/touchpad gestures." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1356 +#: lib/logitech_receiver/settings_templates.py:1392 msgid "Gesture params" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1357 +#: lib/logitech_receiver/settings_templates.py:1393 msgid "Change numerical parameters of a mouse/touchpad." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1381 +#: lib/logitech_receiver/settings_templates.py:1417 msgid "M-Key LEDs" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1383 +#: lib/logitech_receiver/settings_templates.py:1419 msgid "Control the M-Key LEDs." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1387 -#: lib/logitech_receiver/settings_templates.py:1418 +#: lib/logitech_receiver/settings_templates.py:1423 +#: lib/logitech_receiver/settings_templates.py:1454 msgid "May need G Keys diverted to be effective." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1393 +#: lib/logitech_receiver/settings_templates.py:1429 #, python-format msgid "Lights up the %s key." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1412 +#: lib/logitech_receiver/settings_templates.py:1448 msgid "MR-Key LED" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1414 +#: lib/logitech_receiver/settings_templates.py:1450 msgid "Control the MR-Key LED." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1435 +#: lib/logitech_receiver/settings_templates.py:1471 msgid "Persistent Key/Button Mapping" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1437 +#: lib/logitech_receiver/settings_templates.py:1473 msgid "Permanently change the mapping for the key or button." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1439 +#: lib/logitech_receiver/settings_templates.py:1475 msgid "Changing important keys or buttons (such as for the left mouse " "button) can result in an unusable system." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1496 +#: lib/logitech_receiver/settings_templates.py:1532 msgid "Sidetone" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1497 +#: lib/logitech_receiver/settings_templates.py:1533 msgid "Set sidetone level." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1506 +#: lib/logitech_receiver/settings_templates.py:1542 msgid "Equalizer" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1507 +#: lib/logitech_receiver/settings_templates.py:1543 msgid "Set equalizer levels." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1529 +#: lib/logitech_receiver/settings_templates.py:1565 msgid "Hz" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1535 +#: lib/logitech_receiver/settings_templates.py:1571 msgid "Power Management" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1536 +#: lib/logitech_receiver/settings_templates.py:1572 msgid "Power off in minutes (0 for never)." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1548 +#: lib/logitech_receiver/settings_templates.py:1584 msgid "Brightness Control" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1549 +#: lib/logitech_receiver/settings_templates.py:1585 msgid "Control overall brightness" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1592 -#: lib/logitech_receiver/settings_templates.py:1645 +#: lib/logitech_receiver/settings_templates.py:1628 +#: lib/logitech_receiver/settings_templates.py:1681 msgid "LED Control" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1593 -#: lib/logitech_receiver/settings_templates.py:1646 +#: lib/logitech_receiver/settings_templates.py:1629 +#: lib/logitech_receiver/settings_templates.py:1682 msgid "Switch control of LED zones between device and Solaar" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1608 -#: lib/logitech_receiver/settings_templates.py:1656 +#: lib/logitech_receiver/settings_templates.py:1644 +#: lib/logitech_receiver/settings_templates.py:1692 msgid "LED Zone Effects" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1609 -#: lib/logitech_receiver/settings_templates.py:1657 +#: lib/logitech_receiver/settings_templates.py:1645 +#: lib/logitech_receiver/settings_templates.py:1693 msgid "LED Control needs to be set to Solaar to be effective." msgstr "" -#: lib/logitech_receiver/settings_templates.py:1609 -#: lib/logitech_receiver/settings_templates.py:1657 +#: lib/logitech_receiver/settings_templates.py:1645 +#: lib/logitech_receiver/settings_templates.py:1693 msgid "Set effect for LED Zone" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1612 +#: lib/logitech_receiver/settings_templates.py:1647 +msgid "Color" +msgstr "" + +#: lib/logitech_receiver/settings_templates.py:1648 msgid "Speed" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1613 +#: lib/logitech_receiver/settings_templates.py:1649 msgid "Period" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1614 +#: lib/logitech_receiver/settings_templates.py:1650 msgid "Intensity" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1615 +#: lib/logitech_receiver/settings_templates.py:1651 msgid "Ramp" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1630 +#: lib/logitech_receiver/settings_templates.py:1666 msgid "LEDs" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1667 +#: lib/logitech_receiver/settings_templates.py:1703 msgid "Per-key Lighting" msgstr "" -#: lib/logitech_receiver/settings_templates.py:1668 +#: lib/logitech_receiver/settings_templates.py:1704 msgid "Control per-key lighting." msgstr "" +#: lib/logitech_receiver/settings_templates.py:1786 +msgid "Force Sensing Buttons" +msgstr "" + +#: lib/logitech_receiver/settings_templates.py:1787 +msgid "Change the force required to activate button." +msgstr "" + +#: lib/logitech_receiver/settings_templates.py:1804 +msgid "Force Sensing Button" +msgstr "" + +#: lib/logitech_receiver/settings_templates.py:1814 +msgid "Haptic Feeback Level" +msgstr "" + +#: lib/logitech_receiver/settings_templates.py:1815 +msgid "Change power of haptic feedback. (Zero to turn off.)" +msgstr "" + +#: lib/logitech_receiver/settings_templates.py:1857 +msgid "Play Haptic Waveform" +msgstr "" + +#: lib/logitech_receiver/settings_templates.py:1858 +msgid "Tell device to play a haptic waveform." +msgstr "" + #: lib/solaar/ui/__init__.py:120 msgid "Another Solaar process is already running so just expose its window" msgstr "" @@ -1202,38 +1243,38 @@ msgstr "" msgid "The receiver returned an error, with no further details." msgstr "" -#: lib/solaar/ui/config_panel.py:241 +#: lib/solaar/ui/config_panel.py:245 msgid "Complete - ENTER to change" msgstr "" -#: lib/solaar/ui/config_panel.py:241 +#: lib/solaar/ui/config_panel.py:245 msgid "Incomplete" msgstr "" -#: lib/solaar/ui/config_panel.py:487 lib/solaar/ui/config_panel.py:539 +#: lib/solaar/ui/config_panel.py:491 lib/solaar/ui/config_panel.py:543 #, python-format msgid "%d value" msgid_plural "%d values" msgstr[0] "" msgstr[1] "" -#: lib/solaar/ui/config_panel.py:621 +#: lib/solaar/ui/config_panel.py:642 msgid "Changes allowed" msgstr "" -#: lib/solaar/ui/config_panel.py:622 +#: lib/solaar/ui/config_panel.py:643 msgid "No changes allowed" msgstr "" -#: lib/solaar/ui/config_panel.py:623 +#: lib/solaar/ui/config_panel.py:644 msgid "Ignore this setting" msgstr "" -#: lib/solaar/ui/config_panel.py:667 +#: lib/solaar/ui/config_panel.py:690 msgid "Working" msgstr "" -#: lib/solaar/ui/config_panel.py:670 +#: lib/solaar/ui/config_panel.py:693 msgid "Read/write operation failed." msgstr "" @@ -1422,7 +1463,7 @@ msgstr "" msgid "Mouse scroll" msgstr "" -#: lib/solaar/ui/diversion_rules.py:409 lib/solaar/ui/rule_actions.py:254 +#: lib/solaar/ui/diversion_rules.py:409 lib/solaar/ui/rule_actions.py:256 msgid "Mouse click" msgstr "" @@ -1430,7 +1471,7 @@ msgstr "" msgid "Set" msgstr "" -#: lib/solaar/ui/diversion_rules.py:411 lib/solaar/ui/rule_actions.py:326 +#: lib/solaar/ui/diversion_rules.py:411 lib/solaar/ui/rule_actions.py:328 msgid "Execute" msgstr "" @@ -1443,7 +1484,7 @@ msgid "Insert new rule" msgstr "" #: lib/solaar/ui/diversion_rules.py:461 lib/solaar/ui/rule_actions.py:82 -#: lib/solaar/ui/rule_actions.py:285 lib/solaar/ui/rule_conditions.py:556 +#: lib/solaar/ui/rule_actions.py:287 lib/solaar/ui/rule_conditions.py:556 msgid "Delete" msgstr "" @@ -1692,15 +1733,15 @@ msgstr "" msgid "Button" msgstr "" -#: lib/solaar/ui/rule_actions.py:217 -msgid "Count and Action" +#: lib/solaar/ui/rule_actions.py:218 +msgid "Action (and Count, if click)" msgstr "" -#: lib/solaar/ui/rule_actions.py:267 +#: lib/solaar/ui/rule_actions.py:269 msgid "Execute a command with arguments." msgstr "" -#: lib/solaar/ui/rule_actions.py:271 +#: lib/solaar/ui/rule_actions.py:273 msgid "Add argument" msgstr "" diff --git a/share/solaar/icons/solaar-attention-dark-filled.svg b/share/solaar/icons/solaar-attention-dark-filled.svg new file mode 100644 index 00000000..c3945be1 --- /dev/null +++ b/share/solaar/icons/solaar-attention-dark-filled.svg @@ -0,0 +1,190 @@ + + + +Solaar attentionimage/svg+xmlSolaar attentionDaniel Pavel2013-06-25solaar-attention diff --git a/share/solaar/icons/solaar-filled.svg b/share/solaar/icons/solaar-filled.svg new file mode 100644 index 00000000..521c56ae --- /dev/null +++ b/share/solaar/icons/solaar-filled.svg @@ -0,0 +1,129 @@ + + + +Solaarimage/svg+xmlSolaarDaniel Pavel2013-06-25solaar diff --git a/share/solaar/icons/solaar-init-dark-filled.svg b/share/solaar/icons/solaar-init-dark-filled.svg new file mode 100644 index 00000000..9a14b24d --- /dev/null +++ b/share/solaar/icons/solaar-init-dark-filled.svg @@ -0,0 +1,234 @@ + + + +Solaar initimage/svg+xmlSolaar initDaniel Pavel2013-06-25solaar-init diff --git a/share/solaar/icons/solaar-init-dark-rotate-filled.svg b/share/solaar/icons/solaar-init-dark-rotate-filled.svg new file mode 100644 index 00000000..c42228a2 --- /dev/null +++ b/share/solaar/icons/solaar-init-dark-rotate-filled.svg @@ -0,0 +1,241 @@ + + + +Solaar initimage/svg+xmlSolaar initDaniel Pavel2013-06-25solaar-init diff --git a/share/solaar/icons/solaar-symbolic-dark-filled.svg b/share/solaar/icons/solaar-symbolic-dark-filled.svg new file mode 100644 index 00000000..39c518d3 --- /dev/null +++ b/share/solaar/icons/solaar-symbolic-dark-filled.svg @@ -0,0 +1,182 @@ + + + +Solaarimage/svg+xmlSolaarDaniel Pavel2013-06-25solaar diff --git a/share/solaar/icons/solaar-symbolic-filled.svg b/share/solaar/icons/solaar-symbolic-filled.svg new file mode 100644 index 00000000..71d722c2 --- /dev/null +++ b/share/solaar/icons/solaar-symbolic-filled.svg @@ -0,0 +1,182 @@ + + + +Solaarimage/svg+xmlSolaarDaniel Pavel2013-06-25solaar diff --git a/share/solaar/io.github.pwr_solaar.solaar.metainfo.xml b/share/solaar/io.github.pwr_solaar.solaar.metainfo.xml index a3277e07..b0b53b67 100644 --- a/share/solaar/io.github.pwr_solaar.solaar.metainfo.xml +++ b/share/solaar/io.github.pwr_solaar.solaar.metainfo.xml @@ -48,6 +48,7 @@ + diff --git a/tests/logitech_receiver/test_hidpp10.py b/tests/logitech_receiver/test_hidpp10.py index 4147c89a..f6d2015a 100644 --- a/tests/logitech_receiver/test_hidpp10.py +++ b/tests/logitech_receiver/test_hidpp10.py @@ -248,7 +248,7 @@ def test_set_3leds_missing(device, mocker): def test_get_notification_flags(device): result = _hidpp10.get_notification_flags(device) - assert result == int("000900", 16) + assert result == hidpp10_constants.NotificationFlag(int("000900", 16)) def test_set_notification_flags(mocker): diff --git a/tests/solaar/ui/test_pair_window.py b/tests/solaar/ui/test_pair_window.py index ec6c3309..f31f4801 100644 --- a/tests/solaar/ui/test_pair_window.py +++ b/tests/solaar/ui/test_pair_window.py @@ -1,10 +1,8 @@ from dataclasses import dataclass from dataclasses import field from typing import Any -from typing import Callable from typing import List from typing import Optional -from unittest import mock import gi import pytest @@ -26,7 +24,6 @@ class Device: @dataclass class Receiver: - find_paired_node_wpid_func: Callable[[str, int], Any] name: str receiver_kind: str _set_lock: bool = True @@ -87,12 +84,12 @@ class Assistant: @pytest.mark.parametrize( "receiver, lock_open, discovering, page_type", [ - (Receiver(mock.Mock(), "unifying", "unifying", True), True, False, Gtk.AssistantPageType.PROGRESS), - (Receiver(mock.Mock(), "unifying", "unifying", False), False, False, Gtk.AssistantPageType.SUMMARY), - (Receiver(mock.Mock(), "nano", "nano", True, _remaining_pairings=5), True, False, Gtk.AssistantPageType.PROGRESS), - (Receiver(mock.Mock(), "nano", "nano", False), False, False, Gtk.AssistantPageType.SUMMARY), - (Receiver(mock.Mock(), "bolt", "bolt", True), False, True, Gtk.AssistantPageType.PROGRESS), - (Receiver(mock.Mock(), "bolt", "bolt", False), False, False, Gtk.AssistantPageType.SUMMARY), + (Receiver("unifying", "unifying", True), True, False, Gtk.AssistantPageType.PROGRESS), + (Receiver("unifying", "unifying", False), False, False, Gtk.AssistantPageType.SUMMARY), + (Receiver("nano", "nano", True, _remaining_pairings=5), True, False, Gtk.AssistantPageType.PROGRESS), + (Receiver("nano", "nano", False), False, False, Gtk.AssistantPageType.SUMMARY), + (Receiver("bolt", "bolt", True), False, True, Gtk.AssistantPageType.PROGRESS), + (Receiver("bolt", "bolt", False), False, False, Gtk.AssistantPageType.SUMMARY), ], ) def test_create(receiver, lock_open, discovering, page_type): @@ -108,10 +105,10 @@ def test_create(receiver, lock_open, discovering, page_type): @pytest.mark.parametrize( "receiver, expected_result, expected_error", [ - (Receiver(mock.Mock(), "unifying", "unifying", True), True, False), - (Receiver(mock.Mock(), "unifying", "unifying", False), False, True), - (Receiver(mock.Mock(), "bolt", "bolt", True), True, False), - (Receiver(mock.Mock(), "bolt", "bolt", False), False, True), + (Receiver("unifying", "unifying", True), True, False), + (Receiver("unifying", "unifying", False), False, True), + (Receiver("bolt", "bolt", True), True, False), + (Receiver("bolt", "bolt", False), False, True), ], ) def test_prepare(receiver, expected_result, expected_error): @@ -123,7 +120,7 @@ def test_prepare(receiver, expected_result, expected_error): @pytest.mark.parametrize("assistant, expected_result", [(Assistant(True), True), (Assistant(False), False)]) def test_check_lock_state_drawable(assistant, expected_result): - r = Receiver(mock.Mock(), "succeed", "unifying", True, receiver.Pairing(lock_open=True)) + r = Receiver("succeed", "unifying", True, receiver.Pairing(lock_open=True)) result = pair_window.check_lock_state(assistant, r, 2) @@ -134,24 +131,23 @@ def test_check_lock_state_drawable(assistant, expected_result): @pytest.mark.parametrize( "receiver, count, expected_result", [ - (Receiver(mock.Mock(), "fail", "unifying", False, receiver.Pairing(lock_open=False)), 2, False), - (Receiver(mock.Mock(), "succeed", "unifying", True, receiver.Pairing(lock_open=True)), 1, True), - (Receiver(mock.Mock(), "error", "unifying", True, receiver.Pairing(error="error")), 0, False), - (Receiver(mock.Mock(), "new device", "unifying", True, receiver.Pairing(new_device=Device())), 2, False), - (Receiver(mock.Mock(), "closed", "unifying", True, receiver.Pairing()), 2, False), - (Receiver(mock.Mock(), "closed", "unifying", True, receiver.Pairing()), 1, False), - (Receiver(mock.Mock(), "closed", "unifying", True, receiver.Pairing()), 0, False), - (Receiver(mock.Mock(), "fail bolt", "bolt", False), 1, False), - (Receiver(mock.Mock(), "succeed bolt", "bolt", True, receiver.Pairing(lock_open=True)), 0, True), - (Receiver(mock.Mock(), "error bolt", "bolt", True, receiver.Pairing(error="error")), 2, False), - (Receiver(mock.Mock(), "new device", "bolt", True, receiver.Pairing(lock_open=True, new_device=Device())), 1, False), - (Receiver(mock.Mock(), "discovering", "bolt", True, receiver.Pairing(lock_open=True)), 1, True), - (Receiver(mock.Mock(), "closed", "bolt", True, receiver.Pairing()), 2, False), - (Receiver(mock.Mock(), "closed", "bolt", True, receiver.Pairing()), 1, False), - (Receiver(mock.Mock(), "closed", "bolt", True, receiver.Pairing()), 0, False), + (Receiver("fail", "unifying", False, receiver.Pairing(lock_open=False)), 2, False), + (Receiver("succeed", "unifying", True, receiver.Pairing(lock_open=True)), 1, True), + (Receiver("error", "unifying", True, receiver.Pairing(error="error")), 0, False), + (Receiver("new device", "unifying", True, receiver.Pairing(new_device=Device())), 2, False), + (Receiver("closed", "unifying", True, receiver.Pairing()), 2, False), + (Receiver("closed", "unifying", True, receiver.Pairing()), 1, False), + (Receiver("closed", "unifying", True, receiver.Pairing()), 0, False), + (Receiver("fail bolt", "bolt", False), 1, False), + (Receiver("succeed bolt", "bolt", True, receiver.Pairing(lock_open=True)), 0, True), + (Receiver("error bolt", "bolt", True, receiver.Pairing(error="error")), 2, False), + (Receiver("new device", "bolt", True, receiver.Pairing(lock_open=True, new_device=Device())), 1, False), + (Receiver("discovering", "bolt", True, receiver.Pairing(lock_open=True)), 1, True), + (Receiver("closed", "bolt", True, receiver.Pairing()), 2, False), + (Receiver("closed", "bolt", True, receiver.Pairing()), 1, False), + (Receiver("closed", "bolt", True, receiver.Pairing()), 0, False), ( Receiver( - mock.Mock(), "pass1", "bolt", True, @@ -162,7 +158,6 @@ def test_check_lock_state_drawable(assistant, expected_result): ), ( Receiver( - mock.Mock(), "pass2", "bolt", True, @@ -173,7 +168,6 @@ def test_check_lock_state_drawable(assistant, expected_result): ), ( Receiver( - mock.Mock(), "adt", "bolt", True, @@ -185,7 +179,6 @@ def test_check_lock_state_drawable(assistant, expected_result): ), ( Receiver( - mock.Mock(), "adf", "bolt", True, @@ -195,7 +188,7 @@ def test_check_lock_state_drawable(assistant, expected_result): 2, False, ), - (Receiver(mock.Mock(), "add fail", "bolt", False, receiver.Pairing(device_address=2, device_passkey=5)), 2, False), + (Receiver("add fail", "bolt", False, receiver.Pairing(device_address=2, device_passkey=5)), 2, False), ], ) def test_check_lock_state(receiver, count, expected_result): @@ -210,22 +203,22 @@ def test_check_lock_state(receiver, count, expected_result): "receiver, pair_device, set_lock, discover, error", [ ( - Receiver(mock.Mock(), "unifying", "unifying", pairing=receiver.Pairing(lock_open=False, error="error")), + Receiver("unifying", "unifying", pairing=receiver.Pairing(lock_open=False, error="error")), 0, 0, 0, None, ), ( - Receiver(mock.Mock(), "unifying", "unifying", pairing=receiver.Pairing(lock_open=True, error="error")), + Receiver("unifying", "unifying", pairing=receiver.Pairing(lock_open=True, error="error")), 0, 1, 0, "error", ), - (Receiver(mock.Mock(), "bolt", "bolt", pairing=receiver.Pairing(lock_open=False, error="error")), 0, 0, 0, None), - (Receiver(mock.Mock(), "bolt", "bolt", pairing=receiver.Pairing(lock_open=True, error="error")), 1, 0, 0, "error"), - (Receiver(mock.Mock(), "bolt", "bolt", pairing=receiver.Pairing(discovering=True, error="error")), 0, 0, 1, "error"), + (Receiver("bolt", "bolt", pairing=receiver.Pairing(lock_open=False, error="error")), 0, 0, 0, None), + (Receiver("bolt", "bolt", pairing=receiver.Pairing(lock_open=True, error="error")), 1, 0, 0, "error"), + (Receiver("bolt", "bolt", pairing=receiver.Pairing(discovering=True, error="error")), 0, 0, 1, "error"), ], ) def test_finish(receiver, pair_device, set_lock, discover, error, mocker): @@ -247,6 +240,6 @@ def test_finish(receiver, pair_device, set_lock, discover, error, mocker): def test_create_failure_page(error, mocker): spy_create = mocker.spy(pair_window, "_create_page") - pair_window._pairing_failed(Assistant(True), Receiver(mock.Mock(), "nano", "nano"), error) + pair_window._pairing_failed(Assistant(True), Receiver("nano", "nano"), error) assert spy_create.call_count == 1