user-controls: Add a fallback bus connection

This is a hack to allow `MctUserControls` to be used from `GtkBuilder`
templates, where it’s not possible to pass construct-only properties in
to the `MctUserControls` constructor. It’s not feasible to make
`MctUserControls:dbus-connection` not construct-only, because it gets
used to construct an `MctManager` which then subscribes to various
signals.

So for the cases where `MctUserControls` is used from a builder
template, the code has to connect to the system bus manually, which is
possibly (though unlikely) a blocking operation.

This fixes a critical warning when enabling parental controls in
gnome-initial-setup.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
This commit is contained in:
Philip Withnall 2020-04-07 12:47:59 +01:00
parent 6f09483b4c
commit 28992ac7f3
1 changed files with 11 additions and 0 deletions

View File

@ -728,6 +728,17 @@ mct_user_controls_constructed (GObject *object)
/* Chain up. */ /* Chain up. */
G_OBJECT_CLASS (mct_user_controls_parent_class)->constructed (object); G_OBJECT_CLASS (mct_user_controls_parent_class)->constructed (object);
/* FIXME: Ideally there wouldnt be this sync call in a constructor, but there
* seems to be no way around it if #MctUserControls is to be used from a
* GtkBuilder template: templates are initialised from within the parent
* widgets init() function (not its constructed() function), so none of its
* properties will have been set and it wont reasonably have been able to
* make an async call to initialise the bus connection itself. Binding
* construct-only properties in GtkBuilder doesnt work (and wouldnt help if
* it did). */
if (self->dbus_connection == NULL)
self->dbus_connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
g_assert (self->dbus_connection != NULL); g_assert (self->dbus_connection != NULL);
self->manager = mct_manager_new (self->dbus_connection); self->manager = mct_manager_new (self->dbus_connection);
} }