Externalized some signal handler logic to new files, better keybinding control
This commit is contained in:
		| @@ -9,6 +9,7 @@ from gi.repository import Gdk | ||||
| from gi.repository import GLib | ||||
|  | ||||
| # Application imports | ||||
| from .mixins.signals_mixins import SignalsMixins | ||||
| from .mixins.dummy_mixin import DummyMixin | ||||
| from .controller_data import ControllerData | ||||
| from .core_widget import CoreWidget | ||||
| @@ -16,7 +17,7 @@ from .core_widget import CoreWidget | ||||
|  | ||||
|  | ||||
|  | ||||
| class Controller(DummyMixin, ControllerData): | ||||
| class Controller(DummyMixin, SignalsMixins, ControllerData): | ||||
|     def __init__(self, args, unknownargs): | ||||
|         self._setup_styling() | ||||
|         self._setup_signals() | ||||
| @@ -38,9 +39,6 @@ class Controller(DummyMixin, ControllerData): | ||||
|     def _subscribe_to_events(self): | ||||
|         event_system.subscribe("handle_file_from_ipc", self.handle_file_from_ipc) | ||||
|  | ||||
|     def handle_file_from_ipc(self, path: str) -> None: | ||||
|         print(f"Path From IPC: {path}") | ||||
|  | ||||
|     def load_glade_file(self): | ||||
|         self.builder     = Gtk.Builder() | ||||
|         self.builder.add_from_file(settings.get_glade_file()) | ||||
| @@ -53,24 +51,3 @@ class Controller(DummyMixin, ControllerData): | ||||
|  | ||||
|     def get_core_widget(self): | ||||
|         return self.core_widget | ||||
|  | ||||
|  | ||||
|     def on_global_key_release_controller(self, widget: type, event: type) -> None: | ||||
|         """Handler for keyboard events""" | ||||
|         keyname = Gdk.keyval_name(event.keyval).lower() | ||||
|         if keyname.replace("_l", "").replace("_r", "") in ["control", "alt", "shift"]: | ||||
|             if "control" in keyname: | ||||
|                 self.ctrl_down    = False | ||||
|             if "shift" in keyname: | ||||
|                 self.shift_down   = False | ||||
|             if "alt" in keyname: | ||||
|                 self.alt_down     = False | ||||
|  | ||||
|  | ||||
|         mapping = keybindings.lookup(event) | ||||
|         if mapping: | ||||
|             getattr(self, mapping)() | ||||
|             return True | ||||
|         else: | ||||
|             print(f"on_global_key_release_controller > key > {keyname}") | ||||
|             print(f"Add logic or remove this from: {self.__class__}") | ||||
|   | ||||
| @@ -17,6 +17,9 @@ class ControllerData: | ||||
|         self.window      = settings.get_main_window() | ||||
|         self.builder     = None | ||||
|         self.core_widget = None | ||||
|         self.ctrl_down   = False | ||||
|         self.shift_down  = False | ||||
|         self.alt_down    = False | ||||
|  | ||||
|         self.load_glade_file() | ||||
|         self.plugins     = PluginsController() | ||||
|   | ||||
							
								
								
									
										3
									
								
								src/core/mixins/signals/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/core/mixins/signals/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| """ | ||||
|     Signals module | ||||
| """ | ||||
							
								
								
									
										17
									
								
								src/core/mixins/signals/ipc_signals_mixin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/core/mixins/signals/ipc_signals_mixin.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| # Python imports | ||||
|  | ||||
| # Lib imports | ||||
|  | ||||
| # Application imports | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| class IPCSignalsMixin: | ||||
|     """ IPCSignalsMixin handle messages from another starting solarfm process. """ | ||||
|  | ||||
|     def print_to_console(self, message=None): | ||||
|         print(message) | ||||
|  | ||||
|     def handle_file_from_ipc(self, path: str) -> None: | ||||
|         print(f"Path From IPC: {path}") | ||||
							
								
								
									
										75
									
								
								src/core/mixins/signals/keyboard_signals_mixin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								src/core/mixins/signals/keyboard_signals_mixin.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | ||||
| # Python imports | ||||
| import re | ||||
|  | ||||
| # Lib imports | ||||
| import gi | ||||
| gi.require_version('Gtk', '3.0') | ||||
| gi.require_version('Gdk', '3.0') | ||||
| from gi.repository import Gtk | ||||
| from gi.repository import Gdk | ||||
|  | ||||
| # Application imports | ||||
|  | ||||
|  | ||||
|  | ||||
| valid_keyvalue_pat = re.compile(r"[a-z0-9A-Z-_\[\]\(\)\| ]") | ||||
|  | ||||
|  | ||||
|  | ||||
| class KeyboardSignalsMixin: | ||||
|     """ KeyboardSignalsMixin keyboard hooks controller. """ | ||||
|  | ||||
|     # TODO: Need to set methods that use this to somehow check the keybindings state instead. | ||||
|     def unset_keys_and_data(self, widget=None, eve=None): | ||||
|         self.ctrl_down    = False | ||||
|         self.shift_down   = False | ||||
|         self.alt_down     = False | ||||
|  | ||||
|     def on_global_key_press_controller(self, eve, user_data): | ||||
|         keyname = Gdk.keyval_name(user_data.keyval).lower() | ||||
|         if keyname.replace("_l", "").replace("_r", "") in ["control", "alt", "shift"]: | ||||
|             if "control" in keyname: | ||||
|                 self.ctrl_down    = True | ||||
|             if "shift" in keyname: | ||||
|                 self.shift_down   = True | ||||
|             if "alt" in keyname: | ||||
|                 self.alt_down     = True | ||||
|  | ||||
|     def on_global_key_release_controller(self, widget, event): | ||||
|         """ Handler for keyboard events """ | ||||
|         keyname = Gdk.keyval_name(event.keyval).lower() | ||||
|         if keyname.replace("_l", "").replace("_r", "") in ["control", "alt", "shift"]: | ||||
|             if "control" in keyname: | ||||
|                 self.ctrl_down    = False | ||||
|             if "shift" in keyname: | ||||
|                 self.shift_down   = False | ||||
|             if "alt" in keyname: | ||||
|                 self.alt_down     = False | ||||
|  | ||||
|         mapping = keybindings.lookup(event) | ||||
|         if mapping: | ||||
|             # See if in controller scope | ||||
|             try: | ||||
|                 getattr(self, mapping)() | ||||
|                 return True | ||||
|             except Exception: | ||||
|                 # Must be plugins scope, event call, OR we forgot to add method to controller scope | ||||
|                 if "||" in mapping: | ||||
|                     sender, eve_type = mapping.split("||") | ||||
|                 else: | ||||
|                     sender = "" | ||||
|                     eve_type = mapping | ||||
|  | ||||
|                 self.handle_key_event_system(sender, eve_type) | ||||
|         else: | ||||
|             logger.debug(f"on_global_key_release_controller > key > {keyname}") | ||||
|  | ||||
|             if self.ctrl_down: | ||||
|                 if keyname in ["1", "kp_1", "2", "kp_2", "3", "kp_3", "4", "kp_4"]: | ||||
|                     ... | ||||
|  | ||||
|     def handle_key_event_system(self, sender, eve_type): | ||||
|         event_system.emit(eve_type) | ||||
|  | ||||
|     def keyboard_close_tab(self): | ||||
|         ... | ||||
							
								
								
									
										13
									
								
								src/core/mixins/signals_mixins.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/core/mixins/signals_mixins.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| # Python imports | ||||
|  | ||||
| # Lib imports | ||||
| from .signals.ipc_signals_mixin import IPCSignalsMixin | ||||
| from .signals.keyboard_signals_mixin import KeyboardSignalsMixin | ||||
|  | ||||
| # Application imports | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| class SignalsMixins(KeyboardSignalsMixin, IPCSignalsMixin): | ||||
|     ... | ||||
		Reference in New Issue
	
	Block a user