[bug 808] Plugins-dont-receive-keboard-signals-on-newly-opened-windows

- code separated for force loading of plugins on every terminal instance
This commit is contained in:
Vishweshwar Saran Singh Deo 2023-08-09 16:31:41 +05:30
parent 0fea7d47e5
commit 3b4d32cda3
2 changed files with 24 additions and 3 deletions

View File

@ -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))

View File

@ -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: