Extending the Greeter¶
When the user starts Builder, they are greeted by the Ide.GreeterWorkspace
.
This is a window containing a series of Ide.Surface
’s to display various options for opening a project.
In the following image, you can see the Ide.GreeterSurface
showing personal projects as well as suggested new projects.
Along the bottom of the window are buttons providing various ways to open an existing project.
Adding a Surface¶
The Ide.Workspace
API provides a method to add an additional Ide.Surface
for your extension.
class MyWorkspaceAddin(GObject.Object, Ide.WorkspaceAddin):
def do_load(self, workspace):
if type(workspace) != Ide.GreeterWorkspace:
return
my_surface = MySurface()
workspace.add_surface(my_surface)
workspace.set_visible_surface(my_surface)
Adding a Button¶
You can add a button that switches to a custom surface, or even opens a dialog.
# 'my-surface-name' should match the name of your widget (See Gtk.Widget.set_name())
button = Gtk.Button(label='click me', visible=True, detailed_action_name='win.surface::my-surface-name')
greeter_workspace.add_button(button, 100) # 100 is sort priority
Performing Long Running Actions¶
If you need to perform a long-running action, such as cloning a repository or expanding a template, then you should notify the workspace.
Surround your long running operation with calls to greeter_workspace.begin()
and greeter_workspace.end()
.
This will cause the workspace to prevent certain changes by the user.
Adding Project Sections¶
The list of projects in the greeter are broken into sections.
You can add a section to the greeter using greeter_workspace.add_section()
.
The section should implement Ide.GreeterSection
so that it can respond to user input and selections.