SolarFM/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/signals/keyboard_signals_mixin.py

114 lines
4.5 KiB
Python

# 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, Gdk
# Application imports
valid_keyvalue_pat = re.compile(r"[a-z0-9A-Z-_\[\]\(\)\| ]")
class KeyboardSignalsMixin:
""" KeyboardSignalsMixin keyboard hooks controller. """
def unset_keys_and_data(self, widget=None, eve=None):
self.ctrl_down = False
self.shift_down = False
self.alt_down = False
self.is_searching = False
def 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
# NOTE: Yes, this should actually be mapped to some key controller setting
# file or something. Sue me.
def global_key_release_controller(self, eve, user_data):
keyname = Gdk.keyval_name(user_data.keyval).lower()
if debug:
print(f"global_key_release_controller > key > {keyname}")
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
if self.ctrl_down and self.shift_down and keyname == "t":
self.unset_keys_and_data()
self.trash_files()
if re.fullmatch(valid_keyvalue_pat, keyname):
if not self.is_searching and not self.ctrl_down \
and not self.shift_down and not self.alt_down:
focused_obj = self.window.get_focus()
if isinstance(focused_obj, Gtk.IconView):
self.is_searching = True
wid, tid, self.search_tab, self.search_icon_grid, store = self.get_current_state()
self.unset_keys_and_data()
self.popup_search_files(wid, keyname)
return
if (self.ctrl_down and keyname in ["1", "kp_1", "2", "kp_2", "3", "kp_3", "4", "kp_4"]):
self.builder.get_object(f"tggl_notebook_{keyname.strip('kp_')}").released()
if keyname in ["alt_l", "alt_r"]:
top_main_menubar = self.builder.get_object("top_main_menubar")
top_main_menubar.hide() if top_main_menubar.is_visible() else top_main_menubar.show()
if self.ctrl_down and keyname == "q":
self.tear_down()
if (self.ctrl_down and keyname == "slash") or keyname == "home":
self.builder.get_object("go_home").released()
if (self.ctrl_down and keyname == "r") or keyname == "f5":
self.builder.get_object("refresh_tab").released()
if (self.ctrl_down and keyname == "up") or (self.ctrl_down and keyname == "u"):
self.builder.get_object("go_up").released()
if self.ctrl_down and keyname == "l":
self.unset_keys_and_data()
self.builder.get_object("path_entry").grab_focus()
if self.ctrl_down and keyname == "t":
self.builder.get_object("create_tab").released()
if self.ctrl_down and keyname == "o":
self.unset_keys_and_data()
self.open_files()
if self.ctrl_down and keyname == "w":
self.keyboard_close_tab()
if self.ctrl_down and keyname == "h":
self.show_hide_hidden_files()
if (self.ctrl_down and keyname == "e"):
self.unset_keys_and_data()
self.rename_files()
if self.ctrl_down and keyname == "c":
self.copy_files()
self.to_cut_files.clear()
if self.ctrl_down and keyname == "x":
self.to_copy_files.clear()
self.cut_files()
if self.ctrl_down and keyname == "v":
self.paste_files()
if self.ctrl_down and keyname == "n":
self.unset_keys_and_data()
self.show_new_file_menu()
if keyname == "delete":
self.unset_keys_and_data()
self.delete_files()
if keyname == "f2":
self.unset_keys_and_data()
self.rename_files()
if keyname == "f4":
self.unset_keys_and_data()
self.open_terminal()