mirror of
https://gitlab.freedesktop.org/libinput/libei.git
synced 2025-12-20 09:10:04 +01:00
eis: add EI_EVENT_SYNC as opaque event to correctly schedule callbacks
This event is required to fix an issue with the current
ei_callback.done handling in libeis: previously we would imediately send
the ei_callback.done upon receiving ei_connection.sync from the client.
This results in incorrect behavior as we may have events in the queue
(and/or pending a frame) that the EIS implementation hasn't seen yet.
For example a client sending:
- ei_pointer.motion
- ei_connection.sync
- ei_device.frame
- ei_connection.sync
Will queue a motion + frame event on the EIS side during eis_dispatch()
but immediately receive done events for both sync requests.
This could be handled purely internally by keeping the sync event in the
queue but hidden to the caller - and automatically calling done when
it's that events turn, i.e. something like:
```
struct eis_event *eis_get_event(struct eis) {
struct eis_event *e = first_event(eis);
if (e == EIS_EVENT_SYNC) {
eis_callback_send_done(e);
eis_event_unref(e);
e = next_event(eis);
}
return e;
}
```
but that opens us up to a set of potential bugs detailed in
https://gitlab.freedesktop.org/libinput/libei/-/issues/71#note_2694603
So let's go the easy route by having a new event type that does nothing
other than eis_event_unref() in the EIS implementation. This way we can
queue the event and have everything behave in-order and as expected.
Closes #71
Part-of: <https://gitlab.freedesktop.org/libinput/libei/-/merge_requests/316>
This commit is contained in:
parent
971013429d
commit
73e0e8d339
12 changed files with 123 additions and 12 deletions
|
|
@ -326,11 +326,9 @@ client_msg_sync(struct eis_connection *connection, object_id_t new_id, uint32_t
|
|||
DISCONNECT_IF_INVALID_ID(client, new_id);
|
||||
DISCONNECT_IF_INVALID_VERSION(client, ei_connection, new_id, version);
|
||||
|
||||
struct eis_callback *callback = eis_callback_new(client, new_id, version);
|
||||
log_debug(eis_client_get_context(client) , "object %#" PRIx64 ": connection sync done", new_id);
|
||||
int rc = eis_callback_event_done(callback, 0);
|
||||
eis_callback_unref(callback);
|
||||
return brei_result_new_from_neg_errno(rc);
|
||||
eis_queue_sync_event(client, new_id, version);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct eis_connection_interface intf_state_new = {
|
||||
|
|
|
|||
|
|
@ -62,6 +62,10 @@ eis_event_destroy(struct eis_event *event)
|
|||
eis_ping_unref(event->pong.ping);
|
||||
handled = true;
|
||||
break;
|
||||
case EIS_EVENT_SYNC:
|
||||
eis_callback_unref(event->sync.callback);
|
||||
handled = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!handled)
|
||||
|
|
|
|||
|
|
@ -66,6 +66,9 @@ struct eis_event {
|
|||
struct {
|
||||
struct eis_ping *ping;
|
||||
} pong;
|
||||
struct {
|
||||
struct eis_callback *callback;
|
||||
} sync;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -95,6 +95,9 @@ eis_queue_disconnect_event(struct eis_client *client);
|
|||
void
|
||||
eis_queue_pong_event(struct eis_client *client, struct eis_ping *ping);
|
||||
|
||||
void
|
||||
eis_queue_sync_event(struct eis_client *client, object_id_t newid, uint32_t version);
|
||||
|
||||
void
|
||||
eis_queue_seat_bind_event(struct eis_seat *seat, uint32_t capabilities);
|
||||
|
||||
|
|
|
|||
30
src/libeis.c
30
src/libeis.c
|
|
@ -44,6 +44,9 @@ _Static_assert(sizeof(enum eis_keymap_type) == sizeof(int), "Invalid enum size")
|
|||
_Static_assert(sizeof(enum eis_event_type) == sizeof(int), "Invalid enum size");
|
||||
_Static_assert(sizeof(enum eis_log_priority) == sizeof(int), "Invalid enum size");
|
||||
|
||||
DEFINE_UNREF_CLEANUP_FUNC(brei_result);
|
||||
DEFINE_UNREF_CLEANUP_FUNC(eis_callback);
|
||||
|
||||
static void
|
||||
eis_destroy(struct eis *eis)
|
||||
{
|
||||
|
|
@ -119,6 +122,7 @@ eis_event_type_to_string(enum eis_event_type type)
|
|||
CASE_RETURN_STRING(EIS_EVENT_SEAT_BIND);
|
||||
CASE_RETURN_STRING(EIS_EVENT_DEVICE_CLOSED);
|
||||
CASE_RETURN_STRING(EIS_EVENT_PONG);
|
||||
CASE_RETURN_STRING(EIS_EVENT_SYNC);
|
||||
CASE_RETURN_STRING(EIS_EVENT_DEVICE_START_EMULATING);
|
||||
CASE_RETURN_STRING(EIS_EVENT_DEVICE_STOP_EMULATING);
|
||||
CASE_RETURN_STRING(EIS_EVENT_POINTER_MOTION);
|
||||
|
|
@ -252,6 +256,15 @@ eis_queue_device_closed_event(struct eis_device *device)
|
|||
eis_queue_event(e);
|
||||
}
|
||||
|
||||
void
|
||||
eis_queue_sync_event(struct eis_client *client, object_id_t newid, uint32_t version)
|
||||
{
|
||||
struct eis_event *e = eis_event_new_for_client(client);
|
||||
e->type = EIS_EVENT_SYNC;
|
||||
e->sync.callback = eis_callback_new(client, newid, version);
|
||||
eis_queue_event(e);
|
||||
}
|
||||
|
||||
void
|
||||
eis_queue_pong_event(struct eis_client *client, struct eis_ping *ping)
|
||||
{
|
||||
|
|
@ -426,6 +439,23 @@ eis_get_event(struct eis *eis)
|
|||
struct eis_event *e = list_first_entry(&eis->event_queue, e, link);
|
||||
list_remove(&e->link);
|
||||
|
||||
if (e->type == EIS_EVENT_SYNC) {
|
||||
_unref_(eis_callback) *callback = steal(&e->sync.callback);
|
||||
log_debug(eis_event_get_context(e) ,
|
||||
"object %#" PRIx64 ": connection sync done",
|
||||
eis_callback_get_id(callback));
|
||||
|
||||
int rc = eis_callback_event_done(callback, 0);
|
||||
_unref_(brei_result) *result = brei_result_new_from_neg_errno(rc);
|
||||
if (result) {
|
||||
log_debug(eis_event_get_context(e), ".... result is %d\n", rc);
|
||||
struct eis_client *client = eis_event_get_client(e);
|
||||
eis_client_disconnect_with_reason(client,
|
||||
brei_result_get_reason(result),
|
||||
brei_result_get_explanation(result));
|
||||
}
|
||||
}
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
|
|
|
|||
14
src/libeis.h
14
src/libeis.h
|
|
@ -276,6 +276,20 @@ enum eis_event_type {
|
|||
*/
|
||||
EIS_EVENT_PONG = 90,
|
||||
|
||||
/**
|
||||
* This event represents a synchronization request (ping) from the client
|
||||
* implementation. The corresponding reply (pong) will be sent when it
|
||||
* is unref'd. It has no other API.
|
||||
*
|
||||
* The caller must ensure that any state changes triggered by messages
|
||||
* received prior to this event have been resolved and communicated to the
|
||||
* client prior to calling eis_event_unref(). E.g., if the preceding frame
|
||||
* included a key event that caused shift to become logically depressed, the
|
||||
* caller should ensure that the updated modifier state has been sent before
|
||||
* calling unref.
|
||||
*/
|
||||
EIS_EVENT_SYNC,
|
||||
|
||||
/**
|
||||
* "Hardware" frame event. This event **must** be sent by the client
|
||||
* and notifies the server that the previous set of events belong to
|
||||
|
|
|
|||
|
|
@ -486,6 +486,7 @@ new_context(enum peck_ei_mode ei_mode)
|
|||
peck->eis = eis;
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_FRAME);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
|
||||
struct ei *ei = ei_mode == PECK_EI_RECEIVER ? ei_new_receiver(peck) : ei_new_sender(peck);
|
||||
ei_set_user_data(ei, peck);
|
||||
|
|
@ -598,6 +599,7 @@ peck_enable_eis_behavior(struct peck *peck, enum peck_eis_behavior behavior)
|
|||
case PECK_EIS_BEHAVIOR_HANDLE_BIND_SEAT:
|
||||
case PECK_EIS_BEHAVIOR_HANDLE_CLOSE_DEVICE:
|
||||
case PECK_EIS_BEHAVIOR_HANDLE_FRAME:
|
||||
case PECK_EIS_BEHAVIOR_HANDLE_SYNC:
|
||||
case PECK_EIS_BEHAVIOR_HANDLE_START_EMULATING:
|
||||
case PECK_EIS_BEHAVIOR_HANDLE_STOP_EMULATING:
|
||||
case PECK_EIS_BEHAVIOR_ADD_POINTER:
|
||||
|
|
@ -620,7 +622,6 @@ peck_enable_eis_behavior(struct peck *peck, enum peck_eis_behavior behavior)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
peck_enable_ei_behavior(struct peck *peck, enum peck_ei_behavior behavior)
|
||||
{
|
||||
|
|
@ -911,6 +912,10 @@ _peck_dispatch_eis(struct peck *peck, int lineno)
|
|||
break;
|
||||
case EIS_EVENT_PONG:
|
||||
break;
|
||||
case EIS_EVENT_SYNC:
|
||||
if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_HANDLE_SYNC))
|
||||
process_event = tristate_yes;
|
||||
break;
|
||||
case EIS_EVENT_FRAME:
|
||||
/* Ensure we only expect frames when we expect them */
|
||||
munit_assert_true(need_frame);
|
||||
|
|
@ -1258,10 +1263,17 @@ _peck_assert_no_eis_events(struct eis *eis, int lineno)
|
|||
if (!e)
|
||||
return;
|
||||
|
||||
if (peck && flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_HANDLE_FRAME) &&
|
||||
eis_event_get_type(e) == EIS_EVENT_FRAME) {
|
||||
log_debug(peck, "Skipping over frame event\n");
|
||||
continue;
|
||||
if (peck) {
|
||||
if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_HANDLE_FRAME) &&
|
||||
eis_event_get_type(e) == EIS_EVENT_FRAME) {
|
||||
log_debug(peck, "Skipping over frame event\n");
|
||||
continue;
|
||||
}
|
||||
if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_HANDLE_SYNC) &&
|
||||
eis_event_get_type(e) == EIS_EVENT_SYNC) {
|
||||
log_debug(peck, "Skipping over sync event\n");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
munit_errorf("Expected empty event queue, have: %s, line %d\n",
|
||||
|
|
@ -1313,6 +1325,14 @@ _peck_eis_next_event(struct eis *eis, enum eis_event_type type, int lineno)
|
|||
}
|
||||
}
|
||||
|
||||
if (flag_is_set(peck->eis_behavior, PECK_EIS_BEHAVIOR_HANDLE_SYNC)) {
|
||||
while (event && eis_event_get_type(event) == EIS_EVENT_SYNC) {
|
||||
eis_event_unref(event);
|
||||
log_debug(peck, "Skipping over sync event\n");
|
||||
event = eis_get_event(eis);
|
||||
}
|
||||
}
|
||||
|
||||
if (!event)
|
||||
munit_errorf("Expected EIS event type %s, got none, line %d\n",
|
||||
peck_eis_event_type_name(type),
|
||||
|
|
@ -1423,6 +1443,7 @@ peck_eis_event_type_name(enum eis_event_type type)
|
|||
CASE_STRING(SEAT_BIND);
|
||||
CASE_STRING(DEVICE_CLOSED);
|
||||
CASE_STRING(PONG);
|
||||
CASE_STRING(SYNC);
|
||||
CASE_STRING(DEVICE_START_EMULATING);
|
||||
CASE_STRING(DEVICE_STOP_EMULATING);
|
||||
CASE_STRING(POINTER_MOTION);
|
||||
|
|
|
|||
|
|
@ -86,6 +86,10 @@ enum peck_eis_behavior {
|
|||
* Handle frame events. This behavior is enabled by default.
|
||||
*/
|
||||
PECK_EIS_BEHAVIOR_HANDLE_FRAME,
|
||||
/**
|
||||
* Handle sync events. This behavior is enabled by default.
|
||||
*/
|
||||
PECK_EIS_BEHAVIOR_HANDLE_SYNC,
|
||||
/**
|
||||
* Handle the start/stop emulation event. This behavior is enabled as part of
|
||||
* PECK_EIS_BEHAVIOR_ACCEPT_ALL.
|
||||
|
|
|
|||
|
|
@ -289,6 +289,7 @@ MUNIT_TEST(test_ei_device_close)
|
|||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_CLIENT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_BIND_SEAT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DEFAULT_SEAT);
|
||||
|
|
@ -909,6 +910,7 @@ MUNIT_TEST(test_ei_device_pointer_abs)
|
|||
|
||||
/* Don't auto-handle the DEVICE_CLOSED event */
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
}
|
||||
|
||||
with_client(peck) {
|
||||
|
|
@ -1541,6 +1543,7 @@ MUNIT_TEST(test_ei_keymap_set)
|
|||
_unref_(eis_keymap) *keymap = NULL;
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_CLIENT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DEFAULT_SEAT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_BIND_SEAT);
|
||||
|
|
@ -1654,6 +1657,7 @@ MUNIT_TEST(test_ei_frame_timestamp)
|
|||
uint64_t ts1 = 0, ts2 = 0;
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_RESUME_DEVICE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_KEYBOARD);
|
||||
|
|
@ -1702,6 +1706,7 @@ MUNIT_TEST(test_ei_no_empty_frames)
|
|||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_RESUME_DEVICE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_KEYBOARD);
|
||||
|
|
@ -1734,6 +1739,7 @@ MUNIT_TEST(test_ei_buffered_frame)
|
|||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_RESUME_DEVICE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_KEYBOARD);
|
||||
|
|
@ -1789,6 +1795,8 @@ MUNIT_TEST(test_ei_flush_frame)
|
|||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_RESUME_DEVICE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_KEYBOARD);
|
||||
|
|
@ -1855,7 +1863,9 @@ MUNIT_TEST(test_passive_ei_device_start_stop_emulating)
|
|||
{
|
||||
_unref_(peck) *peck = peck_new_context(PECK_EI_RECEIVER);
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DEFAULT_SEAT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_CLIENT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_BIND_SEAT);
|
||||
|
|
@ -1894,7 +1904,9 @@ MUNIT_TEST(test_passive_ei_device_stop_emulating_when_removing)
|
|||
{
|
||||
_unref_(peck) *peck = peck_new_context(PECK_EI_RECEIVER);
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DEFAULT_SEAT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_CLIENT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_BIND_SEAT);
|
||||
|
|
@ -2884,6 +2896,7 @@ MUNIT_TEST(test_passive_ei_frame_timestamp)
|
|||
uint64_t ts1 = 0, ts2 = 0;
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_RESUME_DEVICE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_KEYBOARD);
|
||||
|
|
@ -2942,6 +2955,7 @@ MUNIT_TEST(test_passive_ei_flush_frame)
|
|||
_unref_(peck) *peck = peck_new_context(PECK_EI_RECEIVER);
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_RESUME_DEVICE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_KEYBOARD);
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ MUNIT_TEST(test_ei_unref_self_immediately)
|
|||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
/* Disconnect before server processed CONNECT */
|
||||
|
|
@ -98,6 +99,7 @@ MUNIT_TEST(test_ei_disconnect_self_immediately)
|
|||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
/* Disconnect before server processed CONNECT */
|
||||
|
|
@ -159,6 +161,7 @@ MUNIT_TEST(test_ei_unref_self_after_connect)
|
|||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
with_client(peck) {
|
||||
|
|
@ -183,6 +186,7 @@ MUNIT_TEST(test_ei_disconnect_self_after_connect)
|
|||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
with_client(peck) {
|
||||
|
|
@ -260,6 +264,7 @@ MUNIT_TEST(test_ei_disconnect_self_after_seat)
|
|||
}
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
with_server(peck) {
|
||||
|
|
@ -513,6 +518,7 @@ MUNIT_TEST(test_client_is_sender)
|
|||
_unref_(peck) *peck = peck_new_context(PECK_EI_SENDER);
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_NONE);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_HANDLE_CONNECT);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
|
@ -531,6 +537,7 @@ MUNIT_TEST(test_client_is_receiver)
|
|||
_unref_(peck) *peck = peck_new_context(PECK_EI_RECEIVER);
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_NONE);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_HANDLE_CONNECT);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
|
@ -596,6 +603,7 @@ MUNIT_TEST(test_ei_exceed_write_buffer)
|
|||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
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);
|
||||
|
|
@ -681,6 +689,7 @@ MUNIT_TEST(test_ei_exceed_write_buffer_cleanup)
|
|||
struct ei *ei = peck_get_ei(peck);
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
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);
|
||||
|
|
@ -732,6 +741,7 @@ MUNIT_TEST(test_ei_invalid_object_ids)
|
|||
_unref_(eis_device) *dummy = NULL;
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTOSTART);
|
||||
|
|
@ -805,6 +815,7 @@ MUNIT_TEST(test_ei_ping)
|
|||
int userdata = 123;
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_POINTER);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_RESUME_DEVICE);
|
||||
|
|
@ -905,9 +916,11 @@ MUNIT_TEST(test_ei_ping_within_frame)
|
|||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_KEYBOARD);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_RESUME_DEVICE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_NONE);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTOSTART);
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ MUNIT_TEST(eistest_name)
|
|||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_NONE);
|
||||
|
||||
/* The name is set by peck_new() and immutable after the
|
||||
|
|
@ -360,6 +361,7 @@ MUNIT_TEST(test_eis_ping)
|
|||
int userdata = 123;
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_SYNC);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_POINTER);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_RESUME_DEVICE);
|
||||
|
|
|
|||
|
|
@ -551,6 +551,11 @@ eis_demo_server_printf_handle_event(struct eis_demo_server *server,
|
|||
colorprint("pong\n");
|
||||
}
|
||||
break;
|
||||
case EIS_EVENT_SYNC:
|
||||
{
|
||||
colorprint("sync\n");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* This is a demo server and we abort to make it easy to debug
|
||||
* a missing implementation of some new event.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue