diff --git a/src/libeis-client.c b/src/libeis-client.c index ccc812d..311e9cf 100644 --- a/src/libeis-client.c +++ b/src/libeis-client.c @@ -113,6 +113,8 @@ eis_client_connect(struct eis_client *client) case EIS_CLIENT_STATE_CONNECTING: break; default: + log_bug_client(eis_client_get_context(client), + "%s: client already connected\n", __func__); return; } diff --git a/src/libeis-device.c b/src/libeis-device.c index 77e19c7..4037776 100644 --- a/src/libeis-device.c +++ b/src/libeis-device.c @@ -78,18 +78,33 @@ eis_keymap_new(enum eis_keymap_type type, int fd, size_t size) return eis_keymap_ref(keymap); } +static inline struct eis * +eis_device_get_context(struct eis_device *device) +{ + return eis_client_get_context(eis_device_get_client(device)); +} + _public_ void eis_device_keyboard_set_keymap(struct eis_device *device, struct eis_keymap *keymap) { - if (device->state != EIS_DEVICE_STATE_NEW) + if (device->state != EIS_DEVICE_STATE_NEW) { + log_bug_client(eis_device_get_context(device), + "%s: device already (dis)connected\n", __func__); return; + } - if (device->keymap && !device->keymap->is_client_keymap) + if (device->keymap && !device->keymap->is_client_keymap) { + log_bug_client(eis_device_get_context(device), + "%s: keymap can only be configured once\n", __func__); return; + } - if (keymap && keymap->assigned) + if (keymap && keymap->assigned) { + log_bug_client(eis_device_get_context(device), + "%s: keymaps cannot be re-used\n", __func__); return; + } device->keymap = eis_keymap_unref(device->keymap); if (keymap) { @@ -129,8 +144,11 @@ OBJECT_IMPLEMENT_GETTER(eis_device, name, const char *); _public_ void eis_device_set_name(struct eis_device *device, const char *name) { - if (device->state != EIS_DEVICE_STATE_NEW) + if (device->state != EIS_DEVICE_STATE_NEW) { + log_bug_client(eis_device_get_context(device), + "%s: device already (dis)connected\n", __func__); return; + } free(device->name); device->name = xstrdup(name); @@ -180,13 +198,19 @@ eis_device_set_client_keymap(struct eis_device *device, enum eis_keymap_type type, int keymap_fd, size_t size) { - if (device->state != EIS_DEVICE_STATE_NEW) + if (device->state != EIS_DEVICE_STATE_NEW) { + log_bug(eis_device_get_context(device), + "%s: device already (dis)connected\n", __func__); return; + } _cleanup_eis_keymap_ struct eis_keymap *keymap = eis_keymap_new(type, keymap_fd, size); - if (!keymap) + if (!keymap) { + log_bug(eis_device_get_context(device), + "%s: keymap creation failed, using NULL keymap\n", __func__); return; + } eis_device_keyboard_set_keymap(device, keymap); keymap->is_client_keymap = true; @@ -249,8 +273,11 @@ int eis_device_pointer_rel(struct eis_device *device, double x, double y) { - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER)) + if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER)) { + log_bug_client(eis_device_get_context(device), + "%s: device is not a pointer\n", __func__); return -EINVAL; + } if (device->state != EIS_DEVICE_STATE_RESUMED) return -EINVAL; @@ -264,8 +291,11 @@ int eis_device_pointer_abs(struct eis_device *device, double x, double y) { - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER_ABSOLUTE)) + if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER_ABSOLUTE)) { + log_bug_client(eis_device_get_context(device), + "%s: device is not an absolute pointer\n", __func__); return -EINVAL; + } if (device->state != EIS_DEVICE_STATE_RESUMED) return -EINVAL; @@ -283,8 +313,11 @@ int eis_device_pointer_button(struct eis_device *device, uint32_t button, bool is_press) { - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER)) + if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER)) { + log_bug_client(eis_device_get_context(device), + "%s: device is not a pointer\n", __func__); return -EINVAL; + } if (device->state != EIS_DEVICE_STATE_RESUMED) return -EINVAL; @@ -298,8 +331,11 @@ int eis_device_keyboard_key(struct eis_device *device, uint32_t key, bool is_press) { - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_KEYBOARD)) + if (!eis_device_has_capability(device, EIS_DEVICE_CAP_KEYBOARD)) { + log_bug_client(eis_device_get_context(device), + "%s: device is not a keyboard\n", __func__); return -EINVAL; + } if (device->state != EIS_DEVICE_STATE_RESUMED) return -EINVAL; @@ -314,8 +350,11 @@ eis_device_touch(struct eis_device *device, uint32_t touchid, bool is_down, bool is_up, double x, double y) { - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_TOUCH)) + if (!eis_device_has_capability(device, EIS_DEVICE_CAP_TOUCH)) { + log_bug_client(eis_device_get_context(device), + "%s: device is not a touch device\n", __func__); return -EINVAL; + } if (device->state != EIS_DEVICE_STATE_RESUMED) return -EINVAL; @@ -333,12 +372,14 @@ eis_device_touch(struct eis_device *device, uint32_t touchid, _public_ void eis_device_connect(struct eis_device *device) { - if (device->state != EIS_DEVICE_STATE_NEW) + if (device->state != EIS_DEVICE_STATE_NEW) { + log_bug_client(eis_device_get_context(device), + "%s: device is already (dis)connected\n", __func__); return; + } if (device->capabilities_mask == 0) { - struct eis_client *client = eis_device_get_client(device); - log_bug(eis_client_get_context(client), + log_bug(eis_device_get_context(device), "Connecting a device without capabilities\n"); eis_device_disconnect(device); return; diff --git a/src/libeis-event.c b/src/libeis-event.c index c001e6c..ecb0b1d 100644 --- a/src/libeis-event.c +++ b/src/libeis-event.c @@ -127,9 +127,9 @@ check_event_type(struct eis_event *event, va_end(args); if (!rc) - log_bug(eis_event_get_context(event), - "Invalid event type %d passed to %s()\n", - type, function_name); + log_bug_client(eis_event_get_context(event), + "Invalid event type %d passed to %s()\n", + type, function_name); return rc; } diff --git a/src/libeis-private.h b/src/libeis-private.h index e753fee..93500ab 100644 --- a/src/libeis-private.h +++ b/src/libeis-private.h @@ -277,4 +277,6 @@ eis_log_msg_va(struct eis *eis, #define log_error(T_, ...) \ eis_log_msg((T_), EIS_LOG_PRIORITY_ERROR, __VA_ARGS__) #define log_bug(T_, ...) \ - eis_log_msg((T_), EIS_LOG_PRIORITY_ERROR, "🪳 BUG: " __VA_ARGS__) + eis_log_msg((T_), EIS_LOG_PRIORITY_ERROR, "🪳 libeis bug: " __VA_ARGS__) +#define log_bug_client(T_, ...) \ + eis_log_msg((T_), EIS_LOG_PRIORITY_ERROR, "🪲 Bug: " __VA_ARGS__)