Basics
The basic mechanics of extending the workbench requires first creating an Ide.WorkbenchAddin
.
Your subclass will created for each instance of the Ide.Workbench
.
This conveniently allows you to track the state needed for your plugin for each workbench.
import gi
from gi.repository import GObject
from gi.repository import Ide
class BasicWorkbenchAddin(GObject.Object, Ide.WorkbenchAddin):
def do_load(self, workbench: Ide.Workbench):
pass
def do_unload(self, workbench: Ide.Workbench):
pass
def do_workspace_added(self, workspace: Ide.Workspace):
pass
def do_workspace_removed(self, workspace: Ide.Workspace):
pass
class BasicWorkspaceAddin(GObject.Object, Ide.WorkspaceAddin):
def do_load(self, workspace: Ide.Workspace):
pass
def do_unload(self, workspace: Ide.Workspace):
pass
def do_surface_set(self, surface: Ide.Surface):
pass
You will notice that at the top we import the packages we’ll be using.
Here we use the GObject
and Ide
packages from GObject Introspection.
We then create a class which inherits from GObject.Object
and implements the Ide.WorkbenchAddin
interface.
The Ide.WorkbenchAddin
interface has two virtual methods to override, Ide.WorkbenchAddin.load()
and Ide.WorkbenchAddin.unload()
.
Note
PyGObject uses do_
prefix to indicate we are overriding a virtual method.
The load
virtual method is called to allow the plugin to initialize itself.
This method is called when the workbench is setup or your plugin is loaded.
When the unload
virtual method is called the plugin should clean up after itself to leave Builder and the workbench in a consistent state.
This method is called when the workbench is destroyed or your plugin is unloaded.
To simplify tracking workspace surface changes, you can use Ide.WorkspaceAddin
as the second class implements.
This plugin instance will be created for each workspace window.
Note
You can limit the types of workspaces that the Ide.WorkspaceAddin
will be instantiated for using X-Workspace-Kind=primary;editor;greeter;
in the .plugin
file.