From 4155a7df00751bec738a08051fe7efad2b2f3e6f Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 31 Mar 2011 08:13:14 +0000 Subject: [PATCH] add new version of efl sync proto between comp and client. SVN revision: 58220 --- .../ecore/src/lib/ecore_evas/ecore_evas_x.c | 28 ++++++++++--------- legacy/ecore/src/lib/ecore_x/Ecore_X.h | 5 ++++ legacy/ecore/src/lib/ecore_x/xlib/ecore_x_e.c | 27 +++++++++++++++++- 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c index 9dfbf6c204..f1d0b54a98 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c @@ -3016,6 +3016,21 @@ _ecore_evas_x_flush_post(void *data, Evas *e __UNUSED__, void *event_info __UNUS { Ecore_Evas *ee = data; + if ((!ee->no_comp_sync) && + (_ecore_evas_app_comp_sync)) + { + if (ee->engine.x.sync_counter) + { + if (ee->engine.x.sync_began) + { + if (!ee->engine.x.sync_cancel) + { + ecore_x_e_comp_sync_draw_size_done_send + (ee->engine.x.win_root, ee->prop.window, ee->w, ee->h); + } + } + } + } if (ee->engine.x.netwm_sync_set) { ecore_x_sync_counter_2_set(ee->engine.x.netwm_sync_counter, @@ -3023,19 +3038,6 @@ _ecore_evas_x_flush_post(void *data, Evas *e __UNUSED__, void *event_info __UNUS ee->engine.x.netwm_sync_val_lo); ee->engine.x.netwm_sync_set = 0; } - if (ee->no_comp_sync) return; - if (!_ecore_evas_app_comp_sync) return; - if (ee->engine.x.sync_counter) - { - if (ee->engine.x.sync_began) - { - if (!ee->engine.x.sync_cancel) - { - ecore_x_e_comp_sync_draw_done_send(ee->engine.x.win_root, - ee->prop.window); - } - } - } } #endif diff --git a/legacy/ecore/src/lib/ecore_x/Ecore_X.h b/legacy/ecore/src/lib/ecore_x/Ecore_X.h index 6c7da9503e..0e21770f8e 100644 --- a/legacy/ecore/src/lib/ecore_x/Ecore_X.h +++ b/legacy/ecore/src/lib/ecore_x/Ecore_X.h @@ -2219,6 +2219,11 @@ EAPI Ecore_X_Sync_Counter ecore_x_e_comp_sync_counter_get( EAPI void ecore_x_e_comp_sync_draw_done_send( Ecore_X_Window root, Ecore_X_Window win); +EAPI void ecore_x_e_comp_sync_draw_size_done_send( + Ecore_X_Window root, + Ecore_X_Window win, + int w, + int h); EAPI void ecore_x_e_comp_sync_supported_set( Ecore_X_Window root, Eina_Bool enabled); diff --git a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_e.c b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_e.c index 81097de253..2f8dd849b8 100644 --- a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_e.c +++ b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_e.c @@ -800,7 +800,7 @@ ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root, Ecore_X_Window win) xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE; xev.xclient.format = 32; xev.xclient.data.l[0] = win; - xev.xclient.data.l[1] = 0; // later + xev.xclient.data.l[1] = 0; // version xev.xclient.data.l[2] = 0; // later xev.xclient.data.l[3] = 0; // later xev.xclient.data.l[4] = 0; // later @@ -810,6 +810,31 @@ ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root, Ecore_X_Window win) &xev); } /* ecore_x_e_comp_sync_draw_done_send */ +EAPI void +ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root, Ecore_X_Window win, int w, int h) +{ + XEvent xev; + + LOGFN(__FILE__, __LINE__, __FUNCTION__); + if (!root) + root = DefaultRootWindow(_ecore_x_disp); + + xev.xclient.type = ClientMessage; + xev.xclient.display = _ecore_x_disp; + xev.xclient.window = win; + xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE; + xev.xclient.format = 32; + xev.xclient.data.l[0] = win; + xev.xclient.data.l[1] = 1; // version + xev.xclient.data.l[2] = w; // win width at draw time + xev.xclient.data.l[3] = h; // win height at draw time + xev.xclient.data.l[4] = 0; // later + + XSendEvent(_ecore_x_disp, root, False, + SubstructureRedirectMask | SubstructureNotifyMask, + &xev); +} /* ecore_x_e_comp_sync_draw_done_send */ + EAPI void ecore_x_e_comp_sync_supported_set(Ecore_X_Window root, Eina_Bool enabled) {