All Orca TODO's are maintained as RFE's and bugs in the GNOME bugzilla database: http://bugzilla.gnome.org/buglist.cgi?query=product%3Aorca Roadmap for Plugin Based Orca: # Stage 1 (ALL DONE) - (DONE): implement Plugin System Manager what handles all our plugin stuff - (DONE): migrate some example plugins -- (DONE): Clipboard -- (DONE): Preferences -- (DONE): SelfVoice -- (DONE): Time -- (DONE): Date -- (DONE): MouseReview -- (DONE): HelloOrca -- (DONE): ByeOrca -- (DONE): HelloWorld - (DONE): implement a base plugin class to have an unify Plugin API - (DONE): Dynamic API Manager to let plugins register its own bits of functionality for global usage (also used for compatibiltiy) - (DONE): initial "orca" class to hold all of orcas API. so we can easy share it with plugins - (DONE): create a basic plugin manager: -- (DONE): install -- (DONE): uninstall -- (DONE): activate plugins -- (DONE): details - (DONE): compatibiltiy: -- (DONE): ability to register shortcuts in current structure -- (DONE): place current objects in Dynamic API Manager -- (DONE): use existing settings to store plugin activ states # Stage 2 (ALL DONE) - (DONE): Translation API: Plugins store its own translation. we should provide an unify way to consume it. maybe implemented into plugin.plugin? -- (DONE): plugins can bring its own translations -- (DONE): plugins can use orcas build in translations - (DONE): Orca should track by Plugins registered stuff like -- (DONE): gestures -- (DONE): event subscription -- (DONE): signals -- (DONE): api - (DONE): Orca should unregister the by the Plugins registered stuff by itself on unload -- (DONE): gestures -- (DONE): event subscription -- (DONE): signals -- (DONE): api - (DONE): -- (DONE): allow None context (orca core) -- (DONE): improve API - (DONE): Dont trust plugins, hardening core against crashes in callbacks -- (DONE): gestures -- (DONE): event subscription - (DONE): ability to call code while plugin un-/ installation -- (DONE): onPostInstall -- (DONE): onPreUninstall # Stage 3 (TODO): - (WIP): Create an clean "orca" class and object based API - (TODO): create useful signals - (WIP): cleanup as much as possible - register per application shortcuts - register per profile shortcuts - (TODO): Bugfixing and hardening -- Unregister bindings on unload plugin -- (TODO): compatibiltiy registered shortcuts do not unregister properly - (TODO): keyboard / gesture duplication check (for new and old way) - (TODO): Release :) # Stage 4 (TODO) - (TODO): Per Plugin settings: Plugins come along with its own settings (structure, defaults). We need an unify API to. The Settings are handled by Gsettings instead of JSON: -- (DONE): basic gsetting handling -- (DONE): profile management (global settings) -- (DONE): use gsettings in plugin manager -- (TODO): resource manager integration -- (TODO): install (along with the plugin) -- (TODO): uninstall (along with the plugin) -- (TODO): upgrade -- (WIP): load -- (WIP): save -- (TODO): reset -- (TODO): check compatibiltiy -- (WIP): scope: profiles -- (WIP): scope: per application - (TODO): generic preferences GUI -- (TODO): List based -- (TODO): generic --- (TODO): default ---- (TODO): Radio Buttons ---- (TODO): Menu Buttons ---- (TODO): Booleans ---- (TODO): Integer Min / Max ---- (TODO): slider --- (TODO): custom ---- (TODO): any embedded widget / subform / table --- (TODO): # other ---- (TODO): dependency value for simple enable / disable -- (TODO): agnostic to installed plugins -- (TODO): searchable -- (TODO): set values -- (TODO): reset to default value -- (TODO): load -- (TODO): save -- (TODO): export -- (TODO): import -- (TODO): keyboard -- (TODO): punctuation -- (TODO): scope: global -- (TODO): scope: profiles -- (TODO): scope: per application # Documentation: - https://git.launchpad.net/ubuntu/+source/gnome-orca/commit/?h=applied/ubuntu/bionic&id=b2d49a3f250881eff036b1ebfc97148fe94acf75 - https://www.micahcarrick.com/gsettings-python-gnome-3.html - https://stackoverflow.com/questions/24407025/how-do-i-use-g-settings-schema-get-key-from-python - https://encarsia.github.io/posts/gsettings/ - http://zderadicka.eu/gsettings-flexible-configuration-system/ - https://qastack.com.de/ubuntu/251712/how-can-i-install-a-gsettings-schema-without-root-privileges - https://docs.gtk.org/glib/gvariant-format-strings.html - https://awebablog.wordpress.com/2017/12/16/session-5-part-1-gtk_with_python/ - https://valadoc.org/gtk+-3.0/Gtk.ListBox.html # Final Stage 5 (TODO) - (WIP): Create an clean "orca" class and object based API - (TODO): create useful signals - (TODO): Remove compatibiltiy layers - (WIP): cleanup as much as possible - (WIP): move all parts into plugins -- (TODO): Move source into Plugins -- (TODO): Move Settings into Plugins -- (TODO): Move Translation into Plugins - (TODO): Bugfixing and hardening - (TODO): Release :) Known Bugs: - (DONE) PluginManager is not translated on first start - (DONE) Plugins enable / disable state not stored without manuall add setting to user-settings.conf: "activePlugins": [], - (DONE) Profile selector does not open at preferences page - (DONE) ByeOrca is not announced - (DONE) Plugins without compatibiltiy bindings -> shortcut is not consumed | this is currently a bug in master | use plugin_system_old_keyboard branch what reverts the broken commit of master: https://github.com/chrys87/orca-plugin/tree/plugin_system_old_keyboard Build: NOCONFIGURE=1 ./autogen.sh ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var make sudo make install Plguin readme: Translation # read text from python file xgettext -d TranslationTest -o TranslationTest.pot ../TranslationTest.py # copy .pot to .po # compile to mo msgfmt -o TranslationTest.mo TranslationTest gsettings glib-compile-schemas /path/to/schema/files/