From 6cd35b4482dec3063dea4430e8639e89975c1351 Mon Sep 17 00:00:00 2001 From: Shawn Lee Date: Fri, 21 Jun 2013 13:24:43 +0900 Subject: e17 doesn't need to send rotation request same angle already be sent. but in case, rotation has to be updated before receive rotation done, e17 will send rotation request changes angle, again. Change-Id: Ib425bf78107ba363b0286384a2031258d1111f99 --- src/bin/e_border.c | 11 +++++++++-- src/bin/e_border.h | 4 +++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 28cccba..ebcf4b1 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -8052,6 +8052,8 @@ _e_border_rotation_list_flush(Eina_List *list, Eina_Bool flush) EINA_LIST_FOREACH (list, l, info) { if (!info->bd) continue; + if ((info->bd->client.e.state.rot.wait_for_done) && + (info->bd->client.e.state.rot.wait_done_ang == info->ang)) continue; _e_border_event_border_rotation_change_begin_send(info->bd); @@ -8075,7 +8077,8 @@ _e_border_rotation_list_flush(Eina_List *list, Eina_Bool flush) ELBF(ELBT_ROT, 1, 0, "SEND ROT_CHANGE_REQUEST"); ecore_x_e_window_rotation_change_request_send(info->bd->client.win, info->ang); - info->bd->client.e.state.rot.wait_for_done = EINA_TRUE; + info->bd->client.e.state.rot.wait_for_done = 1; + info->bd->client.e.state.rot.wait_done_ang = info->ang; } } @@ -8686,6 +8689,9 @@ _e_border_cb_window_configure(void *data __UNUSED__, ELB(ELBT_BD, "GET CONFIGURE_NOTI (ROTATION)", bd->client.win); bd->client.e.state.rot.pending_change_request = 0; + if ((bd->client.e.state.rot.wait_for_done) && + (bd->client.e.state.rot.wait_done_ang == bd->client.e.state.rot.curr)) goto end; + // if this window is rotation dependent window and zone is blocked to rotate, // then skip here, request will be sent after cancel block. if ((bd->client.e.state.rot.type == E_BORDER_ROTATION_TYPE_DEPENDENT) && @@ -8703,7 +8709,8 @@ _e_border_cb_window_configure(void *data __UNUSED__, bd->w, bd->h); ecore_x_e_window_rotation_change_request_send(bd->client.win, bd->client.e.state.rot.curr); - bd->client.e.state.rot.wait_for_done = EINA_TRUE; + bd->client.e.state.rot.wait_for_done = 1; + bd->client.e.state.rot.wait_done_ang = bd->client.e.state.rot.curr; } } diff --git a/src/bin/e_border.h b/src/bin/e_border.h index 7d7095a..b9073c6 100644 --- a/src/bin/e_border.h +++ b/src/bin/e_border.h @@ -457,7 +457,9 @@ struct _E_Border int preferred_rot; // v1: app specified rotation int *available_rots; // v1: app specified available rotations unsigned int count; // v1: number of elements of available rotations - int changes; // added for precessing rotation in main eval after fetch in eval0. + int changes; // added for precessing rotation in main eval after fetch in eval0. + int wait_done_ang; // the angle that wm wait for done. + // when wait_for_done is set to 1, it's meaningful. } rot; #endif } state; -- cgit v1.2.3