forked from enlightenment/efl
add the missing functions
ecore_x_sync_counter_new() ecore_x_sync_counter_free() ecore_x_sync_counter_inc() ecore_x_sync_counter_val_wait() SVN revision: 49669
This commit is contained in:
parent
5d148e55b1
commit
635ac723f6
|
@ -157,3 +157,70 @@ ecore_x_sync_counter_query(Ecore_X_Sync_Counter counter, unsigned int *val)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EAPI Ecore_X_Sync_Counter
|
||||
ecore_x_sync_counter_new(int val)
|
||||
{
|
||||
#ifdef ECORE_XCB_SYNC
|
||||
xcb_sync_counter_t counter;
|
||||
xcb_sync_int64_t v;
|
||||
|
||||
counter = xcb_generate_id(_ecore_xcb_conn);
|
||||
v.hi = (val < 0) ? ~0 : 0;
|
||||
v.lo = val;
|
||||
xcb_sync_create_counter(_ecore_xcb_conn, counter, v);
|
||||
return counter;
|
||||
#else /* ! ECORE_XCB_SYNC */
|
||||
return 0;
|
||||
#endif /* ! ECORE_XCB_SYNC */
|
||||
}
|
||||
|
||||
EAPI void
|
||||
ecore_x_sync_counter_free(Ecore_X_Sync_Counter counter)
|
||||
{
|
||||
#ifdef ECORE_XCB_SYNC
|
||||
xcb_sync_destroy_counter(_ecore_xcb_conn, counter);
|
||||
#endif /* ECORE_XCB_SYNC */
|
||||
}
|
||||
|
||||
EAPI void
|
||||
ecore_x_sync_counter_inc(Ecore_X_Sync_Counter counter, int by)
|
||||
{
|
||||
#ifdef ECORE_XCB_SYNC
|
||||
xcb_sync_int64_t v;
|
||||
|
||||
v.hi = (by < 0) ? ~0 : 0;
|
||||
v.lo = by;
|
||||
xcb_sync_change_counter(_ecore_xcb_conn, counter, v);
|
||||
#endif /* ECORE_XCB_SYNC */
|
||||
}
|
||||
|
||||
EAPI void
|
||||
ecore_x_sync_counter_val_wait(Ecore_X_Sync_Counter counter, int val)
|
||||
{
|
||||
#ifdef ECORE_XCB_SYNC
|
||||
xcb_sync_query_counter_cookie_t cookie;
|
||||
xcb_sync_query_counter_reply_t *reply;
|
||||
xcb_sync_int64_t v1;
|
||||
xcb_sync_int64_t v2;
|
||||
xcb_sync_waitcondition_t cond;
|
||||
|
||||
/* what's the purpose of that call ?? as the value is erased... */
|
||||
cookie = xcb_sync_query_counter_unchecked(_ecore_xcb_conn, counter);
|
||||
reply = xcb_sync_query_counter_reply(_ecore_xcb_conn, cookie, NULL);
|
||||
v1 = reply->counter_value;
|
||||
free(reply);
|
||||
|
||||
v1.hi = (val < 0) ? ~0 : 0;
|
||||
v1.lo = val;
|
||||
v2.hi = ((val + 1) < 0) ? ~0 : 0;
|
||||
v2.lo = val + 1;
|
||||
cond.trigger.counter = counter;
|
||||
cond.trigger.wait_type = XCB_SYNC_VALUETYPE_ABSOLUTE;
|
||||
cond.trigger.wait_value = v1;
|
||||
cond.trigger.test_type = XCB_SYNC_TESTTYPE_POSITIVE_COMPARISON;
|
||||
cond.event_threshold = v2;
|
||||
|
||||
xcb_sync_await(_ecore_xcb_conn, 1, (const xcb_sync_waitcondition_t *)&cond);
|
||||
#endif /* ECORE_XCB_SYNC */
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue