Skip to content
You are looking at the legacy documentation of AGS v1. Go to aylur.github.io/ags for AGS v2.

Services

A Service is an instance of a GObject.Object that emits signals when its state changes. Widgets can connect to them and execute a callback function on their signals which are usually functions that updates the widget’s properties.

Widget.Label({
// the signal is 'changed' if not specified
// [Service, callback, signal = 'changed']
setup: self => self.hook(someService, function(self, ...args) {
// there can be other arguments based on signals
self.label = 'new label'
}, 'changed')
})
Widget.Label({
label: someService.bind('service-prop').as(serviceProp => {
return `transformed ${serviceProp}`
}),
})

Utility to have multiple bindings as one

Widget.Label({
label: Utils.merge([service1.bind("prop1"), service2.bind("prop2")], (p1, p2) => {
return `service1.prop1: ${p1}, service2.prop2: ${p2}`
}),
})

Services can be also connected outside of widgets

someService.connect('changed', (service, ...args) => {
print(service, ...args)
})

List of builtin services

use Service.import

const battery = await Service.import('battery')

or if you prefer static import

import { battery } from 'resource:///com/github/Aylur/ags/service/battery.js';