diff options
Diffstat (limited to 'src/freebsd/up-backend.c')
-rw-r--r-- | src/freebsd/up-backend.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/freebsd/up-backend.c b/src/freebsd/up-backend.c index b132a94..00bd7db 100644 --- a/src/freebsd/up-backend.c +++ b/src/freebsd/up-backend.c @@ -50,6 +50,7 @@ static void up_backend_finalize (GObject *object); static gboolean up_backend_acpi_devd_notify (UpBackend *backend, const gchar *system, const gchar *subsystem, const gchar *type, const gchar *data); static void up_backend_create_new_device (UpBackend *backend, UpAcpiNative *native); +static void up_backend_lid_coldplug (UpBackend *backend); struct UpBackendPrivate { @@ -111,6 +112,21 @@ up_backend_acpi_devd_notify (UpBackend *backend, const gchar *system, const gcha } } } + } else if (!strcmp (subsystem, "Lid")) { + gboolean is_present; + gboolean is_closed; + + g_object_get (backend->priv->daemon, + "lid-is-present", &is_present, NULL); + if (!is_present) { + g_warning ("received lid event without a configured lid; cold-plugging one"); + up_backend_lid_coldplug (backend); + /* FALLTHROUGH */ + } + + is_closed = (data != NULL && !strcmp (data, "notify=0x00")) ? TRUE : FALSE; + up_daemon_set_lid_is_closed (backend->priv->daemon, is_closed); + goto out; } if (native == NULL) @@ -171,6 +187,21 @@ up_backend_create_new_device (UpBackend *backend, UpAcpiNative *native) } /** + * up_backend_lid_coldplug: + **/ +static void +up_backend_lid_coldplug (UpBackend *backend) +{ + gchar *lid_state; + + lid_state = up_get_string_sysctl (NULL, "hw.acpi.lid_switch_state"); + if (lid_state) { + up_daemon_set_lid_is_present (backend->priv->daemon, TRUE); + } + g_free (lid_state); +} + +/** * up_backend_coldplug: * @backend: The %UpBackend class instance * @daemon: The %UpDaemon controlling instance @@ -216,6 +247,8 @@ up_backend_coldplug (UpBackend *backend, UpDaemon *daemon) } } + up_backend_lid_coldplug (backend); + acnative = up_acpi_native_new ("hw.acpi.acline"); up_backend_create_new_device (backend, acnative); g_object_unref (acnative); |