Adding a Surface

Everything in Builder below the header bar is implemented as a “Surface”. For example, the editor is a surface and so is the “Build Preferences” interface.

You may want to create a surface if you require the users full attention and other editor components may be distracting.

Note

We generally suggest looking for alternatives to creating a surface as it can be cumbersome for the user to switch contexts.

# my_plugin.py

import gi

from gi.repository import GObject, Gtk, Ide

class MySurface(Ide.Surface):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.add(Gtk.Label(label='My Surface', visible=True))

        self.set_icon_name('gtk-missing')
        self.set_title('My Surface')

class MyWorkspaceAddin(GObject.Object, Ide.WorkspaceAddin):
    surface = None

    def do_load(self, workspace: Ide.Workspace):
        if type(workspace) == Ide.PrimaryWorkspace:
            self.surface = MySurface(visible=True)
            workspace.add_surface(self.surface)

    def do_unload(self, workspace: Ide.Workspace):
        if self.surface is not None:
            self.surface.destroy()
            self.surface = None