summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Lee <shiin.lee@samsung.com>2013-06-21 13:24:43 +0900
committerShawn Lee <shiin.lee@samsung.com>2013-06-21 16:32:25 +0900
commit6cd35b4482dec3063dea4430e8639e89975c1351 (patch)
tree64b87cd8219a9c5bee99225a06e5f9a3037578e4
parent4dba9613b0e05a00ecb86ebcb56fd534d04cffb1 (diff)
downloade17-6cd35b4482dec3063dea4430e8639e89975c1351.tar.gz
e17-6cd35b4482dec3063dea4430e8639e89975c1351.tar.bz2
e17-6cd35b4482dec3063dea4430e8639e89975c1351.zip
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
-rw-r--r--src/bin/e_border.c11
-rw-r--r--src/bin/e_border.h4
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;