linux: up-backend: Add and remove keyboard backlight LED device

These are the callback functions for the signals "device-added" and
"device-removed" to add and remove keyboard backlight devices.
This commit is contained in:
Kate Hsuan 2025-03-11 16:56:54 +08:00
parent 9f9b8478bd
commit 1d40bc2027

View file

@ -33,6 +33,7 @@
#include "up-backend.h" #include "up-backend.h"
#include "up-daemon.h" #include "up-daemon.h"
#include "up-device.h" #include "up-device.h"
#include "up-device-kbd-backlight.h"
#include "up-enumerator-udev.h" #include "up-enumerator-udev.h"
@ -421,9 +422,13 @@ up_device_disconnected_cb (GObject *gobject,
NULL); NULL);
if (disconnected) { if (disconnected) {
g_debug("Device %s became disconnected, hiding device", path); g_debug("Device %s became disconnected, hiding device", path);
if (up_device_is_registered (UP_DEVICE (gobject))) { if (UP_IS_DEVICE (gobject)) {
g_signal_emit (backend, signals[SIGNAL_DEVICE_REMOVED], 0, gobject); if (up_device_is_registered (UP_DEVICE (gobject))) {
up_device_unregister (UP_DEVICE (gobject)); g_signal_emit (backend, signals[SIGNAL_DEVICE_REMOVED], 0, gobject);
up_device_unregister (UP_DEVICE (gobject));
}
} else if (UP_IS_DEVICE_KBD_BACKLIGHT (gobject)) {
up_device_kbd_backlight_unregister (UP_DEVICE_KBD_BACKLIGHT (gobject));
} }
} else { } else {
g_debug ("Device %s became connected, showing device", path); g_debug ("Device %s became connected, showing device", path);
@ -433,20 +438,28 @@ up_device_disconnected_cb (GObject *gobject,
} }
static void static void
udev_device_added_cb (UpBackend *backend, UpDevice *device) udev_device_added_cb (UpBackend *backend, GObject *device)
{ {
g_debug ("Got new device from udev enumerator: %p", device); g_debug ("Got new device from udev enumerator: %p", device);
g_signal_connect (device, "notify::disconnected", g_signal_connect (device, "notify::disconnected",
G_CALLBACK (up_device_disconnected_cb), backend); G_CALLBACK (up_device_disconnected_cb), backend);
if (update_added_duplicate_device (backend, device)) if (UP_IS_DEVICE (device)) {
if (update_added_duplicate_device (backend, UP_DEVICE (device)))
g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, device);
} else if (UP_IS_DEVICE_KBD_BACKLIGHT (device)) {
g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, device); g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, device);
} else {
g_warning ("Unknown device type");
}
} }
static void static void
udev_device_removed_cb (UpBackend *backend, UpDevice *device) udev_device_removed_cb (UpBackend *backend, GObject *device)
{ {
g_debug ("Removing device from udev enumerator: %p", device); g_debug ("Removing device from udev enumerator: %p", device);
update_removed_duplicate_device (backend, device);
if (UP_IS_DEVICE (device))
update_removed_duplicate_device (backend, UP_DEVICE (device));
g_signal_emit (backend, signals[SIGNAL_DEVICE_REMOVED], 0, device); g_signal_emit (backend, signals[SIGNAL_DEVICE_REMOVED], 0, device);
} }
@ -775,13 +788,13 @@ up_backend_class_init (UpBackendClass *klass)
G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST, G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (UpBackendClass, device_added), G_STRUCT_OFFSET (UpBackendClass, device_added),
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 1, UP_TYPE_DEVICE); G_TYPE_NONE, 1, G_TYPE_OBJECT);
signals [SIGNAL_DEVICE_REMOVED] = signals [SIGNAL_DEVICE_REMOVED] =
g_signal_new ("device-removed", g_signal_new ("device-removed",
G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST, G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (UpBackendClass, device_removed), G_STRUCT_OFFSET (UpBackendClass, device_removed),
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 1, UP_TYPE_DEVICE); G_TYPE_NONE, 1, G_TYPE_OBJECT);
} }
static void static void