diff --git a/src/cthulhu/plugins/Makefile.am b/src/cthulhu/plugins/Makefile.am index 9066cb3..a79ed41 100644 --- a/src/cthulhu/plugins/Makefile.am +++ b/src/cthulhu/plugins/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = Clipboard DisplayVersion hello_world self_voice ByeCthulhu HelloCthulhu PluginManager SimplePluginSystem +SUBDIRS = Clipboard DisplayVersion hello_world self_voice ByeCthulhu HelloCthulhu SimplePluginSystem cthulhu_pythondir=$(pkgpythondir)/plugins diff --git a/src/cthulhu/plugins/PluginManager/Makefile.am b/src/cthulhu/plugins/PluginManager/Makefile.am deleted file mode 100644 index 6bcb860..0000000 --- a/src/cthulhu/plugins/PluginManager/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -cthulhu_python_PYTHON = \ - __init__.py \ - PluginManager.plugin \ - PluginManager.py \ - PluginManagerUi.py - -cthulhu_pythondir=$(pkgpythondir)/plugins/PluginManager - diff --git a/src/cthulhu/plugins/PluginManager/PluginManager.plugin b/src/cthulhu/plugins/PluginManager/PluginManager.plugin deleted file mode 100644 index f992ba2..0000000 --- a/src/cthulhu/plugins/PluginManager/PluginManager.plugin +++ /dev/null @@ -1,14 +0,0 @@ -[Plugin] -Module=PluginManager -Loader=python3 -Name=Plugin Manager -Description=Activate and Deactivate plugins -Authors=Chrys chrys@linux-a11y.org -Website= -Version=1.0 -Copyright= -Builtin=true -Hidden=true -Depends= -Icon= -Help= diff --git a/src/cthulhu/plugins/PluginManager/PluginManager.py b/src/cthulhu/plugins/PluginManager/PluginManager.py deleted file mode 100644 index 6aadf1e..0000000 --- a/src/cthulhu/plugins/PluginManager/PluginManager.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (c) 2024 Stormux -# Copyright (c) 2010-2012 The Orca Team -# Copyright (c) 2012 Igalia, S.L. -# Copyright (c) 2005-2010 Sun Microsystems Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., Franklin Street, Fifth Floor, -# Boston MA 02110-1301 USA. -# -# Fork of Orca Screen Reader (GNOME) -# Original source: https://gitlab.gnome.org/GNOME/orca - -from cthulhu import plugin - -import gi -gi.require_version('Peas', '1.0') -from gi.repository import GObject -from gi.repository import Peas - -import PluginManagerUi - -class PluginManager(GObject.Object, Peas.Activatable, plugin.Plugin): - #__gtype_name__ = 'PluginManager' - - object = GObject.Property(type=GObject.Object) - def __init__(self): - plugin.Plugin.__init__(self) - self.pluginManagerUi = None - def do_activate(self): - API = self.object - self.registerGestureByString(self.startPluginManagerUi, _('plugin manager'), 'kb:cthulhu+e') - - def do_deactivate(self): - API = self.object - - def startPluginManagerUi(self, script=None, inputEvent=None): - self.showUI() - return True - def showUI(self): - API = self.object - if self.pluginManagerUi == None: - self.pluginManagerUi = PluginManagerUi.PluginManagerUi(API.app) - self.pluginManagerUi.setTranslationContext(self.getTranslationContext()) - self.pluginManagerUi.createUI() - self.pluginManagerUi.run() - self.pluginManagerUi = None - else: - self.pluginManagerUi.present() diff --git a/src/cthulhu/plugins/PluginManager/PluginManagerUi.py b/src/cthulhu/plugins/PluginManager/PluginManagerUi.py deleted file mode 100644 index f0fd353..0000000 --- a/src/cthulhu/plugins/PluginManager/PluginManagerUi.py +++ /dev/null @@ -1,307 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (c) 2024 Stormux -# Copyright (c) 2010-2012 The Orca Team -# Copyright (c) 2012 Igalia, S.L. -# Copyright (c) 2005-2010 Sun Microsystems Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., Franklin Street, Fifth Floor, -# Boston MA 02110-1301 USA. -# -# Fork of Orca Screen Reader (GNOME) -# Original source: https://gitlab.gnome.org/GNOME/orca - -import gi -gi.require_version("Gtk", "3.0") -from gi.repository import Gtk, Gdk - -class PluginManagerUi(Gtk.ApplicationWindow): - def __init__(self, app, *args, **kwargs): - super().__init__(*args, **kwargs, title=_("Cthulhu Plugin Manager")) - self.app = app - self.translationContext = None - self.connect("destroy", self._onCancelButtonClicked) - self.connect('key-press-event', self._onKeyPressWindow) - def createUI(self): - self.set_default_size(650, 650) - self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) - - # pluginInfo (object) = 0 - # name (str) = 1 - # active (bool) = 2 - # buildIn (bool) = 3 - # dataDir (str) = 4 - # moduleDir (str) = 5 - # dependencies (object) = 6 - # moduleName (str) = 7 - # description (str) = 8 - # authors (object) = 9 - # website (str) = 10 - # copyright (str) = 11 - # version (str) = 12 - # helpUri (str) = 13 - # iconName (str) = 14 - self.listStore = Gtk.ListStore(object,str, bool, bool, str, str,object,str,str,object,str,str,str,str,str) - - self.treeView = Gtk.TreeView(model=self.listStore) - self.treeView.connect("row-activated", self._rowActivated) - self.treeView.connect('key-press-event', self._onKeyPressTreeView) - - self.rendererText = Gtk.CellRendererText() - self.columnText = Gtk.TreeViewColumn(_("Name"), self.rendererText, text=1) - self.treeView.append_column(self.columnText) - - self.rendererToggle = Gtk.CellRendererToggle() - self.rendererToggle.connect("toggled", self._onCellToggled) - - self.columnToggle = Gtk.TreeViewColumn(_("Active"), self.rendererToggle, active=2) - self.treeView.append_column(self.columnToggle) - - - self.buttomBox = Gtk.Box(spacing=6) - self.mainVBox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) - self.mainVBox.pack_start(self.treeView, True, True, 0) - self.mainVBox.pack_start(self.buttomBox, False, True, 0) - - self.add(self.mainVBox) - self.oKButton = Gtk.Button.new_with_mnemonic(_("_Details")) - self.oKButton.connect("clicked", self._onDetailsButtonClicked) - self.buttomBox.pack_start(self.oKButton, True, True, 0) - - self.oKButton = Gtk.Button.new_with_mnemonic(_("_OK")) - self.oKButton.connect("clicked", self._onOkButtonClicked) - self.buttomBox.pack_start(self.oKButton, True, True, 0) - - self.applyButton = Gtk.Button.new_with_mnemonic(_("_Apply")) - self.applyButton.connect("clicked", self._onApplyButtonClicked) - self.buttomBox.pack_start(self.applyButton, True, True, 0) - - self.applyButton = Gtk.Button.new_with_mnemonic(_("_Install")) - self.applyButton.connect("clicked", self._onInstallButtonClicked) - self.buttomBox.pack_start(self.applyButton, True, True, 0) - - self.applyButton = Gtk.Button.new_with_mnemonic(_("_Uninstall")) - self.applyButton.connect("clicked", self._onUninstallButtonClicked) - self.buttomBox.pack_start(self.applyButton, True, True, 0) - - self.cancelButton = Gtk.Button.new_with_mnemonic(_("_Cancel")) - self.cancelButton.connect("clicked", self._onCancelButtonClicked) - self.buttomBox.pack_start(self.cancelButton, True, True, 0) - def setTranslationContext(self, translationContext): - self.translationContext = translationContext - global _ - _ = translationContext.gettext - def closeWindow(self): - Gtk.main_quit() - def uninstallPlugin(self): - selection = self.treeView.get_selection() - model, list_iter = selection.get_selected() - try: - if model.get_value(list_iter,0): - pluginInfo = model.get_value(list_iter,0) - pluginName = self.app.getPluginSystemManager().getPluginName(pluginInfo) - dialog = Gtk.MessageDialog(None, - Gtk.DialogFlags.MODAL, - type=Gtk.MessageType.INFO, - buttons=Gtk.ButtonsType.YES_NO) - - dialog.set_markup("%s" % _('Remove Plugin {}?').format(pluginName)) - dialog.format_secondary_markup(_('Do you really want to remove Plugin {}?').format(pluginName)) - response = dialog.run() - dialog.destroy() - if response != Gtk.ResponseType.YES: - return - self.app.getPluginSystemManager().uninstallPlugin(model.get_value(list_iter,0)) - self.refreshPluginList() - except: - pass - - def installPlugin(self): - ok, filePath = self.chooseFile() - if not ok: - return - self.app.getPluginSystemManager().installPlugin(filePath) - self.refreshPluginList() - - def _onKeyPressWindow(self, _, event): - _, key_val = event.get_keyval() - if key_val == Gdk.KEY_Escape: - self.closeWindow() - def _onKeyPressTreeView(self, _, event): - _, key_val = event.get_keyval() - if key_val == Gdk.KEY_Return: - self.applySettings() - self.closeWindow() - if key_val == Gdk.KEY_Escape: - self.closeWindow() - # CTRL + Q - #modifiers = event.get_state() - #if modifiers == Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD2_MASK: - # if key_val == Gdk.KEY_q: - # self._on_scan() - def applySettings(self): - for row in self.listStore: - pluginInfo = row[0] - isActive = row[2] - self.app.getPluginSystemManager().setPluginActive(pluginInfo, isActive) - gsettingsManager = self.app.getGsettingsManager() - gsettingsManager.set_settings_value_list('active-plugins', self.app.getPluginSystemManager().getActivePlugins()) - - self.app.getPluginSystemManager().syncAllPluginsActive() - self.refreshPluginList() - - - def _rowActivated(self, tree_view, path, column): - print('rowActivated') - def showDetails(self): - selection = self.treeView.get_selection() - model, list_iter = selection.get_selected() - try: - if model.get_value(list_iter,0): - pluginInfo = model.get_value(list_iter,0) - name = self.app.getPluginSystemManager().getPluginName(pluginInfo) - description = self.app.getPluginSystemManager().getPluginDescription(pluginInfo) - authors = self.app.getPluginSystemManager().getPluginAuthors(pluginInfo) - website =self.app.getPluginSystemManager().getPluginWebsite(pluginInfo) - copyright = self.app.getPluginSystemManager().getPluginCopyright(pluginInfo) - license = '' #self.app.getPluginSystemManager().getPluginName(pluginInfo) - version = self.app.getPluginSystemManager().getPluginVersion(pluginInfo) - dialog = Gtk.AboutDialog(self) - dialog.set_authors(authors) - dialog.set_website(website) - dialog.set_copyright(copyright) - dialog.set_license(license) - dialog.set_version(version) - dialog.set_program_name(name) - dialog.set_comments(description) - dialog.run() - dialog.destroy() - except: - pass - - def _onDetailsButtonClicked(self, widget): - self.showDetails() - - def _onOkButtonClicked(self, widget): - self.applySettings() - self.closeWindow() - def _onApplyButtonClicked(self, widget): - self.applySettings() - def _onInstallButtonClicked(self, widget): - self.installPlugin() - def _onUninstallButtonClicked(self, widget): - self.uninstallPlugin() - def _onCancelButtonClicked(self, widget): - self.closeWindow() - def refreshPluginList(self): - self.clearPluginList() - pluginList = self.app.getPluginSystemManager().plugins - for pluginInfo in pluginList: - self.addPlugin(pluginInfo) - def clearPluginList(self): - self.listStore.clear() - - def addPlugin(self, pluginInfo): - ignoredPlugins = self.app.getPluginSystemManager().getIgnoredPlugins() - moduleDir = self.app.getPluginSystemManager().getPluginModuleDir(pluginInfo) - if moduleDir in ignoredPlugins: - return - - hidden = self.app.getPluginSystemManager().isPluginHidden(pluginInfo) - if hidden: - return - - moduleName = self.app.getPluginSystemManager().getPluginModuleName(pluginInfo) - name = self.app.getPluginSystemManager().getPluginName(pluginInfo) - version = self.app.getPluginSystemManager().getPluginVersion(pluginInfo) - website = self.app.getPluginSystemManager().getPluginWebsite(pluginInfo) - authors = self.app.getPluginSystemManager().getPluginAuthors(pluginInfo) - buildIn = self.app.getPluginSystemManager().isPluginBuildIn(pluginInfo) - description = self.app.getPluginSystemManager().getPluginDescription(pluginInfo) - iconName = self.app.getPluginSystemManager().getPluginIconName(pluginInfo) - copyright = self.app.getPluginSystemManager().getPluginCopyright(pluginInfo) - dependencies = self.app.getPluginSystemManager().getPluginDependencies(pluginInfo) - - #settings = self.app.getPluginSystemManager().getPluginSettings(pluginInfo) - #hasDependencies = self.app.getPluginSystemManager().hasPluginDependency(pluginInfo) - loaded = self.app.getPluginSystemManager().isPluginLoaded(pluginInfo) - available = self.app.getPluginSystemManager().isPluginAvailable(pluginInfo) - active = self.app.getPluginSystemManager().isPluginActive(pluginInfo) - - #externalData = self.app.getPluginSystemManager().getPluginExternalData(pluginInfo) - helpUri = self.app.getPluginSystemManager().getPlugingetHelpUri(pluginInfo) - dataDir = self.app.getPluginSystemManager().getPluginDataDir(pluginInfo) - - # pluginInfo (object) = 0 - # name (str) = 1 - # active (bool) = 2 - # buildIn (bool) = 3 - # dataDir (str) = 4 - # moduleDir (str) = 5 - # dependencies (object) = 6 - # moduleName (str) = 7 - # description (str) = 8 - # authors (object) = 9 - # website (str) = 10 - # copyright (str) = 11 - # version (str) = 12 - # helpUri (str) = 13 - # iconName (str) = 14 - self.listStore.append([pluginInfo, name, active, buildIn, dataDir, moduleDir, dependencies, moduleName, description, authors, website, copyright, version, helpUri, iconName]) - def chooseFile(self): - dialog = Gtk.FileChooserDialog( - title=_("Please choose a file"), parent=self, action=Gtk.FileChooserAction.OPEN - ) - dialog.add_buttons( - Gtk.STOCK_CANCEL, - Gtk.ResponseType.CANCEL, - Gtk.STOCK_OPEN, - Gtk.ResponseType.OK, - ) - - filter_plugin = Gtk.FileFilter() - filter_plugin.set_name(_("Plugin Archive")) - filter_plugin.add_mime_type("application/gzip") - dialog.add_filter(filter_plugin) - - response = dialog.run() - filePath = '' - ok = False - - if response == Gtk.ResponseType.OK: - ok = True - filePath = dialog.get_filename() - - dialog.destroy() - return ok, filePath - def _onCellToggled(self, widget, path): - - self.listStore[path][2] = not self.listStore[path][2] - def present(self): - cthulhu_state = self.app.getDynamicApiManager().getAPI('CthulhuState') - ts = 0 - try: - ts = cthulhu_state.lastInputEvent.timestamp - except: - pass - if ts == 0: - ts = Gtk.get_current_event_time() - self.present_with_time(ts) - def run(self): - self.refreshPluginList() - self.present() - self.show_all() - Gtk.main() - self.destroy() diff --git a/src/cthulhu/plugins/PluginManager/PluginManagerUiListBox.py b/src/cthulhu/plugins/PluginManager/PluginManagerUiListBox.py deleted file mode 100644 index c25689a..0000000 --- a/src/cthulhu/plugins/PluginManager/PluginManagerUiListBox.py +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (c) 2024 Stormux -# Copyright (c) 2010-2012 The Orca Team -# Copyright (c) 2012 Igalia, S.L. -# Copyright (c) 2005-2010 Sun Microsystems Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., Franklin Street, Fifth Floor, -# Boston MA 02110-1301 USA. -# -# Fork of Orca Screen Reader (GNOME) -# Original source: https://gitlab.gnome.org/GNOME/orca - -import gi -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk - -class ListBoxRowWithData(Gtk.ListBoxRow): - def __init__(self, data): - super(Gtk.ListBoxRow, self).__init__() - self.data = data - self.add(Gtk.Label(label=data)) - -class PluginManagerUi(Gtk.Window): - def __init__(self): - Gtk.Window.__init__(self) - self.pluginList = [] - self.set_default_size(200, -1) - self.connect("destroy", Gtk.main_quit) - self.listBox = Gtk.ListBox() - - self.buttomBox = Gtk.Box(spacing=6) - self.mainVBox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=20) - self.mainVBox.pack_start(self.listBox, True, True, 0) - self.mainVBox.pack_start(self.buttomBox, True, True, 0) - - self.add(self.mainVBox) - - self.oKButton = Gtk.Button(label="OK") - self.oKButton.connect("clicked", self.on_oKButton_clicked) - self.buttomBox.pack_start(self.oKButton, True, True, 0) - - self.applyButton = Gtk.Button(label="Apply") - self.applyButton.connect("clicked", self.on_applyButton_clicked) - self.buttomBox.pack_start(self.applyButton, True, True, 0) - - self.cancelButton = Gtk.Button(label="Cancel") - self.cancelButton.connect("clicked", self.on_cancelButton_clicked) - self.buttomBox.pack_start(self.cancelButton, True, True, 0) - - self.listBox.connect("row-activated", self.on_row_activated) - - def on_row_activated(self, listBox, listboxrow): - print("Row %i activated" % (listboxrow.get_index())) - - def on_oKButton_clicked(self, widget): - print("OK") - - def on_applyButton_clicked(self, widget): - print("Apply") - - def on_cancelButton_clicked(self, widget): - print("Cancel") - - - def addPlugin(self, Name, Active, Description = ''): - self.pluginList.append([Name, Active, Description]) - - def run(self): - for plugin in self.pluginList: - print(plugin) - box = Gtk.Box(spacing=10) - pluginNameLabel = Gtk.Label(plugin[0]) - #pluginActiveCheckButton = Gtk.CheckButton(label="_Active", use_underline=True) - #pluginActiveCheckButton.set_active(plugin[1]) - pluginActiveSwitch = Gtk.Switch() - pluginActiveSwitch.set_active(plugin[1]) - - - pluginDescriptionLabel = Gtk.Label(plugin[2]) - - box.pack_start(pluginNameLabel, True, True, 0) - box.pack_start(pluginActiveSwitch, True, True, 0) - box.pack_start(pluginDescriptionLabel, True, True, 0) - - self.listBox.add(box) - self.show_all() - Gtk.main() - -if __name__ == "__main__": - ui = PluginManagerUi() - ui.addPlugin('plugin1', True, 'bla') - ui.addPlugin('plugin2', True, 'bla') - ui.addPlugin('plugin3', True, 'bla') - ui.run() diff --git a/src/cthulhu/plugins/PluginManager/PluginManagerUiListBox_tut.py b/src/cthulhu/plugins/PluginManager/PluginManagerUiListBox_tut.py deleted file mode 100644 index 6b92e6c..0000000 --- a/src/cthulhu/plugins/PluginManager/PluginManagerUiListBox_tut.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (c) 2024 Stormux -# Copyright (c) 2010-2012 The Orca Team -# Copyright (c) 2012 Igalia, S.L. -# Copyright (c) 2005-2010 Sun Microsystems Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., Franklin Street, Fifth Floor, -# Boston MA 02110-1301 USA. -# -# Fork of Orca Screen Reader (GNOME) -# Original source: https://gitlab.gnome.org/GNOME/orca - -import gi - -gi.require_version("Gtk", "3.0") -from gi.repository import Gtk - - -class ListBoxRowWithData(Gtk.ListBoxRow): - def __init__(self, data): - super(Gtk.ListBoxRow, self).__init__() - self.data = data - self.add(Gtk.Label(label=data)) - - -class ListBoxWindow(Gtk.Window): - def __init__(self): - Gtk.Window.__init__(self, title="ListBox Demo") - self.set_border_width(10) - - box_outer = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) - self.add(box_outer) - - listbox = Gtk.ListBox() - listbox.set_selection_mode(Gtk.SelectionMode.NONE) - box_outer.pack_start(listbox, True, True, 0) - - row = Gtk.ListBoxRow() - hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50) - row.add(hbox) - vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - hbox.pack_start(vbox, True, True, 0) - - label1 = Gtk.Label(label="Automatic Date & Time", xalign=0) - label2 = Gtk.Label(label="Requires internet access", xalign=0) - vbox.pack_start(label1, True, True, 0) - vbox.pack_start(label2, True, True, 0) - - switch = Gtk.Switch() - switch.props.valign = Gtk.Align.CENTER - hbox.pack_start(switch, False, True, 0) - - listbox.add(row) - - row = Gtk.ListBoxRow() - hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50) - row.add(hbox) - label = Gtk.Label(label="Enable Automatic Update", xalign=0) - check = Gtk.CheckButton() - hbox.pack_start(label, True, True, 0) - hbox.pack_start(check, False, True, 0) - - listbox.add(row) - - row = Gtk.ListBoxRow() - hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50) - row.add(hbox) - label = Gtk.Label(label="Date Format", xalign=0) - combo = Gtk.ComboBoxText() - combo.insert(0, "0", "24-hour") - combo.insert(1, "1", "AM/PM") - hbox.pack_start(label, True, True, 0) - hbox.pack_start(combo, False, True, 0) - - listbox.add(row) - - listbox_2 = Gtk.ListBox() - items = "This is a sorted ListBox Fail".split() - - for item in items: - listbox_2.add(ListBoxRowWithData(item)) - - def sort_func(row_1, row_2, data, notify_destroy): - return row_1.data.lower() > row_2.data.lower() - - def filter_func(row, data, notify_destroy): - return False if row.data == "Fail" else True - - listbox_2.set_sort_func(sort_func, None, False) - listbox_2.set_filter_func(filter_func, None, False) - - def on_row_activated(listbox_widget, row): - print(row.data) - - listbox_2.connect("row-activated", on_row_activated) - - box_outer.pack_start(listbox_2, True, True, 0) - listbox_2.show_all() - - -win = ListBoxWindow() -win.connect("destroy", Gtk.main_quit) -win.show_all() -Gtk.main() diff --git a/src/cthulhu/plugins/PluginManager/__init__.py b/src/cthulhu/plugins/PluginManager/__init__.py deleted file mode 100644 index 782103c..0000000 --- a/src/cthulhu/plugins/PluginManager/__init__.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (c) 2024 Stormux -# Copyright (c) 2010-2012 The Orca Team -# Copyright (c) 2012 Igalia, S.L. -# Copyright (c) 2005-2010 Sun Microsystems Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., Franklin Street, Fifth Floor, -# Boston MA 02110-1301 USA. -# -# Fork of Orca Screen Reader (GNOME) -# Original source: https://gitlab.gnome.org/GNOME/orca - diff --git a/src/cthulhu/settings.py b/src/cthulhu/settings.py index 694123d..8d1a1f4 100644 --- a/src/cthulhu/settings.py +++ b/src/cthulhu/settings.py @@ -413,4 +413,4 @@ presentChatRoomLast = False presentLiveRegionFromInactiveTab = False # Plugins -activePlugins = ['Clipboard', 'DisplayVersion', 'ByeCthulhu', 'Time', 'HelloCthulhu', 'hello_world', 'self_voice', 'PluginManager', 'SimplePluginSystem'] +activePlugins = ['Clipboard', 'DisplayVersion', 'ByeCthulhu', 'HelloCthulhu', 'hello_world', 'self_voice', 'SimplePluginSystem']