#ifdef _F_ZONE_WINDOW_ROTATION_
// newly created window that has to be rotated will be show after rotation done.
// so, skip at this time. it will be called again after GETTING ROT_DONE.
-#if 0
if ((bd->new_client) &&
(bd->client.e.state.rot.changes != -1))
{
- // if this window is in withdrawn state, show this window right now.
+ ELB(ELBT_BD, "PENDING SHOW UNTIL GETTING ROT_DONE", bd->client.win);
+ // if this window is in withdrawn state, set the normal state
// that's because the window in withdrawn state can't render its canvas.
// eventually, this window will not send the message of rotation done,
// even if e17 request to rotation this window.
bd->client.e.state.rot.pending_show = 1;
return;
}
-#endif
if ((e_config->wm_win_rotation) &&
(rot.vkbd_ctrl_win) && (rot.vkbd) &&
(bd == rot.vkbd) &&
_e_border_deiconify_approve_send_pending_end(void *data)
{
E_Border *bd = (E_Border *)data;
+ E_Border *bd_ancestor;
if (e_config->deiconify_approve)
{
ECORE_X_ATOM_E_DEICONIFY_APPROVE,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
bd->client.win, 0, 0, 0, 0);
+ bd_ancestor = bd->client.e.state.deiconify_approve.ancestor;
+ if (bd_ancestor)
+ {
+ bd_ancestor->client.e.state.deiconify_approve.req_list = eina_list_append(bd_ancestor->client.e.state.deiconify_approve.req_list, bd);
+ }
- bd->client.e.state.deiconify_approve.wait_timer = ecore_timer_add(e_config->deiconify_timeout, _e_border_uniconify_timeout, bd);
+ if (!bd->client.e.state.deiconify_approve.wait_timer)
+ bd->client.e.state.deiconify_approve.wait_timer = ecore_timer_add(e_config->deiconify_timeout, _e_border_uniconify_timeout, bd);
}
}
}
_e_border_deiconify_approve_send(child, bd_ancestor, p);
if (child->client.e.state.deiconify_approve.support)
{
- if (p)
+ if (!p)
{
ELBF(ELBT_BD, 0, child->client.win,
"SEND DEICONIFY_APPROVE. ancestor:%x pending(%d,%d)",
ELBF(ELBT_BD, 0, child->client.win,
"SEND DEICONIFY_APPROVE. (PENDING) ancestor:%x",
bd_ancestor->client.win);
+ child->client.e.state.deiconify_approve.ancestor = bd_ancestor;
child->client.e.state.deiconify_approve.pending_job = ecore_job_add(_e_border_deiconify_approve_send_pending_end, child);
}
}
ELB(ELBT_BD, "DEICONIFY_APPROVE WAIT_TIMER is already running", bd->client.win);
return;
}
+
+ if (bd->client.e.state.deiconify_approve.pending_job)
+ {
+ ELB(ELBT_BD, "DEICONIFY_APPROVE PENDING_JOB is already running", bd->client.win);
+ return;
+ }
+
if (bd->client.e.state.deiconify_approve.render_done == 0)
{
ELB(ELBT_BD, "DEICONIFY_APPROVE to all transient", bd->client.win);
if ((zone) && (rot.wait_prepare_done))
{
if (rot.list)
+ _e_border_rotation_change_request(zone);
+ else if (rot.async_list)
{
- _e_border_rotation_change_request(zone);
- if (rot.prepare_timer)
- ecore_timer_del(rot.prepare_timer);
- rot.prepare_timer = NULL;
- rot.wait_prepare_done = EINA_FALSE;
-
+ _e_border_rotation_list_flush(rot.async_list, EINA_TRUE);
+ rot.async_list = NULL;
}
+ if (rot.prepare_timer)
+ ecore_timer_del(rot.prepare_timer);
+ rot.prepare_timer = NULL;
+ rot.wait_prepare_done = EINA_FALSE;
}
}
}
bd->client.e.state.deiconify_approve.wait_timer = NULL;
}
+ if (bd->client.e.state.deiconify_approve.pending_job)
+ {
+ ecore_job_del(bd->client.e.state.deiconify_approve.pending_job);
+ bd->client.e.state.deiconify_approve.pending_job = NULL;
+ }
+
if (bd->client.e.state.deiconify_approve.req_list)
{
EINA_LIST_FREE(bd->client.e.state.deiconify_approve.req_list, child)
{
ecore_timer_del(ancestor_bd->client.e.state.deiconify_approve.wait_timer);
ancestor_bd->client.e.state.deiconify_approve.wait_timer = NULL;
+
+ if (bd->client.e.state.deiconify_approve.wait_timer)
+ {
+ ecore_timer_del(bd->client.e.state.deiconify_approve.wait_timer);
+ bd->client.e.state.deiconify_approve.wait_timer = NULL;
+ }
+
e_border_uniconify(ancestor_bd);
}
else
ancestor_bd->client.e.state.deiconify_approve.render_done = 0;
}
}
+
+ if (bd != ancestor_bd)
+ {
+ if (bd->client.e.state.deiconify_approve.wait_timer)
+ {
+ ecore_timer_del(bd->client.e.state.deiconify_approve.wait_timer);
+ bd->client.e.state.deiconify_approve.wait_timer = NULL;
+ }
+ }
}
}
return ECORE_CALLBACK_PASS_ON;
if ((int)e->data.l[1] == bd->client.e.state.rot.curr)
{
_e_border_rotation_list_remove(bd);
-#if 0
if (bd->client.e.state.rot.pending_show)
{
ELB(ELBT_BD, "SHOW_BD (PEND)", bd->client.win);
e_border_show(bd);
+#ifdef _F_FOCUS_WINDOW_IF_TOP_STACK_
+ if (e_config->focus_setting == E_FOCUS_NEW_WINDOW_IF_TOP_STACK)
+ _e_border_check_stack(bd);
+#endif
bd->client.e.state.rot.pending_show = 0;
}
-#endif
}
}
}
ELB(ELBT_ROT, "FLUSH ASYNC LIST TO ROT_CHANGE_REQ", zone->id);
- _e_border_rotation_list_flush(rot.async_list, EINA_TRUE);
- rot.async_list = NULL;
+ if (!rot.wait_prepare_done)
+ {
+ _e_border_rotation_list_flush(rot.async_list, EINA_TRUE);
+ rot.async_list = NULL;
+ }
end:
// clear async job
{
ELB(ELBT_ROT, "SHOW PEND(TIMEOUT)", info->bd->client.win);
e_border_show(info->bd);
+#ifdef _F_FOCUS_WINDOW_IF_TOP_STACK_
+ if (e_config->focus_setting == E_FOCUS_NEW_WINDOW_IF_TOP_STACK)
+ _e_border_check_stack(info->bd);
+#endif
info->bd->client.e.state.rot.pending_show = 0;
}
info->bd->client.e.state.rot.wait_for_done = 0;
if ((rot.vkbd_ctrl_win) &&
(rot.vkbd == bd) &&
(!e_object_is_del(E_OBJECT(rot.vkbd))) &&
- (rot.vkbd->visible) &&
(rot.vkbd->zone == bd->zone) &&
(E_INTERSECTS(bd->zone->x, bd->zone->y,
bd->zone->w, bd->zone->h,
if (rot_dif < 0) rot_dif = -rot_dif;
if (rot_dif != 180)
{
- if (w != h)
+ if (_w != _h)
{
_w = bd->h;
_h = bd->w;
#ifdef _F_ZONE_WINDOW_ROTATION_
if (e_config->wm_win_rotation)
{
- if (need_rotation_set)
+ if ((need_rotation_set) &&
+ (bd->client.e.state.rot.type == E_BORDER_ROTATION_TYPE_NORMAL))
{
Eina_Bool hint = EINA_FALSE;
int ang = 0;
ELB(ELBT_ROT, "NEED ROT", bd->client.win);
bd->client.e.state.rot.changes = _e_border_rotation_angle_get(bd);
- if (bd->client.e.state.rot.changes != -1)
+ if (bd->client.e.state.rot.changes == -1)
{
- ang = bd->client.e.state.rot.changes;
- bd->changed = 1;
- }
- else ang = bd->client.e.state.rot.curr;
+ ang = bd->client.e.state.rot.curr;
- hint = _e_border_rotation_geom_get(bd, bd->zone, ang, &x, &y, &w, &h, &move);
- if (hint)
- {
- _e_border_move_resize_internal(bd, x, y, w, h, EINA_TRUE, move);
- ELBF(ELBT_ROT, 0, bd->client.win, "RESIZE_BY_HINT name:%s (%d,%d) %dx%d",
- bd->client.icccm.name, x, y, w, h);
+ hint = _e_border_rotation_geom_get(bd, bd->zone, ang, &x, &y, &w, &h, &move);
+ if (hint)
+ {
+ _e_border_move_resize_internal(bd, x, y, w, h, EINA_TRUE, move);
+ ELBF(ELBT_ROT, 0, bd->client.win, "RESIZE_BY_HINT name:%s (%d,%d) %dx%d",
+ bd->client.icccm.name, x, y, w, h);
+ }
}
+ else bd->changed = 1;
}
}
#endif