diff --git a/safeeyes/glade/item_plugin.glade b/safeeyes/glade/item_plugin.glade index 377eb28..6cea3f3 100644 --- a/safeeyes/glade/item_plugin.glade +++ b/safeeyes/glade/item_plugin.glade @@ -26,6 +26,11 @@ False gtk-properties + + True + False + _Cancel + True False @@ -124,11 +129,19 @@ end center - - False - True - 0 - + + + + False + center + center + img_disable + Disable permanently + True + + @@ -143,11 +156,6 @@ - - False - False - 1 - diff --git a/safeeyes/plugin_manager.py b/safeeyes/plugin_manager.py index ec6b30a..1bc3f8f 100644 --- a/safeeyes/plugin_manager.py +++ b/safeeyes/plugin_manager.py @@ -303,7 +303,7 @@ class PluginManager: # Check for dependencies message = utility.check_plugin_dependencies(plugin['id'], plugin_config, plugin.get('settings', {}), plugin_path) if message: - if plugin_config['required_plugin']: + if plugin_config.get('required_plugin', False): raise RequiredPluginException( plugin['id'], plugin_config['meta']['name'], diff --git a/safeeyes/ui/settings_dialog.py b/safeeyes/ui/settings_dialog.py index e17c965..62f54f4 100644 --- a/safeeyes/ui/settings_dialog.py +++ b/safeeyes/ui/settings_dialog.py @@ -232,18 +232,24 @@ class SettingsDialog: lbl_plugin_name.set_sensitive(False) lbl_plugin_description.set_sensitive(False) switch_enable.set_sensitive(False) + btn_properties.set_sensitive(False) + if plugin_config['enabled']: + btn_disable_errored = builder.get_object('btn_disable_errored') + btn_disable_errored.set_visible(True) + btn_disable_errored.connect('clicked', lambda button: self.__disable_errored_plugin(button, plugin_config)) + else: lbl_plugin_description.set_label(_(plugin_config['meta']['description'])) + if plugin_config['settings']: + btn_properties.set_sensitive(True) + btn_properties.connect('clicked', lambda button: self.__show_plugins_properties_dialog(plugin_config)) + else: + btn_properties.set_sensitive(False) self.plugin_switches[plugin_config['id']] = switch_enable if plugin_config.get('break_override_allowed', False): self.plugin_map[plugin_config['id']] = plugin_config['meta']['name'] if plugin_config['icon']: builder.get_object('img_plugin_icon').set_from_file(plugin_config['icon']) - if plugin_config['settings']: - btn_properties.set_sensitive(True) - btn_properties.connect('clicked', lambda button: self.__show_plugins_properties_dialog(plugin_config)) - else: - btn_properties.set_sensitive(False) box = builder.get_object('box') box.set_visible(True) return box @@ -255,6 +261,13 @@ class SettingsDialog: dialog = PluginSettingsDialog(plugin_config) dialog.show() + def __disable_errored_plugin(self, button, plugin_config): + """ + Permanently disable errored plugin + """ + button.set_sensitive(False) + self.plugin_switches[plugin_config['id']].set_active(False) + def __show_break_properties_dialog(self, break_config, is_short, parent, on_close, on_add, on_remove): """ Show the BreakProperties dialog diff --git a/safeeyes/utility.py b/safeeyes/utility.py index f441109..022d63c 100644 --- a/safeeyes/utility.py +++ b/safeeyes/utility.py @@ -241,7 +241,6 @@ def load_plugins_config(safeeyes_config): continue dependency_description = check_plugin_dependencies(plugin['id'], config, plugin.get('settings', {}), plugin_path) if dependency_description: - plugin['enabled'] = False config['error'] = True config['meta']['dependency_description'] = dependency_description icon = get_resource_path('ic_warning.png')