diff --git a/lib/logitech_receiver/hidpp20.py b/lib/logitech_receiver/hidpp20.py index 8b441b6f..d6494962 100644 --- a/lib/logitech_receiver/hidpp20.py +++ b/lib/logitech_receiver/hidpp20.py @@ -328,13 +328,19 @@ class KeysArray(object): if self.keyversion == 1: self.keys[index] = _ReprogrammableKeyInfo(index, ctrl_id_text, ctrl_task_text, flags) if self.keyversion == 4: - mapped_data = feature_request(self.device, FEATURE.REPROG_CONTROLS_V4, 0x20, key&0xff00, key&0xff) - if mapped_data: - remap_key, remap_flag, remapped = _unpack('!HBH', mapped_data[:5]) - # if key not mapped map it to itself for display - if remapped == 0: - remapped = key - remapped_text = special_keys.CONTROL[remapped] + try: + mapped_data = feature_request(self.device, FEATURE.REPROG_CONTROLS_V4, 0x20, key&0xff00, key&0xff) + if mapped_data: + remap_key, remap_flag, remapped = _unpack('!HBH', mapped_data[:5]) + # if key not mapped map it to itself for display + if remapped == 0: + remapped = key + except Exception: + remapped = key + remap_key = key + remap_flag = 0 + + remapped_text = special_keys.CONTROL[remapped] self.keys[index] = _ReprogrammableKeyInfoV4(index, ctrl_id_text, ctrl_task_text, flags, pos, group, gmask, remapped_text) return self.keys[index] diff --git a/lib/logitech_receiver/listener.py b/lib/logitech_receiver/listener.py index 966fc35b..3f665ba7 100644 --- a/lib/logitech_receiver/listener.py +++ b/lib/logitech_receiver/listener.py @@ -222,7 +222,8 @@ class EventsListener(_threading.Thread): if self._active: # and _threading.current_thread() == self: # if _log.isEnabledFor(_DEBUG): # _log.debug("queueing unhandled %s", n) - self._queued_notifications.put(n) + if not self._queued_notifications.full(): + self._queued_notifications.put(n) def __bool__(self): return bool(self._active and self.receiver) diff --git a/lib/solaar/listener.py b/lib/solaar/listener.py index a7f9040d..04efd436 100644 --- a/lib/solaar/listener.py +++ b/lib/solaar/listener.py @@ -183,7 +183,9 @@ class ReceiverListener(_listener.EventsListener): # a device notification assert n.devnumber > 0 and n.devnumber <= self.receiver.max_devices already_known = n.devnumber in self.receiver - if not already_known and n.sub_id == 0x41: + + if n.sub_id == 0x41: + already_known = False dev = self.receiver.register_new_device(n.devnumber, n) else: dev = self.receiver[n.devnumber] diff --git a/lib/solaar/ui/notify.py b/lib/solaar/ui/notify.py index 3bca1049..2fa4eee6 100644 --- a/lib/solaar/ui/notify.py +++ b/lib/solaar/ui/notify.py @@ -35,7 +35,16 @@ try: from gi.repository import Notify # assumed to be working since the import succeeded - available = True + # available = True + + # This is not working on Fedora 26. If fails with: + # ERROR [MainThread] solaar.ui.notify: showing + # File "./solaar/lib/solaar/ui/notify.py", line 145, in show + # n.show() + # Error: g-io-error-quark: Error calling StartServiceByName for org.freedesktop.Notifications: Timeout was reached (24) + + available = False + except (ValueError, ImportError): available = False