From 3ad2a00dc98bcb94732d47df6361233b57317f07 Mon Sep 17 00:00:00 2001 From: Christian Tu Date: Fri, 17 Sep 2021 15:50:45 +0200 Subject: [PATCH] initialize event handler lists in Key objects only when needed to reduce memory footprint --- kmk/keys.py | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/kmk/keys.py b/kmk/keys.py index 4ebc5cf..2ca9978 100644 --- a/kmk/keys.py +++ b/kmk/keys.py @@ -401,10 +401,6 @@ class Key: self.no_press = bool(no_press) self.no_release = bool(no_press) - self._pre_press_handlers = [] - self._post_press_handlers = [] - self._pre_release_handlers = [] - self._post_release_handlers = [] self._handle_press = on_press self._handle_release = on_release self.meta = meta @@ -424,26 +420,30 @@ class Key: return 'Key(code={}, has_modifiers={})'.format(self.code, self.has_modifiers) def on_press(self, state, coord_int, coord_raw): - for fn in self._pre_press_handlers: - if not fn(self, state, KC, coord_int, coord_raw): - return None + if hasattr(self, '_pre_press_handlers'): + for fn in self._pre_press_handlers: + if not fn(self, state, KC, coord_int, coord_raw): + return None ret = self._handle_press(self, state, KC, coord_int, coord_raw) - for fn in self._post_press_handlers: - fn(self, state, KC, coord_int, coord_raw) + if hasattr(self, '_post_press_handlers'): + for fn in self._post_press_handlers: + fn(self, state, KC, coord_int, coord_raw) return ret def on_release(self, state, coord_int, coord_raw): - for fn in self._pre_release_handlers: - if not fn(self, state, KC, coord_int, coord_raw): - return None + if hasattr(self, '_pre_release_handlers'): + for fn in self._pre_release_handlers: + if not fn(self, state, KC, coord_int, coord_raw): + return None ret = self._handle_release(self, state, KC, coord_int, coord_raw) - for fn in self._post_release_handlers: - fn(self, state, KC, coord_int, coord_raw) + if hasattr(self, '_post_release_handlers'): + for fn in self._post_release_handlers: + fn(self, state, KC, coord_int, coord_raw) return ret @@ -485,6 +485,8 @@ class Key: calls of this method will be executed before those provided by later calls. ''' + if not hasattr(self, '_pre_press_handlers'): + self._pre_press_handlers = [] self._pre_press_handlers.append(fn) return self @@ -508,6 +510,8 @@ class Key: calls of this method will be executed before those provided by later calls. ''' + if not hasattr(self, '_post_press_handlers'): + self._post_press_handlers = [] self._post_press_handlers.append(fn) return self @@ -532,6 +536,8 @@ class Key: calls of this method will be executed before those provided by later calls. ''' + if not hasattr(self, '_pre_release_handlers'): + self._pre_release_handlers = [] self._pre_release_handlers.append(fn) return self @@ -555,6 +561,8 @@ class Key: calls of this method will be executed before those provided by later calls. ''' + if not hasattr(self, '_post_release_handlers'): + self._post_release_handlers = [] self._post_release_handlers.append(fn) return self