# 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