diff options
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/python/scripting/Makefile.am | 1 | ||||
| -rw-r--r-- | plugins/python/scripting/core.py | 23 | ||||
| -rw-r--r-- | plugins/python/scripting/manager.py | 53 | ||||
| -rw-r--r-- | plugins/python/scripting/panel.py | 16 | 
4 files changed, 28 insertions, 65 deletions
diff --git a/plugins/python/scripting/Makefile.am b/plugins/python/scripting/Makefile.am index 3c44f1f..c53be23 100644 --- a/plugins/python/scripting/Makefile.am +++ b/plugins/python/scripting/Makefile.am @@ -4,7 +4,6 @@ scriptingdir = $(pluginsdatadir)/python/scripting  scripting_DATA = 							\  	__init__.py								\  	core.py									\ -	manager.py								\  	panel.py								\  	panel.ui								\  	python-script-icon-16x16.png diff --git a/plugins/python/scripting/core.py b/plugins/python/scripting/core.py index 3e96c8e..c46ef07 100644 --- a/plugins/python/scripting/core.py +++ b/plugins/python/scripting/core.py @@ -1,5 +1,6 @@ -from gi.repository import Gtk +from gi.repository import GLib, Gtk +import os  from pychrysalide import PluginModule  from pychrysalide import core @@ -7,7 +8,6 @@ from pychrysalide.gui import core as gcore  from pychrysalide.gui import MenuBar  from pychrysalide.gtkext import EasyGtk -from .manager import get_recent_python_script_manager, remember_python_script  from .panel import ScriptPanel @@ -21,6 +21,8 @@ class ScriptingEngine(PluginModule):      _actions = ( PluginModule.PluginAction.PLUGINS_LOADED, PluginModule.PluginAction.PANEL_CREATION ) +    _manager = None +      def __init__(self):          """Initialize the plugin for Chrysalide.""" @@ -67,9 +69,9 @@ class ScriptingEngine(PluginModule):          if action == PluginModule.PluginAction.PLUGINS_LOADED: -            filename = self.build_config_filename('recents.xbel', True) +            xbel = self.build_config_filename('recents.xbel', True) -            get_recent_python_script_manager(filename) +            ScriptingEngine._manager = Gtk.RecentManager(filename=xbel)      def _on_panel_creation(self, action, item): @@ -77,6 +79,8 @@ class ScriptingEngine(PluginModule):          if type(item) == ScriptPanel: +            item.attach_manager(ScriptingEngine._manager) +              item.connect('run-requested', self._on_run_requested)              item.connect('ask-for-new-script', lambda x: self._on_file_run_script_activate(None)) @@ -116,7 +120,16 @@ class ScriptingEngine(PluginModule):          self.log_message(core.LogMessageType.INFO, 'Execute the script file \'%s\'' % filename) -        remember_python_script(filename) +        uri = GLib.filename_to_uri(filename) + +        recent_data = Gtk.RecentData() +        recent_data.app_name = 'Chrysalide Python plugin' +        recent_data.app_exec = 'chrysalide' +        recent_data.display_name = os.path.basename(filename) +        recent_data.description = 'Python script run inside Chrysalide' +        recent_data.mime_type = 'text/x-python' + +        ScriptingEngine._manager.add_full(uri, recent_data)          try:              with open(filename, 'r') as fd: diff --git a/plugins/python/scripting/manager.py b/plugins/python/scripting/manager.py deleted file mode 100644 index 6b27b48..0000000 --- a/plugins/python/scripting/manager.py +++ /dev/null @@ -1,53 +0,0 @@ - -import os - -from gi.repository import GLib, Gtk - - -_manager = None - - -def get_recent_python_script_manager(xbel = None): -    """Provide the manager for the recently run Python scripts.""" - -    global _manager - -    # As a first panel creation is forced by the Chrysalide core to register -    # its final GType, xbel is not defined at the first call of this function. -    # Thus relying on the definition of xbel is a better filter than relying -    # on the existence of _manager. -    # -    # In that special initial case, result is None - -    if not(xbel is None): - -        assert(_manager is None) - -        _manager = Gtk.RecentManager(filename=xbel) - -    return _manager - - -def remember_python_script(filename): -    """Register a Python script into the recents list.""" - -    uri = GLib.filename_to_uri(filename) - -    recent_data = Gtk.RecentData() -    recent_data.app_name = 'Chrysalide Python plugin' -    recent_data.app_exec = 'chrysalide' -    recent_data.display_name = os.path.basename(filename) -    recent_data.description = 'Python script run inside Chrysalide' -    recent_data.mime_type = 'text/x-python' - -    manager = get_recent_python_script_manager() -    manager.add_full(uri, recent_data) - - -def forget_python_script(filename): -    """Unregister a Python script from the recents list.""" - -    uri = GLib.filename_to_uri(filename) - -    manager = get_recent_python_script_manager() -    manager.remove_item(uri) diff --git a/plugins/python/scripting/panel.py b/plugins/python/scripting/panel.py index 75b50e3..9c5d153 100644 --- a/plugins/python/scripting/panel.py +++ b/plugins/python/scripting/panel.py @@ -5,7 +5,6 @@ from pychrysalide.gtkext import BuiltNamedWidget  from pychrysalide.gui import core  from pychrysalide.gui import PanelItem -from .manager import get_recent_python_script_manager, forget_python_script  class ScriptPanel(PanelItem): @@ -35,6 +34,7 @@ class ScriptPanel(PanelItem):                                 GObject.TYPE_NONE, ())          self._last_selected = None +        self._manager = None          builder = self.named_widget.builder @@ -43,13 +43,15 @@ class ScriptPanel(PanelItem):          builder.connect_signals(self) -        manager = get_recent_python_script_manager() -        if manager: +    def attach_manager(self, manager): +        """Assign the recent manager to the panel.""" -            manager.connect("changed", self._on_recent_list_changed) +        self._manager = manager -            self._on_recent_list_changed(manager) +        manager.connect("changed", self._on_recent_list_changed) + +        self._on_recent_list_changed(manager)      def _on_row_activated(self, treeview, path, column): @@ -84,7 +86,9 @@ class ScriptPanel(PanelItem):              if treeiter: -                forget_python_script(model[treeiter][3]) +                uri = GLib.filename_to_uri(model[treeiter][3]) + +                self._manager.remove_item(uri)          elif event.keyval == Gdk.KEY_Insert:  | 
