diff --git a/proto/protocol.xml b/proto/protocol.xml index b3727e8..824b871 100644 --- a/proto/protocol.xml +++ b/proto/protocol.xml @@ -1640,344 +1640,6 @@ - - - Interface for swipe gesture requests and events. - - This interface is only provided once per device and where a client - requests ei_gesture_swipe.release the interface does not get re-initialized. An - EIS implementation may adjust the behavior of the device (including removing - the device) if the interface is released. - - Note that for a client to receive objects of this type, it must announce - support for this interface in ei_handshake.interface_version. - - - - - - - Notification that the client is no longer interested in swipe gestures. - The EIS implementation will release any resources related to this gesture and - send the ei_gesture_swipe.destroyed event once complete. - - - - - - Starts a new swipe gesture with the given number of fingers. - - The finger count must never be zero. While theoretically it is - possible to have single-finger swipe gestures, clients are advised - to avoid these as an EIS implementation is likely to immediately cancel - (or silently ignore) these. - - Only one swipe gesture may be active at any time, it is a protocol - violation to send a ei_gesture_swipe.begin request before - terminating the previous gesture (if any) with - ei_gesture_swipe.end. - - A swipe gesture may be terminated by the EIS implementation - with an ei_gesture_swipe.cancelled event. - - - - - - - Moves the gesture's logical center by the given delta. - - This request may be sent at most once per device frame and only - after a gesture has begun via ei_gesture_swipe.begin and only - before the gesture terminates with ei_gesture_swipe.end. - - This request must not be sent in the same frame as begin or end. - - - - - - - - Logically ends this gesture. - - - - - - - - - This gesture has been removed and a client should release all - associated resources. - - This ei_gesture_swipe object will be destroyed by the EIS - implementation immediately after this event is sent - and as such the client must not attempt to use - it after that point. - - - - - - - The current gesture has been cancelled by the EIS implementation. - The client must discard the current gesture and not send further - ei_gesture_swipe.update and ei_gesture_swipe.end events. Due to the asynchronous - nature of the protocol, an EIS implementation must allow - for ei_gesture_swipe.update and ei_gesture_swipe.end events to be received after - sending ei_gesture_swipe.cancelled. These events must be discarded. - - The client may begin a new gesture in the future using ei_gesture_swipe.begin. - - - - - - - See the ei_gesture_swipe.begin request for details. - - - - - - - See the ei_gesture_swipe.update request for details. - - - - - - - - See the ei_gesture_swipe.end request for details. - - - - - - - - Interface for pinch gesture requests and events. - - This interface is only provided once per device and where a client - requests ei_gesture_pinch.release the interface does not get re-initialized. An - EIS implementation may adjust the behavior of the device (including removing - the device) if the interface is released. - - Note that for a client to receive objects of this type, it must announce - support for this interface in ei_handshake.interface_version. - - - - - - - Notification that the client is no longer interested in pinch gestures. - The EIS implementation will release any resources related to this gesture and - send the ei_gesture_pinch.destroyed event once complete. - - - - - - Starts a new pinch gesture with the given number of fingers. - - The finger count for pinch gestures must be at least 2. - - Only one pinch gesture may be active at any time, it is a protocol - violation to send a ei_gesture_pinch.begin request before - terminating the previous gesture (if any) with - ei_gesture_pinch.end. - - A pinch gesture may be terminated by the EIS implementation - with an ei_gesture_pinch.cancelled event. - - - - - - - Moves the gesture's logical center by the given delta and/or - updates the logical scale of the gesture and/or logically - rotates the gesture. - - The gesture's scale is an absolute normalized - scale. Each pinch gesture starts at the scale of 1.0, - subsequent events increase or decrease that scale as the - pinch is widened or reduced. For example a scale of 2.0 - indicates the fingers are now twice as far apart relative - to the corresponding ei_gesture_pinch.begin. - - The rotation is the relative angle, in degrees, compared - to the previous ei_gesture_pinch.begin or - ei_gesture_pinch.update. A positive angle indicates CW rotation, - a negative angle CCW rotation. - - This request may be sent at most once per device frame and only - after a gesture has begun via ei_gesture_pinch.begin and only - before the gesture terminates with ei_gesture_pinch.end. - - This request must not be sent in the same frame as begin or end. - - - - - - - - - - Logically ends this gesture. - - - - - - - - - This gesture has been removed and a client should release all - associated resources. - - This ei_gesture_pinch object will be destroyed by the EIS - implementation immediately after this event is sent - and as such the client must not attempt to use - it after that point. - - - - - - - The current gesture has been cancelled by the EIS implementation. - The client must discard the current gesture and not send further - ei_gesture_pinch.update and ei_gesture_pinch.end events. Due to the asynchronous - nature of the protocol, an EIS implementation must allow - for ei_gesture_pinch.update and ei_gesture_pinch.end events to be received after - sending ei_gesture_pinch.cancelled. These events must be discarded. - - The client may begin a new gesture in the future using ei_gesture_pinch.begin. - - - - - - - See the ei_gesture_pinch.begin request for details. - - - - - - - See the ei_gesture_pinch.update request for details. - - - - - - - - - - See the ei_gesture_pinch.end request for details. - - - - - - - - Interface for hold gesture requests and events. - - This interface is only provided once per device and where a client - requests ei_gesture_hold.release the interface does not get re-initialized. An - EIS implementation may adjust the behavior of the device (including removing - the device) if the interface is released. - - Note that for a client to receive objects of this type, it must announce - support for this interface in ei_handshake.interface_version. - - - - - - - Notification that the client is no longer interested in hold gestures. - The EIS implementation will release any resources related to this gesture and - send the ei_gesture_hold.destroyed event once complete. - - - - - - Starts a new hold gesture with the given number of fingers. - - The finger count must never be zero. - - Only one hold gesture may be active at any time, it is a protocol - violation to send a ei_gesture_hold.begin request before - terminating the previous gesture (if any) with - ei_gesture_hold.end. - - A hold gesture may be terminated by the EIS implementation - with an ei_gesture_hold.cancelled event. - - - - - - - Logically ends this gesture. - - - - - - - - - This gesture has been removed and a client should release all - associated resources. - - This ei_gesture_hold object will be destroyed by the EIS - implementation immediately after this event is sent - and as such the client must not attempt to use - it after that point. - - - - - - - The current gesture has been cancelled by the EIS implementation. - The client must discard the current gesture and not send further - ei_gesture_hold.end events. Due to the asynchronous - nature of the protocol, an EIS implementation must allow for - ei_gesture_hold.end events to be received after - sending ei_gesture_hold.cancelled. These events must be discarded. - - The client may begin a new gesture in the future using ei_gesture_hold.begin. - - - - - - - See the ei_gesture_hold.begin request for details. - - - - - - - See the ei_gesture_hold.end request for details. - - - - - Interface for text-based requests and events. @@ -2093,7 +1755,6 @@ within the same frame is undefined. - diff --git a/src/libei-device.c b/src/libei-device.c index a7d11db..8c0913e 100644 --- a/src/libei-device.c +++ b/src/libei-device.c @@ -91,9 +91,6 @@ ei_device_destroy(struct ei_device *device) ei_button_unref(device->button); ei_touchscreen_unref(device->touchscreen); ei_keyboard_unref(device->keyboard); - ei_gesture_swipe_unref(device->swipe); - ei_gesture_pinch_unref(device->pinch); - ei_gesture_hold_unref(device->hold); ei_text_unref(device->text); ei_seat_unref(seat); free(device->name); @@ -259,8 +256,6 @@ handle_msg_done(struct ei_device *device) mask_add(device->capabilities, EI_DEVICE_CAP_KEYBOARD); if (device->touchscreen) mask_add(device->capabilities, EI_DEVICE_CAP_TOUCH); - if (device->swipe || device->pinch || device->hold) - mask_add(device->capabilities, EI_DEVICE_CAP_GESTURES); if (device->text) mask_add(device->capabilities, EI_DEVICE_CAP_TEXT); @@ -270,7 +265,6 @@ handle_msg_done(struct ei_device *device) !ei_device_has_capability(device, EI_DEVICE_CAP_TOUCH) && !ei_device_has_capability(device, EI_DEVICE_CAP_BUTTON) && !ei_device_has_capability(device, EI_DEVICE_CAP_SCROLL) && - !ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES) && !ei_device_has_capability(device, EI_DEVICE_CAP_TEXT)) { log_debug(ei, "Rejecting device %#" PRIx64 " '%s' with no known capabilities", @@ -285,7 +279,7 @@ handle_msg_done(struct ei_device *device) ei_queue_device_added_event(device); ei_device_done(device); log_debug(ei, - "Added device %#" PRIx64 " '%s' caps: %s%s%s%s%s%s%s%s seat: %s", + "Added device %#" PRIx64 " '%s' caps: %s%s%s%s%s%s%s seat: %s", ei_device_get_id(device), ei_device_get_name(device), ei_device_has_capability(device, EI_DEVICE_CAP_POINTER) ? "p" : "", @@ -294,7 +288,6 @@ handle_msg_done(struct ei_device *device) ei_device_has_capability(device, EI_DEVICE_CAP_TOUCH) ? "t" : "", ei_device_has_capability(device, EI_DEVICE_CAP_BUTTON) ? "b" : "", ei_device_has_capability(device, EI_DEVICE_CAP_SCROLL) ? "s" : "", - ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES) ? "g" : "", ei_device_has_capability(device, EI_DEVICE_CAP_TEXT) ? "x" : "", ei_seat_get_name(ei_device_get_seat(device))); return NULL; @@ -336,14 +329,6 @@ handle_msg_paused(struct ei_device *device, uint32_t serial) } \ } while(0) -#define DISCONNECT_IF_RECEIVER_CONTEXT(device_) do {\ - struct ei *ei_ = ei_device_get_context(device_); \ - if (!ei_is_sender(ei_)) { \ - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_MODE, \ - "Invalid event from sender EIS context. Disconnecting"); \ - } \ -} while(0) - static struct brei_result * handle_msg_start_emulating(struct ei_device *device, uint32_t serial, uint32_t sequence) { @@ -494,24 +479,6 @@ handle_msg_interface(struct ei_device *device, object_id_t id, const char *name, "Duplicate ei_touchscreen interface object on device"); device->touchscreen = ei_touchscreen_new(device, id, version); - } else if (streq(name, EI_GESTURE_SWIPE_INTERFACE_NAME)) { - DISCONNECT_IF_INVALID_VERSION(ei, ei_gesture_swipe, id, version); - if (device->swipe) - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Duplicate ei_gesture_swipe object on device"); - device->swipe = ei_gesture_swipe_new(device, id, version); - } else if (streq(name, EI_GESTURE_PINCH_INTERFACE_NAME)) { - DISCONNECT_IF_INVALID_VERSION(ei, ei_gesture_pinch, id, version); - if (device->pinch) - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Duplicate ei_gesture_pinch object on device"); - device->pinch = ei_gesture_pinch_new(device, id, version); - } else if (streq(name, EI_GESTURE_HOLD_INTERFACE_NAME)) { - DISCONNECT_IF_INVALID_VERSION(ei, ei_gesture_hold, id, version); - if (device->hold) - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Duplicate ei_gesture_hold object on device"); - device->hold = ei_gesture_hold_new(device, id, version); } else if (streq(name, EI_TEXT_INTERFACE_NAME)) { DISCONNECT_IF_INVALID_VERSION(ei, ei_text, id, version); if (device->text) @@ -968,386 +935,6 @@ ei_device_get_touchscreen_interface(struct ei_device *device) return &touchscreen_interface; } -static struct brei_result * -handle_msg_gesture_swipe_destroy(struct ei_gesture_swipe *swipe, uint32_t serial) -{ - struct ei *ei = ei_gesture_swipe_get_context(swipe); - ei_update_serial(ei, serial); - - struct ei_device *device = ei_gesture_swipe_get_device(swipe); - ei_gesture_swipe_unref(steal(&device->swipe)); - - return NULL; -} - -static struct brei_result * -handle_msg_gesture_swipe_begin(struct ei_gesture_swipe *swipe, uint32_t nfingers) -{ - struct ei_device *device = ei_gesture_swipe_get_device(swipe); - - DISCONNECT_IF_SENDER_CONTEXT(device); - - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe begin event for non-gesture device"); - } - - if (nfingers == 0) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe begin event with zero fingers"); - } - - if (device->state == EI_DEVICE_STATE_EMULATING) { - if (device->gesture_state.swipe.is_active) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe begin event while swipe is active"); - } - device->gesture_state.swipe.is_active = true; - device->gesture_state.swipe.nfingers = nfingers; - ei_queue_swipe_begin_event(device, nfingers); - return NULL; - } - - return maybe_error_on_device_state(device, "swipe begin"); -} - -static struct brei_result * -handle_msg_gesture_swipe_update(struct ei_gesture_swipe *swipe, float dx, float dy) -{ - struct ei_device *device = ei_gesture_swipe_get_device(swipe); - - DISCONNECT_IF_SENDER_CONTEXT(device); - - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe update event for non-gesture device"); - } - - if (!device->gesture_state.swipe.is_active) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe update event while no swipe is active"); - } - - if (device->state == EI_DEVICE_STATE_EMULATING) { - ei_queue_swipe_update_event(device, dx, dy); - return NULL; - } - - return maybe_error_on_device_state(device, "swipe update"); -} - -static struct brei_result * -handle_msg_gesture_swipe_end(struct ei_gesture_swipe *swipe, uint32_t is_cancelled) -{ - struct ei_device *device = ei_gesture_swipe_get_device(swipe); - - DISCONNECT_IF_SENDER_CONTEXT(device); - - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe end event for non-gesture device"); - } - - if (!device->gesture_state.swipe.is_active) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe end event while no swipe is active"); - } - - if (device->state == EI_DEVICE_STATE_EMULATING) { - ei_queue_swipe_end_event(device, !!is_cancelled); - device->gesture_state.swipe.is_active = false; - return NULL; - } - - return maybe_error_on_device_state(device, "swipe end"); -} - -static struct brei_result * -handle_msg_gesture_swipe_cancelled(struct ei_gesture_swipe *swipe, uint32_t serial) -{ - struct ei *ei = ei_gesture_swipe_get_context(swipe); - struct ei_device *device = ei_gesture_swipe_get_device(swipe); - ei_update_serial(ei, serial); - - DISCONNECT_IF_RECEIVER_CONTEXT(device); - - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe cancelled event for non-gesture device"); - } - - /* EIS may have cancelled us while we've ended the gesture, - * swallow the cancel if that happened */ - if (device->gesture_state.swipe.current_swipe) { - if (device->state == EI_DEVICE_STATE_EMULATING) - ei_queue_swipe_cancelled_event(device); - device->gesture_state.swipe.current_swipe = NULL; - return NULL; - } - - return maybe_error_on_device_state(device, "swipe cancel"); -} - -static const struct ei_gesture_swipe_interface swipe_interface = { - .destroyed = handle_msg_gesture_swipe_destroy, - .begin = handle_msg_gesture_swipe_begin, - .update = handle_msg_gesture_swipe_update, - .end = handle_msg_gesture_swipe_end, - .cancelled = handle_msg_gesture_swipe_cancelled, -}; - -const struct ei_gesture_swipe_interface * -ei_device_get_gesture_swipe_interface(struct ei_device *device) -{ - return &swipe_interface; -} - -static struct brei_result * -handle_msg_gesture_pinch_destroy(struct ei_gesture_pinch *pinch, uint32_t serial) -{ - struct ei *ei = ei_gesture_pinch_get_context(pinch); - ei_update_serial(ei, serial); - - struct ei_device *device = ei_gesture_pinch_get_device(pinch); - ei_gesture_pinch_unref(steal(&device->pinch)); - - return NULL; -} - -static struct brei_result * -handle_msg_gesture_pinch_begin(struct ei_gesture_pinch *pinch, uint32_t nfingers) -{ - struct ei_device *device = ei_gesture_pinch_get_device(pinch); - - DISCONNECT_IF_SENDER_CONTEXT(device); - - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch begin event for non-gesture device"); - } - - if (nfingers < 2) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch begin event with fewer than 2 fingers"); - } - - if (device->state == EI_DEVICE_STATE_EMULATING) { - if (device->gesture_state.pinch.is_active) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch begin event while pinch is active"); - } - device->gesture_state.pinch.is_active = true; - device->gesture_state.pinch.nfingers = nfingers; - ei_queue_pinch_begin_event(device, nfingers); - return NULL; - } - - return maybe_error_on_device_state(device, "pinch begin"); -} - -static struct brei_result * -handle_msg_gesture_pinch_update(struct ei_gesture_pinch *pinch, - float dx, - float dy, - float scale, - float rotation) -{ - struct ei_device *device = ei_gesture_pinch_get_device(pinch); - - DISCONNECT_IF_SENDER_CONTEXT(device); - - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch update event for non-gesture device"); - } - - if (!device->gesture_state.pinch.is_active) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch update event while no pinch is active"); - } - - if (device->state == EI_DEVICE_STATE_EMULATING) { - ei_queue_pinch_update_event(device, dx, dy, scale, rotation); - return NULL; - } - - return maybe_error_on_device_state(device, "pinch update"); -} - -static struct brei_result * -handle_msg_gesture_pinch_end(struct ei_gesture_pinch *pinch, uint32_t is_cancelled) -{ - struct ei_device *device = ei_gesture_pinch_get_device(pinch); - - DISCONNECT_IF_SENDER_CONTEXT(device); - - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch end event for non-gesture device"); - } - - if (!device->gesture_state.pinch.is_active) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch end event while no pinch is active"); - } - - if (device->state == EI_DEVICE_STATE_EMULATING) { - ei_queue_pinch_end_event(device, !!is_cancelled); - device->gesture_state.pinch.is_active = false; - return NULL; - } - - return maybe_error_on_device_state(device, "pinch end"); -} - -static struct brei_result * -handle_msg_gesture_pinch_cancelled(struct ei_gesture_pinch *pinch, uint32_t serial) -{ - struct ei *ei = ei_gesture_pinch_get_context(pinch); - struct ei_device *device = ei_gesture_pinch_get_device(pinch); - ei_update_serial(ei, serial); - - DISCONNECT_IF_RECEIVER_CONTEXT(device); - - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch cancelled event for non-gesture device"); - } - - /* EIS may have cancelled us while we've ended the gesture, - * swallow the cancel if that happened */ - if (device->gesture_state.pinch.current_pinch) { - if (device->state == EI_DEVICE_STATE_EMULATING) - ei_queue_pinch_cancelled_event(device); - device->gesture_state.pinch.current_pinch = NULL; - return NULL; - } - - return maybe_error_on_device_state(device, "pinch cancel"); -} - -static const struct ei_gesture_pinch_interface pinch_interface = { - .destroyed = handle_msg_gesture_pinch_destroy, - .begin = handle_msg_gesture_pinch_begin, - .update = handle_msg_gesture_pinch_update, - .end = handle_msg_gesture_pinch_end, - .cancelled = handle_msg_gesture_pinch_cancelled, -}; - -const struct ei_gesture_pinch_interface * -ei_device_get_gesture_pinch_interface(struct ei_device *device) -{ - return &pinch_interface; -} - -static struct brei_result * -handle_msg_gesture_hold_destroy(struct ei_gesture_hold *hold, uint32_t serial) -{ - struct ei *ei = ei_gesture_hold_get_context(hold); - ei_update_serial(ei, serial); - - struct ei_device *device = ei_gesture_hold_get_device(hold); - ei_gesture_hold_unref(steal(&device->hold)); - - return NULL; -} - -static struct brei_result * -handle_msg_gesture_hold_begin(struct ei_gesture_hold *hold, uint32_t nfingers) -{ - struct ei_device *device = ei_gesture_hold_get_device(hold); - - DISCONNECT_IF_SENDER_CONTEXT(device); - - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Hold begin event for non-gesture device"); - } - - if (nfingers == 0) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Hold begin event with zero fingers"); - } - - if (device->state == EI_DEVICE_STATE_EMULATING) { - if (device->gesture_state.hold.is_active) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Hold begin event while hold is active"); - } - device->gesture_state.hold.is_active = true; - device->gesture_state.hold.nfingers = nfingers; - ei_queue_hold_begin_event(device, nfingers); - return NULL; - } - - return maybe_error_on_device_state(device, "hold begin"); -} - -static struct brei_result * -handle_msg_gesture_hold_end(struct ei_gesture_hold *hold, uint32_t is_cancelled) -{ - struct ei_device *device = ei_gesture_hold_get_device(hold); - - DISCONNECT_IF_SENDER_CONTEXT(device); - - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Hold end event for non-gesture device"); - } - - if (!device->gesture_state.hold.is_active) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Hold end event while no hold is active"); - } - - if (device->state == EI_DEVICE_STATE_EMULATING) { - ei_queue_hold_end_event(device, !!is_cancelled); - device->gesture_state.hold.is_active = false; - return NULL; - } - - return maybe_error_on_device_state(device, "hold end"); -} - -static struct brei_result * -handle_msg_gesture_hold_cancelled(struct ei_gesture_hold *hold, uint32_t serial) -{ - struct ei *ei = ei_gesture_hold_get_context(hold); - struct ei_device *device = ei_gesture_hold_get_device(hold); - ei_update_serial(ei, serial); - - DISCONNECT_IF_RECEIVER_CONTEXT(device); - - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - return brei_result_new(EI_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Hold cancelled event for non-gesture device"); - } - - /* EIS may have cancelled us while we've ended the gesture, - * swallow the cancel if that happened */ - if (device->gesture_state.hold.current_hold) { - if (device->state == EI_DEVICE_STATE_EMULATING) - ei_queue_hold_cancelled_event(device); - device->gesture_state.hold.current_hold = NULL; - return NULL; - } - - return maybe_error_on_device_state(device, "hold cancel"); -} - -static const struct ei_gesture_hold_interface hold_interface = { - .destroyed = handle_msg_gesture_hold_destroy, - .begin = handle_msg_gesture_hold_begin, - .end = handle_msg_gesture_hold_end, - .cancelled = handle_msg_gesture_hold_cancelled, -}; - -const struct ei_gesture_hold_interface * -ei_device_get_gesture_hold_interface(struct ei_device *device) -{ - return &hold_interface; -} - static struct brei_result * handle_msg_text_destroy(struct ei_text *text, uint32_t serial) { @@ -1560,12 +1147,6 @@ ei_device_send_release(struct ei_device *device) ei_scroll_request_release(device->scroll); if (device->button) ei_button_request_release(device->button); - if (device->swipe) - ei_gesture_swipe_request_release(device->swipe); - if (device->pinch) - ei_gesture_pinch_request_release(device->pinch); - if (device->hold) - ei_gesture_hold_request_release(device->hold); int rc = ei_device_request_release(device); if (rc) @@ -1626,9 +1207,6 @@ ei_device_removed_by_server(struct ei_device *device) ei_touchscreen_unref(steal(&device->touchscreen)); ei_scroll_unref(steal(&device->scroll)); ei_button_unref(steal(&device->button)); - ei_gesture_swipe_unref(steal(&device->swipe)); - ei_gesture_pinch_unref(steal(&device->pinch)); - ei_gesture_hold_unref(steal(&device->hold)); ei_unregister_object(ei, &device->proto_object); ei_queue_device_removed_event(device); @@ -1704,7 +1282,6 @@ ei_device_has_capability(struct ei_device *device, enum ei_device_capability cap case EI_DEVICE_CAP_TOUCH: case EI_DEVICE_CAP_BUTTON: case EI_DEVICE_CAP_SCROLL: - case EI_DEVICE_CAP_GESTURES: case EI_DEVICE_CAP_TEXT: return mask_all(device->capabilities, cap); } @@ -2468,21 +2045,3 @@ ei_device_frame(struct ei_device *device, uint64_t time) ei_disconnect(ei_device_get_context(device)); return; } - -_public_ struct ei_swipe * -ei_device_swipe_new(struct ei_device *device, uint32_t nfingers) -{ - return ei_swipe_new(device, nfingers); -} - -_public_ struct ei_pinch * -ei_device_pinch_new(struct ei_device *device, uint32_t nfingers) -{ - return ei_pinch_new(device, nfingers); -} - -_public_ struct ei_hold * -ei_device_hold_new(struct ei_device *device, uint32_t nfingers) -{ - return ei_hold_new(device, nfingers); -} diff --git a/src/libei-device.h b/src/libei-device.h index fa8e2ac..4525262 100644 --- a/src/libei-device.h +++ b/src/libei-device.h @@ -66,9 +66,6 @@ struct ei_device { struct ei_button *button; struct ei_keyboard *keyboard; struct ei_touchscreen *touchscreen; - struct ei_gesture_swipe *swipe; - struct ei_gesture_pinch *pinch; - struct ei_gesture_hold *hold; struct ei_text *text; struct list link; @@ -90,33 +87,6 @@ struct ei_device { bool x_is_cancelled, y_is_cancelled; } scroll_state; - struct { - struct { - /* receiver */ - bool is_active; - uint32_t nfingers; - - /* sender */ - struct ei_swipe *current_swipe; /* no ref! */ - } swipe; - struct { - /* receiver */ - bool is_active; - uint32_t nfingers; - - /* sender */ - struct ei_pinch *current_pinch; /* no ref! */ - } pinch; - struct { - /* receiver */ - bool is_active; - uint32_t nfingers; - - /* sender */ - struct ei_hold *current_hold; /* no ref! */ - } hold; - } gesture_state; - struct ei_keymap *keymap; char *pending_region_mapping_id; @@ -157,13 +127,6 @@ OBJECT_DECLARE_GETTER(ei_device, scroll_interface, const struct ei_scroll_interf OBJECT_DECLARE_GETTER(ei_device, button_interface, const struct ei_button_interface *); OBJECT_DECLARE_GETTER(ei_device, keyboard_interface, const struct ei_keyboard_interface *); OBJECT_DECLARE_GETTER(ei_device, touchscreen_interface, const struct ei_touchscreen_interface *); -OBJECT_DECLARE_GETTER(ei_device, - gesture_swipe_interface, - const struct ei_gesture_swipe_interface *); -OBJECT_DECLARE_GETTER(ei_device, - gesture_pinch_interface, - const struct ei_gesture_pinch_interface *); -OBJECT_DECLARE_GETTER(ei_device, gesture_hold_interface, const struct ei_gesture_hold_interface *); OBJECT_DECLARE_GETTER(ei_device, text_interface, const struct ei_text_interface *); OBJECT_DECLARE_SETTER(ei_device, type, enum ei_device_type); OBJECT_DECLARE_SETTER(ei_device, name, const char *); diff --git a/src/libei-event.c b/src/libei-event.c index 080ecdd..e982aec 100644 --- a/src/libei-event.c +++ b/src/libei-event.c @@ -63,17 +63,6 @@ ei_event_type_to_string(enum ei_event_type type) CASE_RETURN_STRING(EI_EVENT_TOUCH_DOWN); CASE_RETURN_STRING(EI_EVENT_TOUCH_UP); CASE_RETURN_STRING(EI_EVENT_TOUCH_MOTION); - CASE_RETURN_STRING(EI_EVENT_SWIPE_BEGIN); - CASE_RETURN_STRING(EI_EVENT_SWIPE_UPDATE); - CASE_RETURN_STRING(EI_EVENT_SWIPE_END); - CASE_RETURN_STRING(EI_EVENT_SWIPE_CANCELLED); - CASE_RETURN_STRING(EI_EVENT_PINCH_BEGIN); - CASE_RETURN_STRING(EI_EVENT_PINCH_UPDATE); - CASE_RETURN_STRING(EI_EVENT_PINCH_END); - CASE_RETURN_STRING(EI_EVENT_PINCH_CANCELLED); - CASE_RETURN_STRING(EI_EVENT_HOLD_BEGIN); - CASE_RETURN_STRING(EI_EVENT_HOLD_END); - CASE_RETURN_STRING(EI_EVENT_HOLD_CANCELLED); CASE_RETURN_STRING(EI_EVENT_TEXT_KEYSYM); CASE_RETURN_STRING(EI_EVENT_TEXT_UTF8); } @@ -109,17 +98,6 @@ ei_event_destroy(struct ei_event *event) case EI_EVENT_TOUCH_DOWN: case EI_EVENT_TOUCH_UP: case EI_EVENT_TOUCH_MOTION: - case EI_EVENT_SWIPE_BEGIN: - case EI_EVENT_SWIPE_UPDATE: - case EI_EVENT_SWIPE_END: - case EI_EVENT_SWIPE_CANCELLED: - case EI_EVENT_PINCH_BEGIN: - case EI_EVENT_PINCH_UPDATE: - case EI_EVENT_PINCH_END: - case EI_EVENT_PINCH_CANCELLED: - case EI_EVENT_HOLD_BEGIN: - case EI_EVENT_HOLD_END: - case EI_EVENT_HOLD_CANCELLED: case EI_EVENT_TEXT_KEYSYM: break; case EI_EVENT_TEXT_UTF8: @@ -385,110 +363,6 @@ ei_event_touch_get_is_cancel(struct ei_event *event) return event->touch.is_cancel; } -_public_ uint32_t -ei_event_swipe_get_finger_count(struct ei_event *event) -{ - require_event_type(event, - 0, - EI_EVENT_SWIPE_BEGIN, - EI_EVENT_SWIPE_UPDATE, - EI_EVENT_SWIPE_END); - - return event->gestures.nfingers; -} - -_public_ double -ei_event_swipe_get_dx(struct ei_event *event) -{ - require_event_type(event, 0.0, EI_EVENT_SWIPE_UPDATE); - - return event->gestures.dx; -} - -_public_ double -ei_event_swipe_get_dy(struct ei_event *event) -{ - require_event_type(event, 0.0, EI_EVENT_SWIPE_UPDATE); - - return event->gestures.dy; -} - -_public_ bool -ei_event_swipe_get_is_cancelled(struct ei_event *event) -{ - require_event_type(event, false, EI_EVENT_SWIPE_END); - - return event->gestures.is_cancelled; -} - -_public_ uint32_t -ei_event_pinch_get_finger_count(struct ei_event *event) -{ - require_event_type(event, - 0, - EI_EVENT_PINCH_BEGIN, - EI_EVENT_PINCH_UPDATE, - EI_EVENT_PINCH_END); - - return event->gestures.nfingers; -} - -_public_ double -ei_event_pinch_get_dx(struct ei_event *event) -{ - require_event_type(event, 0.0, EI_EVENT_PINCH_UPDATE); - - return event->gestures.dx; -} - -_public_ double -ei_event_pinch_get_dy(struct ei_event *event) -{ - require_event_type(event, 0.0, EI_EVENT_PINCH_UPDATE); - - return event->gestures.dy; -} - -_public_ double -ei_event_pinch_get_rotation(struct ei_event *event) -{ - require_event_type(event, 0.0, EI_EVENT_PINCH_UPDATE); - - return event->gestures.degrees; -} - -_public_ double -ei_event_pinch_get_scale(struct ei_event *event) -{ - require_event_type(event, 0.0, EI_EVENT_PINCH_UPDATE); - - return event->gestures.scale; -} - -_public_ bool -ei_event_pinch_get_is_cancelled(struct ei_event *event) -{ - require_event_type(event, false, EI_EVENT_PINCH_END); - - return event->gestures.is_cancelled; -} - -_public_ uint32_t -ei_event_hold_get_finger_count(struct ei_event *event) -{ - require_event_type(event, 0, EI_EVENT_HOLD_BEGIN, EI_EVENT_HOLD_END); - - return event->gestures.nfingers; -} - -_public_ bool -ei_event_hold_get_is_cancelled(struct ei_event *event) -{ - require_event_type(event, false, EI_EVENT_HOLD_END); - - return event->gestures.is_cancelled; -} - _public_ uint32_t ei_event_text_get_keysym(struct ei_event *event) { @@ -529,17 +403,6 @@ ei_event_get_time(struct ei_event *event) EI_EVENT_TOUCH_DOWN, EI_EVENT_TOUCH_UP, EI_EVENT_TOUCH_MOTION, - EI_EVENT_SWIPE_BEGIN, - EI_EVENT_SWIPE_UPDATE, - EI_EVENT_SWIPE_END, - EI_EVENT_SWIPE_CANCELLED, - EI_EVENT_PINCH_BEGIN, - EI_EVENT_PINCH_UPDATE, - EI_EVENT_PINCH_END, - EI_EVENT_PINCH_CANCELLED, - EI_EVENT_HOLD_BEGIN, - EI_EVENT_HOLD_END, - EI_EVENT_HOLD_CANCELLED, EI_EVENT_TEXT_KEYSYM, EI_EVENT_TEXT_UTF8, EI_EVENT_FRAME); diff --git a/src/libei-event.h b/src/libei-event.h index 98ebc83..451c22c 100644 --- a/src/libei-event.h +++ b/src/libei-event.h @@ -81,13 +81,6 @@ struct ei_event { struct { struct ei_pingpong *pingpong; } sync; - struct { - uint32_t nfingers; - double dx, dy; - double degrees; - double scale; - bool is_cancelled; - } gestures; }; }; diff --git a/src/libei-gestures.c b/src/libei-gestures.c deleted file mode 100644 index 8ba60af..0000000 --- a/src/libei-gestures.c +++ /dev/null @@ -1,769 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/* - * Copyright © 2024 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#include "config.h" - -#include -#include - -#include "util-bits.h" -#include "util-io.h" -#include "util-macros.h" -#include "util-mem.h" -#include "util-strings.h" -#include "util-version.h" - -#include "ei-proto.h" -#include "libei-private.h" - -static void -ei_gesture_swipe_destroy(struct ei_gesture_swipe *swipe) -{ - struct ei *ei = ei_gesture_swipe_get_context(swipe); - ei_unregister_object(ei, &swipe->proto_object); -} - -OBJECT_IMPLEMENT_REF(ei_gesture_swipe); -OBJECT_IMPLEMENT_UNREF_CLEANUP(ei_gesture_swipe); - -static OBJECT_IMPLEMENT_CREATE(ei_gesture_swipe); -static OBJECT_IMPLEMENT_PARENT(ei_gesture_swipe, ei_device); -OBJECT_IMPLEMENT_GETTER_AS_REF(ei_gesture_swipe, proto_object, const struct brei_object *); - -struct ei_device * -ei_gesture_swipe_get_device(struct ei_gesture_swipe *swipe) -{ - return ei_gesture_swipe_parent(swipe); -} - -struct ei * -ei_gesture_swipe_get_context(struct ei_gesture_swipe *swipe) -{ - return ei_device_get_context(ei_gesture_swipe_get_device(swipe)); -} - -const struct ei_gesture_swipe_interface * -ei_gesture_swipe_get_interface(struct ei_gesture_swipe *swipe) -{ - struct ei_device *device = ei_gesture_swipe_get_device(swipe); - return ei_device_get_gesture_swipe_interface(device); -} - -struct ei_gesture_swipe * -ei_gesture_swipe_new(struct ei_device *device, object_id_t id, uint32_t version) -{ - struct ei_gesture_swipe *swipe = ei_gesture_swipe_create(&device->object); - struct ei *ei = ei_device_get_context(device); - - swipe->proto_object.id = id; - swipe->proto_object.implementation = swipe; - swipe->proto_object.interface = &ei_gesture_swipe_proto_interface; - swipe->proto_object.version = version; - ei_register_object(ei, &swipe->proto_object); - - return swipe; /* ref owned by caller */ -} - -static void -ei_gesture_pinch_destroy(struct ei_gesture_pinch *pinch) -{ - struct ei *ei = ei_gesture_pinch_get_context(pinch); - ei_unregister_object(ei, &pinch->proto_object); -} - -OBJECT_IMPLEMENT_REF(ei_gesture_pinch); -OBJECT_IMPLEMENT_UNREF_CLEANUP(ei_gesture_pinch); - -static OBJECT_IMPLEMENT_CREATE(ei_gesture_pinch); -static OBJECT_IMPLEMENT_PARENT(ei_gesture_pinch, ei_device); -OBJECT_IMPLEMENT_GETTER_AS_REF(ei_gesture_pinch, proto_object, const struct brei_object *); - -struct ei_device * -ei_gesture_pinch_get_device(struct ei_gesture_pinch *pinch) -{ - return ei_gesture_pinch_parent(pinch); -} - -struct ei * -ei_gesture_pinch_get_context(struct ei_gesture_pinch *pinch) -{ - return ei_device_get_context(ei_gesture_pinch_get_device(pinch)); -} - -const struct ei_gesture_pinch_interface * -ei_gesture_pinch_get_interface(struct ei_gesture_pinch *pinch) -{ - struct ei_device *device = ei_gesture_pinch_get_device(pinch); - return ei_device_get_gesture_pinch_interface(device); -} - -struct ei_gesture_pinch * -ei_gesture_pinch_new(struct ei_device *device, object_id_t id, uint32_t version) -{ - struct ei_gesture_pinch *pinch = ei_gesture_pinch_create(&device->object); - struct ei *ei = ei_device_get_context(device); - - pinch->proto_object.id = id; - pinch->proto_object.implementation = pinch; - pinch->proto_object.interface = &ei_gesture_pinch_proto_interface; - pinch->proto_object.version = version; - ei_register_object(ei, &pinch->proto_object); - - return pinch; /* ref owned by caller */ -} - -static void -ei_gesture_hold_destroy(struct ei_gesture_hold *hold) -{ - struct ei *ei = ei_gesture_hold_get_context(hold); - ei_unregister_object(ei, &hold->proto_object); -} - -OBJECT_IMPLEMENT_REF(ei_gesture_hold); -OBJECT_IMPLEMENT_UNREF_CLEANUP(ei_gesture_hold); - -static OBJECT_IMPLEMENT_CREATE(ei_gesture_hold); -static OBJECT_IMPLEMENT_PARENT(ei_gesture_hold, ei_device); -OBJECT_IMPLEMENT_GETTER_AS_REF(ei_gesture_hold, proto_object, const struct brei_object *); - -struct ei_device * -ei_gesture_hold_get_device(struct ei_gesture_hold *hold) -{ - return ei_gesture_hold_parent(hold); -} - -struct ei * -ei_gesture_hold_get_context(struct ei_gesture_hold *hold) -{ - return ei_device_get_context(ei_gesture_hold_get_device(hold)); -} - -const struct ei_gesture_hold_interface * -ei_gesture_hold_get_interface(struct ei_gesture_hold *hold) -{ - struct ei_device *device = ei_gesture_hold_get_device(hold); - return ei_device_get_gesture_hold_interface(device); -} - -struct ei_gesture_hold * -ei_gesture_hold_new(struct ei_device *device, object_id_t id, uint32_t version) -{ - struct ei_gesture_hold *hold = ei_gesture_hold_create(&device->object); - struct ei *ei = ei_device_get_context(device); - - hold->proto_object.id = id; - hold->proto_object.implementation = hold; - hold->proto_object.interface = &ei_gesture_hold_proto_interface; - hold->proto_object.version = version; - ei_register_object(ei, &hold->proto_object); - - return hold; /* ref owned by caller */ -} - -static void -ei_gesture_destroy(struct ei_gesture *gesture) -{ - ei_device_unref(gesture->device); -} - -static OBJECT_IMPLEMENT_INIT(ei_gesture); -OBJECT_IMPLEMENT_REF(ei_gesture); -OBJECT_IMPLEMENT_UNREF(ei_gesture); - -struct ei_device * -ei_gesture_get_device(struct ei_gesture *gesture) -{ - return gesture->device; -} - -struct ei * -ei_gesture_get_context(struct ei_gesture *gesture) -{ - return ei_device_get_context(ei_gesture_get_device(gesture)); -} - -static void -ei_gesture_init(struct ei_gesture *gesture, struct ei_device *device, uint32_t nfingers) -{ - /* Not using the device as parent object because we need a ref - * to it */ - ei_gesture_init_object(gesture, NULL); - - gesture->state = EI_GESTURE_STATE_NEW; - gesture->device = ei_device_ref(device); - gesture->nfingers = nfingers; -} - -struct ei_swipe * -ei_swipe_new(struct ei_device *device, uint32_t nfingers) -{ - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - log_bug_client(ei_device_get_context(device), - "%s: device is not a gesture device", - __func__); - return NULL; - } - - if (nfingers == 0) { - log_bug_client(ei_device_get_context(device), - "zero-finger gestures are not possible"); - return NULL; - } - - if (!device->swipe) - return NULL; - - struct ei_swipe *swipe = xalloc(sizeof *swipe); - ei_gesture_init(&swipe->base, device, nfingers); - - return swipe; -} - -_public_ struct ei_swipe * -ei_swipe_ref(struct ei_swipe *swipe) -{ - return (struct ei_swipe *)ei_gesture_ref(&swipe->base); -} - -_public_ struct ei_swipe * -ei_swipe_unref(struct ei_swipe *swipe) -{ - if (!swipe) - return NULL; - - struct ei_device *device = ei_gesture_get_device(&swipe->base); - - if (swipe == device->gesture_state.swipe.current_swipe) { - if (swipe->base.state == EI_GESTURE_STATE_BEGUN && - device->state == EI_DEVICE_STATE_EMULATING) { - ei_swipe_cancel(swipe); - } - } - - return (struct ei_swipe *)ei_gesture_unref(&swipe->base); -} - -struct ei * -ei_swipe_get_context(struct ei_swipe *swipe) -{ - return ei_gesture_get_context(&swipe->base); -} - -_public_ void -ei_swipe_begin(struct ei_swipe *swipe) -{ - struct ei_device *device = swipe->base.device; - struct ei *ei = ei_device_get_context(device); - - if (swipe->base.state != EI_GESTURE_STATE_NEW) { - log_bug_client(ei_gesture_get_context(&swipe->base), "gesture cannot begin twice"); - return; - } - - if (device->gesture_state.swipe.current_swipe) { - log_bug_client( - ei_gesture_get_context(&swipe->base), - "a different swipe gesture is already in process, ignoring this one"); - return; - } - - if (device->state != EI_DEVICE_STATE_EMULATING) { - log_bug_client(ei_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (ei->state == EI_STATE_NEW || ei->state == EI_STATE_DISCONNECTED) - return; - - if (!device->swipe) - return; - - if (swipe->base.nfingers == 0) { - log_bug_client(ei_device_get_context(device), - "zero-finger gestures are invalid, ignoring gesture"); - return; - } - - device->gesture_state.swipe.current_swipe = swipe; - - device->send_frame_event = true; - - swipe->base.state = EI_GESTURE_STATE_BEGUN; - int rc = ei_gesture_swipe_request_begin(device->swipe, swipe->base.nfingers); - if (rc) - ei_disconnect(ei); -} - -_public_ void -ei_swipe_update(struct ei_swipe *swipe, double x, double y) -{ - struct ei_device *device = swipe->base.device; - struct ei *ei = ei_device_get_context(device); - - if (swipe->base.state != EI_GESTURE_STATE_BEGUN) { - log_bug_client(ei_gesture_get_context(&swipe->base), - "gesture in invalid state for update"); - return; - } - - if (device->gesture_state.swipe.current_swipe != swipe) { - log_bug_client( - ei_gesture_get_context(&swipe->base), - "a different swipe gesture is already in process, ignoring this one"); - return; - } - - /* FIXME: what do we do with a gesture when the device stops emulating? */ - if (device->state != EI_DEVICE_STATE_EMULATING) { - log_bug_client(ei_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (ei->state == EI_STATE_NEW || ei->state == EI_STATE_DISCONNECTED) - return; - - if (!device->swipe) - return; - - device->send_frame_event = true; - - int rc = ei_gesture_swipe_request_update(device->swipe, x, y); - if (rc) - ei_disconnect(ei); -} - -static void -ei_swipe_end_cancel(struct ei_swipe *swipe, bool is_cancel) -{ - struct ei_device *device = swipe->base.device; - struct ei *ei = ei_device_get_context(device); - - if (swipe->base.state != EI_GESTURE_STATE_BEGUN) { - log_bug_client(ei_gesture_get_context(&swipe->base), - "gesture in invalid state for end/cancel"); - return; - } - - if (device->gesture_state.swipe.current_swipe != swipe) { - log_bug_client( - ei_gesture_get_context(&swipe->base), - "a different swipe gesture is already in process, ignoring this one"); - return; - } - - /* FIXME: what do we do with a gesture when the device stops emulating? */ - if (device->state != EI_DEVICE_STATE_EMULATING) { - log_bug_client(ei_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (ei->state == EI_STATE_NEW || ei->state == EI_STATE_DISCONNECTED) - return; - - if (!device->swipe) - return; - - swipe->base.state = EI_GESTURE_STATE_ENDED; - device->gesture_state.swipe.current_swipe = NULL; - - device->send_frame_event = true; - - int rc = ei_gesture_swipe_request_end(device->swipe, is_cancel); - if (rc) - ei_disconnect(ei); -} - -_public_ void -ei_swipe_end(struct ei_swipe *swipe) -{ - ei_swipe_end_cancel(swipe, false); -} - -_public_ void -ei_swipe_cancel(struct ei_swipe *swipe) -{ - ei_swipe_end_cancel(swipe, true); -} - -struct ei_pinch * -ei_pinch_new(struct ei_device *device, uint32_t nfingers) -{ - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - log_bug_client(ei_device_get_context(device), - "%s: device is not a gesture device", - __func__); - return NULL; - } - - if (nfingers < 2) { - log_bug_client(ei_device_get_context(device), - "pinch gestures require at least 2 fingers"); - return NULL; - } - - if (!device->pinch) - return NULL; - - /* Not using the device as parent object because we need a ref - * to it */ - struct ei_pinch *pinch = xalloc(sizeof *pinch); - ei_gesture_init(&pinch->base, device, nfingers); - - return pinch; -} - -_public_ struct ei_pinch * -ei_pinch_ref(struct ei_pinch *pinch) -{ - return (struct ei_pinch *)ei_gesture_ref(&pinch->base); -} - -_public_ struct ei_pinch * -ei_pinch_unref(struct ei_pinch *pinch) -{ - if (!pinch) - return NULL; - - struct ei_device *device = ei_gesture_get_device(&pinch->base); - - if (pinch == device->gesture_state.pinch.current_pinch) { - if (pinch->base.state == EI_GESTURE_STATE_BEGUN && - device->state == EI_DEVICE_STATE_EMULATING) { - ei_pinch_cancel(pinch); - } - } - - return (struct ei_pinch *)ei_gesture_unref(&pinch->base); -} - -struct ei * -ei_pinch_get_context(struct ei_pinch *pinch) -{ - return ei_gesture_get_context(&pinch->base); -} - -_public_ void -ei_pinch_begin(struct ei_pinch *pinch) -{ - struct ei_device *device = pinch->base.device; - struct ei *ei = ei_device_get_context(device); - - if (pinch->base.state != EI_GESTURE_STATE_NEW) { - log_bug_client(ei_gesture_get_context(&pinch->base), "gesture cannot begin twice"); - return; - } - - if (device->gesture_state.pinch.current_pinch) { - log_bug_client( - ei_gesture_get_context(&pinch->base), - "a different pinch gesture is already in process, ignoring this one"); - return; - } - - if (device->state != EI_DEVICE_STATE_EMULATING) { - log_bug_client(ei_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (ei->state == EI_STATE_NEW || ei->state == EI_STATE_DISCONNECTED) - return; - - if (!device->pinch) - return; - - if (pinch->base.nfingers == 0) { - log_bug_client(ei_device_get_context(device), - "zero-finger gestures are invalid, ignoring gesture"); - return; - } - - device->gesture_state.pinch.current_pinch = pinch; - - device->send_frame_event = true; - - pinch->base.state = EI_GESTURE_STATE_BEGUN; - int rc = ei_gesture_pinch_request_begin(device->pinch, pinch->base.nfingers); - if (rc) - ei_disconnect(ei); -} - -_public_ void -ei_pinch_update(struct ei_pinch *pinch, double x, double y, double scale, double rotation) -{ - struct ei_device *device = pinch->base.device; - struct ei *ei = ei_device_get_context(device); - - if (pinch->base.state != EI_GESTURE_STATE_BEGUN) { - log_bug_client(ei_gesture_get_context(&pinch->base), - "gesture in invalid state for update"); - return; - } - - if (device->gesture_state.pinch.current_pinch != pinch) { - log_bug_client( - ei_gesture_get_context(&pinch->base), - "a different pinch gesture is already in process, ignoring this one"); - return; - } - - /* FIXME: what do we do with a gesture when the device stops emulating? */ - if (device->state != EI_DEVICE_STATE_EMULATING) { - log_bug_client(ei_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (ei->state == EI_STATE_NEW || ei->state == EI_STATE_DISCONNECTED) - return; - - if (!device->pinch) - return; - - device->send_frame_event = true; - - int rc = ei_gesture_pinch_request_update(device->pinch, x, y, scale, rotation); - if (rc) - ei_disconnect(ei); -} - -static void -ei_pinch_end_cancel(struct ei_pinch *pinch, bool is_cancel) -{ - struct ei_device *device = pinch->base.device; - struct ei *ei = ei_device_get_context(device); - - if (pinch->base.state != EI_GESTURE_STATE_BEGUN) { - log_bug_client(ei_gesture_get_context(&pinch->base), - "gesture in invalid state for end/cancel"); - return; - } - - if (device->gesture_state.pinch.current_pinch != pinch) { - log_bug_client( - ei_gesture_get_context(&pinch->base), - "a different pinch gesture is already in process, ignoring this one"); - return; - } - - /* FIXME: what do we do with a gesture when the device stops emulating? */ - if (device->state != EI_DEVICE_STATE_EMULATING) { - log_bug_client(ei_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (ei->state == EI_STATE_NEW || ei->state == EI_STATE_DISCONNECTED) - return; - - if (!device->pinch) - return; - - pinch->base.state = EI_GESTURE_STATE_ENDED; - device->gesture_state.pinch.current_pinch = NULL; - - device->send_frame_event = true; - - int rc = ei_gesture_pinch_request_end(device->pinch, is_cancel); - if (rc) - ei_disconnect(ei); -} - -_public_ void -ei_pinch_end(struct ei_pinch *pinch) -{ - ei_pinch_end_cancel(pinch, false); -} - -_public_ void -ei_pinch_cancel(struct ei_pinch *pinch) -{ - ei_pinch_end_cancel(pinch, true); -} - -struct ei_hold * -ei_hold_new(struct ei_device *device, uint32_t nfingers) -{ - if (!ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - log_bug_client(ei_device_get_context(device), - "%s: device is not a gesture device", - __func__); - return NULL; - } - - if (nfingers == 0) { - log_bug_client(ei_device_get_context(device), - "zero-finger gestures are not possible"); - return NULL; - } - - if (!device->hold) - return NULL; - - /* Not using the device as parent object because we need a ref - * to it */ - struct ei_hold *hold = xalloc(sizeof *hold); - ei_gesture_init(&hold->base, device, nfingers); - - return hold; -} - -_public_ struct ei_hold * -ei_hold_ref(struct ei_hold *hold) -{ - return (struct ei_hold *)ei_gesture_ref(&hold->base); -} - -_public_ struct ei_hold * -ei_hold_unref(struct ei_hold *hold) -{ - if (!hold) - return NULL; - - struct ei_device *device = ei_gesture_get_device(&hold->base); - - if (hold == device->gesture_state.hold.current_hold) { - if (hold->base.state == EI_GESTURE_STATE_BEGUN && - device->state == EI_DEVICE_STATE_EMULATING) { - ei_hold_cancel(hold); - } - } - - return (struct ei_hold *)ei_gesture_unref(&hold->base); -} - -struct ei * -ei_hold_get_context(struct ei_hold *hold) -{ - return ei_gesture_get_context(&hold->base); -} - -_public_ void -ei_hold_begin(struct ei_hold *hold) -{ - struct ei_device *device = hold->base.device; - struct ei *ei = ei_device_get_context(device); - - if (hold->base.state != EI_GESTURE_STATE_NEW) { - log_bug_client(ei_gesture_get_context(&hold->base), "gesture cannot begin twice"); - return; - } - - if (device->gesture_state.hold.current_hold) { - log_bug_client(ei_gesture_get_context(&hold->base), - "a different hold gesture is already in process, ignoring this one"); - return; - } - - if (device->state != EI_DEVICE_STATE_EMULATING) { - log_bug_client(ei_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (ei->state == EI_STATE_NEW || ei->state == EI_STATE_DISCONNECTED) - return; - - if (!device->hold) - return; - - if (hold->base.nfingers == 0) { - log_bug_client(ei_device_get_context(device), - "zero-finger gestures are invalid, ignoring gesture"); - return; - } - - device->gesture_state.hold.current_hold = hold; - - device->send_frame_event = true; - - hold->base.state = EI_GESTURE_STATE_BEGUN; - int rc = ei_gesture_hold_request_begin(device->hold, hold->base.nfingers); - if (rc) - ei_disconnect(ei); -} - -static void -ei_hold_end_cancel(struct ei_hold *hold, bool is_cancel) -{ - struct ei_device *device = hold->base.device; - struct ei *ei = ei_device_get_context(device); - - if (hold->base.state != EI_GESTURE_STATE_BEGUN) { - log_bug_client(ei_gesture_get_context(&hold->base), - "gesture in invalid state for end/cancel"); - return; - } - - if (device->gesture_state.hold.current_hold != hold) { - log_bug_client(ei_gesture_get_context(&hold->base), - "a different hold gesture is already in process, ignoring this one"); - return; - } - - /* FIXME: what do we do with a gesture when the device stops emulating? */ - if (device->state != EI_DEVICE_STATE_EMULATING) { - log_bug_client(ei_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (ei->state == EI_STATE_NEW || ei->state == EI_STATE_DISCONNECTED) - return; - - if (!device->hold) - return; - - hold->base.state = EI_GESTURE_STATE_ENDED; - device->gesture_state.hold.current_hold = NULL; - - device->send_frame_event = true; - - int rc = ei_gesture_hold_request_end(device->hold, is_cancel); - if (rc) - ei_disconnect(ei); -} - -_public_ void -ei_hold_end(struct ei_hold *hold) -{ - ei_hold_end_cancel(hold, false); -} - -_public_ void -ei_hold_cancel(struct ei_hold *hold) -{ - ei_hold_end_cancel(hold, true); -} diff --git a/src/libei-gestures.h b/src/libei-gestures.h deleted file mode 100644 index 2efaf13..0000000 --- a/src/libei-gestures.h +++ /dev/null @@ -1,123 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/* - * Copyright © 2024 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#pragma once - -#include "util-list.h" -#include "util-object.h" - -#include "brei-shared.h" - -struct ei; -struct ei_device; - -/* This is the protocol-only object, not exposed in the API. See ei_swipe() for - * the C API object */ -struct ei_gesture_swipe { - struct object object; - struct brei_object proto_object; -}; - -OBJECT_DECLARE_GETTER(ei_gesture_swipe, context, struct ei *); -OBJECT_DECLARE_GETTER(ei_gesture_swipe, device, struct ei_device *); -OBJECT_DECLARE_GETTER(ei_gesture_swipe, proto_object, const struct brei_object *); -OBJECT_DECLARE_GETTER(ei_gesture_swipe, interface, const struct ei_gesture_swipe_interface *); -OBJECT_DECLARE_REF(ei_gesture_swipe); -OBJECT_DECLARE_UNREF(ei_gesture_swipe); - -struct ei_gesture_swipe * -ei_gesture_swipe_new(struct ei_device *device, object_id_t id, uint32_t version); - -/* This is the protocol-only object, not exposed in the API. See ei_pinch() for - * the C API object */ -struct ei_gesture_pinch { - struct object object; - struct brei_object proto_object; -}; - -OBJECT_DECLARE_GETTER(ei_gesture_pinch, context, struct ei *); -OBJECT_DECLARE_GETTER(ei_gesture_pinch, device, struct ei_device *); -OBJECT_DECLARE_GETTER(ei_gesture_pinch, proto_object, const struct brei_object *); -OBJECT_DECLARE_GETTER(ei_gesture_pinch, interface, const struct ei_gesture_pinch_interface *); -OBJECT_DECLARE_REF(ei_gesture_pinch); -OBJECT_DECLARE_UNREF(ei_gesture_pinch); - -struct ei_gesture_pinch * -ei_gesture_pinch_new(struct ei_device *device, object_id_t id, uint32_t version); - -/* This is the protocol-only object, not exposed in the API. See ei_hold() for - * the C API object */ -struct ei_gesture_hold { - struct object object; - struct brei_object proto_object; -}; - -OBJECT_DECLARE_GETTER(ei_gesture_hold, context, struct ei *); -OBJECT_DECLARE_GETTER(ei_gesture_hold, device, struct ei_device *); -OBJECT_DECLARE_GETTER(ei_gesture_hold, proto_object, const struct brei_object *); -OBJECT_DECLARE_GETTER(ei_gesture_hold, interface, const struct ei_gesture_hold_interface *); -OBJECT_DECLARE_REF(ei_gesture_hold); -OBJECT_DECLARE_UNREF(ei_gesture_hold); - -struct ei_gesture_hold * -ei_gesture_hold_new(struct ei_device *device, object_id_t id, uint32_t version); - -enum ei_gesture_state { EI_GESTURE_STATE_NEW, EI_GESTURE_STATE_BEGUN, EI_GESTURE_STATE_ENDED }; - -/* This is the parent object for all the C API gestures */ -struct ei_gesture { - struct object object; - struct ei_device *device; - enum ei_gesture_state state; - uint32_t nfingers; -}; - -OBJECT_DECLARE_REF(ei_gesture); -OBJECT_DECLARE_UNREF(ei_gesture); -OBJECT_DECLARE_GETTER(ei_gesture, context, struct ei *); -OBJECT_DECLARE_GETTER(ei_gesture, device, struct ei_device *); - -struct ei_swipe { - struct ei_gesture base; -}; - -struct ei_pinch { - struct ei_gesture base; -}; - -struct ei_hold { - struct ei_gesture base; -}; - -struct ei_swipe * -ei_swipe_new(struct ei_device *device, uint32_t nfingers); -OBJECT_DECLARE_GETTER(ei_swipe, context, struct ei *); - -struct ei_pinch * -ei_pinch_new(struct ei_device *device, uint32_t nfingers); -OBJECT_DECLARE_GETTER(ei_pinch, context, struct ei *); - -struct ei_hold * -ei_hold_new(struct ei_device *device, uint32_t nfingers); -OBJECT_DECLARE_GETTER(ei_hold, context, struct ei *); diff --git a/src/libei-handshake.c b/src/libei-handshake.c index c4bd80e..0bc6da2 100644 --- a/src/libei-handshake.c +++ b/src/libei-handshake.c @@ -116,15 +116,6 @@ ei_handshake_initialize(struct ei_handshake *setup, uint32_t version) ei_handshake_request_interface_version(setup, EI_TOUCHSCREEN_INTERFACE_NAME, v->ei_touchscreen); - ei_handshake_request_interface_version(setup, - EI_GESTURE_SWIPE_INTERFACE_NAME, - v->ei_gesture_swipe); - ei_handshake_request_interface_version(setup, - EI_GESTURE_PINCH_INTERFACE_NAME, - v->ei_gesture_pinch); - ei_handshake_request_interface_version(setup, - EI_GESTURE_HOLD_INTERFACE_NAME, - v->ei_gesture_hold); ei_handshake_request_interface_version(setup, EI_TEXT_INTERFACE_NAME, v->ei_text); } diff --git a/src/libei-private.h b/src/libei-private.h index 29c9ae2..141f3bc 100644 --- a/src/libei-private.h +++ b/src/libei-private.h @@ -39,7 +39,6 @@ #include "libei-connection.h" #include "libei-device.h" #include "libei-event.h" -#include "libei-gestures.h" #include "libei-handshake.h" #include "libei-keyboard.h" #include "libei-pingpong.h" @@ -78,9 +77,6 @@ struct ei_interface_versions { uint32_t ei_button; uint32_t ei_keyboard; uint32_t ei_touchscreen; - uint32_t ei_gesture_swipe; - uint32_t ei_gesture_pinch; - uint32_t ei_gesture_hold; uint32_t ei_text; }; @@ -258,43 +254,6 @@ ei_queue_text_utf8_event(struct ei_device *device, const char *utf8); void ei_sync_event_send_done(struct ei_event *e); -void -ei_queue_swipe_begin_event(struct ei_device *device, uint32_t nfingers); - -void -ei_queue_swipe_update_event(struct ei_device *device, double dx, double dy); - -void -ei_queue_swipe_end_event(struct ei_device *device, bool is_cancelled); - -void -ei_queue_swipe_cancelled_event(struct ei_device *device); - -void -ei_queue_pinch_begin_event(struct ei_device *device, uint32_t nfingers); - -void -ei_queue_pinch_update_event(struct ei_device *device, - double dx, - double dy, - double scale, - double rotation); - -void -ei_queue_pinch_end_event(struct ei_device *device, bool is_cancelled); - -void -ei_queue_pinch_cancelled_event(struct ei_device *device); - -void -ei_queue_hold_begin_event(struct ei_device *device, uint32_t nfingers); - -void -ei_queue_hold_end_event(struct ei_device *device, bool is_cancelled); - -void -ei_queue_hold_cancelled_event(struct ei_device *device); - _printf_(6, 7) void ei_log_msg(struct ei *ei, enum ei_log_priority priority, diff --git a/src/libei-seat.c b/src/libei-seat.c index 0d888e1..ebb6b89 100644 --- a/src/libei-seat.c +++ b/src/libei-seat.c @@ -251,10 +251,6 @@ ei_seat_has_capability(struct ei_seat *seat, enum ei_device_capability cap) return seat->capabilities.map[EI_SCROLL_INTERFACE_INDEX] != 0; case EI_DEVICE_CAP_BUTTON: return seat->capabilities.map[EI_BUTTON_INTERFACE_INDEX] != 0; - case EI_DEVICE_CAP_GESTURES: - return seat->capabilities.map[EI_GESTURE_SWIPE_INTERFACE_INDEX] != 0 || - seat->capabilities.map[EI_GESTURE_PINCH_INTERFACE_INDEX] != 0 || - seat->capabilities.map[EI_GESTURE_HOLD_INTERFACE_INDEX] != 0; case EI_DEVICE_CAP_TEXT: return seat->capabilities.map[EI_TEXT_INTERFACE_INDEX] != 0; } @@ -291,10 +287,6 @@ ei_seat_cap_mask(struct ei_seat *seat, enum ei_device_capability cap) return seat->capabilities.map[EI_BUTTON_INTERFACE_INDEX]; case EI_DEVICE_CAP_SCROLL: return seat->capabilities.map[EI_SCROLL_INTERFACE_INDEX]; - case EI_DEVICE_CAP_GESTURES: - return seat->capabilities.map[EI_GESTURE_SWIPE_INTERFACE_INDEX] | - seat->capabilities.map[EI_GESTURE_PINCH_INTERFACE_INDEX] | - seat->capabilities.map[EI_GESTURE_HOLD_INTERFACE_INDEX]; case EI_DEVICE_CAP_TEXT: return seat->capabilities.map[EI_TEXT_INTERFACE_INDEX]; } diff --git a/src/libei.c b/src/libei.c index 17af78e..a6ec98a 100644 --- a/src/libei.c +++ b/src/libei.c @@ -132,9 +132,6 @@ ei_create_context(bool is_sender, void *user_data) .ei_keyboard = VERSION_V(1), .ei_text = VERSION_V(1), .ei_touchscreen = VERSION_V(2), - .ei_gesture_swipe = VERSION_V(1), - .ei_gesture_pinch = VERSION_V(1), - .ei_gesture_hold = VERSION_V(1), }; /* This must be v1 until the server tells us otherwise */ ei->handshake = ei_handshake_new(ei, VERSION_V(1)); @@ -253,17 +250,6 @@ update_event_timestamp(struct ei_event *event, uint64_t time) case EI_EVENT_TOUCH_DOWN: case EI_EVENT_TOUCH_UP: case EI_EVENT_TOUCH_MOTION: - case EI_EVENT_SWIPE_BEGIN: - case EI_EVENT_SWIPE_UPDATE: - case EI_EVENT_SWIPE_END: - case EI_EVENT_SWIPE_CANCELLED: - case EI_EVENT_PINCH_BEGIN: - case EI_EVENT_PINCH_UPDATE: - case EI_EVENT_PINCH_END: - case EI_EVENT_PINCH_CANCELLED: - case EI_EVENT_HOLD_BEGIN: - case EI_EVENT_HOLD_END: - case EI_EVENT_HOLD_CANCELLED: case EI_EVENT_TEXT_KEYSYM: case EI_EVENT_TEXT_UTF8: if (event->timestamp != 0) { @@ -301,17 +287,6 @@ queue_event(struct ei *ei, struct ei_event *event) case EI_EVENT_TOUCH_DOWN: case EI_EVENT_TOUCH_UP: case EI_EVENT_TOUCH_MOTION: - case EI_EVENT_SWIPE_BEGIN: - case EI_EVENT_SWIPE_UPDATE: - case EI_EVENT_SWIPE_END: - case EI_EVENT_SWIPE_CANCELLED: - case EI_EVENT_PINCH_BEGIN: - case EI_EVENT_PINCH_UPDATE: - case EI_EVENT_PINCH_END: - case EI_EVENT_PINCH_CANCELLED: - case EI_EVENT_HOLD_BEGIN: - case EI_EVENT_HOLD_END: - case EI_EVENT_HOLD_CANCELLED: case EI_EVENT_TEXT_KEYSYM: case EI_EVENT_TEXT_UTF8: prefix = "pending "; @@ -655,136 +630,6 @@ ei_queue_touch_cancel_event(struct ei_device *device, uint32_t touchid) queue_event(ei_device_get_context(device), e); } -void -ei_queue_swipe_begin_event(struct ei_device *device, uint32_t nfingers) -{ - struct ei_event *e = ei_event_new_for_device(device); - - e->type = EI_EVENT_SWIPE_BEGIN; - e->gestures.nfingers = nfingers; - - queue_event(ei_device_get_context(device), e); -} - -void -ei_queue_swipe_update_event(struct ei_device *device, double dx, double dy) -{ - struct ei_event *e = ei_event_new_for_device(device); - - e->type = EI_EVENT_SWIPE_UPDATE; - e->gestures.nfingers = device->gesture_state.swipe.nfingers; - e->gestures.dx = dx; - e->gestures.dy = dy; - - queue_event(ei_device_get_context(device), e); -} - -void -ei_queue_swipe_end_event(struct ei_device *device, bool is_cancelled) -{ - struct ei_event *e = ei_event_new_for_device(device); - - e->type = EI_EVENT_SWIPE_END; - e->gestures.nfingers = device->gesture_state.swipe.nfingers; - e->gestures.is_cancelled = is_cancelled; - - queue_event(ei_device_get_context(device), e); -} - -void -ei_queue_swipe_cancelled_event(struct ei_device *device) -{ - struct ei_event *e = ei_event_new_for_device(device); - - e->type = EI_EVENT_SWIPE_CANCELLED; - - queue_event(ei_device_get_context(device), e); -} - -void -ei_queue_pinch_begin_event(struct ei_device *device, uint32_t nfingers) -{ - struct ei_event *e = ei_event_new_for_device(device); - - e->type = EI_EVENT_PINCH_BEGIN; - e->gestures.nfingers = nfingers; - - queue_event(ei_device_get_context(device), e); -} - -void -ei_queue_pinch_update_event(struct ei_device *device, - double dx, - double dy, - double scale, - double rotation) -{ - struct ei_event *e = ei_event_new_for_device(device); - e->type = EI_EVENT_PINCH_UPDATE; - e->gestures.nfingers = device->gesture_state.pinch.nfingers; - e->gestures.scale = scale; - e->gestures.degrees = rotation; - e->gestures.dx = dx; - e->gestures.dy = dy; - - queue_event(ei_device_get_context(device), e); -} - -void -ei_queue_pinch_end_event(struct ei_device *device, bool is_cancelled) -{ - struct ei_event *e = ei_event_new_for_device(device); - - e->type = EI_EVENT_PINCH_END; - e->gestures.nfingers = device->gesture_state.pinch.nfingers; - e->gestures.is_cancelled = is_cancelled; - - queue_event(ei_device_get_context(device), e); -} - -void -ei_queue_pinch_cancelled_event(struct ei_device *device) -{ - struct ei_event *e = ei_event_new_for_device(device); - - e->type = EI_EVENT_PINCH_CANCELLED; - - queue_event(ei_device_get_context(device), e); -} - -void -ei_queue_hold_begin_event(struct ei_device *device, uint32_t nfingers) -{ - struct ei_event *e = ei_event_new_for_device(device); - - e->type = EI_EVENT_HOLD_BEGIN; - e->gestures.nfingers = nfingers; - - queue_event(ei_device_get_context(device), e); -} - -void -ei_queue_hold_end_event(struct ei_device *device, bool is_cancelled) -{ - struct ei_event *e = ei_event_new_for_device(device); - - e->type = EI_EVENT_HOLD_END; - e->gestures.nfingers = device->gesture_state.hold.nfingers; - e->gestures.is_cancelled = is_cancelled; - - queue_event(ei_device_get_context(device), e); -} - -void -ei_queue_hold_cancelled_event(struct ei_device *device) -{ - struct ei_event *e = ei_event_new_for_device(device); - - e->type = EI_EVENT_HOLD_CANCELLED; - - queue_event(ei_device_get_context(device), e); -} - void ei_queue_text_keysym_event(struct ei_device *device, uint32_t keysym, bool is_press) { diff --git a/src/libei.h b/src/libei.h index 3588134..6ffebc6 100644 --- a/src/libei.h +++ b/src/libei.h @@ -215,39 +215,6 @@ struct ei_region; */ struct ei_touch; -/** - * @struct ei_swipe - * - * A single swipe gesture. - * - * @see ei_device_swipe_new - * @see ei_swipe_begin - * @see ei_swipe_update - * @see ei_swipe_end - */ -struct ei_swipe; -/** - * @struct ei_pinch - * - * A single pinch gesture. - * - * @see ei_device_pinch_new - * @see ei_pinch_begin - * @see ei_pinch_update - * @see ei_pinch_end - */ -struct ei_pinch; -/** - * @struct ei_hold - * - * A single hold gesture. - * - * @see ei_device_hold_new - * @see ei_hold_begin - * @see ei_hold_end - */ -struct ei_hold; - /** * @struct ei_ping * @@ -330,24 +297,12 @@ enum ei_device_capability { * The device can send button events */ EI_DEVICE_CAP_BUTTON = (1 << 5), - /** - * The device can send gesture events. - * - * The ei protocol separates available gestures - * into swipe, pinch and hold and a device may support - * any number of those independently. For simplicity, - * the libei C API only provides one capability that - * is set if the device supports any of those gestures. - * - * @since 1.6 - */ - EI_DEVICE_CAP_GESTURES = (1 << 6), /** * The device can send text-like data * * @since 1.6 */ - EI_DEVICE_CAP_TEXT = (1 << 7), + EI_DEVICE_CAP_TEXT = (1 << 6), }; /** @@ -451,7 +406,6 @@ enum ei_event_type { * - any buttons or keys logically down are released * - any modifiers logically down are released * - any touches logically down are released - * - any gestures logically active are ended * * Sender clients must wait until @ref EI_EVENT_DEVICE_RESUMED * before sending events. @@ -652,127 +606,6 @@ enum ei_event_type { */ EI_EVENT_TOUCH_MOTION, - /** - * Event for a swipe begin. Only one swipe gesture may be active - * at any time. - * - * @note This event is only generated on a receiver ei context. - * See ei_device_swipe_new() and ei_swipe_begin() for the sender context API. - * - * @since 1.6 - */ - EI_EVENT_SWIPE_BEGIN = 900, - /** - * Event for an update to the current ongoing swipe gesture. - * - * This library accumulates all updates to the gesture within the same - * device frame into one gesture event. - * - * @note This event is only generated on a receiver ei context. - * See ei_device_swipe_new() and ei_swipe_update() for the sender context API. - * - * @since 1.6 - */ - EI_EVENT_SWIPE_UPDATE, - /** - * Event for the logical end to the current ongoing swipe gesture. - * - * @note This event is only generated on a receiver ei context. - * See ei_device_swipe_new() and ei_swipe_end() for the sender context API. - * - * @since 1.6 - */ - EI_EVENT_SWIPE_END, - /** - * Event for an EIS-initiated cancellation of a gesture. - * - * If this event is received the current on going gesture should be - * released without further updates or sending an end event (see - * ei_swipe_unref()). - * - * @note This event is only generated on a sender ei context. - * - * @since 1.6 - */ - EI_EVENT_SWIPE_CANCELLED, - - /** - * Event for a pinch begin. Only one pinch gesture may be active - * at any time. - * - * @note This event is only generated on a receiver ei context. - * See ei_device_pinch_new() and ei_pinch_begin() for the sender context API. - * - * @since 1.6 - */ - EI_EVENT_PINCH_BEGIN = 910, - /** - * Event for an update to the current ongoing pinch gesture. - * - * This library accumulates all updates to the gesture within the same - * device frame into one gesture event, e.g. where the gestures moves - * and rotates only one update event is generated. - * - * @note This event is only generated on a receiver ei context. - * See ei_device_pinch_new() and ei_pinch_update() for the sender context API. - * - * @since 1.6 - */ - EI_EVENT_PINCH_UPDATE, - /** - * Event for the logical end to the current ongoing pinch gesture. - * - * @note This event is only generated on a receiver ei context. - * See ei_device_pinch_new() and ei_pinch_end() for the sender context API. - * - * @since 1.6 - */ - EI_EVENT_PINCH_END, - /** - * Event for an EIS-initiated cancellation of a gesture. - * - * If this event is received the current on going gesture should be - * released without further updates or sending an end event (see - * ei_pinch_unref()). - * - * @note This event is only generated on a sender ei context. - * - * @since 1.6 - */ - EI_EVENT_PINCH_CANCELLED, - - /** - * Event for a hold begin. Only one hold gesture may be active - * at any time. - * - * @note This event is only generated on a receiver ei context. - * See ei_device_hold_new() and ei_hold_begin() for the sender context API. - * - * @since 1.6 - */ - EI_EVENT_HOLD_BEGIN = 920, - /** - * Event for the logical end to the current ongoing hold gesture. - * - * @note This event is only generated on a receiver ei context. - * See ei_device_hold_new() and ei_hold_end() for the sender context API. - * - * @since 1.6 - */ - EI_EVENT_HOLD_END, - /** - * Event for an EIS-initiated cancellation of a gesture. - * - * If this event is received the current on going gesture should be - * released without further updates or sending an end event (see - * ei_hold_unref()). - * - * @note This event is only generated on a sender ei context. - * - * @since 1.6 - */ - EI_EVENT_HOLD_CANCELLED, - /** * Event for a single keysym logically pressed/released on this device. * The keysym is an XKB-compatible keysym (not key code!) and may not be @@ -783,7 +616,7 @@ enum ei_event_type { * * @since 1.6 */ - EI_EVENT_TEXT_KEYSYM = 930, + EI_EVENT_TEXT_KEYSYM = 900, /** * Event for a UTF-8 compatible text sequence sent by this device. @@ -2246,297 +2079,6 @@ ei_touch_get_user_data(struct ei_touch *touch); struct ei_device * ei_touch_get_device(struct ei_touch *touch); -/** - * @ingroup libei-sender - * - * Initiate a new swipe gesture on a device with the @ref EI_DEVICE_CAP_GESTURES - * capability. This gesture does not immediately send events, use - * ei_swipe_begin(), ei_swipe_update() and ei_swipe_end(). - * - * The returned gesture has a refcount of at least 1, use ei_swipe_unref() to - * release resources associated with this gesture - * - * This method is only available on an ei sender context. - * - * If the underlying device does not support swipe gestures, this function - * returns NULL. - * - * @param device A device with @ref EI_DEVICE_CAP_GESTURES capability - * @param nfingers The number of fingers, must be greater than 0 - * @return A new swipe gesture or NULL on error - * - * @since 1.6 - */ -struct ei_swipe * -ei_device_swipe_new(struct ei_device *device, uint32_t nfingers); - -/** - * @ingroup libei-sender - * - * Starts the swipe gesture. - * - * This function can only be called once on an ei_swipe object. Further - * calls to ei_swipe_begin() on the same object are silently ignored. - * - * @param swipe A newly created swipe gesture - * - * @since 1.6 - */ -void -ei_swipe_begin(struct ei_swipe *swipe); - -/** - * @ingroup libei-sender - * - * Update the swipe gestures's position by the given relative delta. - * - * @since 1.6 - */ -void -ei_swipe_update(struct ei_swipe *swipe, double x, double y); - -/** - * @ingroup libei-sender - * - * Release this swipe. After this call, the swipe event becomes inert and - * no longer responds to either ei_swipe_begin(), - * ei_swipe_update(), ei_swipe_cancel() or - * ei_swipe_end() and the caller should call ei_swipe_unref(). - * - * @since 1.6 - */ -void -ei_swipe_end(struct ei_swipe *swipe); - -/** - * @ingroup libei-sender - * - * Cancel this swipe. After this call, the swipe event becomes inert and - * no longer responds to either ei_swipe_begin(), - * ei_swipe_update(), ei_swipe_cancel() or - * ei_swipe_end() and the caller should call ei_swipe_unref(). - * - * @since 1.6 - */ -void -ei_swipe_cancel(struct ei_swipe *swipe); - -/** - * @ingroup libei-sender - * - * Increase the refcount of this struct by one. Use ei_swipe_unref() to - * decrease the refcount. - * - * @return the argument passed into the function - * - * @since 1.6 - */ -struct ei_swipe * -ei_swipe_ref(struct ei_swipe *swipe); - -/** - * @ingroup libei-sender - * - * Decrease the refcount of this struct by one. When the refcount reaches - * zero, all allocated resources for this struct are released. - * - * @return always NULL - * - * @since 1.6 - */ -struct ei_swipe * -ei_swipe_unref(struct ei_swipe *swipe); - -/** - * @ingroup libei-sender - * - * Initiate a new pinch gesture on a device with the @ref EI_DEVICE_CAP_GESTURES - * capability. This gesture does not immediately send events, use - * ei_pinch_begin(), ei_pinch_update() and ei_pinch_end(). - * - * The returned gesture has a refcount of at least 1, use ei_pinch_unref() to - * release resources associated with this gesture - * - * This method is only available on an ei sender context. - * - * If the underlying device does not support pinch gestures, this function - * returns NULL. - * - * @param device A device with @ref EI_DEVICE_CAP_GESTURES capability - * @param nfingers The number of fingers, must be at least 2 - * @return A new pinch gesture or NULL on error - * - * @since 1.6 - */ -struct ei_pinch * -ei_device_pinch_new(struct ei_device *device, uint32_t nfingers); - -/** - * @ingroup libei-sender - * - * Starts the pinch gesture. - * - * This function can only be called once on an ei_pinch object. Further - * calls to ei_pinch_begin() on the same object are silently ignored. - * - * @param pinch A newly created pinch gesture - * - * @since 1.6 - */ -void -ei_pinch_begin(struct ei_pinch *pinch); - -/** - * @ingroup libei-sender - * - * Update the pinch gestures's position by the given relative delta. - * - * @since 1.6 - */ -void -ei_pinch_update(struct ei_pinch *pinch, double x, double y, double scale, double rotation); - -/** - * @ingroup libei-sender - * - * Release this pinch. After this call, the pinch event becomes inert and - * no longer responds to either ei_pinch_begin(), - * ei_pinch_update(), ei_pinch_cancel() or - * ei_pinch_end() and the caller should call ei_pinch_unref(). - * - * @since 1.6 - */ -void -ei_pinch_end(struct ei_pinch *pinch); - -/** - * @ingroup libei-sender - * - * Cancel this pinch. After this call, the pinch event becomes inert and - * no longer responds to either ei_pinch_begin(), - * ei_pinch_update(), ei_pinch_cancel() or - * ei_pinch_end() and the caller should call ei_pinch_unref(). - * - * @since 1.6 - */ -void -ei_pinch_cancel(struct ei_pinch *pinch); - -/** - * @ingroup libei-sender - * - * Increase the refcount of this struct by one. Use ei_pinch_unref() to - * decrease the refcount. - * - * @return the argument passed into the function - * - * @since 1.6 - */ -struct ei_pinch * -ei_pinch_ref(struct ei_pinch *pinch); - -/** - * @ingroup libei-sender - * - * Decrease the refcount of this struct by one. When the refcount reaches - * zero, all allocated resources for this struct are released. - * - * @return always NULL - * - * @since 1.6 - */ -struct ei_pinch * -ei_pinch_unref(struct ei_pinch *pinch); - -/** - * @ingroup libei-sender - * - * Initiate a new hold gesture on a device with the @ref EI_DEVICE_CAP_GESTURES - * capability. This gesture does not immediately send events, use - * ei_hold_begin() and ei_hold_end(). - * - * The returned gesture has a refcount of at least 1, use ei_hold_unref() to - * release resources associated with this gesture - * - * This method is only available on an ei sender context. - * - * If the underlying device does not support hold gestures, this function - * returns NULL. - * - * @param device A device with @ref EI_DEVICE_CAP_GESTURES capability - * @param nfingers The number of fingers, must be greater than 0 - * @return A new hold gesture or NULL on error - * - * @since 1.6 - */ -struct ei_hold * -ei_device_hold_new(struct ei_device *device, uint32_t nfingers); - -/** - * @ingroup libei-sender - * - * Starts the hold gesture. - * - * This function can only be called once on an ei_hold object. Further - * calls to ei_hold_begin() on the same object are silently ignored. - * - * @param hold A newly created hold gesture - * - * @since 1.6 - */ -void -ei_hold_begin(struct ei_hold *hold); - -/** - * @ingroup libei-sender - * - * Release this hold. After this call, the hold event becomes inert and - * no longer responds to either ei_hold_begin(), ei_hold_cancel() or - * ei_hold_end() and the caller should call ei_hold_unref(). - * - * @since 1.6 - */ -void -ei_hold_end(struct ei_hold *hold); - -/** - * @ingroup libei-sender - * - * Cancel this hold. After this call, the hold event becomes inert and - * no longer responds to either ei_hold_begin(), ei_hold_cancel() or - * ei_hold_end() and the caller should call ei_hold_unref(). - * - * @since 1.6 - */ -void -ei_hold_cancel(struct ei_hold *hold); - -/** - * @ingroup libei-sender - * - * Increase the refcount of this struct by one. Use ei_hold_unref() to - * decrease the refcount. - * - * @return the argument passed into the function - * - * @since 1.6 - */ -struct ei_hold * -ei_hold_ref(struct ei_hold *hold); - -/** - * @ingroup libei-sender - * - * Decrease the refcount of this struct by one. When the refcount reaches - * zero, all allocated resources for this struct are released. - * - * @return always NULL - * - * @since 1.6 - */ -struct ei_hold * -ei_hold_unref(struct ei_hold *hold); - /** * Return the seat from this event. * @@ -2799,145 +2341,6 @@ ei_event_touch_get_y(struct ei_event *event); bool ei_event_touch_get_is_cancel(struct ei_event *event); -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_SWIPE_BEGIN, - * @ref EI_EVENT_SWIPE_UPDATE or @ref EI_EVENT_SWIPE_END - * return the finger count for this gesture. - * - * @since 1.6 - */ -uint32_t -ei_event_swipe_get_finger_count(struct ei_event *event); - -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_SWIPE_UPDATE - * return the relative x movement of the logical center - * of the gesture in logical pixels or mm, depending on the device type. - * - * @since 1.6 - */ -double -ei_event_swipe_get_dx(struct ei_event *event); - -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_SWIPE_UPDATE - * return the relative y movement of the logical center - * of the gesture in logical pixels or mm, depending on the device type. - * - * @since 1.6 - */ -double -ei_event_swipe_get_dy(struct ei_event *event); - -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_SWIPE_END - * return true if the gesture was cancelled, false otherwise. - * - * @since 1.6 - */ -bool -ei_event_swipe_get_is_cancelled(struct ei_event *event); - -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_PINCH_BEGIN, - * @ref EI_EVENT_PINCH_UPDATE or @ref EI_EVENT_PINCH_END - * return the finger count for this gesture. - * - * @since 1.6 - */ -uint32_t -ei_event_pinch_get_finger_count(struct ei_event *event); - -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_PINCH_UPDATE - * return the relative x movement of the logical center - * of the gesture in logical pixels or mm, depending on the device type. - * - * @since 1.6 - */ -double -ei_event_pinch_get_dx(struct ei_event *event); - -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_PINCH_UPDATE - * return the relative y movement of the logical center - * of the gesture in logical pixels or mm, depending on the device type. - * - * @since 1.6 - */ -double -ei_event_pinch_get_dy(struct ei_event *event); - -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_PINCH_UPDATE - * return the relative angle of rotation in degrees clockwise. - * - * @since 1.6 - */ -double -ei_event_pinch_get_rotation(struct ei_event *event); - -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_PINCH_UPDATE - * return the normalized scale of the gesture. - * - * @since 1.6 - */ -double -ei_event_pinch_get_scale(struct ei_event *event); - -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_PINCH_END - * return true if the gesture was cancelled, false otherwise. - * - * @since 1.6 - */ -bool -ei_event_pinch_get_is_cancelled(struct ei_event *event); - -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_HOLD_BEGIN - * or @ref EI_EVENT_HOLD_END - * return the finger count for this gesture. - * - * @since 1.6 - */ -uint32_t -ei_event_hold_get_finger_count(struct ei_event *event); - -/** - * @ingroup libei-receiver - * - * For an event of type @ref EI_EVENT_HOLD_END - * return true if the gesture was cancelled, false otherwise. - * - * @since 1.6 - */ -bool -ei_event_hold_get_is_cancelled(struct ei_event *event); - /** * @ingroup libei-receiver * diff --git a/src/libeis-client.c b/src/libeis-client.c index 16e518a..518cc85 100644 --- a/src/libeis-client.c +++ b/src/libeis-client.c @@ -539,9 +539,6 @@ eis_client_new(struct eis *eis, int fd) .ei_keyboard = VERSION_V(1), .ei_text = VERSION_V(1), .ei_touchscreen = VERSION_V(2), - .ei_gesture_swipe = VERSION_V(1), - .ei_gesture_pinch = VERSION_V(1), - .ei_gesture_hold = VERSION_V(1), }; struct source *s = source_new(fd, client_dispatch, client); int rc = sink_add_source(eis->sink, s); diff --git a/src/libeis-client.h b/src/libeis-client.h index e3002f7..1a63581 100644 --- a/src/libeis-client.h +++ b/src/libeis-client.h @@ -52,9 +52,6 @@ struct eis_client_interface_versions { uint32_t ei_button; uint32_t ei_keyboard; uint32_t ei_touchscreen; - uint32_t ei_gesture_swipe; - uint32_t ei_gesture_pinch; - uint32_t ei_gesture_hold; uint32_t ei_text; }; diff --git a/src/libeis-device.c b/src/libeis-device.c index 86b14e8..6335f02 100644 --- a/src/libeis-device.c +++ b/src/libeis-device.c @@ -33,7 +33,6 @@ #include "util-time.h" #include "eis-proto.h" -#include "libeis-gestures.h" #include "libeis-private.h" static_assert((int)EIS_DEVICE_TYPE_VIRTUAL == EIS_DEVICE_DEVICE_TYPE_VIRTUAL, "ABI mismatch"); @@ -148,9 +147,6 @@ eis_device_destroy(struct eis_device *device) eis_pointer_unref(device->pointer); eis_touchscreen_unref(device->touchscreen); eis_keyboard_unref(device->keyboard); - eis_gesture_swipe_unref(device->swipe); - eis_gesture_pinch_unref(device->pinch); - eis_gesture_hold_unref(device->hold); eis_text_unref(device->text); free(device->name); @@ -816,309 +812,6 @@ eis_device_get_touchscreen_interface(struct eis_device *device) return &touchscreen_interface; } -static struct brei_result * -client_msg_gesture_swipe_release(struct eis_gesture_swipe *swipe) -{ - struct eis_device *device = eis_gesture_swipe_get_device(swipe); - - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "swipe release event for non-gesture device"); - } - - if (device->swipe) { - eis_gesture_swipe_event_destroyed( - device->swipe, - eis_client_get_next_serial(eis_device_get_client(device))); - eis_gesture_swipe_unref(steal(&device->swipe)); - } - - return 0; -} - -static struct brei_result * -client_msg_gesture_swipe_begin(struct eis_gesture_swipe *swipe, uint32_t nfingers) -{ - struct eis_device *device = eis_gesture_swipe_get_device(swipe); - - DISCONNECT_IF_RECEIVER_CONTEXT(device); - - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe begin event for non-gesture device"); - } - - if (nfingers == 0) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe begin event with zero fingers"); - } - - if (device->state == EIS_DEVICE_STATE_EMULATING) { - if (device->gesture_state.swipe.is_active) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe begin event while swipe is active"); - } - device->gesture_state.swipe.is_active = true; - device->gesture_state.swipe.nfingers = nfingers; - eis_queue_swipe_begin_event(device, nfingers); - return NULL; - } - - return maybe_error_on_device_state(device, "swipe begin"); -} - -static struct brei_result * -client_msg_gesture_swipe_update(struct eis_gesture_swipe *swipe, float dx, float dy) -{ - struct eis_device *device = eis_gesture_swipe_get_device(swipe); - - DISCONNECT_IF_RECEIVER_CONTEXT(device); - - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe update event for non-gesture device"); - } - - if (device->gesture_state.swipe.is_active) { - if (device->state == EIS_DEVICE_STATE_EMULATING) - eis_queue_swipe_update_event(device, dx, dy); - return NULL; - } - - return maybe_error_on_device_state(device, "swipe update"); -} - -static struct brei_result * -client_msg_gesture_swipe_end(struct eis_gesture_swipe *swipe, uint32_t is_cancelled) -{ - struct eis_device *device = eis_gesture_swipe_get_device(swipe); - - DISCONNECT_IF_RECEIVER_CONTEXT(device); - - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Swipe end event for non-gesture device"); - } - - if (device->gesture_state.swipe.is_active) { - if (device->state == EIS_DEVICE_STATE_EMULATING) - eis_queue_swipe_end_event(device, !!is_cancelled); - device->gesture_state.swipe.is_active = false; - return NULL; - } - - return maybe_error_on_device_state(device, "swipe end"); -} - -static const struct eis_gesture_swipe_interface swipe_interface = { - .release = client_msg_gesture_swipe_release, - .begin = client_msg_gesture_swipe_begin, - .update = client_msg_gesture_swipe_update, - .end = client_msg_gesture_swipe_end, -}; - -const struct eis_gesture_swipe_interface * -eis_device_get_gesture_swipe_interface(struct eis_device *device) -{ - return &swipe_interface; -} - -static struct brei_result * -client_msg_gesture_pinch_release(struct eis_gesture_pinch *pinch) -{ - struct eis_device *device = eis_gesture_pinch_get_device(pinch); - - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch release event for non-gesture device"); - } - - if (device->pinch) { - eis_gesture_pinch_event_destroyed( - device->pinch, - eis_client_get_next_serial(eis_device_get_client(device))); - eis_gesture_pinch_unref(steal(&device->pinch)); - } - - return 0; -} - -static struct brei_result * -client_msg_gesture_pinch_begin(struct eis_gesture_pinch *pinch, uint32_t nfingers) -{ - struct eis_device *device = eis_gesture_pinch_get_device(pinch); - - DISCONNECT_IF_RECEIVER_CONTEXT(device); - - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch begin event for non-gesture device"); - } - - if (nfingers < 2) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch begin event with fewer than 2 fingers"); - } - - if (device->state == EIS_DEVICE_STATE_EMULATING) { - if (device->gesture_state.pinch.is_active) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch begin event while pinch is active"); - } - device->gesture_state.pinch.is_active = true; - device->gesture_state.pinch.nfingers = nfingers; - eis_queue_pinch_begin_event(device, nfingers); - return NULL; - } - - return maybe_error_on_device_state(device, "pinch begin"); -} - -static struct brei_result * -client_msg_gesture_pinch_update(struct eis_gesture_pinch *pinch, - float dx, - float dy, - float scale, - float rotation) -{ - struct eis_device *device = eis_gesture_pinch_get_device(pinch); - - DISCONNECT_IF_RECEIVER_CONTEXT(device); - - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch update event for non-gesture device"); - } - - if (device->gesture_state.pinch.is_active) { - if (device->state == EIS_DEVICE_STATE_EMULATING) - eis_queue_pinch_update_event(device, dx, dy, scale, rotation); - return NULL; - } - - return maybe_error_on_device_state(device, "pinch update"); -} - -static struct brei_result * -client_msg_gesture_pinch_end(struct eis_gesture_pinch *pinch, uint32_t is_cancelled) -{ - struct eis_device *device = eis_gesture_pinch_get_device(pinch); - - DISCONNECT_IF_RECEIVER_CONTEXT(device); - - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Pinch end event for non-gesture device"); - } - - if (device->gesture_state.pinch.is_active) { - if (device->state == EIS_DEVICE_STATE_EMULATING) - eis_queue_pinch_end_event(device, !!is_cancelled); - device->gesture_state.pinch.is_active = false; - return NULL; - } - - return maybe_error_on_device_state(device, "pinch end"); -} - -static const struct eis_gesture_pinch_interface pinch_interface = { - .release = client_msg_gesture_pinch_release, - .begin = client_msg_gesture_pinch_begin, - .update = client_msg_gesture_pinch_update, - .end = client_msg_gesture_pinch_end, -}; - -const struct eis_gesture_pinch_interface * -eis_device_get_gesture_pinch_interface(struct eis_device *device) -{ - return &pinch_interface; -} - -static struct brei_result * -client_msg_gesture_hold_release(struct eis_gesture_hold *hold) -{ - struct eis_device *device = eis_gesture_hold_get_device(hold); - - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "hold release event for non-gesture device"); - } - - if (device->hold) { - eis_gesture_hold_event_destroyed( - device->hold, - eis_client_get_next_serial(eis_device_get_client(device))); - eis_gesture_hold_unref(steal(&device->hold)); - } - - return 0; -} - -static struct brei_result * -client_msg_gesture_hold_begin(struct eis_gesture_hold *hold, uint32_t nfingers) -{ - struct eis_device *device = eis_gesture_hold_get_device(hold); - - DISCONNECT_IF_RECEIVER_CONTEXT(device); - - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Hold begin event for non-gesture device"); - } - - if (nfingers == 0) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Hold begin event with zero fingers"); - } - - if (device->state == EIS_DEVICE_STATE_EMULATING) { - if (device->gesture_state.hold.is_active) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Hold begin event while hold is active"); - } - device->gesture_state.hold.is_active = true; - device->gesture_state.hold.nfingers = nfingers; - eis_queue_hold_begin_event(device, nfingers); - return NULL; - } - - return maybe_error_on_device_state(device, "hold begin"); -} - -static struct brei_result * -client_msg_gesture_hold_end(struct eis_gesture_hold *hold, uint32_t is_cancelled) -{ - struct eis_device *device = eis_gesture_hold_get_device(hold); - - DISCONNECT_IF_RECEIVER_CONTEXT(device); - - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, - "Hold end event for non-gesture device"); - } - - if (device->gesture_state.hold.is_active) { - if (device->state == EIS_DEVICE_STATE_EMULATING) - eis_queue_hold_end_event(device, !!is_cancelled); - device->gesture_state.hold.is_active = false; - return NULL; - } - - return maybe_error_on_device_state(device, "hold end"); -} - -static const struct eis_gesture_hold_interface hold_interface = { - .release = client_msg_gesture_hold_release, - .begin = client_msg_gesture_hold_begin, - .end = client_msg_gesture_hold_end, -}; - -const struct eis_gesture_hold_interface * -eis_device_get_gesture_hold_interface(struct eis_device *device) -{ - return &hold_interface; -} - static struct brei_result * client_msg_text_release(struct eis_text *text) { @@ -1265,7 +958,6 @@ eis_device_configure_capability(struct eis_device *device, enum eis_device_capab case EIS_DEVICE_CAP_TOUCH: case EIS_DEVICE_CAP_BUTTON: case EIS_DEVICE_CAP_SCROLL: - case EIS_DEVICE_CAP_GESTURES: case EIS_DEVICE_CAP_TEXT: mask_add(device->capabilities, cap); break; @@ -1415,31 +1107,6 @@ eis_device_add(struct eis_device *device) if (rc < 0) goto out; } - if (eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - device->swipe = eis_gesture_swipe_new(device); - rc = eis_device_event_interface(device, - eis_gesture_swipe_get_id(device->swipe), - EIS_GESTURE_SWIPE_INTERFACE_NAME, - eis_gesture_swipe_get_version(device->swipe)); - if (rc < 0) - goto out; - - device->pinch = eis_gesture_pinch_new(device); - rc = eis_device_event_interface(device, - eis_gesture_pinch_get_id(device->pinch), - EIS_GESTURE_PINCH_INTERFACE_NAME, - eis_gesture_pinch_get_version(device->pinch)); - if (rc < 0) - goto out; - - device->hold = eis_gesture_hold_new(device); - rc = eis_device_event_interface(device, - eis_gesture_hold_get_id(device->hold), - EIS_GESTURE_HOLD_INTERFACE_NAME, - eis_gesture_hold_get_version(device->hold)); - if (rc < 0) - goto out; - } if (eis_device_has_capability(device, EIS_DEVICE_CAP_TEXT)) { device->text = eis_text_new(device); rc = eis_device_event_interface(device, @@ -1508,20 +1175,6 @@ eis_device_remove(struct eis_device *device) eis_keyboard_event_destroyed(device->keyboard, eis_client_get_next_serial(client)); eis_keyboard_unref(steal(&device->keyboard)); } - if (device->swipe) { - eis_gesture_swipe_event_destroyed(device->swipe, - eis_client_get_next_serial(client)); - eis_gesture_swipe_unref(steal(&device->swipe)); - } - if (device->pinch) { - eis_gesture_pinch_event_destroyed(device->pinch, - eis_client_get_next_serial(client)); - eis_gesture_pinch_unref(steal(&device->pinch)); - } - if (device->hold) { - eis_gesture_hold_event_destroyed(device->hold, eis_client_get_next_serial(client)); - eis_gesture_hold_unref(steal(&device->hold)); - } if (device->text) { eis_text_event_destroyed(device->text, eis_client_get_next_serial(client)); eis_text_unref(steal(&device->text)); @@ -1552,7 +1205,6 @@ eis_device_has_capability(struct eis_device *device, enum eis_device_capability case EIS_DEVICE_CAP_TOUCH: case EIS_DEVICE_CAP_BUTTON: case EIS_DEVICE_CAP_SCROLL: - case EIS_DEVICE_CAP_GESTURES: case EIS_DEVICE_CAP_TEXT: return mask_all(device->capabilities, cap); } @@ -2069,9 +1721,6 @@ eis_device_pause(struct eis_device *device) for (size_t i = 0; i < ARRAY_LENGTH(device->touch_state.down); i++) { device->touch_state.down[i] = UINT64_MAX; } - device->gesture_state.swipe.is_active = false; - device->gesture_state.pinch.is_active = false; - device->gesture_state.hold.is_active = false; } _public_ void @@ -2113,90 +1762,3 @@ eis_device_keyboard_send_xkb_modifiers(struct eis_device *device, latched, group); } - -_public_ void -eis_device_swipe_cancel(struct eis_device *device) -{ - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - log_bug_client(eis_device_get_context(device), - "%s: device is not a gesture device", - __func__); - return; - } - - if (!device->swipe) - return; - - if (!device->gesture_state.swipe.is_active) - return; - - device->gesture_state.swipe.is_active = false; - struct eis_client *client = eis_device_get_client(device); - eis_gesture_swipe_event_cancelled(device->swipe, eis_client_get_next_serial(client)); -} - -_public_ void -eis_device_pinch_cancel(struct eis_device *device) -{ - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - log_bug_client(eis_device_get_context(device), - "%s: device is not a gesture device", - __func__); - return; - } - - if (!device->pinch) - return; - - if (!device->gesture_state.pinch.is_active) - return; - - device->gesture_state.pinch.is_active = false; - struct eis_client *client = eis_device_get_client(device); - eis_gesture_pinch_event_cancelled(device->pinch, eis_client_get_next_serial(client)); -} - -_public_ void -eis_device_hold_cancel(struct eis_device *device) -{ - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - log_bug_client(eis_device_get_context(device), - "%s: device is not a gesture device", - __func__); - return; - } - - if (!device->hold) - return; - - if (!device->gesture_state.hold.is_active) - return; - - device->gesture_state.hold.is_active = false; - struct eis_client *client = eis_device_get_client(device); - eis_gesture_hold_event_cancelled(device->hold, eis_client_get_next_serial(client)); -} - -_public_ struct eis_swipe * -eis_device_swipe_new(struct eis_device *device, uint32_t nfingers) -{ - struct eis_swipe *swipe = eis_swipe_new(device, nfingers); - - return swipe; -} - -_public_ struct eis_pinch * -eis_device_pinch_new(struct eis_device *device, uint32_t nfingers) -{ - struct eis_pinch *pinch = eis_pinch_new(device, nfingers); - - return pinch; -} - -_public_ struct eis_hold * -eis_device_hold_new(struct eis_device *device, uint32_t nfingers) -{ - struct eis_hold *hold = eis_hold_new(device, nfingers); - - return hold; -} diff --git a/src/libeis-device.h b/src/libeis-device.h index cc1a603..1de5c54 100644 --- a/src/libeis-device.h +++ b/src/libeis-device.h @@ -58,9 +58,6 @@ struct eis_device { struct eis_button *button; struct eis_keyboard *keyboard; struct eis_touchscreen *touchscreen; - struct eis_gesture_swipe *swipe; - struct eis_gesture_pinch *pinch; - struct eis_gesture_hold *hold; struct eis_text *text; char *name; @@ -92,33 +89,6 @@ struct eis_device { struct { uint64_t down[EIS_MAX_TOUCHES]; /* touch id */ } touch_state; - - struct { - struct { - /* receiver */ - bool is_active; - uint32_t nfingers; - - /* sender */ - struct eis_swipe *current_swipe; /* no ref! */ - } swipe; - struct { - /* receiver */ - bool is_active; - uint32_t nfingers; - - /* sender */ - struct eis_pinch *current_pinch; /* no ref! */ - } pinch; - struct { - /* receiver */ - bool is_active; - uint32_t nfingers; - - /* sender */ - struct eis_hold *current_hold; /* no ref! */ - } hold; - } gesture_state; }; struct eis_touch { @@ -163,15 +133,6 @@ OBJECT_DECLARE_GETTER(eis_device, scroll_interface, const struct eis_scroll_inte OBJECT_DECLARE_GETTER(eis_device, button_interface, const struct eis_button_interface *); OBJECT_DECLARE_GETTER(eis_device, keyboard_interface, const struct eis_keyboard_interface *); OBJECT_DECLARE_GETTER(eis_device, touchscreen_interface, const struct eis_touchscreen_interface *); -OBJECT_DECLARE_GETTER(eis_device, - gesture_swipe_interface, - const struct eis_gesture_swipe_interface *); -OBJECT_DECLARE_GETTER(eis_device, - gesture_pinch_interface, - const struct eis_gesture_pinch_interface *); -OBJECT_DECLARE_GETTER(eis_device, - gesture_hold_interface, - const struct eis_gesture_hold_interface *); OBJECT_DECLARE_GETTER(eis_device, text_interface, const struct eis_text_interface *); static inline bool diff --git a/src/libeis-event.c b/src/libeis-event.c index c7732dd..4f7f18a 100644 --- a/src/libeis-event.c +++ b/src/libeis-event.c @@ -58,14 +58,6 @@ eis_event_destroy(struct eis_event *event) case EIS_EVENT_TOUCH_MOTION: case EIS_EVENT_TOUCH_UP: case EIS_EVENT_FRAME: - case EIS_EVENT_SWIPE_BEGIN: - case EIS_EVENT_SWIPE_UPDATE: - case EIS_EVENT_SWIPE_END: - case EIS_EVENT_PINCH_BEGIN: - case EIS_EVENT_PINCH_UPDATE: - case EIS_EVENT_PINCH_END: - case EIS_EVENT_HOLD_BEGIN: - case EIS_EVENT_HOLD_END: case EIS_EVENT_TEXT_KEYSYM: handled = true; break; @@ -228,7 +220,6 @@ eis_event_seat_has_capability(struct eis_event *event, enum eis_device_capabilit case EIS_DEVICE_CAP_TOUCH: case EIS_DEVICE_CAP_BUTTON: case EIS_DEVICE_CAP_SCROLL: - case EIS_DEVICE_CAP_GESTURES: case EIS_DEVICE_CAP_TEXT: return mask_all(event->bind.capabilities, cap); } @@ -445,110 +436,6 @@ eis_event_touch_get_is_cancel(struct eis_event *event) return event->touch.is_cancel; } -_public_ uint32_t -eis_event_swipe_get_finger_count(struct eis_event *event) -{ - require_event_type(event, - 0, - EIS_EVENT_SWIPE_BEGIN, - EIS_EVENT_SWIPE_UPDATE, - EIS_EVENT_SWIPE_END); - - return event->gestures.nfingers; -} - -_public_ double -eis_event_swipe_get_dx(struct eis_event *event) -{ - require_event_type(event, 0.0, EIS_EVENT_SWIPE_UPDATE); - - return event->gestures.dx; -} - -_public_ double -eis_event_swipe_get_dy(struct eis_event *event) -{ - require_event_type(event, 0.0, EIS_EVENT_SWIPE_UPDATE); - - return event->gestures.dy; -} - -_public_ bool -eis_event_swipe_get_is_cancelled(struct eis_event *event) -{ - require_event_type(event, false, EIS_EVENT_SWIPE_END); - - return event->gestures.is_cancelled; -} - -_public_ uint32_t -eis_event_pinch_get_finger_count(struct eis_event *event) -{ - require_event_type(event, - 0, - EIS_EVENT_PINCH_BEGIN, - EIS_EVENT_PINCH_UPDATE, - EIS_EVENT_PINCH_END); - - return event->gestures.nfingers; -} - -_public_ double -eis_event_pinch_get_dx(struct eis_event *event) -{ - require_event_type(event, 0.0, EIS_EVENT_PINCH_UPDATE); - - return event->gestures.dx; -} - -_public_ double -eis_event_pinch_get_dy(struct eis_event *event) -{ - require_event_type(event, 0.0, EIS_EVENT_PINCH_UPDATE); - - return event->gestures.dy; -} - -_public_ double -eis_event_pinch_get_rotation(struct eis_event *event) -{ - require_event_type(event, 0.0, EIS_EVENT_PINCH_UPDATE); - - return event->gestures.degrees; -} - -_public_ double -eis_event_pinch_get_scale(struct eis_event *event) -{ - require_event_type(event, 0.0, EIS_EVENT_PINCH_UPDATE); - - return event->gestures.scale; -} - -_public_ bool -eis_event_pinch_get_is_cancelled(struct eis_event *event) -{ - require_event_type(event, false, EIS_EVENT_PINCH_END); - - return event->gestures.is_cancelled; -} - -_public_ uint32_t -eis_event_hold_get_finger_count(struct eis_event *event) -{ - require_event_type(event, 0, EIS_EVENT_HOLD_BEGIN, EIS_EVENT_HOLD_END); - - return event->gestures.nfingers; -} - -_public_ bool -eis_event_hold_get_is_cancelled(struct eis_event *event) -{ - require_event_type(event, false, EIS_EVENT_HOLD_END); - - return event->gestures.is_cancelled; -} - _public_ uint32_t eis_event_text_get_keysym(struct eis_event *event) { diff --git a/src/libeis-event.h b/src/libeis-event.h index b346833..04c347c 100644 --- a/src/libeis-event.h +++ b/src/libeis-event.h @@ -75,13 +75,6 @@ struct eis_event { struct { struct eis_callback *callback; } sync; - struct { - uint32_t nfingers; - double dx, dy; /* relative motion */ - double degrees; - double scale; - bool is_cancelled; - } gestures; }; }; diff --git a/src/libeis-gestures.c b/src/libeis-gestures.c deleted file mode 100644 index 040d180..0000000 --- a/src/libeis-gestures.c +++ /dev/null @@ -1,824 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/* - * Copyright © 2024 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#include "config.h" - -#include -#include - -#include "util-bits.h" -#include "util-io.h" -#include "util-macros.h" -#include "util-mem.h" -#include "util-strings.h" -#include "util-version.h" - -#include "eis-proto.h" -#include "libeis-client.h" -#include "libeis-gestures.h" -#include "libeis-private.h" - -static void -eis_gesture_swipe_destroy(struct eis_gesture_swipe *swipe) -{ - struct eis_client *client = eis_gesture_swipe_get_client(swipe); - eis_client_unregister_object(client, &swipe->proto_object); -} - -OBJECT_IMPLEMENT_REF(eis_gesture_swipe); -OBJECT_IMPLEMENT_UNREF_CLEANUP(eis_gesture_swipe); - -static OBJECT_IMPLEMENT_CREATE(eis_gesture_swipe); -static OBJECT_IMPLEMENT_PARENT(eis_gesture_swipe, eis_device); -OBJECT_IMPLEMENT_GETTER_AS_REF(eis_gesture_swipe, proto_object, const struct brei_object *); - -uint32_t -eis_gesture_swipe_get_version(struct eis_gesture_swipe *swipe) -{ - return swipe->proto_object.version; -} - -object_id_t -eis_gesture_swipe_get_id(struct eis_gesture_swipe *swipe) -{ - return swipe->proto_object.id; -} - -struct eis_device * -eis_gesture_swipe_get_device(struct eis_gesture_swipe *swipe) -{ - return eis_gesture_swipe_parent(swipe); -} - -struct eis_client * -eis_gesture_swipe_get_client(struct eis_gesture_swipe *swipe) -{ - return eis_device_get_client(eis_gesture_swipe_get_device(swipe)); -} - -struct eis * -eis_gesture_swipe_get_context(struct eis_gesture_swipe *swipe) -{ - return eis_device_get_context(eis_gesture_swipe_get_device(swipe)); -} - -const struct eis_gesture_swipe_interface * -eis_gesture_swipe_get_interface(struct eis_gesture_swipe *swipe) -{ - struct eis_device *device = eis_gesture_swipe_get_device(swipe); - return eis_device_get_gesture_swipe_interface(device); -} - -struct eis_gesture_swipe * -eis_gesture_swipe_new(struct eis_device *device) -{ - struct eis_gesture_swipe *swipe = eis_gesture_swipe_create(&device->object); - struct eis_client *client = eis_device_get_client(device); - - swipe->proto_object.id = eis_client_get_new_id(client); - swipe->proto_object.implementation = swipe; - swipe->proto_object.interface = &eis_gesture_swipe_proto_interface; - swipe->proto_object.version = client->interface_versions.ei_gesture_swipe; - eis_client_register_object(client, &swipe->proto_object); - - return swipe; /* ref owned by caller */ -} - -static void -eis_gesture_pinch_destroy(struct eis_gesture_pinch *pinch) -{ - struct eis_client *client = eis_gesture_pinch_get_client(pinch); - eis_client_unregister_object(client, &pinch->proto_object); -} - -OBJECT_IMPLEMENT_REF(eis_gesture_pinch); -OBJECT_IMPLEMENT_UNREF_CLEANUP(eis_gesture_pinch); - -static OBJECT_IMPLEMENT_CREATE(eis_gesture_pinch); -static OBJECT_IMPLEMENT_PARENT(eis_gesture_pinch, eis_device); -OBJECT_IMPLEMENT_GETTER_AS_REF(eis_gesture_pinch, proto_object, const struct brei_object *); - -uint32_t -eis_gesture_pinch_get_version(struct eis_gesture_pinch *pinch) -{ - return pinch->proto_object.version; -} - -object_id_t -eis_gesture_pinch_get_id(struct eis_gesture_pinch *pinch) -{ - return pinch->proto_object.id; -} - -struct eis_device * -eis_gesture_pinch_get_device(struct eis_gesture_pinch *pinch) -{ - return eis_gesture_pinch_parent(pinch); -} - -struct eis_client * -eis_gesture_pinch_get_client(struct eis_gesture_pinch *pinch) -{ - return eis_device_get_client(eis_gesture_pinch_get_device(pinch)); -} - -struct eis * -eis_gesture_pinch_get_context(struct eis_gesture_pinch *pinch) -{ - return eis_device_get_context(eis_gesture_pinch_get_device(pinch)); -} - -const struct eis_gesture_pinch_interface * -eis_gesture_pinch_get_interface(struct eis_gesture_pinch *pinch) -{ - struct eis_device *device = eis_gesture_pinch_get_device(pinch); - return eis_device_get_gesture_pinch_interface(device); -} - -struct eis_gesture_pinch * -eis_gesture_pinch_new(struct eis_device *device) -{ - struct eis_gesture_pinch *pinch = eis_gesture_pinch_create(&device->object); - struct eis_client *client = eis_device_get_client(device); - - pinch->proto_object.id = eis_client_get_new_id(client); - pinch->proto_object.implementation = pinch; - pinch->proto_object.interface = &eis_gesture_pinch_proto_interface; - pinch->proto_object.version = client->interface_versions.ei_gesture_pinch; - eis_client_register_object(client, &pinch->proto_object); - - return pinch; /* ref owned by caller */ -} - -static void -eis_gesture_hold_destroy(struct eis_gesture_hold *hold) -{ - struct eis_client *client = eis_gesture_hold_get_client(hold); - eis_client_unregister_object(client, &hold->proto_object); -} - -OBJECT_IMPLEMENT_REF(eis_gesture_hold); -OBJECT_IMPLEMENT_UNREF_CLEANUP(eis_gesture_hold); - -static OBJECT_IMPLEMENT_CREATE(eis_gesture_hold); -static OBJECT_IMPLEMENT_PARENT(eis_gesture_hold, eis_device); -OBJECT_IMPLEMENT_GETTER_AS_REF(eis_gesture_hold, proto_object, const struct brei_object *); - -uint32_t -eis_gesture_hold_get_version(struct eis_gesture_hold *hold) -{ - return hold->proto_object.version; -} - -object_id_t -eis_gesture_hold_get_id(struct eis_gesture_hold *hold) -{ - return hold->proto_object.id; -} - -struct eis_device * -eis_gesture_hold_get_device(struct eis_gesture_hold *hold) -{ - return eis_gesture_hold_parent(hold); -} - -struct eis_client * -eis_gesture_hold_get_client(struct eis_gesture_hold *hold) -{ - return eis_device_get_client(eis_gesture_hold_get_device(hold)); -} - -struct eis * -eis_gesture_hold_get_context(struct eis_gesture_hold *hold) -{ - return eis_device_get_context(eis_gesture_hold_get_device(hold)); -} - -const struct eis_gesture_hold_interface * -eis_gesture_hold_get_interface(struct eis_gesture_hold *hold) -{ - struct eis_device *device = eis_gesture_hold_get_device(hold); - return eis_device_get_gesture_hold_interface(device); -} - -struct eis_gesture_hold * -eis_gesture_hold_new(struct eis_device *device) -{ - struct eis_gesture_hold *hold = eis_gesture_hold_create(&device->object); - struct eis_client *client = eis_device_get_client(device); - - hold->proto_object.id = eis_client_get_new_id(client); - hold->proto_object.implementation = hold; - hold->proto_object.interface = &eis_gesture_hold_proto_interface; - hold->proto_object.version = client->interface_versions.ei_gesture_hold; - eis_client_register_object(client, &hold->proto_object); - - return hold; /* ref owned by caller */ -} - -static void -eis_gesture_destroy(struct eis_gesture *gesture) -{ - eis_device_unref(gesture->device); -} - -static OBJECT_IMPLEMENT_INIT(eis_gesture); -OBJECT_IMPLEMENT_REF(eis_gesture); -OBJECT_IMPLEMENT_UNREF(eis_gesture); - -struct eis_device * -eis_gesture_get_device(struct eis_gesture *gesture) -{ - return gesture->device; -} - -struct eis * -eis_gesture_get_context(struct eis_gesture *gesture) -{ - return eis_device_get_context(eis_gesture_get_device(gesture)); -} - -static void -eis_gesture_init(struct eis_gesture *gesture, struct eis_device *device, uint32_t nfingers) -{ - /* Not using the device as parent object because we need a ref - * to it */ - eis_gesture_init_object(gesture, NULL); - - gesture->state = EIS_GESTURE_STATE_NEW; - gesture->device = eis_device_ref(device); - gesture->nfingers = nfingers; -} - -struct eis_swipe * -eis_swipe_new(struct eis_device *device, uint32_t nfingers) -{ - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - log_bug_client(eis_device_get_context(device), - "%s: device is not a gesture device", - __func__); - return NULL; - } - - if (nfingers == 0) { - log_bug_client(eis_device_get_context(device), - "zero-finger gestures are not possible"); - return NULL; - } - - if (!device->swipe) - return NULL; - - struct eis_swipe *swipe = xalloc(sizeof *swipe); - eis_gesture_init(&swipe->base, device, nfingers); - - return swipe; -} - -_public_ struct eis_swipe * -eis_swipe_ref(struct eis_swipe *swipe) -{ - return (struct eis_swipe *)eis_gesture_ref(&swipe->base); -} - -_public_ struct eis_swipe * -eis_swipe_unref(struct eis_swipe *swipe) -{ - if (!swipe) - return NULL; - - struct eis_device *device = eis_gesture_get_device(&swipe->base); - - if (swipe == device->gesture_state.swipe.current_swipe) { - if (swipe->base.state == EIS_GESTURE_STATE_BEGUN && - device->state == EIS_DEVICE_STATE_EMULATING) { - eis_swipe_cancel(swipe); - } - } - - return (struct eis_swipe *)eis_gesture_unref(&swipe->base); -} - -struct eis * -eis_swipe_get_context(struct eis_swipe *swipe) -{ - return eis_gesture_get_context(&swipe->base); -} - -_public_ void -eis_swipe_begin(struct eis_swipe *swipe) -{ - struct eis_device *device = swipe->base.device; - struct eis_client *client = eis_device_get_client(device); - - if (swipe->base.state != EIS_GESTURE_STATE_NEW) { - log_bug_client(eis_gesture_get_context(&swipe->base), "gesture cannot begin twice"); - return; - } - - if (device->gesture_state.swipe.current_swipe) { - log_bug_client( - eis_gesture_get_context(&swipe->base), - "a different swipe gesture is already in process, ignoring this one"); - return; - } - - if (device->state != EIS_DEVICE_STATE_EMULATING) { - log_bug_client(eis_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (client->state == EIS_CLIENT_STATE_NEW || client->state == EIS_CLIENT_STATE_DISCONNECTED) - return; - - if (!device->swipe) - return; - - if (swipe->base.nfingers == 0) { - log_bug_client(eis_device_get_context(device), - "zero-finger gestures are invalid, ignoring gesture"); - return; - } - - device->gesture_state.swipe.current_swipe = swipe; - - device->send_frame_event = true; - - swipe->base.state = EIS_GESTURE_STATE_BEGUN; - int rc = eis_gesture_swipe_event_begin(device->swipe, swipe->base.nfingers); - if (rc) - eis_client_disconnect(client); -} - -_public_ void -eis_swipe_update(struct eis_swipe *swipe, double x, double y) -{ - struct eis_device *device = swipe->base.device; - struct eis_client *client = eis_device_get_client(device); - - if (swipe->base.state != EIS_GESTURE_STATE_BEGUN) { - log_bug_client(eis_gesture_get_context(&swipe->base), - "gesture in invalid state for update"); - return; - } - - if (device->gesture_state.swipe.current_swipe != swipe) { - log_bug_client( - eis_gesture_get_context(&swipe->base), - "a different swipe gesture is already in process, ignoring this one"); - return; - } - - /* FIXME: what do we do with a gesture when the device stops emulating? */ - if (device->state != EIS_DEVICE_STATE_EMULATING) { - log_bug_client(eis_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (client->state == EIS_CLIENT_STATE_NEW || client->state == EIS_CLIENT_STATE_DISCONNECTED) - return; - - if (!device->swipe) - return; - - device->send_frame_event = true; - - int rc = eis_gesture_swipe_event_update(device->swipe, x, y); - if (rc) - eis_client_disconnect(client); -} - -static void -eis_swipe_end_cancel(struct eis_swipe *swipe, bool is_cancel) -{ - struct eis_device *device = swipe->base.device; - struct eis_client *client = eis_device_get_client(device); - - if (swipe->base.state != EIS_GESTURE_STATE_BEGUN) { - log_bug_client(eis_gesture_get_context(&swipe->base), - "gesture in invalid state for end/cancel"); - return; - } - - if (device->gesture_state.swipe.current_swipe != swipe) { - log_bug_client( - eis_gesture_get_context(&swipe->base), - "a different swipe gesture is already in process, ignoring this one"); - return; - } - - /* FIXME: what do we do with a gesture when the device stops emulating? */ - if (device->state != EIS_DEVICE_STATE_EMULATING) { - log_bug_client(eis_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (client->state == EIS_CLIENT_STATE_NEW || client->state == EIS_CLIENT_STATE_DISCONNECTED) - return; - - if (!device->swipe) - return; - - swipe->base.state = EIS_GESTURE_STATE_ENDED; - device->gesture_state.swipe.current_swipe = NULL; - - device->send_frame_event = true; - - int rc = eis_gesture_swipe_event_end(device->swipe, is_cancel); - if (rc) - eis_client_disconnect(client); -} - -_public_ void -eis_swipe_end(struct eis_swipe *swipe) -{ - eis_swipe_end_cancel(swipe, false); -} - -_public_ void -eis_swipe_cancel(struct eis_swipe *swipe) -{ - eis_swipe_end_cancel(swipe, true); -} - -struct eis_pinch * -eis_pinch_new(struct eis_device *device, uint32_t nfingers) -{ - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - log_bug_client(eis_device_get_context(device), - "%s: device is not a gesture device", - __func__); - return NULL; - } - - if (nfingers < 2) { - log_bug_client(eis_device_get_context(device), - "pinch gestures require at least 2 fingers"); - return NULL; - } - - if (!device->pinch) - return NULL; - - /* Not using the device as parent object because we need a ref - * to it */ - struct eis_pinch *pinch = xalloc(sizeof *pinch); - eis_gesture_init(&pinch->base, device, nfingers); - - return pinch; -} - -_public_ struct eis_pinch * -eis_pinch_ref(struct eis_pinch *pinch) -{ - return (struct eis_pinch *)eis_gesture_ref(&pinch->base); -} - -_public_ struct eis_pinch * -eis_pinch_unref(struct eis_pinch *pinch) -{ - if (!pinch) - return NULL; - - struct eis_device *device = eis_gesture_get_device(&pinch->base); - - if (pinch == device->gesture_state.pinch.current_pinch) { - if (pinch->base.state == EIS_GESTURE_STATE_BEGUN && - device->state == EIS_DEVICE_STATE_EMULATING) { - eis_pinch_cancel(pinch); - } - } - - return (struct eis_pinch *)eis_gesture_unref(&pinch->base); -} - -struct eis * -eis_pinch_get_context(struct eis_pinch *pinch) -{ - return eis_gesture_get_context(&pinch->base); -} - -_public_ void -eis_pinch_begin(struct eis_pinch *pinch) -{ - struct eis_device *device = pinch->base.device; - struct eis_client *client = eis_device_get_client(device); - - if (pinch->base.state != EIS_GESTURE_STATE_NEW) { - log_bug_client(eis_gesture_get_context(&pinch->base), "gesture cannot begin twice"); - return; - } - - if (device->gesture_state.pinch.current_pinch) { - log_bug_client( - eis_gesture_get_context(&pinch->base), - "a different pinch gesture is already in process, ignoring this one"); - return; - } - - if (device->state != EIS_DEVICE_STATE_EMULATING) { - log_bug_client(eis_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (client->state == EIS_CLIENT_STATE_NEW || client->state == EIS_CLIENT_STATE_DISCONNECTED) - return; - - if (!device->pinch) - return; - - if (pinch->base.nfingers == 0) { - log_bug_client(eis_device_get_context(device), - "zero-finger gestures are invalid, ignoring gesture"); - return; - } - - device->gesture_state.pinch.current_pinch = pinch; - - device->send_frame_event = true; - - pinch->base.state = EIS_GESTURE_STATE_BEGUN; - int rc = eis_gesture_pinch_event_begin(device->pinch, pinch->base.nfingers); - if (rc) - eis_client_disconnect(client); -} - -_public_ void -eis_pinch_update(struct eis_pinch *pinch, double x, double y, double scale, double rotation) -{ - struct eis_device *device = pinch->base.device; - struct eis_client *client = eis_device_get_client(device); - - if (pinch->base.state != EIS_GESTURE_STATE_BEGUN) { - log_bug_client(eis_gesture_get_context(&pinch->base), - "gesture in invalid state for update"); - return; - } - - if (device->gesture_state.pinch.current_pinch != pinch) { - log_bug_client( - eis_gesture_get_context(&pinch->base), - "a different pinch gesture is already in process, ignoring this one"); - return; - } - - /* FIXME: what do we do with a gesture when the device stops emulating? */ - if (device->state != EIS_DEVICE_STATE_EMULATING) { - log_bug_client(eis_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (client->state == EIS_CLIENT_STATE_NEW || client->state == EIS_CLIENT_STATE_DISCONNECTED) - return; - - if (!device->pinch) - return; - - device->send_frame_event = true; - - int rc = eis_gesture_pinch_event_update(device->pinch, x, y, scale, rotation); - if (rc) - eis_client_disconnect(client); -} - -static void -eis_pinch_end_cancel(struct eis_pinch *pinch, bool is_cancel) -{ - struct eis_device *device = pinch->base.device; - struct eis_client *client = eis_device_get_client(device); - - if (pinch->base.state != EIS_GESTURE_STATE_BEGUN) { - log_bug_client(eis_gesture_get_context(&pinch->base), - "gesture in invalid state for end/cancel"); - return; - } - - if (device->gesture_state.pinch.current_pinch != pinch) { - log_bug_client( - eis_gesture_get_context(&pinch->base), - "a different pinch gesture is already in process, ignoring this one"); - return; - } - - if (device->state != EIS_DEVICE_STATE_EMULATING) { - log_bug_client(eis_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (client->state == EIS_CLIENT_STATE_NEW || client->state == EIS_CLIENT_STATE_DISCONNECTED) - return; - - if (!device->pinch) - return; - - pinch->base.state = EIS_GESTURE_STATE_ENDED; - device->gesture_state.pinch.current_pinch = NULL; - - device->send_frame_event = true; - - int rc = eis_gesture_pinch_event_end(device->pinch, is_cancel); - if (rc) - eis_client_disconnect(client); -} - -_public_ void -eis_pinch_end(struct eis_pinch *pinch) -{ - eis_pinch_end_cancel(pinch, false); -} - -_public_ void -eis_pinch_cancel(struct eis_pinch *pinch) -{ - eis_pinch_end_cancel(pinch, true); -} - -_public_ void -eis_hold_begin(struct eis_hold *hold) -{ - struct eis_device *device = hold->base.device; - struct eis_client *client = eis_device_get_client(device); - - if (hold->base.state != EIS_GESTURE_STATE_NEW) { - log_bug_client(eis_gesture_get_context(&hold->base), "gesture cannot begin twice"); - return; - } - - if (device->gesture_state.hold.current_hold) { - log_bug_client(eis_gesture_get_context(&hold->base), - "a different hold gesture is already in process, ignoring this one"); - return; - } - - if (device->state != EIS_DEVICE_STATE_EMULATING) { - log_bug_client(eis_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (client->state == EIS_CLIENT_STATE_NEW || client->state == EIS_CLIENT_STATE_DISCONNECTED) - return; - - if (!device->hold) - return; - - if (hold->base.nfingers == 0) { - log_bug_client(eis_device_get_context(device), - "zero-finger gestures are invalid, ignoring gesture"); - return; - } - - device->gesture_state.hold.current_hold = hold; - - device->send_frame_event = true; - - hold->base.state = EIS_GESTURE_STATE_BEGUN; - int rc = eis_gesture_hold_event_begin(device->hold, hold->base.nfingers); - if (rc) - eis_client_disconnect(client); -} - -struct eis_hold * -eis_hold_new(struct eis_device *device, uint32_t nfingers) -{ - if (!eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)) { - log_bug_client(eis_device_get_context(device), - "%s: device is not a gesture device", - __func__); - return NULL; - } - - if (nfingers == 0) { - log_bug_client(eis_device_get_context(device), - "zero-finger gestures are not possible"); - return NULL; - } - - if (!device->hold) - return NULL; - - /* Not using the device as parent object because we need a ref - * to it */ - struct eis_hold *hold = xalloc(sizeof *hold); - eis_gesture_init(&hold->base, device, nfingers); - - return hold; -} - -_public_ struct eis_hold * -eis_hold_ref(struct eis_hold *hold) -{ - return (struct eis_hold *)eis_gesture_ref(&hold->base); -} - -_public_ struct eis_hold * -eis_hold_unref(struct eis_hold *hold) -{ - if (!hold) - return NULL; - - struct eis_device *device = eis_gesture_get_device(&hold->base); - - if (hold == device->gesture_state.hold.current_hold) { - if (hold->base.state == EIS_GESTURE_STATE_BEGUN && - device->state == EIS_DEVICE_STATE_EMULATING) { - eis_hold_cancel(hold); - } - } - - return (struct eis_hold *)eis_gesture_unref(&hold->base); -} - -struct eis * -eis_hold_get_context(struct eis_hold *hold) -{ - return eis_gesture_get_context(&hold->base); -} - -static void -eis_hold_end_cancel(struct eis_hold *hold, bool is_cancel) -{ - struct eis_device *device = hold->base.device; - struct eis_client *client = eis_device_get_client(device); - - if (hold->base.state != EIS_GESTURE_STATE_BEGUN) { - log_bug_client(eis_gesture_get_context(&hold->base), - "gesture in invalid state for end/cancel"); - return; - } - - if (device->gesture_state.hold.current_hold != hold) { - log_bug_client(eis_gesture_get_context(&hold->base), - "a different hold gesture is already in process, ignoring this one"); - return; - } - - /* FIXME: what do we do with a gesture when the device stops emulating? */ - if (device->state != EIS_DEVICE_STATE_EMULATING) { - log_bug_client(eis_device_get_context(device), - "%s: device is not emulating", - __func__); - return; - } - - if (client->state == EIS_CLIENT_STATE_NEW || client->state == EIS_CLIENT_STATE_DISCONNECTED) - return; - - if (!device->hold) - return; - - hold->base.state = EIS_GESTURE_STATE_ENDED; - device->gesture_state.hold.current_hold = NULL; - - device->send_frame_event = true; - - int rc = eis_gesture_hold_event_end(device->hold, is_cancel); - if (rc) - eis_client_disconnect(client); -} - -_public_ void -eis_hold_end(struct eis_hold *hold) -{ - eis_hold_end_cancel(hold, false); -} - -_public_ void -eis_hold_cancel(struct eis_hold *hold) -{ - eis_hold_end_cancel(hold, true); -} diff --git a/src/libeis-gestures.h b/src/libeis-gestures.h deleted file mode 100644 index 82e39e0..0000000 --- a/src/libeis-gestures.h +++ /dev/null @@ -1,132 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/* - * Copyright © 2024 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#pragma once - -#include "util-list.h" -#include "util-object.h" - -#include "brei-shared.h" - -struct eis; -struct eis_device; - -/* This is the protocol-only object, not exposed in the API. See eis_swipe() for - * the C API object */ -struct eis_gesture_swipe { - struct object object; - struct brei_object proto_object; -}; - -OBJECT_DECLARE_GETTER(eis_gesture_swipe, id, object_id_t); -OBJECT_DECLARE_GETTER(eis_gesture_swipe, version, uint32_t); -OBJECT_DECLARE_GETTER(eis_gesture_swipe, context, struct eis *); -OBJECT_DECLARE_GETTER(eis_gesture_swipe, client, struct eis_client *); -OBJECT_DECLARE_GETTER(eis_gesture_swipe, device, struct eis_device *); -OBJECT_DECLARE_GETTER(eis_gesture_swipe, proto_object, const struct brei_object *); -OBJECT_DECLARE_GETTER(eis_gesture_swipe, interface, const struct eis_gesture_swipe_interface *); -OBJECT_DECLARE_REF(eis_gesture_swipe); -OBJECT_DECLARE_UNREF(eis_gesture_swipe); - -struct eis_gesture_swipe * -eis_gesture_swipe_new(struct eis_device *device); - -/* This is the protocol-only object, not exposed in the API. See eis_pinch() for - * the C API object */ -struct eis_gesture_pinch { - struct object object; - struct brei_object proto_object; -}; - -OBJECT_DECLARE_GETTER(eis_gesture_pinch, id, object_id_t); -OBJECT_DECLARE_GETTER(eis_gesture_pinch, version, uint32_t); -OBJECT_DECLARE_GETTER(eis_gesture_pinch, context, struct eis *); -OBJECT_DECLARE_GETTER(eis_gesture_pinch, client, struct eis_client *); -OBJECT_DECLARE_GETTER(eis_gesture_pinch, device, struct eis_device *); -OBJECT_DECLARE_GETTER(eis_gesture_pinch, proto_object, const struct brei_object *); -OBJECT_DECLARE_GETTER(eis_gesture_pinch, interface, const struct eis_gesture_pinch_interface *); -OBJECT_DECLARE_REF(eis_gesture_pinch); -OBJECT_DECLARE_UNREF(eis_gesture_pinch); - -struct eis_gesture_pinch * -eis_gesture_pinch_new(struct eis_device *device); - -/* This is the protocol-only object, not exposed in the API. See eis_hold() for - * the C API object */ -struct eis_gesture_hold { - struct object object; - struct brei_object proto_object; -}; - -OBJECT_DECLARE_GETTER(eis_gesture_hold, id, object_id_t); -OBJECT_DECLARE_GETTER(eis_gesture_hold, version, uint32_t); -OBJECT_DECLARE_GETTER(eis_gesture_hold, context, struct eis *); -OBJECT_DECLARE_GETTER(eis_gesture_hold, client, struct eis_client *); -OBJECT_DECLARE_GETTER(eis_gesture_hold, device, struct eis_device *); -OBJECT_DECLARE_GETTER(eis_gesture_hold, proto_object, const struct brei_object *); -OBJECT_DECLARE_GETTER(eis_gesture_hold, interface, const struct eis_gesture_hold_interface *); -OBJECT_DECLARE_REF(eis_gesture_hold); -OBJECT_DECLARE_UNREF(eis_gesture_hold); - -struct eis_gesture_hold * -eis_gesture_hold_new(struct eis_device *device); - -enum eis_gesture_state { EIS_GESTURE_STATE_NEW, EIS_GESTURE_STATE_BEGUN, EIS_GESTURE_STATE_ENDED }; - -/* This is the parent object for all the C API gestures */ -struct eis_gesture { - struct object object; - struct eis_device *device; - enum eis_gesture_state state; - uint32_t nfingers; -}; - -OBJECT_DECLARE_REF(eis_gesture); -OBJECT_DECLARE_UNREF(eis_gesture); -OBJECT_DECLARE_GETTER(eis_gesture, context, struct eis *); -OBJECT_DECLARE_GETTER(eis_gesture, device, struct eis_device *); - -struct eis_swipe { - struct eis_gesture base; -}; - -struct eis_pinch { - struct eis_gesture base; -}; - -struct eis_hold { - struct eis_gesture base; -}; - -struct eis_swipe * -eis_swipe_new(struct eis_device *device, uint32_t nfingers); -OBJECT_DECLARE_GETTER(eis_swipe, context, struct eis *); - -struct eis_pinch * -eis_pinch_new(struct eis_device *device, uint32_t nfingers); -OBJECT_DECLARE_GETTER(eis_pinch, context, struct eis *); - -struct eis_hold * -eis_hold_new(struct eis_device *device, uint32_t nfingers); -OBJECT_DECLARE_GETTER(eis_hold, context, struct eis *); diff --git a/src/libeis-handshake.c b/src/libeis-handshake.c index 3a8af53..9a72442 100644 --- a/src/libeis-handshake.c +++ b/src/libeis-handshake.c @@ -136,9 +136,6 @@ client_msg_finish(struct eis_handshake *setup) SEND_INTERFACE_VERSION(EIS_SCROLL, ei_scroll); SEND_INTERFACE_VERSION(EIS_KEYBOARD, ei_keyboard); SEND_INTERFACE_VERSION(EIS_TOUCHSCREEN, ei_touchscreen); - SEND_INTERFACE_VERSION(EIS_GESTURE_SWIPE, ei_gesture_swipe); - SEND_INTERFACE_VERSION(EIS_GESTURE_PINCH, ei_gesture_pinch); - SEND_INTERFACE_VERSION(EIS_GESTURE_HOLD, ei_gesture_hold); #undef SEND_INTERFACE_VERSION @@ -240,9 +237,6 @@ client_msg_interface_version(struct eis_handshake *setup, const char *name, uint VERSION_ENTRY(ei_scroll), VERSION_ENTRY(ei_keyboard), VERSION_ENTRY(ei_touchscreen), - VERSION_ENTRY(ei_gesture_swipe), - VERSION_ENTRY(ei_gesture_pinch), - VERSION_ENTRY(ei_gesture_hold), VERSION_ENTRY(ei_text), #undef VERSION_ENTRY }; diff --git a/src/libeis-private.h b/src/libeis-private.h index 44061c0..36b8ce6 100644 --- a/src/libeis-private.h +++ b/src/libeis-private.h @@ -164,34 +164,6 @@ eis_queue_text_utf8_event(struct eis_device *device, const char *utf8); void eis_sync_event_send_done(struct eis_event *e); -void -eis_queue_swipe_begin_event(struct eis_device *device, uint32_t nfingers); - -void -eis_queue_swipe_update_event(struct eis_device *device, double dx, double dy); - -void -eis_queue_swipe_end_event(struct eis_device *device, bool is_cancelled); - -void -eis_queue_pinch_begin_event(struct eis_device *device, uint32_t nfingers); - -void -eis_queue_pinch_update_event(struct eis_device *device, - double dx, - double dy, - double scale, - double rotation); - -void -eis_queue_pinch_end_event(struct eis_device *device, bool is_cancelled); - -void -eis_queue_hold_begin_event(struct eis_device *device, uint32_t nfingers); - -void -eis_queue_hold_end_event(struct eis_device *device, bool is_cancelled); - _printf_(6, 7) void eis_log_msg(struct eis *eis, enum eis_log_priority priority, diff --git a/src/libeis-seat.c b/src/libeis-seat.c index e1b42b8..03d0534 100644 --- a/src/libeis-seat.c +++ b/src/libeis-seat.c @@ -103,12 +103,6 @@ convert_capabilities(uint64_t caps) capabilities |= EIS_DEVICE_CAP_BUTTON; if (caps & bit(EIS_SCROLL_INTERFACE_INDEX)) capabilities |= EIS_DEVICE_CAP_SCROLL; - if (caps & bit(EIS_GESTURE_SWIPE_INTERFACE_INDEX)) - capabilities |= EIS_DEVICE_CAP_GESTURES; - if (caps & bit(EIS_GESTURE_PINCH_INTERFACE_INDEX)) - capabilities |= EIS_DEVICE_CAP_GESTURES; - if (caps & bit(EIS_GESTURE_HOLD_INTERFACE_INDEX)) - capabilities |= EIS_DEVICE_CAP_GESTURES; if (caps & bit(EIS_TEXT_INTERFACE_INDEX)) capabilities |= EIS_DEVICE_CAP_TEXT; @@ -248,27 +242,6 @@ eis_seat_add(struct eis_seat *seat) mask_add(seat->capabilities.proto_mask, mask); } - if (seat->capabilities.c_mask & EIS_DEVICE_CAP_GESTURES && - client->interface_versions.ei_gesture_swipe > 0) { - uint64_t mask = bit(EIS_GESTURE_SWIPE_INTERFACE_INDEX); - eis_seat_event_capability(seat, mask, EIS_GESTURE_SWIPE_INTERFACE_NAME); - mask_add(seat->capabilities.proto_mask, mask); - } - - if (seat->capabilities.c_mask & EIS_DEVICE_CAP_GESTURES && - client->interface_versions.ei_gesture_pinch > 0) { - uint64_t mask = bit(EIS_GESTURE_PINCH_INTERFACE_INDEX); - eis_seat_event_capability(seat, mask, EIS_GESTURE_PINCH_INTERFACE_NAME); - mask_add(seat->capabilities.proto_mask, mask); - } - - if (seat->capabilities.c_mask & EIS_DEVICE_CAP_GESTURES && - client->interface_versions.ei_gesture_hold > 0) { - uint64_t mask = bit(EIS_GESTURE_HOLD_INTERFACE_INDEX); - eis_seat_event_capability(seat, mask, EIS_GESTURE_HOLD_INTERFACE_NAME); - mask_add(seat->capabilities.proto_mask, mask); - } - if (seat->capabilities.c_mask & EIS_DEVICE_CAP_TEXT && client->interface_versions.ei_text > 0) { uint64_t mask = bit(EIS_TEXT_INTERFACE_INDEX); @@ -368,7 +341,6 @@ eis_seat_configure_capability(struct eis_seat *seat, enum eis_device_capability case EIS_DEVICE_CAP_TOUCH: case EIS_DEVICE_CAP_BUTTON: case EIS_DEVICE_CAP_SCROLL: - case EIS_DEVICE_CAP_GESTURES: case EIS_DEVICE_CAP_TEXT: mask_add(seat->capabilities.c_mask, cap); break; @@ -385,7 +357,6 @@ eis_seat_has_capability(struct eis_seat *seat, enum eis_device_capability cap) case EIS_DEVICE_CAP_TOUCH: case EIS_DEVICE_CAP_BUTTON: case EIS_DEVICE_CAP_SCROLL: - case EIS_DEVICE_CAP_GESTURES: case EIS_DEVICE_CAP_TEXT: return mask_all(seat->capabilities.c_mask, cap); } diff --git a/src/libeis.c b/src/libeis.c index 1508e02..e9fb811 100644 --- a/src/libeis.c +++ b/src/libeis.c @@ -153,14 +153,6 @@ eis_event_type_to_string(enum eis_event_type type) CASE_RETURN_STRING(EIS_EVENT_TOUCH_UP); CASE_RETURN_STRING(EIS_EVENT_TOUCH_MOTION); CASE_RETURN_STRING(EIS_EVENT_FRAME); - CASE_RETURN_STRING(EIS_EVENT_SWIPE_BEGIN); - CASE_RETURN_STRING(EIS_EVENT_SWIPE_UPDATE); - CASE_RETURN_STRING(EIS_EVENT_SWIPE_END); - CASE_RETURN_STRING(EIS_EVENT_PINCH_BEGIN); - CASE_RETURN_STRING(EIS_EVENT_PINCH_UPDATE); - CASE_RETURN_STRING(EIS_EVENT_PINCH_END); - CASE_RETURN_STRING(EIS_EVENT_HOLD_BEGIN); - CASE_RETURN_STRING(EIS_EVENT_HOLD_END); CASE_RETURN_STRING(EIS_EVENT_TEXT_KEYSYM); CASE_RETURN_STRING(EIS_EVENT_TEXT_UTF8); } @@ -183,14 +175,6 @@ update_event_timestamp(struct eis_event *event, uint64_t time) case EIS_EVENT_TOUCH_DOWN: case EIS_EVENT_TOUCH_UP: case EIS_EVENT_TOUCH_MOTION: - case EIS_EVENT_SWIPE_BEGIN: - case EIS_EVENT_SWIPE_UPDATE: - case EIS_EVENT_SWIPE_END: - case EIS_EVENT_PINCH_BEGIN: - case EIS_EVENT_PINCH_UPDATE: - case EIS_EVENT_PINCH_END: - case EIS_EVENT_HOLD_BEGIN: - case EIS_EVENT_HOLD_END: case EIS_EVENT_TEXT_KEYSYM: case EIS_EVENT_TEXT_UTF8: if (event->timestamp != 0) { @@ -229,14 +213,6 @@ eis_queue_event(struct eis_event *event) case EIS_EVENT_TOUCH_DOWN: case EIS_EVENT_TOUCH_UP: case EIS_EVENT_TOUCH_MOTION: - case EIS_EVENT_SWIPE_BEGIN: - case EIS_EVENT_SWIPE_UPDATE: - case EIS_EVENT_SWIPE_END: - case EIS_EVENT_PINCH_BEGIN: - case EIS_EVENT_PINCH_UPDATE: - case EIS_EVENT_PINCH_END: - case EIS_EVENT_HOLD_BEGIN: - case EIS_EVENT_HOLD_END: case EIS_EVENT_TEXT_KEYSYM: case EIS_EVENT_TEXT_UTF8: prefix = "pending "; @@ -508,106 +484,6 @@ eis_queue_touch_cancel_event(struct eis_device *device, uint32_t touchid) eis_queue_event(e); } -void -eis_queue_swipe_begin_event(struct eis_device *device, uint32_t nfingers) -{ - struct eis_event *e = eis_event_new_for_device(device); - - e->type = EIS_EVENT_SWIPE_BEGIN; - e->gestures.nfingers = nfingers; - - eis_queue_event(e); -} - -void -eis_queue_swipe_update_event(struct eis_device *device, double dx, double dy) -{ - struct eis_event *e = eis_event_new_for_device(device); - - e->type = EIS_EVENT_SWIPE_UPDATE; - e->gestures.nfingers = device->gesture_state.swipe.nfingers; - e->gestures.dx = dx; - e->gestures.dy = dy; - - eis_queue_event(e); -} - -void -eis_queue_swipe_end_event(struct eis_device *device, bool is_cancelled) -{ - struct eis_event *e = eis_event_new_for_device(device); - - e->type = EIS_EVENT_SWIPE_END; - e->gestures.nfingers = device->gesture_state.swipe.nfingers; - e->gestures.is_cancelled = is_cancelled; - - eis_queue_event(e); -} - -void -eis_queue_pinch_begin_event(struct eis_device *device, uint32_t nfingers) -{ - struct eis_event *e = eis_event_new_for_device(device); - - e->type = EIS_EVENT_PINCH_BEGIN; - e->gestures.nfingers = nfingers; - - eis_queue_event(e); -} - -void -eis_queue_pinch_update_event(struct eis_device *device, - double dx, - double dy, - double scale, - double rotation) -{ - struct eis_event *e = eis_event_new_for_device(device); - e->type = EIS_EVENT_PINCH_UPDATE; - e->gestures.nfingers = device->gesture_state.pinch.nfingers; - e->gestures.scale = scale; - e->gestures.degrees = rotation; - e->gestures.dx = dx; - e->gestures.dy = dy; - - eis_queue_event(e); -} - -void -eis_queue_pinch_end_event(struct eis_device *device, bool is_cancelled) -{ - struct eis_event *e = eis_event_new_for_device(device); - - e->type = EIS_EVENT_PINCH_END; - e->gestures.nfingers = device->gesture_state.pinch.nfingers; - e->gestures.is_cancelled = is_cancelled; - - eis_queue_event(e); -} - -void -eis_queue_hold_begin_event(struct eis_device *device, uint32_t nfingers) -{ - struct eis_event *e = eis_event_new_for_device(device); - - e->type = EIS_EVENT_HOLD_BEGIN; - e->gestures.nfingers = nfingers; - - eis_queue_event(e); -} - -void -eis_queue_hold_end_event(struct eis_device *device, bool is_cancelled) -{ - struct eis_event *e = eis_event_new_for_device(device); - - e->type = EIS_EVENT_HOLD_END; - e->gestures.nfingers = device->gesture_state.hold.nfingers; - e->gestures.is_cancelled = is_cancelled; - - eis_queue_event(e); -} - void eis_queue_text_keysym_event(struct eis_device *device, uint32_t keysym, bool is_press) { diff --git a/src/libeis.h b/src/libeis.h index e7382b7..d9db61c 100644 --- a/src/libeis.h +++ b/src/libeis.h @@ -146,18 +146,6 @@ struct eis_keymap; * @struct eis_touch */ struct eis_touch; -/** - * @struct eis_swipe - */ -struct eis_swipe; -/** - * @struct eis_pinch - */ -struct eis_pinch; -/** - * @struct eis_hold - */ -struct eis_hold; /** * @struct eis_ping @@ -237,11 +225,7 @@ enum eis_device_capability { /** * @since 1.6 */ - EIS_DEVICE_CAP_GESTURES = (1 << 6), - /** - * @since 1.6 - */ - EIS_DEVICE_CAP_TEXT = (1 << 7), + EIS_DEVICE_CAP_TEXT = (1 << 6), }; /** @@ -421,97 +405,12 @@ enum eis_event_type { */ EIS_EVENT_TOUCH_MOTION, - /** - * Event for a swipe begin. Only one swipe gesture may be active - * at any time. - * - * @note This event is only generated on a sender eis context. - * See eis_device_swipe_new() and eis_swipe_begin() for the receiver context API. - * - * @since 1.6 - */ - EIS_EVENT_SWIPE_BEGIN = 900, - /** - * Event for an update to the current ongoing swipe gesture. - * - * This library accumulates all updates to the gesture within the same - * device frame into one gesture event. - * - * @note This event is only generated on a sender eis context. - * See eis_device_swipe_new() and eis_swipe_update() for the receiver context API. - * - * @since 1.6 - */ - EIS_EVENT_SWIPE_UPDATE, - /** - * Event for the logical end to the current ongoing swipe gesture. - * - * @note This event is only generated on a sender eis context. - * See eis_device_swipe_new() and eis_swipe_end() for the receiver context API. - * - * @since 1.6 - */ - EIS_EVENT_SWIPE_END, - - /** - * Event for a pinch begin. Only one pinch gesture may be active - * at any time. - * - * @note This event is only generated on a sender eis context. - * See eis_device_pinch_new() and eis_pinch_begin() for the receiver context API. - * - * @since 1.6 - */ - EIS_EVENT_PINCH_BEGIN = 910, - /** - * Event for an update to the current ongoing pinch gesture. - * - * This library accumulates all updates to the gesture within the same - * device frame into one gesture event, e.g. where the gestures moves - * and rotates only one update event is generated. - * - * @note This event is only generated on a sender eis context. - * See eis_device_pinch_new() and eis_pinch_update() for the receiver context API. - * - * @since 1.6 - */ - EIS_EVENT_PINCH_UPDATE, - /** - * Event for the logical end to the current ongoing pinch gesture. - * - * @note This event is only generated on a sender eis context. - * See eis_device_pinch_new() and eis_pinch_end() for the receiver context API. - * - * @since 1.6 - */ - EIS_EVENT_PINCH_END, - - /** - * Event for a hold begin. Only one hold gesture may be active - * at any time. - * - * @note This event is only generated on a sender eis context. - * See eis_device_hold_new() and eis_hold_begin() for the receiver context API. - * - * @since 1.6 - */ - EIS_EVENT_HOLD_BEGIN = 920, - /** - * Event for the logical end to the current ongoing hold gesture. - * - * @note This event is only generated on a sender eis context. - * See eis_device_hold_new() and eis_hold_end() for the receiver context API. - * - * @since 1.6 - */ - EIS_EVENT_HOLD_END, - /** * A key sym logical press or release event * * @since 1.6 */ - EIS_EVENT_TEXT_KEYSYM = 1000, + EIS_EVENT_TEXT_KEYSYM = 900, /** * A UTF-8 text event @@ -1473,8 +1372,7 @@ eis_device_remove(struct eis_device *device); * - any buttons or keys logically down are released * - any modifiers logically down are released * - any touches logically down are released - * - any gestures logically active are ended - * No events will be sent for these state changes back to a neutral state. + * No events will be sent for these releases back to a neutral state. * * @param device A connected device */ @@ -1826,363 +1724,6 @@ eis_touch_get_user_data(struct eis_touch *touch); struct eis_device * eis_touch_get_device(struct eis_touch *touch); -/** - * @ingroup libeis-sender - * - * Cancel any ongoing swipe gesture on a device with the @ref EIS_DEVICE_CAP_GESTURES - * capability. This notifies the client of the gesture cancelation and the client - * may no longer send @ref EIS_EVENT_SWIPE_UPDATE or - * @ref EIS_EVENT_SWIPE_END for the current gestures. - * - * Due to the asynchronous nature of the protocol, events of type - * @ref EIS_EVENT_SWIPE_UPDATE and/or - * @ref EIS_EVENT_SWIPE_END may have already been sent by the client. An EIS - * implementation must ignore those events. - * - * This method is only available on a sender eis context. - * - * If no swipe gesture is currently in progress, this function does nothing. - * - * @since 1.6 - */ -void -eis_device_swipe_cancel(struct eis_device *device); - -/** - * @ingroup libeis-sender - * - * Cancel any ongoing pinch gesture on a device with the @ref EIS_DEVICE_CAP_GESTURES - * capability. This notifies the client of the gesture cancelation and the client - * may no longer send @ref EIS_EVENT_PINCH_UPDATE or - * @ref EIS_EVENT_PINCH_END for the current gestures. - * - * Due to the asynchronous nature of the protocol, events of type - * @ref EIS_EVENT_PINCH_UPDATE and/or - * @ref EIS_EVENT_PINCH_END may have already been sent by the client. An EIS - * implementation must ignore those events. - * - * This method is only available on a sender eis context. - * - * If no pinch gesture is currently in progress, this function does nothing. - * - * @since 1.6 - */ -void -eis_device_pinch_cancel(struct eis_device *device); - -/** - * @ingroup libeis-sender - * - * Cancel any ongoing hold gesture on a device with the @ref EIS_DEVICE_CAP_GESTURES - * capability. This notifies the client of the gesture cancelation and the client - * may no longer send @ref EIS_EVENT_HOLD_END for the current gestures. - * - * Due to the asynchronous nature of the protocol, events of type - * @ref EIS_EVENT_HOLD_END may have already been sent by the client. An EIS - * implementation must ignore those events. - * - * This method is only available on a sender eis context. - * - * If no hold gesture is currently in progress, this function does nothing. - * - * @since 1.6 - */ -void -eis_device_hold_cancel(struct eis_device *device); - -/** - * @ingroup libeis-receiver - * - * Initiate a new swipe gesture on a device with the @ref EIS_DEVICE_CAP_GESTURES - * capability. This gesture does not immediately send events, use - * eis_swipe_begin(), eis_swipe_update() and eis_swipe_end(). - * - * The returned gesture has a refcount of at least 1, use eis_swipe_unref() to - * release resources associated with this gesture - * - * This method is only available on an eis receiver context. - * - * If the underlying device does not support swipe gestures, this function - * returns NULL. - * - * @param device A device with @ref EIS_DEVICE_CAP_GESTURES capability - * @param nfingers The number of fingers, must be greater than 0 - * @return A new swipe gesture or NULL on error - * - * @since 1.6 - */ -struct eis_swipe * -eis_device_swipe_new(struct eis_device *device, uint32_t nfingers); - -/** - * @ingroup libeis-receiver - * - * Starts the swipe gesture. - * - * This function can only be called once on an eis_swipe object. Further - * calls to eis_swipe_begin() on the same object are silently ignored. - * - * @param swipe A newly created swipe gesture - * - * @since 1.6 - */ -void -eis_swipe_begin(struct eis_swipe *swipe); - -/** - * @ingroup libeis-receiver - * - * Update the swipe gestures's position by the given relative delta. - * - * @since 1.6 - */ -void -eis_swipe_update(struct eis_swipe *swipe, double x, double y); - -/** - * @ingroup libeis-receiver - * - * Release this swipe. After this call, the swipe event becomes inert and - * no longer responds to either eis_swipe_begin(), - * eis_swipe_update(), eis_swipe_cancel() or - * eis_swipe_end() and the caller should call eis_swipe_unref(). - * - * @since 1.6 - */ -void -eis_swipe_end(struct eis_swipe *swipe); - -/** - * @ingroup libeis-receiver - * - * Cancel this swipe. After this call, the swipe event becomes inert and - * no longer responds to either eis_swipe_begin(), - * eis_swipe_update(), eis_swipe_cancel() or - * eis_swipe_end() and the caller should call eis_swipe_unref(). - * - * @since 1.6 - */ -void -eis_swipe_cancel(struct eis_swipe *swipe); - -/** - * @ingroup libeis-receiver - * - * Increase the refcount of this struct by one. Use eis_swipe_unref() to - * decrease the refcount. - * - * @return the argument passed into the function - * - * @since 1.6 - */ -struct eis_swipe * -eis_swipe_ref(struct eis_swipe *swipe); - -/** - * @ingroup libeis-receiver - * - * Decrease the refcount of this struct by one. When the refcount reaches - * zero, all allocated resources for this struct are released. - * - * @return always NULL - * - * @since 1.6 - */ -struct eis_swipe * -eis_swipe_unref(struct eis_swipe *swipe); - -/** - * @ingroup libeis-receiver - * - * Initiate a new pinch gesture on a device with the @ref EIS_DEVICE_CAP_GESTURES - * capability. This gesture does not immediately send events, use - * eis_pinch_begin(), eis_pinch_update() and eis_pinch_end(). - * - * The returned gesture has a refcount of at least 1, use eis_pinch_unref() to - * release resources associated with this gesture - * - * This method is only available on an eis receiver context. - * - * If the underlying device does not support pinch gestures, this function - * returns NULL. - * - * @param device A device with @ref EIS_DEVICE_CAP_GESTURES capability - * @param nfingers The number of fingers, must be at least 2 - * @return A new pinch gesture or NULL on error - * - * @since 1.6 - */ -struct eis_pinch * -eis_device_pinch_new(struct eis_device *device, uint32_t nfingers); - -/** - * @ingroup libeis-receiver - * - * Starts the pinch gesture. - * - * This function can only be called once on an eis_pinch object. Further - * calls to eis_pinch_begin() on the same object are silently ignored. - * - * @param pinch A newly created pinch gesture - * - * @since 1.6 - */ -void -eis_pinch_begin(struct eis_pinch *pinch); - -/** - * @ingroup libeis-receiver - * - * Update the pinch gestures's position by the given relative delta. - * - * @since 1.6 - */ -void -eis_pinch_update(struct eis_pinch *pinch, double x, double y, double scale, double rotation); - -/** - * @ingroup libeis-receiver - * - * Release this pinch. After this call, the pinch event becomes inert and - * no longer responds to either eis_pinch_begin(), - * eis_pinch_update(), eis_pinch_cancel() or - * eis_pinch_end() and the caller should call eis_pinch_unref(). - * - * @since 1.6 - */ -void -eis_pinch_end(struct eis_pinch *pinch); - -/** - * @ingroup libeis-receiver - * - * Cancel this pinch. After this call, the pinch event becomes inert and - * no longer responds to either eis_pinch_begin(), - * eis_pinch_update(), eis_pinch_cancel() or - * eis_pinch_end() and the caller should call eis_pinch_unref(). - * - * @since 1.6 - */ -void -eis_pinch_cancel(struct eis_pinch *pinch); - -/** - * @ingroup libeis-receiver - * - * Increase the refcount of this struct by one. Use eis_pinch_unref() to - * decrease the refcount. - * - * @return the argument passed into the function - * - * @since 1.6 - */ -struct eis_pinch * -eis_pinch_ref(struct eis_pinch *pinch); - -/** - * @ingroup libeis-receiver - * - * Decrease the refcount of this struct by one. When the refcount reaches - * zero, all allocated resources for this struct are released. - * - * @return always NULL - * - * @since 1.6 - */ -struct eis_pinch * -eis_pinch_unref(struct eis_pinch *pinch); - -/** - * @ingroup libeis-receiver - * - * Initiate a new hold gesture on a device with the @ref EIS_DEVICE_CAP_GESTURES - * capability. This gesture does not immediately send events, use - * eis_hold_begin() and eis_hold_end(). - * - * The returned gesture has a refcount of at least 1, use eis_hold_unref() to - * release resources associated with this gesture - * - * This method is only available on an eis receiver context. - * - * If the underlying device does not support hold gestures, this function - * returns NULL. - * - * @param device A device with @ref EIS_DEVICE_CAP_GESTURES capability - * @param nfingers The number of fingers, must be greater than 0 - * @return A new hold gesture or NULL on error - * - * @since 1.6 - */ -struct eis_hold * -eis_device_hold_new(struct eis_device *device, uint32_t nfingers); - -/** - * @ingroup libeis-receiver - * - * Starts the hold gesture. - * - * This function can only be called once on an eis_hold object. Further - * calls to eis_hold_begin() on the same object are silently ignored. - * - * @param hold A newly created hold gesture - * - * @since 1.6 - */ -void -eis_hold_begin(struct eis_hold *hold); - -/** - * @ingroup libeis-receiver - * - * Release this hold. After this call, the hold event becomes inert and - * no longer responds to either eis_hold_begin(), - * eis_hold_cancel() or - * eis_hold_end() and the caller should call eis_hold_unref(). - * - * @since 1.6 - */ -void -eis_hold_end(struct eis_hold *hold); - -/** - * @ingroup libeis-receiver - * - * Cancel this hold. After this call, the hold event becomes inert and - * no longer responds to either eis_hold_begin(), - * eis_hold_cancel() or - * eis_hold_end() and the caller should call eis_hold_unref(). - * - * @since 1.6 - */ -void -eis_hold_cancel(struct eis_hold *hold); - -/** - * @ingroup libeis-receiver - * - * Increase the refcount of this struct by one. Use eis_hold_unref() to - * decrease the refcount. - * - * @return the argument passed into the function - * - * @since 1.6 - */ -struct eis_hold * -eis_hold_ref(struct eis_hold *hold); - -/** - * @ingroup libeis-receiver - * - * Decrease the refcount of this struct by one. When the refcount reaches - * zero, all allocated resources for this struct are released. - * - * @return always NULL - * - * @since 1.6 - */ -struct eis_hold * -eis_hold_unref(struct eis_hold *hold); - /** * @ingroup libeis-sender * @@ -2374,145 +1915,6 @@ eis_event_touch_get_y(struct eis_event *event); bool eis_event_touch_get_is_cancel(struct eis_event *event); -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_SWIPE_BEGIN, - * @ref EIS_EVENT_SWIPE_UPDATE or @ref EIS_EVENT_SWIPE_END - * return the finger count for this gesture. - * - * @since 1.6 - */ -uint32_t -eis_event_swipe_get_finger_count(struct eis_event *event); - -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_SWIPE_UPDATE - * return the relative x movement of the logical center - * of the gesture in logical pixels or mm, depending on the device type. - * - * @since 1.6 - */ -double -eis_event_swipe_get_dx(struct eis_event *event); - -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_SWIPE_UPDATE - * return the relative y movement of the logical center - * of the gesture in logical pixels or mm, depending on the device type. - * - * @since 1.6 - */ -double -eis_event_swipe_get_dy(struct eis_event *event); - -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_SWIPE_END - * return true if the gesture was cancelled, false otherwise. - * - * @since 1.6 - */ -bool -eis_event_swipe_get_is_cancelled(struct eis_event *event); - -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_PINCH_BEGIN, - * @ref EIS_EVENT_PINCH_UPDATE or @ref EIS_EVENT_PINCH_END - * return the finger count for this gesture. - * - * @since 1.6 - */ -uint32_t -eis_event_pinch_get_finger_count(struct eis_event *event); - -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_PINCH_UPDATE - * return the relative x movement of the logical center - * of the gesture in logical pixels or mm, depending on the device type. - * - * @since 1.6 - */ -double -eis_event_pinch_get_dx(struct eis_event *event); - -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_PINCH_UPDATE - * return the relative y movement of the logical center - * of the gesture in logical pixels or mm, depending on the device type. - * - * @since 1.6 - */ -double -eis_event_pinch_get_dy(struct eis_event *event); - -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_PINCH_UPDATE - * return the relative angle of rotation in degrees clockwise. - * - * @since 1.6 - */ -double -eis_event_pinch_get_rotation(struct eis_event *event); - -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_PINCH_UPDATE - * return the normalized scale of the gesture. - * - * @since 1.6 - */ -double -eis_event_pinch_get_scale(struct eis_event *event); - -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_PINCH_END - * return true if the gesture was cancelled, false otherwise. - * - * @since 1.6 - */ -bool -eis_event_pinch_get_is_cancelled(struct eis_event *event); - -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_HOLD_BEGIN - * or @ref EIS_EVENT_HOLD_END - * return the finger count for this gesture. - * - * @since 1.6 - */ -uint32_t -eis_event_hold_get_finger_count(struct eis_event *event); - -/** - * @ingroup libeis-sender - * - * For an event of type @ref EIS_EVENT_HOLD_END - * return true if the gesture was cancelled, false otherwise. - * - * @since 1.6 - */ -bool -eis_event_hold_get_is_cancelled(struct eis_event *event); - /** * @ingroup libeis-sender * diff --git a/src/meson.build b/src/meson.build index 1abfa38..2da91ad 100644 --- a/src/meson.build +++ b/src/meson.build @@ -67,7 +67,6 @@ if build_libei 'libei-device.c', 'libei-event.c', 'libei-fd.c', - 'libei-gestures.c', 'libei-handshake.c', 'libei-keyboard.c', 'libei-log.c', @@ -148,7 +147,6 @@ if build_libeis 'libeis-device.c', 'libeis-event.c', 'libeis-fd.c', - 'libeis-gestures.c', 'libeis-handshake.c', 'libeis-keyboard.c', 'libeis-log.c', diff --git a/src/util-munit.h b/src/util-munit.h index 8423b33..c5d9fad 100644 --- a/src/util-munit.h +++ b/src/util-munit.h @@ -135,12 +135,6 @@ static MunitResult _func(const MunitParameter params[], void *user_data) #define MUNIT_TEST_PARAM(name_) \ munit_parameters_get(params, name_) -#define MUNIT_TEST_PARAM_BOOL(name_) \ - streq(munit_parameters_get(params, name_), "true") - -#define MUNIT_TEST_PARAM_INT(name_) \ - atoi(munit_parameters_get(params, name_)) - /** * Defines a struct global_setup_function in a custom ELF section that we can * then find in munit_tests_run() to do setup based on argv and/or pass userdata diff --git a/test/eierpecken.c b/test/eierpecken.c index 5178cb8..45f3a4a 100644 --- a/test/eierpecken.c +++ b/test/eierpecken.c @@ -74,7 +74,6 @@ struct peck { struct eis_device *eis_button; struct eis_device *eis_scroll; struct eis_device *eis_touch; - struct eis_device *eis_gestures; struct ei_seat *ei_seat; struct ei_device *ei_pointer; @@ -83,7 +82,6 @@ struct peck { struct ei_device *ei_button; struct ei_device *ei_scroll; struct ei_device *ei_touch; - struct ei_device *ei_gestures; uint64_t now; @@ -176,7 +174,6 @@ peck_destroy(struct peck *peck) eis_device_unref(peck->eis_touch); eis_device_unref(peck->eis_button); eis_device_unref(peck->eis_scroll); - eis_device_unref(peck->eis_gestures); eis_seat_unref(peck->eis_seat); ei_device_unref(peck->ei_pointer); @@ -185,7 +182,6 @@ peck_destroy(struct peck *peck) ei_device_unref(peck->ei_touch); ei_device_unref(peck->ei_button); ei_device_unref(peck->ei_scroll); - ei_device_unref(peck->ei_gestures); ei_seat_unref(peck->ei_seat); ei_unref(peck->ei); @@ -354,13 +350,6 @@ peck_eis_get_default_touch(struct peck *peck) return peck->eis_touch; } -struct eis_device * -peck_eis_get_default_gestures(struct peck *peck) -{ - munit_assert_ptr_not_null(peck->eis_gestures); - return peck->eis_gestures; -} - struct ei_seat * peck_ei_get_default_seat(struct peck *peck) { @@ -410,13 +399,6 @@ peck_ei_get_default_touch(struct peck *peck) return peck->ei_touch; } -struct ei_device * -peck_ei_get_default_gestures(struct peck *peck) -{ - munit_assert_ptr_not_null(peck->ei_gestures); - return peck->ei_gestures; -} - /* Ensures that device frames in tests always have an ascending and fixed * interval. Every time this is called it adds 10ms to the time offset. */ @@ -767,7 +749,6 @@ peck_enable_eis_behavior(struct peck *peck, enum peck_eis_behavior behavior) peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_POINTER_ABSOLUTE); peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_KEYBOARD); peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_TOUCH); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); break; case PECK_EIS_BEHAVIOR_HANDLE_BIND_SEAT: case PECK_EIS_BEHAVIOR_HANDLE_CLOSE_DEVICE: @@ -779,9 +760,6 @@ peck_enable_eis_behavior(struct peck *peck, enum peck_eis_behavior behavior) case PECK_EIS_BEHAVIOR_ADD_POINTER_ABSOLUTE: case PECK_EIS_BEHAVIOR_ADD_KEYBOARD: case PECK_EIS_BEHAVIOR_ADD_TOUCH: - case PECK_EIS_BEHAVIOR_ADD_GESTURES: - flag_set(peck->eis_behavior, behavior); - break; case PECK_EIS_BEHAVIOR_HANDLE_DEVICE_READY: flag_set(peck->eis_behavior, behavior); break; @@ -840,7 +818,6 @@ peck_disable_eis_behavior(struct peck *peck, enum peck_eis_behavior behavior) case PECK_EIS_BEHAVIOR_ADD_POINTER_ABSOLUTE: case PECK_EIS_BEHAVIOR_ADD_KEYBOARD: case PECK_EIS_BEHAVIOR_ADD_TOUCH: - case PECK_EIS_BEHAVIOR_ADD_GESTURES: case PECK_EIS_BEHAVIOR_HANDLE_DEVICE_READY: case PECK_EIS_BEHAVIOR_REJECT_CLIENT: case PECK_EIS_BEHAVIOR_ACCEPT_CLIENT: @@ -875,7 +852,6 @@ peck_enable_ei_behavior(struct peck *peck, enum peck_ei_behavior behavior) peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_HANDLE_ADDED_TOUCH); peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_HANDLE_ADDED_BUTTON); peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_HANDLE_ADDED_SCROLL); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_HANDLE_ADDED_GESTURES); break; case PECK_EI_BEHAVIOR_AUTOSTART: case PECK_EI_BEHAVIOR_HANDLE_ADDED_POINTER: @@ -884,7 +860,6 @@ peck_enable_ei_behavior(struct peck *peck, enum peck_ei_behavior behavior) case PECK_EI_BEHAVIOR_HANDLE_ADDED_TOUCH: case PECK_EI_BEHAVIOR_HANDLE_ADDED_BUTTON: case PECK_EI_BEHAVIOR_HANDLE_ADDED_SCROLL: - case PECK_EI_BEHAVIOR_HANDLE_ADDED_GESTURES: case PECK_EI_BEHAVIOR_HANDLE_FRAME: case PECK_EI_BEHAVIOR_HANDLE_SYNC: case PECK_EI_BEHAVIOR_HANDLE_RESUMED: @@ -926,7 +901,6 @@ peck_disable_ei_behavior(struct peck *peck, enum peck_ei_behavior behavior) case PECK_EI_BEHAVIOR_HANDLE_ADDED_TOUCH: case PECK_EI_BEHAVIOR_HANDLE_ADDED_BUTTON: case PECK_EI_BEHAVIOR_HANDLE_ADDED_SCROLL: - case PECK_EI_BEHAVIOR_HANDLE_ADDED_GESTURES: case PECK_EI_BEHAVIOR_HANDLE_FRAME: case PECK_EI_BEHAVIOR_HANDLE_SYNC: case PECK_EI_BEHAVIOR_HANDLE_RESUMED: @@ -947,7 +921,6 @@ peck_create_eis_seat(struct peck *peck, struct eis_client *client) eis_seat_configure_capability(seat, EIS_DEVICE_CAP_TOUCH); eis_seat_configure_capability(seat, EIS_DEVICE_CAP_BUTTON); eis_seat_configure_capability(seat, EIS_DEVICE_CAP_SCROLL); - eis_seat_configure_capability(seat, EIS_DEVICE_CAP_GESTURES); log_debug(peck, "EIS adding seat: '%s'\n", eis_seat_get_name(seat)); eis_seat_add(seat); @@ -1034,23 +1007,6 @@ peck_eis_create_touch(struct peck *peck, struct eis_seat *seat, const char *name return device; } -static inline struct eis_device * -peck_eis_create_gestures(struct peck *peck, struct eis_seat *seat, const char *name) -{ - struct eis_device *device = eis_seat_new_device(seat); - _unref_(eis_region) *region = eis_device_new_region(device); - - eis_region_set_offset(region, 0, 0); - eis_region_set_size(region, 1920, 1080); - - eis_device_configure_name(device, name); - eis_device_configure_capability(device, EIS_DEVICE_CAP_GESTURES); - eis_region_add(region); - eis_device_add(device); - - return device; -} - static inline void peck_handle_eis_seat_bind(struct peck *peck, struct eis_event *e) { @@ -1142,35 +1098,13 @@ peck_handle_eis_seat_bind(struct peck *peck, struct eis_event *e) } } - if (eis_event_seat_has_capability(e, EIS_DEVICE_CAP_GESTURES)) { - if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_ADD_GESTURES) && - !peck->eis_gestures) { - log_debug(peck, "EIS creating default gesture\n"); - _unref_(eis_device) *gestures = - peck_eis_create_gestures(peck, seat, "default gesture"); - - if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_RESUME_DEVICE)) - eis_device_resume(gestures); - - peck->eis_gestures = eis_device_ref(gestures); - } - } else { - if (peck->eis_gestures) { - log_debug(peck, "EIS removing default gesture\n"); - - _unref_(eis_device) *gestures = steal(&peck->eis_gestures); - eis_device_remove(gestures); - } - } - /* Removing all caps means removing the seat */ if (!eis_event_seat_has_capability(e, EIS_DEVICE_CAP_POINTER) && !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_POINTER_ABSOLUTE) && !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_KEYBOARD) && !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_BUTTON) && !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_SCROLL) && - !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_TOUCH) && - !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_GESTURES)) + !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_TOUCH)) eis_seat_remove(seat); } @@ -1190,8 +1124,6 @@ peck_eis_device_remove(struct peck *peck, struct eis_device *device) peck->eis_button = eis_device_unref(device); if (device == peck->eis_scroll) peck->eis_scroll = eis_device_unref(device); - if (device == peck->eis_gestures) - peck->eis_gestures = eis_device_unref(device); } bool @@ -1273,14 +1205,6 @@ _peck_dispatch_eis(struct peck *peck, int lineno) case EIS_EVENT_TOUCH_DOWN: case EIS_EVENT_TOUCH_UP: case EIS_EVENT_TOUCH_MOTION: - case EIS_EVENT_SWIPE_BEGIN: - case EIS_EVENT_SWIPE_UPDATE: - case EIS_EVENT_SWIPE_END: - case EIS_EVENT_PINCH_BEGIN: - case EIS_EVENT_PINCH_UPDATE: - case EIS_EVENT_PINCH_END: - case EIS_EVENT_HOLD_BEGIN: - case EIS_EVENT_HOLD_END: case EIS_EVENT_TEXT_KEYSYM: case EIS_EVENT_TEXT_UTF8: peck->eis_needs_frame = true; @@ -1367,10 +1291,6 @@ peck_check_ei_added(struct peck *peck, struct ei_event *e) flag_is_set(peck->ei_behavior, PECK_EI_BEHAVIOR_HANDLE_ADDED_SCROLL)) return tristate_yes; - if (ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES) && - flag_is_set(peck->ei_behavior, PECK_EI_BEHAVIOR_HANDLE_ADDED_GESTURES)) - return tristate_yes; - return tristate_unset; } @@ -1447,22 +1367,10 @@ _peck_dispatch_ei(struct peck *peck, int lineno) case EI_EVENT_TOUCH_DOWN: case EI_EVENT_TOUCH_UP: case EI_EVENT_TOUCH_MOTION: - case EI_EVENT_SWIPE_BEGIN: - case EI_EVENT_SWIPE_UPDATE: - case EI_EVENT_SWIPE_END: - case EI_EVENT_PINCH_BEGIN: - case EI_EVENT_PINCH_UPDATE: - case EI_EVENT_PINCH_END: - case EI_EVENT_HOLD_BEGIN: - case EI_EVENT_HOLD_END: case EI_EVENT_TEXT_KEYSYM: case EI_EVENT_TEXT_UTF8: peck->ei_needs_frame = true; break; - case EI_EVENT_SWIPE_CANCELLED: - case EI_EVENT_PINCH_CANCELLED: - case EI_EVENT_HOLD_CANCELLED: - break; } log_debug(peck, @@ -1497,7 +1405,6 @@ _peck_dispatch_ei(struct peck *peck, int lineno) EI_DEVICE_CAP_TOUCH, EI_DEVICE_CAP_BUTTON, EI_DEVICE_CAP_SCROLL, - EI_DEVICE_CAP_GESTURES, NULL); break; } @@ -1521,9 +1428,6 @@ _peck_dispatch_ei(struct peck *peck, int lineno) if (!peck->ei_scroll && ei_device_has_capability(device, EI_DEVICE_CAP_SCROLL)) peck->ei_scroll = ei_device_ref(device); - if (!peck->ei_gestures && - ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) - peck->ei_gestures = ei_device_ref(device); break; } case EI_EVENT_DEVICE_RESUMED: @@ -1784,70 +1688,6 @@ _peck_ei_touch_event(struct ei *ei, enum ei_event_type type, double x, double y, return event; } -struct ei_event * -_peck_ei_swipe_event(struct ei *ei, enum ei_event_type type, int lineno) -{ - assert(type == EI_EVENT_SWIPE_BEGIN || type == EI_EVENT_SWIPE_UPDATE || - type == EI_EVENT_SWIPE_END); - - struct ei_event *event = _peck_ei_next_event(ei, type, lineno); - - return event; -} - -struct ei_event * -_peck_ei_pinch_event(struct ei *ei, enum ei_event_type type, int lineno) -{ - assert(type == EI_EVENT_PINCH_BEGIN || type == EI_EVENT_PINCH_UPDATE || - type == EI_EVENT_PINCH_END); - - struct ei_event *event = _peck_ei_next_event(ei, type, lineno); - - return event; -} - -struct ei_event * -_peck_ei_hold_event(struct ei *ei, enum ei_event_type type, int lineno) -{ - assert(type == EI_EVENT_HOLD_BEGIN || type == EI_EVENT_HOLD_END); - - struct ei_event *event = _peck_ei_next_event(ei, type, lineno); - - return event; -} - -struct eis_event * -_peck_eis_swipe_event(struct eis *eis, enum eis_event_type type, int lineno) -{ - assert(type == EIS_EVENT_SWIPE_BEGIN || type == EIS_EVENT_SWIPE_UPDATE || - type == EIS_EVENT_SWIPE_END); - - struct eis_event *event = _peck_eis_next_event(eis, type, lineno); - - return event; -} - -struct eis_event * -_peck_eis_pinch_event(struct eis *eis, enum eis_event_type type, int lineno) -{ - assert(type == EIS_EVENT_PINCH_BEGIN || type == EIS_EVENT_PINCH_UPDATE || - type == EIS_EVENT_PINCH_END); - - struct eis_event *event = _peck_eis_next_event(eis, type, lineno); - - return event; -} - -struct eis_event * -_peck_eis_hold_event(struct eis *eis, enum eis_event_type type, int lineno) -{ - assert(type == EIS_EVENT_HOLD_BEGIN || type == EIS_EVENT_HOLD_END); - - struct eis_event *event = _peck_eis_next_event(eis, type, lineno); - - return event; -} - const char * peck_ei_event_name(struct ei_event *e) { @@ -1886,17 +1726,6 @@ peck_ei_event_type_name(enum ei_event_type type) CASE_STRING(TOUCH_DOWN); CASE_STRING(TOUCH_UP); CASE_STRING(TOUCH_MOTION); - CASE_STRING(SWIPE_BEGIN); - CASE_STRING(SWIPE_UPDATE); - CASE_STRING(SWIPE_END); - CASE_STRING(SWIPE_CANCELLED); - CASE_STRING(PINCH_BEGIN); - CASE_STRING(PINCH_UPDATE); - CASE_STRING(PINCH_END); - CASE_STRING(PINCH_CANCELLED); - CASE_STRING(HOLD_BEGIN); - CASE_STRING(HOLD_END); - CASE_STRING(HOLD_CANCELLED); CASE_STRING(TEXT_KEYSYM); CASE_STRING(TEXT_UTF8); } @@ -1938,14 +1767,6 @@ peck_eis_event_type_name(enum eis_event_type type) CASE_STRING(TOUCH_DOWN); CASE_STRING(TOUCH_UP); CASE_STRING(TOUCH_MOTION); - CASE_STRING(SWIPE_BEGIN); - CASE_STRING(SWIPE_UPDATE); - CASE_STRING(SWIPE_END); - CASE_STRING(PINCH_BEGIN); - CASE_STRING(PINCH_UPDATE); - CASE_STRING(PINCH_END); - CASE_STRING(HOLD_BEGIN); - CASE_STRING(HOLD_END); CASE_STRING(FRAME); CASE_STRING(TEXT_KEYSYM); CASE_STRING(TEXT_UTF8); diff --git a/test/eierpecken.h b/test/eierpecken.h index 2be58d2..e2af837 100644 --- a/test/eierpecken.h +++ b/test/eierpecken.h @@ -106,7 +106,6 @@ enum peck_eis_behavior { PECK_EIS_BEHAVIOR_ADD_POINTER_ABSOLUTE, PECK_EIS_BEHAVIOR_ADD_KEYBOARD, PECK_EIS_BEHAVIOR_ADD_TOUCH, - PECK_EIS_BEHAVIOR_ADD_GESTURES, PECK_EIS_BEHAVIOR_RESUME_DEVICE, PECK_EIS_BEHAVIOR_SUSPEND_DEVICE, @@ -138,7 +137,6 @@ enum peck_ei_behavior { PECK_EI_BEHAVIOR_HANDLE_ADDED_TOUCH, PECK_EI_BEHAVIOR_HANDLE_ADDED_BUTTON, PECK_EI_BEHAVIOR_HANDLE_ADDED_SCROLL, - PECK_EI_BEHAVIOR_HANDLE_ADDED_GESTURES, PECK_EI_BEHAVIOR_HANDLE_RESUMED, PECK_EI_BEHAVIOR_HANDLE_PAUSED, @@ -248,9 +246,6 @@ peck_eis_get_default_pointer_absolute(struct peck *peck); struct eis_device * peck_eis_get_default_touch(struct peck *peck); -struct eis_device * -peck_eis_get_default_gestures(struct peck *peck); - struct eis_device * peck_eis_get_default_button(struct peck *peck); @@ -278,9 +273,6 @@ peck_ei_get_default_pointer_absolute(struct peck *peck); struct ei_device * peck_ei_get_default_touch(struct peck *peck); -struct ei_device * -peck_ei_get_default_gestures(struct peck *peck); - uint64_t peck_ei_now(struct peck *peck); @@ -383,62 +375,6 @@ _peck_eis_touch_event(struct eis *eis, enum eis_event_type type, double x, doubl struct ei_event * _peck_ei_touch_event(struct ei *ei, enum ei_event_type type, double x, double y, int lineno); -#define peck_eis_swipe_begin(_ei) \ - _peck_eis_swipe_event(_ei, EIS_EVENT_SWIPE_BEGIN, __LINE__) -#define peck_eis_swipe_update(_ei) \ - _peck_eis_swipe_event(_ei, EIS_EVENT_SWIPE_UPDATE, __LINE__) -#define peck_eis_swipe_end(_ei) \ - _peck_eis_swipe_event(_ei, EIS_EVENT_SWIPE_END, __LINE__) - -struct eis_event * -_peck_eis_swipe_event(struct eis *eis, enum eis_event_type type, int lineno); - -#define peck_eis_pinch_begin(_ei) \ - _peck_eis_pinch_event(_ei, EIS_EVENT_PINCH_BEGIN, __LINE__) -#define peck_eis_pinch_update(_ei) \ - _peck_eis_pinch_event(_ei, EIS_EVENT_PINCH_UPDATE, __LINE__) -#define peck_eis_pinch_end(_ei) \ - _peck_eis_pinch_event(_ei, EIS_EVENT_PINCH_END, __LINE__) - -struct eis_event * -_peck_eis_pinch_event(struct eis *eis, enum eis_event_type type, int lineno); - -#define peck_eis_hold_begin(_ei) \ - _peck_eis_hold_event(_ei, EIS_EVENT_HOLD_BEGIN, __LINE__) -#define peck_eis_hold_end(_ei) \ - _peck_eis_hold_event(_ei, EIS_EVENT_HOLD_END, __LINE__) - -struct eis_event * -_peck_eis_hold_event(struct eis *eis, enum eis_event_type type, int lineno); - -#define peck_ei_swipe_begin(_ei) \ - _peck_ei_swipe_event(_ei, EI_EVENT_SWIPE_BEGIN, __LINE__) -#define peck_ei_swipe_update(_ei) \ - _peck_ei_swipe_event(_ei, EI_EVENT_SWIPE_UPDATE, __LINE__) -#define peck_ei_swipe_end(_ei) \ - _peck_ei_swipe_event(_ei, EI_EVENT_SWIPE_END, __LINE__) - -struct ei_event * -_peck_ei_swipe_event(struct ei *ei, enum ei_event_type type, int lineno); - -#define peck_ei_pinch_begin(_ei) \ - _peck_ei_pinch_event(_ei, EI_EVENT_PINCH_BEGIN, __LINE__) -#define peck_ei_pinch_update(_ei) \ - _peck_ei_pinch_event(_ei, EI_EVENT_PINCH_UPDATE, __LINE__) -#define peck_ei_pinch_end(_ei) \ - _peck_ei_pinch_event(_ei, EI_EVENT_PINCH_END, __LINE__) - -struct ei_event * -_peck_ei_pinch_event(struct ei *ei, enum ei_event_type type, int lineno); - -#define peck_ei_hold_begin(_ei) \ - _peck_ei_hold_event(_ei, EI_EVENT_HOLD_BEGIN, __LINE__) -#define peck_ei_hold_end(_ei) \ - _peck_ei_hold_event(_ei, EI_EVENT_HOLD_END, __LINE__) - -struct ei_event * -_peck_ei_hold_event(struct ei *ei, enum ei_event_type type, int lineno); - const char * peck_ei_event_name(struct ei_event *e); @@ -462,9 +398,6 @@ DEFINE_UNREF_CLEANUP_FUNC(ei_keymap); DEFINE_UNREF_CLEANUP_FUNC(ei_seat); DEFINE_UNREF_CLEANUP_FUNC(ei_region); DEFINE_UNREF_CLEANUP_FUNC(ei_ping); -DEFINE_UNREF_CLEANUP_FUNC(ei_swipe); -DEFINE_UNREF_CLEANUP_FUNC(ei_pinch); -DEFINE_UNREF_CLEANUP_FUNC(ei_hold); DEFINE_UNREF_CLEANUP_FUNC(eis); DEFINE_UNREF_CLEANUP_FUNC(eis_client); @@ -475,9 +408,6 @@ DEFINE_UNREF_CLEANUP_FUNC(eis_keymap); DEFINE_UNREF_CLEANUP_FUNC(eis_seat); DEFINE_UNREF_CLEANUP_FUNC(eis_region); DEFINE_UNREF_CLEANUP_FUNC(eis_ping); -DEFINE_UNREF_CLEANUP_FUNC(eis_swipe); -DEFINE_UNREF_CLEANUP_FUNC(eis_pinch); -DEFINE_UNREF_CLEANUP_FUNC(eis_hold); /* Macros intended just for readability to make it more obvious which part of a test handles server vs client */ diff --git a/test/test-ei-device.c b/test/test-ei-device.c index e5f3768..079c93f 100644 --- a/test/test-ei-device.c +++ b/test/test-ei-device.c @@ -67,14 +67,11 @@ MUNIT_TEST(test_ei_device_basics) munit_assert_false( eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER_ABSOLUTE)); munit_assert_false(eis_device_has_capability(device, EIS_DEVICE_CAP_TOUCH)); - munit_assert_false(eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)); eis_device_configure_capability(device, EIS_DEVICE_CAP_POINTER); munit_assert_true(eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER)); eis_device_configure_capability(device, EIS_DEVICE_CAP_KEYBOARD); munit_assert_true(eis_device_has_capability(device, EIS_DEVICE_CAP_KEYBOARD)); - eis_device_configure_capability(device, EIS_DEVICE_CAP_GESTURES); - munit_assert_true(eis_device_has_capability(device, EIS_DEVICE_CAP_GESTURES)); eis_device_add(device); @@ -103,7 +100,6 @@ MUNIT_TEST(test_ei_device_basics) munit_assert_false( ei_device_has_capability(device, EI_DEVICE_CAP_POINTER_ABSOLUTE)); munit_assert_false(ei_device_has_capability(device, EI_DEVICE_CAP_TOUCH)); - munit_assert_true(ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)); } return MUNIT_OK; @@ -1944,176 +1940,6 @@ MUNIT_TEST(test_ei_device_remove_no_stop_emulating_event) return MUNIT_OK; } -MUNIT_TEST_WITH_PARAMS(test_ei_device_gesture_swipe, - "@cancel", - "true", - "false", - "@nfingers", - "1", - "2", - "3", - "4") -{ - _unref_(peck) *peck = peck_new(); - bool cancel = MUNIT_TEST_PARAM_BOOL("@cancel"); - int nfingers = MUNIT_TEST_PARAM_INT("@nfingers"); - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - peck_dispatch_until_stable(peck); - - with_client(peck) { - struct ei_device *device = peck_ei_get_default_gestures(peck); - _unref_(ei_swipe) *swipe = ei_device_swipe_new(device, nfingers); - ei_swipe_begin(swipe); - ei_device_frame(device, peck_ei_now(peck)); - - ei_swipe_update(swipe, 1.1, 2.2); - ei_device_frame(device, peck_ei_now(peck)); - - if (cancel) - ei_swipe_cancel(swipe); - else - ei_swipe_end(swipe); - ei_device_frame(device, peck_ei_now(peck)); - } - - peck_dispatch_until_stable(peck); - - with_server(peck) { - _unref_(eis_event) *begin = peck_eis_swipe_begin(eis); - munit_assert_int(eis_event_swipe_get_finger_count(begin), ==, nfingers); - - _unref_(eis_event) *update = peck_eis_swipe_update(eis); - munit_assert_int(eis_event_swipe_get_finger_count(update), ==, nfingers); - munit_assert_float(eis_event_swipe_get_dx(update), ==, 1.1); - munit_assert_float(eis_event_swipe_get_dy(update), ==, 2.2); - - _unref_(eis_event) *end = peck_eis_swipe_end(eis); - munit_assert_int(eis_event_swipe_get_finger_count(end), ==, nfingers); - if (cancel) - munit_assert_true(eis_event_swipe_get_is_cancelled(end)); - else - munit_assert_false(eis_event_swipe_get_is_cancelled(end)); - - peck_assert_no_eis_events(eis); - } - - return MUNIT_OK; -} - -MUNIT_TEST_WITH_PARAMS(test_ei_device_gesture_pinch, - "@cancel", - "true", - "false", - "@nfingers", - "2", - "3", - "4") -{ - _unref_(peck) *peck = peck_new(); - bool cancel = MUNIT_TEST_PARAM_BOOL("@cancel"); - int nfingers = MUNIT_TEST_PARAM_INT("@nfingers"); - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - peck_dispatch_until_stable(peck); - - with_client(peck) { - struct ei_device *device = peck_ei_get_default_gestures(peck); - _unref_(ei_pinch) *pinch = ei_device_pinch_new(device, nfingers); - ei_pinch_begin(pinch); - ei_device_frame(device, peck_ei_now(peck)); - - ei_pinch_update(pinch, 1.1, 2.2, 3.3, 4.4); - ei_device_frame(device, peck_ei_now(peck)); - - if (cancel) - ei_pinch_cancel(pinch); - else - ei_pinch_end(pinch); - ei_device_frame(device, peck_ei_now(peck)); - } - - peck_dispatch_until_stable(peck); - - with_server(peck) { - _unref_(eis_event) *begin = peck_eis_pinch_begin(eis); - munit_assert_int(eis_event_pinch_get_finger_count(begin), ==, nfingers); - - _unref_(eis_event) *update = peck_eis_pinch_update(eis); - munit_assert_int(eis_event_pinch_get_finger_count(update), ==, nfingers); - munit_assert_float(eis_event_pinch_get_dx(update), ==, 1.1); - munit_assert_float(eis_event_pinch_get_dy(update), ==, 2.2); - munit_assert_float(eis_event_pinch_get_scale(update), ==, 3.3); - munit_assert_float(eis_event_pinch_get_rotation(update), ==, 4.4); - - _unref_(eis_event) *end = peck_eis_pinch_end(eis); - munit_assert_int(eis_event_pinch_get_finger_count(end), ==, nfingers); - if (cancel) - munit_assert_true(eis_event_pinch_get_is_cancelled(end)); - else - munit_assert_false(eis_event_pinch_get_is_cancelled(end)); - - peck_assert_no_eis_events(eis); - } - - return MUNIT_OK; -} - -MUNIT_TEST_WITH_PARAMS(test_ei_device_gesture_hold, - "@cancel", - "true", - "false", - "@nfingers", - "1", - "2", - "3", - "4") -{ - _unref_(peck) *peck = peck_new(); - bool cancel = MUNIT_TEST_PARAM_BOOL("@cancel"); - int nfingers = MUNIT_TEST_PARAM_INT("@nfingers"); - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - peck_dispatch_until_stable(peck); - - with_client(peck) { - struct ei_device *device = peck_ei_get_default_gestures(peck); - _unref_(ei_hold) *hold = ei_device_hold_new(device, nfingers); - ei_hold_begin(hold); - ei_device_frame(device, peck_ei_now(peck)); - - if (cancel) - ei_hold_cancel(hold); - else - ei_hold_end(hold); - ei_device_frame(device, peck_ei_now(peck)); - } - - peck_dispatch_until_stable(peck); - - with_server(peck) { - _unref_(eis_event) *begin = peck_eis_hold_begin(eis); - munit_assert_int(eis_event_hold_get_finger_count(begin), ==, nfingers); - - _unref_(eis_event) *end = peck_eis_hold_end(eis); - munit_assert_int(eis_event_hold_get_finger_count(end), ==, nfingers); - if (cancel) - munit_assert_true(eis_event_hold_get_is_cancelled(end)); - else - munit_assert_false(eis_event_hold_get_is_cancelled(end)); - - peck_assert_no_eis_events(eis); - } - - return MUNIT_OK; -} - MUNIT_TEST(test_passive_ei_device_start_stop_emulating) { _unref_(peck) *peck = peck_new_context("mode", PECK_EI_RECEIVER); @@ -3180,759 +3006,3 @@ MUNIT_TEST(test_passive_ei_flush_frame) return MUNIT_OK; } - -MUNIT_TEST_WITH_PARAMS(test_passive_ei_device_gesture_swipe, - "@cancel", - "true", - "false", - "@nfingers", - "1", - "2", - "3", - "4") -{ - _unref_(peck) *peck = peck_new_context("mode", PECK_EI_RECEIVER); - bool cancel = MUNIT_TEST_PARAM_BOOL("@cancel"); - int nfingers = MUNIT_TEST_PARAM_INT("@nfingers"); - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - peck_dispatch_until_stable(peck); - - uint32_t sequence = 123; - - with_server(peck) { - struct eis_device *device = peck_eis_get_default_gestures(peck); - - eis_device_start_emulating(device, sequence); - - _unref_(eis_swipe) *swipe = eis_device_swipe_new(device, nfingers); - eis_swipe_begin(swipe); - eis_device_frame(device, peck_eis_now(peck)); - - eis_swipe_update(swipe, 1.1, 2.2); - eis_device_frame(device, peck_eis_now(peck)); - - if (cancel) - eis_swipe_cancel(swipe); - else - eis_swipe_end(swipe); - eis_device_frame(device, peck_eis_now(peck)); - } - - peck_dispatch_until_stable(peck); - - with_client(peck) { - _unref_(ei_event) *start = peck_ei_next_event(ei, EI_EVENT_DEVICE_START_EMULATING); - - _unref_(ei_event) *begin = peck_ei_swipe_begin(ei); - munit_assert_int(ei_event_swipe_get_finger_count(begin), ==, nfingers); - - _unref_(ei_event) *update = peck_ei_swipe_update(ei); - munit_assert_int(ei_event_swipe_get_finger_count(update), ==, nfingers); - munit_assert_float(ei_event_swipe_get_dx(update), ==, 1.1); - munit_assert_float(ei_event_swipe_get_dy(update), ==, 2.2); - - _unref_(ei_event) *end = peck_ei_swipe_end(ei); - munit_assert_int(ei_event_swipe_get_finger_count(end), ==, nfingers); - if (cancel) - munit_assert_true(ei_event_swipe_get_is_cancelled(end)); - else - munit_assert_false(ei_event_swipe_get_is_cancelled(end)); - peck_assert_no_ei_events(ei); - } - - return MUNIT_OK; -} - -MUNIT_TEST_WITH_PARAMS(test_passive_ei_device_gesture_pinch, - "@cancel", - "true", - "false", - "@nfingers", - "2", - "3", - "4") -{ - _unref_(peck) *peck = peck_new_context("mode", PECK_EI_RECEIVER); - bool cancel = MUNIT_TEST_PARAM_BOOL("@cancel"); - int nfingers = MUNIT_TEST_PARAM_INT("@nfingers"); - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - peck_dispatch_until_stable(peck); - - uint32_t sequence = 123; - - with_server(peck) { - struct eis_device *device = peck_eis_get_default_gestures(peck); - - eis_device_start_emulating(device, sequence); - - _unref_(eis_pinch) *pinch = eis_device_pinch_new(device, nfingers); - eis_pinch_begin(pinch); - eis_device_frame(device, peck_eis_now(peck)); - - eis_pinch_update(pinch, 1.1, 2.2, 3.3, 4.4); - eis_device_frame(device, peck_eis_now(peck)); - - if (cancel) - eis_pinch_cancel(pinch); - else - eis_pinch_end(pinch); - eis_device_frame(device, peck_eis_now(peck)); - } - - peck_dispatch_until_stable(peck); - - with_client(peck) { - _unref_(ei_event) *start = peck_ei_next_event(ei, EI_EVENT_DEVICE_START_EMULATING); - - _unref_(ei_event) *begin = peck_ei_pinch_begin(ei); - munit_assert_int(ei_event_pinch_get_finger_count(begin), ==, nfingers); - - _unref_(ei_event) *update = peck_ei_pinch_update(ei); - munit_assert_int(ei_event_pinch_get_finger_count(update), ==, nfingers); - munit_assert_float(ei_event_pinch_get_dx(update), ==, 1.1); - munit_assert_float(ei_event_pinch_get_dy(update), ==, 2.2); - munit_assert_float(ei_event_pinch_get_scale(update), ==, 3.3); - munit_assert_float(ei_event_pinch_get_rotation(update), ==, 4.4); - - _unref_(ei_event) *end = peck_ei_pinch_end(ei); - munit_assert_int(ei_event_pinch_get_finger_count(end), ==, nfingers); - if (cancel) - munit_assert_true(ei_event_pinch_get_is_cancelled(end)); - else - munit_assert_false(ei_event_pinch_get_is_cancelled(end)); - - peck_assert_no_ei_events(ei); - } - - return MUNIT_OK; -} - -MUNIT_TEST_WITH_PARAMS(test_passive_ei_device_gesture_hold, - "@cancel", - "true", - "false", - "@nfingers", - "1", - "2", - "3", - "4") -{ - _unref_(peck) *peck = peck_new_context("mode", PECK_EI_RECEIVER); - bool cancel = MUNIT_TEST_PARAM_BOOL("@cancel"); - int nfingers = MUNIT_TEST_PARAM_INT("@nfingers"); - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - - peck_dispatch_until_stable(peck); - - uint32_t sequence = 123; - with_server(peck) { - struct eis_device *device = peck_eis_get_default_gestures(peck); - - eis_device_start_emulating(device, sequence); - - _unref_(eis_hold) *hold = eis_device_hold_new(device, nfingers); - eis_hold_begin(hold); - eis_device_frame(device, peck_eis_now(peck)); - - if (cancel) - eis_hold_cancel(hold); - else - eis_hold_end(hold); - eis_device_frame(device, peck_eis_now(peck)); - } - - peck_dispatch_until_stable(peck); - - with_client(peck) { - _unref_(ei_event) *start = peck_ei_next_event(ei, EI_EVENT_DEVICE_START_EMULATING); - - _unref_(ei_event) *begin = peck_ei_hold_begin(ei); - munit_assert_int(ei_event_hold_get_finger_count(begin), ==, nfingers); - - _unref_(ei_event) *end = peck_ei_hold_end(ei); - munit_assert_int(ei_event_hold_get_finger_count(end), ==, nfingers); - if (cancel) - munit_assert_true(ei_event_hold_get_is_cancelled(end)); - else - munit_assert_false(ei_event_hold_get_is_cancelled(end)); - - peck_assert_no_ei_events(ei); - } - - return MUNIT_OK; -} - -enum gesture_type { SWIPE, PINCH, HOLD }; - -static inline enum gesture_type -gesture_type_from_string(const char *string) -{ - if (streq(string, "swipe")) - return SWIPE; - else if (streq(string, "pinch")) - return PINCH; - else if (streq(string, "hold")) - return HOLD; - abort(); -} - -MUNIT_TEST_WITH_PARAMS(test_eis_device_gesture_cancel_noop, "@gesture", "swipe", "pinch", "hold") -{ - enum gesture_type gesture = gesture_type_from_string(MUNIT_TEST_PARAM("@gesture")); - _unref_(peck) *peck = peck_new(); - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - peck_dispatch_until_stable(peck); - - /* Test 1: Canceling when no gesture is active - should be a noop */ - with_server(peck) { - struct eis_device *device = peck_eis_get_default_gestures(peck); - - switch (gesture) { - case SWIPE: - eis_device_swipe_cancel(device); - break; - case PINCH: - eis_device_pinch_cancel(device); - break; - case HOLD: - eis_device_hold_cancel(device); - break; - } - } - - peck_dispatch_until_stable(peck); - - with_client(peck) { - /* Should have no events since no gesture was active */ - peck_assert_no_ei_events(ei); - } - - /* Test 2: Canceling after gesture has ended - should be a noop */ - int nfingers = 2; - - with_client(peck) { - struct ei_device *device = peck_ei_get_default_gestures(peck); - - switch (gesture) { - case SWIPE: { - _unref_(ei_swipe) *swipe = ei_device_swipe_new(device, nfingers); - ei_swipe_begin(swipe); - ei_device_frame(device, peck_ei_now(peck)); - ei_swipe_end(swipe); - ei_device_frame(device, peck_ei_now(peck)); - break; - } - case PINCH: { - _unref_(ei_pinch) *pinch = ei_device_pinch_new(device, nfingers); - ei_pinch_begin(pinch); - ei_device_frame(device, peck_ei_now(peck)); - ei_pinch_end(pinch); - ei_device_frame(device, peck_ei_now(peck)); - break; - } - case HOLD: { - _unref_(ei_hold) *hold = ei_device_hold_new(device, nfingers); - ei_hold_begin(hold); - ei_device_frame(device, peck_ei_now(peck)); - ei_hold_end(hold); - ei_device_frame(device, peck_ei_now(peck)); - break; - } - } - } - - peck_dispatch_until_stable(peck); - - with_server(peck) { - struct eis_device *device = peck_eis_get_default_gestures(peck); - - switch (gesture) { - case SWIPE: { - _unref_(eis_event) *begin = peck_eis_swipe_begin(eis); - _unref_(eis_event) *end = peck_eis_swipe_end(eis); - - /* Cancel after end - should be a noop */ - eis_device_swipe_cancel(device); - break; - } - case PINCH: { - _unref_(eis_event) *begin = peck_eis_pinch_begin(eis); - _unref_(eis_event) *end = peck_eis_pinch_end(eis); - - eis_device_pinch_cancel(device); - break; - } - case HOLD: { - _unref_(eis_event) *begin = peck_eis_hold_begin(eis); - _unref_(eis_event) *end = peck_eis_hold_end(eis); - - eis_device_hold_cancel(device); - break; - } - } - } - - peck_dispatch_until_stable(peck); - - with_client(peck) { - /* No cancel event should be sent */ - peck_assert_no_ei_events(ei); - } - - return MUNIT_OK; -} - -MUNIT_TEST_WITH_PARAMS(test_eis_device_gesture_double_cancel, "@gesture", "swipe", "pinch", "hold") -{ - enum gesture_type gesture = gesture_type_from_string(MUNIT_TEST_PARAM("@gesture")); - _unref_(peck) *peck = peck_new(); - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - peck_dispatch_until_stable(peck); - - int nfingers = 3; - - _unref_(ei_swipe) *swipe = NULL; - _unref_(ei_pinch) *pinch = NULL; - _unref_(ei_hold) *hold = NULL; - - with_client(peck) { - struct ei_device *device = peck_ei_get_default_gestures(peck); - - switch (gesture) { - case SWIPE: { - swipe = ei_device_swipe_new(device, nfingers); - ei_swipe_begin(swipe); - ei_device_frame(device, peck_ei_now(peck)); - - ei_swipe_update(swipe, 1.1, 2.2); - ei_device_frame(device, peck_ei_now(peck)); - break; - } - case PINCH: { - pinch = ei_device_pinch_new(device, nfingers); - ei_pinch_begin(pinch); - ei_device_frame(device, peck_ei_now(peck)); - - ei_pinch_update(pinch, 1.1, 2.2, 3.3, 4.4); - ei_device_frame(device, peck_ei_now(peck)); - break; - } - case HOLD: { - hold = ei_device_hold_new(device, nfingers); - ei_hold_begin(hold); - ei_device_frame(device, peck_ei_now(peck)); - break; - } - } - } - - peck_dispatch_until_stable(peck); - - with_server(peck) { - struct eis_device *device = peck_eis_get_default_gestures(peck); - _unref_(eis_event) *begin = NULL; - _unref_(eis_event) *update = NULL; - - switch (gesture) { - case SWIPE: { - begin = peck_eis_swipe_begin(eis); - update = peck_eis_swipe_update(eis); - eis_device_swipe_cancel(device); - eis_device_swipe_cancel(device); /* should be a noop */ - break; - } - case PINCH: { - begin = peck_eis_pinch_begin(eis); - update = peck_eis_pinch_update(eis); - - eis_device_pinch_cancel(device); - eis_device_pinch_cancel(device); /* should be noop */ - break; - } - case HOLD: { - begin = peck_eis_hold_begin(eis); - - eis_device_hold_cancel(device); - eis_device_hold_cancel(device); /* should be noop */ - break; - } - } - } - - peck_dispatch_ei(peck); - - with_client(peck) { - _unref_(ei_event) *canceled = NULL; - switch (gesture) { - case SWIPE: - canceled = peck_ei_next_event(ei, EI_EVENT_SWIPE_CANCELLED); - break; - case PINCH: - canceled = peck_ei_next_event(ei, EI_EVENT_PINCH_CANCELLED); - break; - case HOLD: - canceled = peck_ei_next_event(ei, EI_EVENT_HOLD_CANCELLED); - break; - } - - /* Should not receive duplicate cancel event */ - peck_assert_no_ei_events(ei); - } - return MUNIT_OK; -} - -MUNIT_TEST(test_eis_device_gesture_cancel_on_non_gesture_device) -{ - _unref_(peck) *peck = peck_new(); - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_POINTER); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - peck_dispatch_until_stable(peck); - - /* Enable log capture to verify error messages */ - peck_eis_enable_log_capture(peck); - - with_server(peck) { - struct eis_device *device = peck_eis_get_default_pointer(peck); - - /* These should log errors but not crash */ - with_nonfatal_eis_bug(peck) - { - eis_device_swipe_cancel(device); - eis_device_pinch_cancel(device); - eis_device_hold_cancel(device); - } - } - - /* Verify error was logged */ - with_server(peck) { - char **logs = peck_eis_get_log_capture(peck, EIS_LOG_PRIORITY_ERROR); - int count = 0; - for (char **log = logs; *log; log++) { - if (strstr(*log, "device is not a gesture device")) - count++; - } - /* Should have 3 error messages, one for each cancel call */ - munit_assert_int(count, ==, 3); - } - - peck_eis_disable_log_capture(peck); - - return MUNIT_OK; -} - -MUNIT_TEST_WITH_PARAMS(test_ei_device_gesture_no_second_gesture, - "@gesture", - "swipe", - "pinch", - "hold") -{ - const char *gesture_param = MUNIT_TEST_PARAM("@gesture"); - enum gesture_type gesture = gesture_type_from_string(gesture_param); - _unref_(peck) *peck = peck_new(); - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - peck_dispatch_until_stable(peck); - - peck_ei_enable_log_capture(peck); - - int nfingers = 3; - - with_client(peck) { - struct ei_device *device = peck_ei_get_default_gestures(peck); - - switch (gesture) { - case SWIPE: { - _unref_(ei_swipe) *swipe1 = ei_device_swipe_new(device, nfingers); - _unref_(ei_swipe) *swipe2 = ei_device_swipe_new(device, nfingers); - ei_swipe_begin(swipe1); - ei_device_frame(device, peck_ei_now(peck)); - - ei_swipe_update(swipe1, 1.1, 2.2); - ei_device_frame(device, peck_ei_now(peck)); - - with_nonfatal_ei_bug(peck) - { - ei_swipe_begin(swipe2); - ei_device_frame(device, peck_ei_now(peck)); - ei_swipe_update(swipe2, 3.3, 4.4); - ei_device_frame(device, peck_ei_now(peck)); - } - break; - } - case PINCH: { - _unref_(ei_pinch) *pinch1 = ei_device_pinch_new(device, nfingers); - _unref_(ei_pinch) *pinch2 = ei_device_pinch_new(device, nfingers); - ei_pinch_begin(pinch1); - ei_device_frame(device, peck_ei_now(peck)); - - ei_pinch_update(pinch1, 1.1, 2.2, 3.3, 4.4); - ei_device_frame(device, peck_ei_now(peck)); - - with_nonfatal_ei_bug(peck) - { - ei_pinch_begin(pinch2); - ei_device_frame(device, peck_ei_now(peck)); - - ei_pinch_update(pinch2, 1.1, 2.2, 3.3, 4.4); - ei_device_frame(device, peck_ei_now(peck)); - } - break; - } - case HOLD: { - _unref_(ei_hold) *hold1 = ei_device_hold_new(device, nfingers); - _unref_(ei_hold) *hold2 = ei_device_hold_new(device, nfingers); - ei_hold_begin(hold1); - ei_device_frame(device, peck_ei_now(peck)); - with_nonfatal_ei_bug(peck) - { - ei_hold_begin(hold2); - ei_device_frame(device, peck_ei_now(peck)); - } - break; - } - } - - char **logs = peck_ei_get_log_capture(peck, EI_LOG_PRIORITY_ERROR); - int count = 0; - _cleanup_free_ char *message = - xaprintf("a different %s gesture is already in process", gesture_param); - for (char **log = logs; *log; log++) { - if (strstr(*log, message)) - count++; - } - /* Should have 1 error message for the rejected second gesture begin */ - munit_assert_int(count, ==, 1); - } - - peck_dispatch_until_stable(peck); - - return MUNIT_OK; -} - -MUNIT_TEST_WITH_PARAMS(test_ei_device_gesture_unref_cancels, "@gesture", "swipe", "pinch", "hold") -{ - enum gesture_type gesture = gesture_type_from_string(MUNIT_TEST_PARAM("@gesture")); - _unref_(peck) *peck = peck_new(); - const int nfingers = 2; - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - peck_dispatch_until_stable(peck); - - with_client(peck) { - struct ei_device *device = peck_ei_get_default_gestures(peck); - - switch (gesture) { - case SWIPE: { - struct ei_swipe *swipe = ei_device_swipe_new(device, nfingers); - ei_swipe_begin(swipe); - ei_device_frame(device, peck_ei_now(peck)); - - ei_swipe_update(swipe, 1.1, 2.2); - ei_device_frame(device, peck_ei_now(peck)); - - /* Unref while gesture is still active - should cancel */ - ei_swipe_unref(swipe); - ei_device_frame(device, peck_ei_now(peck)); - break; - } - case PINCH: { - struct ei_pinch *pinch = ei_device_pinch_new(device, nfingers); - ei_pinch_begin(pinch); - ei_device_frame(device, peck_ei_now(peck)); - - ei_pinch_update(pinch, 1.1, 2.2, 3.3, 4.4); - ei_device_frame(device, peck_ei_now(peck)); - - /* Unref while gesture is still active - should cancel */ - ei_pinch_unref(pinch); - ei_device_frame(device, peck_ei_now(peck)); - break; - } - case HOLD: { - struct ei_hold *hold = ei_device_hold_new(device, nfingers); - ei_hold_begin(hold); - ei_device_frame(device, peck_ei_now(peck)); - - /* Unref while gesture is still active - should cancel */ - ei_hold_unref(hold); - ei_device_frame(device, peck_ei_now(peck)); - break; - } - } - } - - peck_dispatch_until_stable(peck); - - with_server(peck) { - switch (gesture) { - case SWIPE: { - _unref_(eis_event) *begin = peck_eis_swipe_begin(eis); - munit_assert_int(eis_event_swipe_get_finger_count(begin), ==, nfingers); - - _unref_(eis_event) *update = peck_eis_swipe_update(eis); - munit_assert_int(eis_event_swipe_get_finger_count(update), ==, nfingers); - - _unref_(eis_event) *end = peck_eis_swipe_end(eis); - munit_assert_int(eis_event_swipe_get_finger_count(end), ==, nfingers); - munit_assert_true(eis_event_swipe_get_is_cancelled(end)); - break; - } - case PINCH: { - _unref_(eis_event) *begin = peck_eis_pinch_begin(eis); - munit_assert_int(eis_event_pinch_get_finger_count(begin), ==, nfingers); - - _unref_(eis_event) *update = peck_eis_pinch_update(eis); - munit_assert_int(eis_event_pinch_get_finger_count(update), ==, nfingers); - - _unref_(eis_event) *end = peck_eis_pinch_end(eis); - munit_assert_int(eis_event_pinch_get_finger_count(end), ==, nfingers); - munit_assert_true(eis_event_pinch_get_is_cancelled(end)); - break; - } - case HOLD: { - _unref_(eis_event) *begin = peck_eis_hold_begin(eis); - munit_assert_int(eis_event_hold_get_finger_count(begin), ==, nfingers); - - _unref_(eis_event) *end = peck_eis_hold_end(eis); - munit_assert_int(eis_event_hold_get_finger_count(end), ==, nfingers); - munit_assert_true(eis_event_hold_get_is_cancelled(end)); - break; - } - } - - peck_assert_no_eis_events(eis); - } - - return MUNIT_OK; -} - -MUNIT_TEST_WITH_PARAMS(test_passive_ei_device_gesture_unref_cancels, - "@gesture", - "swipe", - "pinch", - "hold") -{ - enum gesture_type gesture = gesture_type_from_string(MUNIT_TEST_PARAM("@gesture")); - _unref_(peck) *peck = peck_new_context("mode", PECK_EI_RECEIVER); - const int nfingers = 2; - - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); - peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_GESTURES); - peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); - peck_dispatch_until_stable(peck); - - uint32_t sequence = 123; - - with_server(peck) { - struct eis_device *device = peck_eis_get_default_gestures(peck); - - eis_device_start_emulating(device, sequence); - - switch (gesture) { - case SWIPE: { - struct eis_swipe *swipe = eis_device_swipe_new(device, nfingers); - eis_swipe_begin(swipe); - eis_device_frame(device, peck_eis_now(peck)); - - eis_swipe_update(swipe, 1.1, 2.2); - eis_device_frame(device, peck_eis_now(peck)); - - /* Unref while gesture is still active - should cancel */ - eis_swipe_unref(swipe); - eis_device_frame(device, peck_eis_now(peck)); - break; - } - case PINCH: { - struct eis_pinch *pinch = eis_device_pinch_new(device, nfingers); - eis_pinch_begin(pinch); - eis_device_frame(device, peck_eis_now(peck)); - - eis_pinch_update(pinch, 1.1, 2.2, 3.3, 4.4); - eis_device_frame(device, peck_eis_now(peck)); - - /* Unref while gesture is still active - should cancel */ - eis_pinch_unref(pinch); - eis_device_frame(device, peck_eis_now(peck)); - break; - } - case HOLD: { - struct eis_hold *hold = eis_device_hold_new(device, nfingers); - eis_hold_begin(hold); - eis_device_frame(device, peck_eis_now(peck)); - - /* Unref while gesture is still active - should cancel */ - eis_hold_unref(hold); - eis_device_frame(device, peck_eis_now(peck)); - break; - } - } - } - - peck_dispatch_until_stable(peck); - - with_client(peck) { - _unref_(ei_event) *start = peck_ei_next_event(ei, EI_EVENT_DEVICE_START_EMULATING); - munit_assert_uint(ei_event_emulating_get_sequence(start), ==, sequence); - - switch (gesture) { - case SWIPE: { - _unref_(ei_event) *begin = peck_ei_swipe_begin(ei); - munit_assert_int(ei_event_swipe_get_finger_count(begin), ==, nfingers); - - _unref_(ei_event) *update = peck_ei_swipe_update(ei); - munit_assert_int(ei_event_swipe_get_finger_count(update), ==, nfingers); - - _unref_(ei_event) *end = peck_ei_swipe_end(ei); - munit_assert_int(ei_event_swipe_get_finger_count(end), ==, nfingers); - munit_assert_true(ei_event_swipe_get_is_cancelled(end)); - break; - } - case PINCH: { - _unref_(ei_event) *begin = peck_ei_pinch_begin(ei); - munit_assert_int(ei_event_pinch_get_finger_count(begin), ==, nfingers); - - _unref_(ei_event) *update = peck_ei_pinch_update(ei); - munit_assert_int(ei_event_pinch_get_finger_count(update), ==, nfingers); - - _unref_(ei_event) *end = peck_ei_pinch_end(ei); - munit_assert_int(ei_event_pinch_get_finger_count(end), ==, nfingers); - munit_assert_true(ei_event_pinch_get_is_cancelled(end)); - break; - } - case HOLD: { - _unref_(ei_event) *begin = peck_ei_hold_begin(ei); - munit_assert_int(ei_event_hold_get_finger_count(begin), ==, nfingers); - - _unref_(ei_event) *end = peck_ei_hold_end(ei); - munit_assert_int(ei_event_hold_get_finger_count(end), ==, nfingers); - munit_assert_true(ei_event_hold_get_is_cancelled(end)); - break; - } - } - - peck_assert_no_ei_events(ei); - } - - return MUNIT_OK; -} diff --git a/tools/ei-debug-events.c b/tools/ei-debug-events.c index beb0ca5..be809c6 100644 --- a/tools/ei-debug-events.c +++ b/tools/ei-debug-events.c @@ -332,72 +332,6 @@ print_pong_event(struct ei_event *event) printf(" id: %#" PRIx64 "\n", ei_ping_get_id(ping)); } -static void -print_swipe_event(struct ei_event *event) -{ - print_device(event); - - printf(" fingers: %u\n", ei_event_swipe_get_finger_count(event)); - if (ei_event_get_type(event) == EI_EVENT_SWIPE_UPDATE) - printf(" delta: [%.2f, %.2f]\n", - ei_event_swipe_get_dx(event), - ei_event_swipe_get_dy(event)); - if (ei_event_get_type(event) == EI_EVENT_SWIPE_END) - printf(" cancelled: %s\n", - ei_event_swipe_get_is_cancelled(event) ? "true" : "false"); -} - -static void -print_pinch_event(struct ei_event *event) -{ - print_device(event); - - printf(" fingers: %u\n", ei_event_pinch_get_finger_count(event)); - if (ei_event_get_type(event) == EI_EVENT_PINCH_UPDATE) { - printf(" delta: [%.2f, %.2f]\n", - ei_event_pinch_get_dx(event), - ei_event_pinch_get_dy(event)); - printf(" scale: %.2f\n", ei_event_pinch_get_scale(event)); - printf(" rotation: %.2f\n", ei_event_pinch_get_rotation(event)); - } - if (ei_event_get_type(event) == EI_EVENT_PINCH_END) - printf(" cancelled: %s\n", - ei_event_pinch_get_is_cancelled(event) ? "true" : "false"); -} - -static void -print_hold_event(struct ei_event *event) -{ - print_device(event); - - printf(" fingers: %u\n", ei_event_hold_get_finger_count(event)); - if (ei_event_get_type(event) == EI_EVENT_HOLD_END) - printf(" cancelled: %s\n", - ei_event_hold_get_is_cancelled(event) ? "true" : "false"); -} - -static void -print_gesture_cancel_event(struct ei_event *event) -{ - print_device(event); - const char *type = NULL; - switch (ei_event_get_type(event)) { - case EI_EVENT_PINCH_CANCELLED: - type = "pinch"; - break; - case EI_EVENT_SWIPE_CANCELLED: - type = "swipe"; - break; - case EI_EVENT_HOLD_CANCELLED: - type = "hold"; - break; - default: - abort(); - break; - } - printf(" %s cancelled\n", type); -} - int main(int argc, char **argv) { @@ -568,25 +502,6 @@ main(int argc, char **argv) break; case EI_EVENT_SYNC: break; - case EI_EVENT_SWIPE_BEGIN: - case EI_EVENT_SWIPE_UPDATE: - case EI_EVENT_SWIPE_END: - print_swipe_event(e); - break; - case EI_EVENT_PINCH_BEGIN: - case EI_EVENT_PINCH_UPDATE: - case EI_EVENT_PINCH_END: - print_pinch_event(e); - break; - case EI_EVENT_HOLD_BEGIN: - case EI_EVENT_HOLD_END: - print_hold_event(e); - break; - case EI_EVENT_PINCH_CANCELLED: - case EI_EVENT_SWIPE_CANCELLED: - case EI_EVENT_HOLD_CANCELLED: - print_gesture_cancel_event(e); - break; } } } diff --git a/tools/ei-demo-client.c b/tools/ei-demo-client.c index d289831..b12de52 100644 --- a/tools/ei-demo-client.c +++ b/tools/ei-demo-client.c @@ -305,7 +305,6 @@ main(int argc, char **argv) _unref_(ei_device) *kbd = NULL; _unref_(ei_device) *abs = NULL; _unref_(ei_device) *touch = NULL; - _unref_(ei_device) *gestures = NULL; _unref_(ei_device) *text = NULL; bool stop = false; @@ -313,7 +312,6 @@ main(int argc, char **argv) bool have_kbd = false; bool have_abs = false; bool have_touch = false; - bool have_gestures = false; bool have_text = false; struct ei_seat *default_seat = NULL; @@ -353,7 +351,6 @@ main(int argc, char **argv) EI_DEVICE_CAP_TOUCH, EI_DEVICE_CAP_BUTTON, EI_DEVICE_CAP_SCROLL, - EI_DEVICE_CAP_GESTURES, EI_DEVICE_CAP_TEXT, NULL); break; @@ -391,12 +388,6 @@ main(int argc, char **argv) touch = ei_device_ref(device); handle_regions(device); } - if (ei_device_has_capability(device, EI_DEVICE_CAP_GESTURES)) { - colorprint("New gesture device: %s\n", - ei_device_get_name(device)); - gestures = ei_device_ref(device); - handle_regions(device); - } if (ei_device_has_capability(device, EI_DEVICE_CAP_TEXT)) { colorprint("New text device: %s\n", ei_device_get_name(device)); @@ -428,12 +419,6 @@ main(int argc, char **argv) colorprint("Touch device was resumed\n"); have_touch = true; } - if (ei_event_get_device(e) == gestures) { - if (!receiver) - ei_device_start_emulating(gestures, ++sequence); - colorprint("Gesture device was resumed\n"); - have_gestures = true; - } if (ei_event_get_device(e) == text) { if (!receiver) ei_device_start_emulating(text, ++sequence); @@ -541,50 +526,6 @@ main(int argc, char **argv) case EI_EVENT_SYNC: { colorprint("sync\n"); } break; - case EI_EVENT_SWIPE_BEGIN: { - colorprint("swipe begin: %ufg\n", - ei_event_swipe_get_finger_count(e)); - } break; - case EI_EVENT_SWIPE_UPDATE: { - colorprint("swipe update %.2f/%.2f\n", - ei_event_swipe_get_dx(e), - ei_event_swipe_get_dy(e)); - } break; - case EI_EVENT_SWIPE_END: { - colorprint("swipe end, cancelled: %s\n", - ei_event_swipe_get_is_cancelled(e) ? "true" : "false"); - } break; - case EI_EVENT_PINCH_BEGIN: { - colorprint("pinch begin: %ufg\n", - ei_event_pinch_get_finger_count(e)); - } break; - case EI_EVENT_PINCH_UPDATE: { - colorprint("pinch update %.2f/%.2f rotation: %.2f scale %.2f\n", - ei_event_pinch_get_dx(e), - ei_event_pinch_get_dy(e), - ei_event_pinch_get_rotation(e), - ei_event_pinch_get_scale(e)); - } break; - case EI_EVENT_PINCH_END: { - colorprint("pinch end, cancelled: %s\n", - ei_event_pinch_get_is_cancelled(e) ? "true" : "false"); - } break; - case EI_EVENT_HOLD_BEGIN: { - colorprint("hold begin: %ufg\n", ei_event_hold_get_finger_count(e)); - } break; - case EI_EVENT_HOLD_END: { - colorprint("hold end, cancelled: %s\n", - ei_event_hold_get_is_cancelled(e) ? "true" : "false"); - } break; - case EI_EVENT_SWIPE_CANCELLED: { - colorprint("swipe cancelled by server\n"); - } break; - case EI_EVENT_PINCH_CANCELLED: { - colorprint("pinch cancelled by server\n"); - } break; - case EI_EVENT_HOLD_CANCELLED: { - colorprint("hold cancelled by server\n"); - } break; default: { colorprint("ERROR: Unhandled event type %u (%s)\n", type, @@ -666,80 +607,6 @@ main(int argc, char **argv) } } - if (have_gestures) { - const int nfingers = 3; - static int counter = 0; - static double scale = 1.0; - static struct ei_swipe *swipe = NULL; - static struct ei_pinch *pinch = NULL; - static struct ei_hold *hold = NULL; - - switch (counter++ % 8) { - case 0: - swipe = ei_device_swipe_new(gestures, nfingers); - if (swipe) { - colorprint("sending swipe begin event\n"); - ei_swipe_begin(swipe); - ei_device_frame(gestures, now); - } - break; - case 1: - if (swipe) { - colorprint("sending swipe update event\n"); - ei_swipe_update(swipe, 1.5, 2.3); - ei_device_frame(gestures, now); - } - break; - case 2: - if (swipe) { - colorprint("sending swipe cancel event\n"); - ei_swipe_cancel(swipe); - ei_device_frame(gestures, now); - swipe = ei_swipe_unref(swipe); - } - break; - case 3: - pinch = ei_device_pinch_new(gestures, nfingers); - if (pinch) { - colorprint("sending pinch begin event\n"); - ei_pinch_begin(pinch); - ei_device_frame(gestures, now); - } - break; - case 4: - if (pinch) { - colorprint("sending pinch update event\n"); - ei_pinch_update(pinch, 1.5, 2.3, scale += 0.2, 1.7); - ei_device_frame(gestures, now); - } - break; - case 5: - if (pinch) { - colorprint("sending pinch cancel event\n"); - ei_pinch_cancel(pinch); - ei_device_frame(gestures, now); - pinch = ei_pinch_unref(pinch); - } - break; - case 6: - hold = ei_device_hold_new(gestures, nfingers); - if (hold) { - colorprint("sending hold begin event\n"); - ei_hold_begin(hold); - ei_device_frame(gestures, now); - } - break; - case 7: - if (hold) { - colorprint("sending hold cancel event\n"); - ei_hold_cancel(hold); - ei_device_frame(gestures, now); - hold = ei_hold_unref(hold); - } - break; - } - } - if (have_text) { static int key = 0; colorprint("sending text event\n"); @@ -768,8 +635,6 @@ main(int argc, char **argv) ei_device_close(abs); if (touch) ei_device_close(touch); - if (gestures) - ei_device_close(gestures); if (text) ei_device_close(text); if (default_seat) { diff --git a/tools/eis-demo-server.c b/tools/eis-demo-server.c index afdf445..9cf04ad 100644 --- a/tools/eis-demo-server.c +++ b/tools/eis-demo-server.c @@ -50,8 +50,6 @@ #include #include -#include "libeis.h" - #if HAVE_LIBXKBCOMMON #include #endif @@ -153,10 +151,6 @@ eis_demo_client_destroy(struct eis_demo_client *democlient) eis_device_unref(democlient->abs); eis_device_unref(democlient->kbd); eis_device_unref(democlient->touchscreen); - eis_device_unref(democlient->gestures); - eis_swipe_unref(democlient->swipe); - eis_pinch_unref(democlient->pinch); - eis_hold_unref(democlient->hold); eis_device_unref(democlient->text); } @@ -355,17 +349,6 @@ add_device(struct eis_demo_server *server, case EIS_DEVICE_CAP_SCROLL: /* Mixed in with pointer/abs - good enough for a demo server */ break; - case EIS_DEVICE_CAP_GESTURES: { - struct eis_device *gestures = eis_seat_new_device(seat); - eis_device_configure_name(gestures, "test gestures"); - eis_device_configure_capability(gestures, EIS_DEVICE_CAP_GESTURES); - colorprint("Creating gestures device %s for %s\n", - eis_device_get_name(gestures), - eis_client_get_name(client)); - eis_device_add(gestures); - device = steal(&gestures); - break; - } case EIS_DEVICE_CAP_TEXT: { struct eis_device *text = eis_seat_new_device(seat); eis_device_configure_name(text, "test text device"); @@ -426,7 +409,6 @@ eis_demo_server_printf_handle_event(struct eis_demo_server *server, struct eis_e eis_seat_configure_capability(seat, EIS_DEVICE_CAP_TOUCH); eis_seat_configure_capability(seat, EIS_DEVICE_CAP_BUTTON); eis_seat_configure_capability(seat, EIS_DEVICE_CAP_SCROLL); - eis_seat_configure_capability(seat, EIS_DEVICE_CAP_GESTURES); eis_seat_configure_capability(seat, EIS_DEVICE_CAP_TEXT); eis_seat_add(seat); /* Note: we don't have a ref to this seat ourselves anywhere */ @@ -497,17 +479,6 @@ eis_demo_server_printf_handle_event(struct eis_demo_server *server, struct eis_e } } - if (eis_event_seat_has_capability(e, EIS_DEVICE_CAP_GESTURES)) { - if (!democlient->gestures) - democlient->gestures = - add_device(server, client, seat, EIS_DEVICE_CAP_GESTURES); - } else { - if (democlient->gestures) { - eis_device_remove(democlient->gestures); - democlient->gestures = eis_device_unref(democlient->gestures); - } - } - if (eis_event_seat_has_capability(e, EIS_DEVICE_CAP_TEXT)) { if (!democlient->text) democlient->text = @@ -525,7 +496,6 @@ eis_demo_server_printf_handle_event(struct eis_demo_server *server, struct eis_e !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_POINTER_ABSOLUTE) && !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_KEYBOARD) && !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_TOUCH) && - !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_GESTURES) && !eis_event_seat_has_capability(e, EIS_DEVICE_CAP_TEXT)) eis_seat_remove(seat); @@ -562,9 +532,6 @@ eis_demo_server_printf_handle_event(struct eis_demo_server *server, struct eis_e if (democlient->touchscreen == device) democlient->touchscreen = NULL; - if (democlient->gestures == device) - democlient->gestures = NULL; - if (democlient->text == device) democlient->text = NULL; @@ -619,39 +586,6 @@ eis_demo_server_printf_handle_event(struct eis_demo_server *server, struct eis_e case EIS_EVENT_TOUCH_UP: { colorprint("touch up %u\n", eis_event_touch_get_id(e)); } break; - case EIS_EVENT_SWIPE_BEGIN: { - colorprint("swipe begin: %ufg\n", eis_event_swipe_get_finger_count(e)); - } break; - case EIS_EVENT_SWIPE_UPDATE: { - colorprint("swipe update %.2f/%.2f\n", - eis_event_swipe_get_dx(e), - eis_event_swipe_get_dy(e)); - } break; - case EIS_EVENT_SWIPE_END: { - colorprint("swipe end, cancelled: %s\n", - eis_event_swipe_get_is_cancelled(e) ? "true" : "false"); - } break; - case EIS_EVENT_PINCH_BEGIN: { - colorprint("pinch begin: %ufg\n", eis_event_pinch_get_finger_count(e)); - } break; - case EIS_EVENT_PINCH_UPDATE: { - colorprint("pinch update %.2f/%.2f rotation: %.2f scale %.2f\n", - eis_event_pinch_get_dx(e), - eis_event_pinch_get_dy(e), - eis_event_pinch_get_rotation(e), - eis_event_pinch_get_scale(e)); - } break; - case EIS_EVENT_PINCH_END: { - colorprint("pinch end, cancelled: %s\n", - eis_event_pinch_get_is_cancelled(e) ? "true" : "false"); - } break; - case EIS_EVENT_HOLD_BEGIN: { - colorprint("hold begin: %ufg\n", eis_event_hold_get_finger_count(e)); - } break; - case EIS_EVENT_HOLD_END: { - colorprint("hold end, cancelled: %s\n", - eis_event_hold_get_is_cancelled(e) ? "true" : "false"); - } break; case EIS_EVENT_TEXT_KEYSYM: { char buf[128] = { 0 }; uint32_t keysym = eis_event_text_get_keysym(e); @@ -855,7 +789,6 @@ main(int argc, char **argv) struct eis_device *kbd = democlient->kbd; struct eis_device *abs = democlient->abs; struct eis_device *touchscreen = democlient->touchscreen; - struct eis_device *gestures = democlient->gestures; struct eis_device *text = democlient->text; if (ptr) { colorprint("sending motion event\n"); @@ -929,86 +862,6 @@ main(int argc, char **argv) break; } } - if (gestures) { - const int nfingers = 3; - static int counter = 0; - static double scale = 1.0; - struct eis_swipe *swipe = democlient->swipe; - struct eis_pinch *pinch = democlient->pinch; - struct eis_hold *hold = democlient->hold; - - switch (counter++ % 8) { - case 0: - swipe = eis_device_swipe_new(gestures, nfingers); - if (swipe) { - colorprint("sending swipe begin event\n"); - eis_swipe_begin(swipe); - eis_device_frame(gestures, now); - democlient->swipe = swipe; - } - break; - case 1: - if (swipe) { - colorprint("sending swipe update event\n"); - eis_swipe_update(swipe, 1.5, 2.3); - eis_device_frame(gestures, now); - } - break; - case 2: - if (swipe) { - colorprint("sending swipe cancel event\n"); - eis_swipe_cancel(swipe); - eis_device_frame(gestures, now); - democlient->swipe = eis_swipe_unref(swipe); - } - break; - case 3: - pinch = eis_device_pinch_new(gestures, nfingers); - if (pinch) { - colorprint("sending pinch begin event\n"); - eis_pinch_begin(pinch); - eis_device_frame(gestures, now); - democlient->pinch = pinch; - } - break; - case 4: - if (pinch) { - colorprint("sending pinch update event\n"); - eis_pinch_update(pinch, - 1.5, - 2.3, - scale += 0.2, - 1.7); - eis_device_frame(gestures, now); - } - break; - case 5: - if (pinch) { - colorprint("sending pinch cancel event\n"); - eis_pinch_cancel(pinch); - eis_device_frame(gestures, now); - democlient->pinch = eis_pinch_unref(pinch); - } - break; - case 6: - hold = eis_device_hold_new(gestures, nfingers); - if (hold) { - colorprint("sending hold begin event\n"); - eis_hold_begin(hold); - eis_device_frame(gestures, now); - democlient->hold = hold; - } - break; - case 7: - if (hold) { - colorprint("sending hold cancel event\n"); - eis_hold_cancel(hold); - eis_device_frame(gestures, now); - democlient->hold = eis_hold_unref(hold); - } - break; - } - } if (text) { static int key = 0; diff --git a/tools/eis-demo-server.h b/tools/eis-demo-server.h index 2fcfb03..20057ea 100644 --- a/tools/eis-demo-server.h +++ b/tools/eis-demo-server.h @@ -40,11 +40,7 @@ struct eis_demo_client { struct eis_device *kbd; struct eis_device *abs; struct eis_device *touchscreen; - struct eis_device *gestures; struct eis_touch *touch; - struct eis_swipe *swipe; - struct eis_pinch *pinch; - struct eis_hold *hold; struct eis_device *text; };