Enlightenment CVS committal Author : sebastid Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_x Modified Files: Ecore_X.h Ecore_X_Atoms.h ecore_x_events.c ecore_x_netwm.c ecore_x_sync.c Log Message: XSync and netwm sync. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v retrieving revision 1.133 retrieving revision 1.134 diff -u -3 -r1.133 -r1.134 --- Ecore_X.h 6 Jun 2005 09:40:00 -0000 1.133 +++ Ecore_X.h 6 Jun 2005 15:04:28 -0000 1.134 @@ -46,6 +46,8 @@ typedef Ecore_X_ID Ecore_X_Time; typedef Ecore_X_ID Ecore_X_Cursor; typedef void Ecore_X_Display; +typedef Ecore_X_ID Ecore_X_Sync_Counter; +typedef Ecore_X_ID Ecore_X_Sync_Alarm; #ifdef __cplusplus extern "C" { @@ -631,7 +633,8 @@ struct _Ecore_X_Event_Sync_Alarm { - Ecore_X_Time time; + Ecore_X_Time time; + Ecore_X_Sync_Alarm alarm; }; struct _Ecore_X_Event_Window_Delete_Request @@ -1242,7 +1245,6 @@ EAPI int ecore_x_netwm_icon_get(Ecore_X_Window win, int *width, int *height, unsigned int **data, int *num); EAPI void ecore_x_netwm_icon_geometry_set(Ecore_X_Window win, int x, int y, int width, int height); EAPI int ecore_x_netwm_icon_geometry_get(Ecore_X_Window win, int *x, int *y, int *width, int *height); -EAPI void ecore_x_netwm_ping(Ecore_X_Window win); EAPI void ecore_x_netwm_pid_set(Ecore_X_Window win, int pid); EAPI int ecore_x_netwm_pid_get(Ecore_X_Window win, int *pid); EAPI void ecore_x_netwm_handled_icons_set(Ecore_X_Window win); @@ -1263,6 +1265,11 @@ EAPI int ecore_x_netwm_opacity_get(Ecore_X_Window win, unsigned int *opacity); EAPI void ecore_x_netwm_frame_size_set(Ecore_X_Window win, int fl, int fr, int ft, int fb); EAPI int ecore_x_netwm_frame_size_get(Ecore_X_Window win, int *fl, int *fr, int *ft, int *fb); +EAPI void ecore_x_netwm_ping(Ecore_X_Window win); +EAPI int ecore_x_netwm_sync_counter_get(Ecore_X_Window win, Ecore_X_Sync_Counter *counter); +EAPI void ecore_x_netwm_sync_request_send(Ecore_X_Window win, unsigned int serial); + + EAPI void ecore_x_e_init(void); EAPI void ecore_x_e_frame_size_set(Ecore_X_Window win, int fl, int fr, int ft, int fb); @@ -1344,6 +1351,10 @@ EAPI void ecore_x_pointer_last_xy_get(int *x, int *y); EAPI void ecore_x_pointer_xy_get(Ecore_X_Window win, int *x, int *y); +/* ecore_x_sync.c */ +EAPI Ecore_X_Sync_Alarm ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter); +EAPI int ecore_x_sync_alarm_free(Ecore_X_Sync_Alarm alarm); + #ifdef __cplusplus } #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Ecore_X_Atoms.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- Ecore_X_Atoms.h 28 May 2005 12:49:40 -0000 1.9 +++ Ecore_X_Atoms.h 6 Jun 2005 15:04:28 -0000 1.10 @@ -121,6 +121,7 @@ extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_PING; extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_SYNC_REQUEST; +extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER; /* Selections */ extern Ecore_X_Atom ECORE_X_ATOM_SELECTION_TARGETS; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c,v retrieving revision 1.63 retrieving revision 1.64 diff -u -3 -r1.63 -r1.64 --- ecore_x_events.c 6 Jun 2005 09:40:00 -0000 1.63 +++ ecore_x_events.c 6 Jun 2005 15:04:28 -0000 1.64 @@ -1535,10 +1535,12 @@ { XSyncAlarmNotifyEvent *sync_alarm_event; Ecore_X_Event_Sync_Alarm *e; - + sync_alarm_event = (XSyncAlarmNotifyEvent *)xevent; + e = calloc(1, sizeof(Ecore_X_Event_Sync_Alarm)); if (!e) return; e->time = sync_alarm_event->time; + e->alarm = sync_alarm_event->alarm; ecore_event_add(ECORE_X_EVENT_SYNC_ALARM, e, NULL, NULL); } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_netwm.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -3 -r1.32 -r1.33 --- ecore_x_netwm.c 5 Jun 2005 14:38:42 -0000 1.32 +++ ecore_x_netwm.c 6 Jun 2005 15:04:28 -0000 1.33 @@ -268,6 +268,7 @@ Ecore_X_Atom ECORE_X_ATOM_NET_WM_PING = 0; Ecore_X_Atom ECORE_X_ATOM_NET_WM_SYNC_REQUEST = 0; +Ecore_X_Atom ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER = 0; void ecore_x_netwm_init(void) @@ -363,6 +364,7 @@ ECORE_X_ATOM_NET_WM_PING = _ATOM_GET("_NET_WM_PING"); ECORE_X_ATOM_NET_WM_SYNC_REQUEST = _ATOM_GET("_NET_WM_SYNC_REQUEST"); + ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER = _ATOM_GET("_NET_WM_SYNC_REQUEST_COUNTER"); } /* @@ -1330,3 +1332,38 @@ XSendEvent(_ecore_x_disp, win, False, NoEventMask, &xev); } + +int +ecore_x_netwm_sync_counter_get(Ecore_X_Window win, Ecore_X_Sync_Counter *counter) +{ + int ret; + unsigned int tmp; + + ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER, + &tmp, 1); + + if (counter) *counter = tmp; + return ret == 1 ? 1 : 0; +} + +void +ecore_x_netwm_sync_request_send(Ecore_X_Window win, unsigned int serial) +{ + XSyncValue value; + XEvent xev; + + XSyncIntToValue(&value, serial); + + xev.xclient.type = ClientMessage; + xev.xclient.display = _ecore_x_disp; + xev.xclient.window = win; + xev.xclient.message_type = ECORE_X_ATOM_WM_PROTOCOLS; + xev.xclient.format = 32; + xev.xclient.data.l[0] = ECORE_X_ATOM_NET_WM_SYNC_REQUEST; + xev.xclient.data.l[1] = CurrentTime; + xev.xclient.data.l[2] = XSyncValueLow32(value); + xev.xclient.data.l[3] = XSyncValueHigh32(value); + xev.xclient.data.l[4] = 0; + + XSendEvent(_ecore_x_disp, win, False, 0, &xev); +} =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_sync.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- ecore_x_sync.c 6 Jun 2005 09:40:00 -0000 1.1 +++ ecore_x_sync.c 6 Jun 2005 15:04:28 -0000 1.2 @@ -9,3 +9,40 @@ #include "Ecore_X.h" #include "Ecore_X_Atoms.h" +Ecore_X_Sync_Alarm +ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter) +{ + Ecore_X_Sync_Alarm alarm; + XSyncAlarmAttributes values; + XSyncValue init; + + XSyncIntToValue(&init, 0); + XSyncSetCounter(_ecore_x_disp, counter, init); + + values.trigger.counter = counter; + values.trigger.value_type = XSyncAbsolute; + XSyncIntToValue(&values.trigger.wait_value, 1); + values.trigger.test_type = XSyncPositiveComparison; + + XSyncIntToValue(&values.delta, 1); + + values.events = True; + + alarm = XSyncCreateAlarm(_ecore_x_disp, + XSyncCACounter | + XSyncCAValueType | + XSyncCAValue | + XSyncCATestType | + XSyncCADelta | + XSyncCAEvents, + &values); + + ecore_x_sync(); + return alarm; +} + +int +ecore_x_sync_alarm_free(Ecore_X_Sync_Alarm alarm) +{ + return XSyncDestroyAlarm(_ecore_x_disp, alarm); +} ------------------------------------------------------- This SF.Net email is sponsored by: NEC IT Guy Games. How far can you shotput a projector? How fast can you ride your desk chair down the office luge track? If you want to score the big prize, get to know the little guy. Play to win an NEC 61" plasma display: http://www.necitguy.com/?r=20 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs