From 3b4d32cda315c8c33b7ce585b07c4c7ee78b658e Mon Sep 17 00:00:00 2001 From: Vishweshwar Saran Singh Deo Date: Wed, 9 Aug 2023 16:31:41 +0530 Subject: [PATCH] [bug 808] Plugins-dont-receive-keboard-signals-on-newly-opened-windows - code separated for force loading of plugins on every terminal instance --- terminatorlib/plugin.py | 16 +++++++++++++--- terminatorlib/terminal.py | 11 +++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/terminatorlib/plugin.py b/terminatorlib/plugin.py index 7a0487a4..ac9d3aa9 100644 --- a/terminatorlib/plugin.py +++ b/terminatorlib/plugin.py @@ -69,12 +69,14 @@ class PluginRegistry(borg.Borg): if not self.available_plugins: self.available_plugins = {} - def load_plugins(self): + def load_plugins(self, force=False): """Load all plugins present in the plugins/ directory in our module""" - if self.done: + if self.done and (not force): dbg('Already loaded') return + dbg('loading plugins, force:(%s)' % force) + config = Config() for plugindir in self.path: @@ -93,8 +95,8 @@ class PluginRegistry(borg.Borg): try: module = __import__(plugin[:-3], None, None, ['']) for item in getattr(module, 'AVAILABLE'): + func = getattr(module, item) if item not in list(self.available_plugins.keys()): - func = getattr(module, item) self.available_plugins[item] = func if item not in config['enabled_plugins']: @@ -102,6 +104,14 @@ class PluginRegistry(borg.Borg): continue if item not in self.instances: self.instances[item] = func() + elif force: + #instead of multiple copies of loaded + #plugin objects, unload where plugins + #can clean up and then re-init so there + #is one plugin object + self.instances[item].unload() + self.instances.pop(item, None) + self.instances[item] = func() except Exception as ex: err('PluginRegistry::load_plugins: Importing plugin %s \ failed: %s' % (plugin, ex)) diff --git a/terminatorlib/terminal.py b/terminatorlib/terminal.py index 914d69d7..8680d20b 100644 --- a/terminatorlib/terminal.py +++ b/terminatorlib/terminal.py @@ -156,6 +156,13 @@ class Terminal(Gtk.VBox): dbg('composite_support: %s' % self.composite_support) self.vte.show() + + #force to load for new window/terminal use case loading plugin + #and connecting signals, note the line update_url_matches also + #calls load_plugins, but it won't reload since already loaded + + self.load_plugins(force = True) + self.update_url_matches() self.terminalbox = self.create_terminalbox() @@ -285,6 +292,10 @@ class Terminal(Gtk.VBox): return(terminalbox) + def load_plugins(self, force = False): + registry = plugin.PluginRegistry() + registry.load_plugins(force) + def _add_regex(self, name, re): match = -1 if regex.FLAGS_PCRE2: