_effect_above_wins_set(cw, EINA_TRUE);
}
}
- /* don't need to check visibility for home window by home key */
+ /* in most cases, border show events of home window are generated
+ * by pressing the h/w home button. at that moment, home window
+ * is invisible thus the wm doesn't need to check visibility for
+ * home window. just make app closing effect except lock and
+ * setup wizard window.
+ */
else if (TYPE_HOME_CHECK(cw))
{
- /* app window hide effect by pressing the home key */
+ /* app window hide effect by pressing the h/w home button */
cw2 = e_mod_comp_util_win_normal_get(NULL);
if (cw2)
{
+ /* do nothing, if cw2 is such exceptional windows as lock
+ * and setup wizard window. this case usually happens when
+ * system is booting. (first show of the home window)
+ */
+ res = e_mod_comp_policy_home_app_win_check(cw2);
+
ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
- "%15.15s|>BG HOME 0x%08x FG 0x%08x", "EFFECT",
+ "%15.15s|>BG HOME 0x%08x FG 0x%08x SKIP:%d", "EFFECT",
e_mod_comp_util_client_xid_get(cw),
- e_mod_comp_util_client_xid_get(cw2));
+ e_mod_comp_util_client_xid_get(cw2),
+ !(res));
+
+ E_CHECK(res);
/* background is home */
_MAKE_EMISSION("e,state,visible,on,noeffect");
*/
E_Border *bd = e_border_focused_get();
E_Border *_bd = NULL;
- E_Comp_Win *cw = NULL, *cw2 = NULL;
+ E_Comp_Win *cw = NULL, *cw2 = NULL, *cw3 = NULL;
if (bd)
{
cw = e_mod_comp_win_find(bd->win);
if (!REGION_EQUAL_TO_ZONE(cw, bd->zone))
{
cw2 = e_mod_comp_util_win_normal_get(cw);
- if ((cw2) && (cw2->bd)) _bd = cw2->bd;
+ if ((cw2) && (cw2->bd))
+ {
+ _bd = cw2->bd;
+ cw3 = cw2;
+ }
}
else
- _bd = bd;
+ {
+ _bd = bd;
+ cw3 = cw;
+ }
+
+ if (cw3)
+ {
+ if (TYPE_LOCKSCREEN_CHECK(cw3) ||
+ TYPE_HOME_CHECK(cw3))
+ {
+ ELB(ELBT_COMP, "SKIP ROT_EFFECT",
+ e_mod_comp_util_client_xid_get(cw3));
+ return EINA_FALSE;
+ }
+ }
if (_bd)
{
ELB(ELBT_COMP, "SKIP VIDEO PLAYER", _bd->client.win);
return EINA_FALSE;
}
- if ((!strcmp(_bd->client.icccm.name, "LOCK_SCREEN")) &&
- (!strcmp(_bd->client.icccm.class, "LOCK_SCREEN")))
- {
- ELB(ELBT_COMP, "SKIP LOCK_SCREEN", _bd->client.win);
- return EINA_FALSE;
- }
}
}
}
#include "e_mod_comp_policy.h"
/* local subsystem functions */
-static E_Comp_Win *_transient_parent_find(E_Comp_Win *cw);
/* local subsystem globals */
static Eina_Hash *shadow_hash = NULL;
eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_BACKGROUND), "no-effect" );
eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_ISF_KEYBOARD), "keyboard" );
eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_ISF_SUB), "no-effect" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_SETUP_WIZARD), "no-effect" );
return 1;
}
return EINA_FALSE;
}
-EINTERN Eina_Bool
-e_mod_comp_policy_win_restack_check(E_Comp_Win *cw,
- E_Comp_Win *cw2)
+EINTERN char *
+e_mod_comp_policy_win_shadow_group_get(E_Comp_Win *cw)
{
- E_Comp_Effect_Style st;
- Eina_Bool animatable;
E_Comp_Win_Type type;
- E_Comp_Win *tp, *tp2;
-
E_CHECK_RETURN(cw, 0);
- E_CHECK_RETURN(cw2, 0);
- E_CHECK_RETURN(cw->c, 0);
-
type = e_mod_comp_win_type_get(cw);
- animatable = e_mod_comp_effect_state_get(cw->eff_type);
- st = e_mod_comp_effect_style_get
- (cw->eff_type,
- E_COMP_EFFECT_KIND_RESTACK);
-
- if ((!cw->c->animatable) ||
- (!cw->visible) ||
- (!animatable) ||
- (st == E_COMP_EFFECT_STYLE_NONE) ||
- (!REGION_EQUAL_TO_ROOT(cw)))
- {
- return EINA_FALSE;
- }
-
- tp = _transient_parent_find(cw);
- tp2 = _transient_parent_find(cw2);
- if ((tp) && (tp2) && (tp->win == tp2->win))
- {
- return EINA_FALSE;
- }
-
- if ((type == E_COMP_WIN_TYPE_NORMAL) ||
- (type == E_COMP_WIN_TYPE_MENUSCREEN) ||
- (type == E_COMP_WIN_TYPE_TASKMANAGER) ||
- (type == E_COMP_WIN_TYPE_LIVEMAGAZINE))
- {
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
+ return eina_hash_find(shadow_hash, e_util_winid_str_get(type));
}
+/* when receiving border show event for the home window,
+ * check before running app closing effect for given normal window.
+ * exceptional windows: lock, setup wizard
+ * otherwise: do app closing effect
+ */
EINTERN Eina_Bool
-e_mod_comp_policy_win_lower_check(E_Comp_Win *cw,
- E_Comp_Win *cw2)
+e_mod_comp_policy_home_app_win_check(E_Comp_Win *cw)
{
- E_Comp_Effect_Style st1, st2;
- Eina_Bool animatable1, animatable2;
- E_Comp_Win *tp, *tp2;
-
- E_CHECK_RETURN(cw, 0);
- E_CHECK_RETURN(cw2, 0);
- E_CHECK_RETURN(cw->c, 0);
- E_CHECK_RETURN(cw->c->animatable, 0);
- E_CHECK_RETURN(cw->visible, 0);
- E_CHECK_RETURN(cw2->visible, 0);
- if (!REGION_EQUAL_TO_ROOT(cw)) return EINA_FALSE;
- if (!REGION_EQUAL_TO_ROOT(cw2)) return EINA_FALSE;
-
- animatable1 = e_mod_comp_effect_state_get(cw->eff_type);
- animatable2 = e_mod_comp_effect_state_get(cw2->eff_type);
- E_CHECK_RETURN(animatable1, 0);
- E_CHECK_RETURN(animatable2, 0);
-
- if ((!TYPE_NORMAL_CHECK(cw)) &&
- (!TYPE_NORMAL_CHECK(cw2)))
- {
- return EINA_FALSE;
- }
-
- if ((!TYPE_NORMAL_CHECK(cw)) &&
- (!TYPE_HOME_CHECK(cw2)))
- {
- return EINA_FALSE;
- }
+ E_CHECK_RETURN(cw, EINA_FALSE);
- st1 = e_mod_comp_effect_style_get
- (cw->eff_type, E_COMP_EFFECT_KIND_RESTACK);
- st2 = e_mod_comp_effect_style_get
- (cw2->eff_type, E_COMP_EFFECT_KIND_RESTACK);
- E_CHECK_RETURN((st1 != E_COMP_EFFECT_STYLE_NONE), 0);
- E_CHECK_RETURN((st2 != E_COMP_EFFECT_STYLE_NONE), 0);
-
- tp = _transient_parent_find(cw);
- tp2 = _transient_parent_find(cw2);
- if ((tp) && (tp2) && (tp->win == tp2->win))
+ if (TYPE_LOCKSCREEN_CHECK(cw) ||
+ TYPE_SETUP_WIZARD_CHECK(cw))
{
return EINA_FALSE;
}
return EINA_TRUE;
}
-EINTERN Eina_Bool
-e_mod_comp_policy_win_rotation_effect_check(E_Comp_Win *cw)
-{
- E_Comp_Effect_Style st;
- Eina_Bool animatable;
- const char *file, *group;
- E_Comp_Object *co;
-
- E_CHECK_RETURN(cw, 0);
- E_CHECK_RETURN(cw->c, 0);
- E_CHECK_RETURN(cw->c->animatable, 0);
- E_CHECK_RETURN(cw->visible, 0);
- E_CHECK_RETURN(cw->bd, 0);
- E_CHECK_RETURN(cw->objs, 0);
-
- animatable = e_mod_comp_effect_state_get(cw->eff_type);
- E_CHECK_RETURN(animatable, 0);
-
- co = eina_list_data_get(cw->objs);
- E_CHECK_RETURN(co, 0);
-
- edje_object_file_get(co->shadow, &file, &group);
- if ((strcmp(group, "shadow_fade") != 0) &&
- (strcmp(group, "shadow_twist") !=0))
- {
- return EINA_FALSE;
- }
-
- st = e_mod_comp_effect_style_get
- (cw->eff_type,
- E_COMP_EFFECT_KIND_ROTATION);
- if (st == E_COMP_EFFECT_STYLE_NONE)
- return EINA_FALSE;
-
- if ((e_mod_comp_util_win_visible_get(cw)) &&
- (evas_object_visible_get(co->shadow)) &&
- TYPE_NORMAL_CHECK(cw))
- {
- return EINA_TRUE;
- }
- return EINA_FALSE;
-}
-
-EINTERN char *
-e_mod_comp_policy_win_shadow_group_get(E_Comp_Win *cw)
-{
- E_Comp_Win_Type type;
- E_CHECK_RETURN(cw, 0);
- type = e_mod_comp_win_type_get(cw);
- return eina_hash_find(shadow_hash, e_util_winid_str_get(type));
-}
-
/* local subsystem functions */
-static E_Comp_Win *
-_transient_parent_find(E_Comp_Win *cw)
-{
- // if Border is not existed then, return itself.
- // otherwise, return itself or parent.
- Ecore_X_Window transient_parent;
- E_Comp_Win *parent_cw = NULL;
- E_Border *bd = NULL;
- if (cw->bd)
- {
- bd = cw->bd;
- do {
- transient_parent = bd->win;
- bd = bd->parent;
- } while (bd);
-
- parent_cw = e_mod_comp_win_find(transient_parent);
- return parent_cw;
- }
- return cw;
-}
EINTERN int e_mod_comp_policy_init(void);
EINTERN int e_mod_comp_policy_shutdown(void);
EINTERN Eina_Bool e_mod_comp_policy_app_launch_check(E_Comp_Win *cw);
-EINTERN Eina_Bool e_mod_comp_policy_app_close_check (E_Comp_Win *cw);
-EINTERN Eina_Bool e_mod_comp_policy_win_restack_check(E_Comp_Win *cw, E_Comp_Win *cw2);
-EINTERN Eina_Bool e_mod_comp_policy_win_lower_check(E_Comp_Win *cw, E_Comp_Win *cw2);
-EINTERN Eina_Bool e_mod_comp_policy_win_rotation_effect_check(E_Comp_Win *cw);
+EINTERN Eina_Bool e_mod_comp_policy_app_close_check(E_Comp_Win *cw);
EINTERN char *e_mod_comp_policy_win_shadow_group_get(E_Comp_Win *cw);
+EINTERN Eina_Bool e_mod_comp_policy_home_app_win_check(E_Comp_Win *cw);
#endif
#endif
E_COMP_WIN_CLASS_TYPE_MINI_APPTRAY,
E_COMP_WIN_CLASS_TYPE_VOLUME,
E_COMP_WIN_CLASS_TYPE_BACKGROUND,
+ E_COMP_WIN_CLASS_TYPE_SETUP_WIZARD,
E_COMP_WIN_CLASS_TYPE_ISF,
} E_Comp_Win_Class_Type;
E_COMP_WIN_NAME_TYPE_MINI_APPTRAY,
E_COMP_WIN_NAME_TYPE_VOLUME,
E_COMP_WIN_NAME_TYPE_BACKGROUND,
+ E_COMP_WIN_NAME_TYPE_SETUP_WIZARD,
E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD,
E_COMP_WIN_NAME_TYPE_ISF_SUB,
} E_Comp_Win_Name_Type;
"MINIAPP_TRAY",
"volume",
"BACKGROUND",
+ "SETUP_WIZARD",
"ISF",
};
"MINIAPP_TRAY",
"volume",
"BACKGROUND",
+ "SETUP_WIZARD",
// E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD
"Virtual Keyboard",
// E_COMP_WIN_NAME_TYPE_ISF_SUB
E_COMP_WIN_CLASS_TYPE_MINI_APPTRAY,
E_COMP_WIN_CLASS_TYPE_VOLUME,
E_COMP_WIN_CLASS_TYPE_BACKGROUND,
- E_COMP_WIN_CLASS_TYPE_ISF
+ E_COMP_WIN_CLASS_TYPE_SETUP_WIZARD,
+ E_COMP_WIN_CLASS_TYPE_ISF,
};
static E_Comp_Win_Class_Type win_name_vals[] =
E_COMP_WIN_NAME_TYPE_MINI_APPTRAY,
E_COMP_WIN_NAME_TYPE_VOLUME,
E_COMP_WIN_NAME_TYPE_BACKGROUND,
+ E_COMP_WIN_NAME_TYPE_SETUP_WIZARD,
E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD,
- E_COMP_WIN_NAME_TYPE_ISF_SUB
+ E_COMP_WIN_NAME_TYPE_ISF_SUB,
};
static Eina_Hash *class_hash = NULL;
if (ntype == E_COMP_WIN_NAME_TYPE_BACKGROUND)
res = E_COMP_WIN_TYPE_BACKGROUND;
break;
+ case E_COMP_WIN_CLASS_TYPE_SETUP_WIZARD:
+ if (ntype == E_COMP_WIN_NAME_TYPE_SETUP_WIZARD)
+ res = E_COMP_WIN_TYPE_SETUP_WIZARD;
+ break;
default:
break;
}
#define TYPE_MINI_APPTRAY_CHECK(a) \
((a)->win_type == E_COMP_WIN_TYPE_MINI_APPTRAY)
+#define TYPE_LOCKSCREEN_CHECK(a) \
+ ((a)->win_type == E_COMP_WIN_TYPE_LOCKSCREEN)
+
+#define TYPE_SETUP_WIZARD_CHECK(a) \
+ ((a)->win_type == E_COMP_WIN_TYPE_SETUP_WIZARD)
+
typedef enum _E_Comp_Win_Type
{
E_COMP_WIN_TYPE_UNKNOWN = 0,
E_COMP_WIN_TYPE_MINI_APPTRAY,
E_COMP_WIN_TYPE_VOLUME,
E_COMP_WIN_TYPE_BACKGROUND,
+ E_COMP_WIN_TYPE_SETUP_WIZARD,
E_COMP_WIN_TYPE_ISF_KEYBOARD,
E_COMP_WIN_TYPE_ISF_SUB,
} E_Comp_Win_Type;
group
{
- images.image: "RB0_resize.png" COMP;
- images.image: "RB0_resize_notAvail.png" COMP;
+ images.image: "mw_frame_press.png" COMP;
+ images.image: "mw_frame_press_overscroll.png" COMP;
name: "new_shadow";
max: 720 720;
parts
description
{
state: "default" 0;
- image.normal: "RB0_resize.png";
+ image.normal: "mw_frame_press.png";
image.border: 5 5 5 5;
image.middle: NONE;
}
description
{
state: "not_avail" 0;
- image.normal: "RB0_resize_notAvail.png";
+ image.normal: "mw_frame_press_overscroll.png";
image.border: 5 5 5 5;
}
}
{
border = ft_bd->bd;
if (!border) continue;
+ if (e_object_is_del(E_OBJECT(border))) continue;
/* Build a list of windows not iconified. */
if ((!border->iconic) && (!border->lock_user_location))
{
EINA_LIST_FREE(borders, border)
{
int new_x, new_y;
-
+ if (e_object_is_del(E_OBJECT(border))) continue;
e_place_zone_region_smart(border->zone, borders, border->x, border->y,
border->w, border->h, &new_x, &new_y);
e_border_move(border, new_x, new_y);
static void _policy_border_uniconify_top_border(E_Border *bd);
/* for supporting rotation */
-static void _policy_border_dependent_rotation(E_Border *bd);
+static void _policy_border_dependent_rotation(E_Border *bd, int rotation);
static Eina_Bool _policy_dependent_rotation_check(E_Border *bd, int rotation);
static int _prev_angle_get(Ecore_X_Window win);
if (e_illume_border_is_quickpanel(bd) ||
e_illume_border_is_miniapp_tray(bd) ||
(bd->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_FLOATING) ||
- e_illume_border_is_syspopup(bd))
+ e_illume_border_is_syspopup(bd) ||
+ e_illume_border_is_app_selector(bd))
dep_rot.list = eina_list_remove(dep_rot.list, bd);
}
if (e_illume_border_is_quickpanel(bd) ||
e_illume_border_is_miniapp_tray(bd) ||
(bd->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_FLOATING) ||
- e_illume_border_is_syspopup(bd))
+ e_illume_border_is_syspopup(bd) ||
+ e_illume_border_is_app_selector(bd))
{
bd->client.e.state.rot.type = E_BORDER_ROTATION_TYPE_DEPENDENT;
if (!eina_list_data_find(dep_rot.list, bd))
if (ang == -1) ang = 0;
if (dep_rot.ang != ang)
- _policy_border_dependent_rotation(bd);
+ _policy_border_dependent_rotation(bd, ang);
}
}
void
_policy_border_hook_rotation_list_add(E_Border *bd)
{
- _policy_border_dependent_rotation(bd);
+ int rotation = 0;
+ if (!bd) return;
+
+ rotation = bd->client.e.state.rot.curr;
+ _policy_border_dependent_rotation(bd, rotation);
}
static void
-_policy_border_dependent_rotation(E_Border *bd)
+_policy_border_dependent_rotation(E_Border *bd, int rotation)
{
Eina_List *l;
E_Border *dep_bd = NULL;
- int rotation = 0;
if (!bd) return;
if (!dep_rot.list) return;
if (dep_rot.refer.active_win != bd->client.win) return;
- rotation = bd->client.e.state.rot.curr;
EINA_LIST_FOREACH(dep_rot.list, l, dep_bd)
{
if (!dep_bd) continue;
{
ELBF(ELBT_ROT, 0, dep_bd->client.win, "ROT_SET ANG [%d -> %d]",
dep_bd->client.e.state.rot.curr, rotation);
- dep_rot.ang = rotation;
e_border_rotation_set(dep_bd, rotation);
}
}
+ dep_rot.ang = rotation;
}
static Eina_Bool
{
Ecore_X_Window active_win = 0;
E_Border *bd = NULL;
+ int rotation = 0;
if (!event) return;
bd->client.icccm.name ? bd->client.icccm.name : "",
active_win);
dep_rot.refer.active_win = active_win;
- dep_rot.ang = bd->client.e.state.rot.curr;
+ rotation = bd->client.e.state.rot.curr;
- _policy_border_dependent_rotation(bd);
+ _policy_border_dependent_rotation(bd, rotation);
}
}
}
E_MOVE_BORDER_CLASS_TYPE_APPTRAY,
E_MOVE_BORDER_CLASS_TYPE_MINI_APPTRAY,
E_MOVE_BORDER_CLASS_TYPE_SETUP_WIZARD,
+ E_MOVE_BORDER_CLASS_TYPE_APP_SELECTOR,
E_MOVE_BORDER_CLASS_TYPE_PWLOCK,
E_MOVE_BORDER_CLASS_TYPE_BACKGROUND,
E_MOVE_BORDER_CLASS_TYPE_ISF,
E_MOVE_BORDER_NAME_TYPE_APPTRAY,
E_MOVE_BORDER_NAME_TYPE_MINI_APPTRAY,
E_MOVE_BORDER_NAME_TYPE_SETUP_WIZARD,
+ E_MOVE_BORDER_NAME_TYPE_APP_SELECTOR,
E_MOVE_BORDER_NAME_TYPE_PWLOCK,
E_MOVE_BORDER_NAME_TYPE_BACKGROUND,
E_MOVE_BORDER_NAME_TYPE_ISF_KEYBOARD,
"APP_TRAY",
"MINIAPP_TRAY",
"SETUP_WIZARD",
+ "APP_SELECTOR",
//"PW_LOCK",
"pwlock",
"BACKGROUND",
"APP_TRAY",
"MINIAPP_TRAY",
"SETUP_WIZARD",
+ "APP_SELECTOR",
//"PW_LOCK",
"pwlock",
"BACKGROUND",
E_MOVE_BORDER_CLASS_TYPE_APPTRAY,
E_MOVE_BORDER_CLASS_TYPE_MINI_APPTRAY,
E_MOVE_BORDER_CLASS_TYPE_SETUP_WIZARD,
+ E_MOVE_BORDER_CLASS_TYPE_APP_SELECTOR,
E_MOVE_BORDER_CLASS_TYPE_PWLOCK,
E_MOVE_BORDER_CLASS_TYPE_BACKGROUND,
E_MOVE_BORDER_CLASS_TYPE_ISF
E_MOVE_BORDER_NAME_TYPE_APPTRAY,
E_MOVE_BORDER_NAME_TYPE_MINI_APPTRAY,
E_MOVE_BORDER_NAME_TYPE_SETUP_WIZARD,
+ E_MOVE_BORDER_NAME_TYPE_APP_SELECTOR,
E_MOVE_BORDER_NAME_TYPE_PWLOCK,
E_MOVE_BORDER_NAME_TYPE_BACKGROUND,
E_MOVE_BORDER_NAME_TYPE_ISF_KEYBOARD,
case E_MOVE_BORDER_CLASS_TYPE_SETUP_WIZARD:
if (ntype == E_MOVE_BORDER_NAME_TYPE_SETUP_WIZARD)
res = E_MOVE_BORDER_TYPE_SETUP_WIZARD;
+ case E_MOVE_BORDER_CLASS_TYPE_APP_SELECTOR:
+ if (ntype == E_MOVE_BORDER_NAME_TYPE_APP_SELECTOR)
+ res = E_MOVE_BORDER_TYPE_APP_SELECTOR;
case E_MOVE_BORDER_CLASS_TYPE_PWLOCK:
if (ntype == E_MOVE_BORDER_NAME_TYPE_PWLOCK)
res = E_MOVE_BORDER_TYPE_PWLOCK;
#define TYPE_SETUP_WIZARD_CHECK(a) \
((a)->type == E_MOVE_BORDER_TYPE_SETUP_WIZARD)
+#define TYPE_APP_SELECTOR_CHECK(a) \
+ ((a)->type == E_MOVE_BORDER_TYPE_APP_SELECTOR)
+
typedef enum _E_Move_Border_Type
{
E_MOVE_BORDER_TYPE_UNKNOWN = 0,
E_MOVE_BORDER_TYPE_APPTRAY,
E_MOVE_BORDER_TYPE_MINI_APPTRAY,
E_MOVE_BORDER_TYPE_SETUP_WIZARD,
+ E_MOVE_BORDER_TYPE_APP_SELECTOR,
E_MOVE_BORDER_TYPE_PWLOCK,
E_MOVE_BORDER_TYPE_BACKGROUND,
E_MOVE_BORDER_TYPE_ISF_KEYBOARD,
static Eina_Bool
_e_mod_move_indicator_widget_cb_motion_start_internal_quickpanel_check(E_Move_Border *qp_mb)
{
+ E_Move_Border *mini_apptray_mb = NULL;
+
E_CHECK_RETURN(qp_mb, EINA_FALSE);
E_CHECK_RETURN(TYPE_QUICKPANEL_CHECK(qp_mb), EINA_FALSE);
E_CHECK_RETURN(qp_mb->visible, EINA_FALSE);
if (e_mod_move_quickpanel_objs_animation_state_get(qp_mb)) return EINA_FALSE;
+ mini_apptray_mb = e_mod_move_mini_apptray_find();
+ if (e_mod_move_mini_apptray_objs_animation_state_get(mini_apptray_mb))
+ return EINA_FALSE;
+
if (!(qp_mb->m->qp_scroll_with_clipping))
e_mod_move_quickpanel_dim_show(qp_mb);
continue;
// if notification , alpha, and indicator_state_none then search again below.
- if (TYPE_NOTIFICATION_CHECK(find_mb)
+ if ((TYPE_NOTIFICATION_CHECK(find_mb) || TYPE_APP_SELECTOR_CHECK(find_mb))
&& (find_mb->argb)
&& (find_mb->indicator_state == E_MOVE_INDICATOR_STATE_NONE))
{
{
target_mb = e_mod_move_border_client_find(target_win);
E_CHECK(target_mb);
- if (TYPE_NOTIFICATION_CHECK(target_mb)
+ if ((TYPE_NOTIFICATION_CHECK(target_mb) || TYPE_APP_SELECTOR_CHECK(target_mb))
&& (target_mb->argb)
&& (target_mb->indicator_state == E_MOVE_INDICATOR_STATE_NONE))
{
m = e_mod_move_util_get();
E_CHECK(m);
- if (m->screen_reader_state)
+ if ((m->screen_reader_state) || (m->setup_wizard_state))
{
_e_mod_move_indicator_widget_active_indicator_win_find_and_set();
return;
}
- if (m->setup_wizard_state) return;
if (e_mod_move_indicator_widget_target_window_find(&target_win))
{
e_mod_move_indicator_widget_del(indi_widget);
e_mod_move_indicator_widget_set(e_mod_move_indicator_widget_add(target_win));
if ((target_mb) &&
- (TYPE_NOTIFICATION_CHECK(target_mb)) &&
+ (TYPE_NOTIFICATION_CHECK(target_mb) || TYPE_APP_SELECTOR_CHECK(target_mb)) &&
(target_mb->argb) &&
(target_mb->indicator_state == E_MOVE_INDICATOR_STATE_NONE))
{
//then add new indicator widget.
e_mod_move_indicator_widget_set(e_mod_move_indicator_widget_add(target_win));
- if (TYPE_NOTIFICATION_CHECK(target_mb)
- && (target_mb->argb)
- && (target_mb->indicator_state == E_MOVE_INDICATOR_STATE_NONE))
+ if ((target_mb) &&
+ (TYPE_NOTIFICATION_CHECK(target_mb) || TYPE_APP_SELECTOR_CHECK(target_mb)) &&
+ (target_mb->argb) &&
+ (target_mb->indicator_state == E_MOVE_INDICATOR_STATE_NONE))
{
;
}
e_mod_move_bd_move_objs_move(mb, mb->x, mb->y);
e_mod_move_bd_move_objs_resize(mb, mb->w, mb->h);
e_mod_move_bd_move_objs_show(mb);
+ e_mod_move_util_screen_input_block(mb->m);
if (!evas_object_visible_get(ly))
evas_object_show(ly);
EINTERN Eina_Bool
e_mod_move_mini_apptray_objs_del(E_Move_Border *mb)
{
- Evas_Object *ly = NULL;
+ E_Move_Border *qp_mb = NULL;
+ Evas_Object *ly = NULL;
E_CHECK_RETURN(mb, EINA_FALSE);
E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
ly = e_mod_move_util_comp_layer_get(mb->m, "move");
E_CHECK_RETURN(ly, EINA_FALSE);
if (evas_object_visible_get(ly))
- evas_object_hide(ly);
+ {
+ qp_mb = e_mod_move_quickpanel_find();
+ if (!e_mod_move_quickpanel_objs_animation_state_get(qp_mb))
+ evas_object_hide(ly);
+ }
e_mod_move_bd_move_objs_del(mb, mb->objs);
e_mod_move_util_rotation_unlock(mb->m);
// Composite mode set False
e_mod_move_util_compositor_composite_mode_set(mb->m, EINA_FALSE);
+ e_mod_move_util_screen_input_unblock(mb->m);
mb->objs = NULL;
return EINA_TRUE;
}
{
E_Move *m;
E_Move_Border *find_mb = NULL;
+ E_Move_Border *qp_mb = NULL;
Eina_Bool found = EINA_FALSE;
m = e_mod_move_util_get();
EINA_FALSE);
if (e_mod_move_mini_apptray_objs_animation_state_get(mini_apptray_mb)) return EINA_FALSE;
+ qp_mb = e_mod_move_quickpanel_find();
+ if (e_mod_move_quickpanel_objs_animation_state_get(qp_mb)) return EINA_FALSE;
+
// Mini app-tray is under rotation state.
// I think there is another exception case.
// It's posible that WM doesn't send rotation change request yet.
ecore_x_e_illume_quickpanel_state_set(zone->black_win, ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
}
- // restore comp layer's position
- _e_mod_move_quickpanel_comp_layer_obj_move_intern(zone->x, zone->y);
-
memset(anim_data, 0, sizeof(E_Move_Quickpanel_Animation_Data));
E_FREE(anim_data);
mb->anim_data = NULL;
EINTERN Eina_Bool
e_mod_move_quickpanel_objs_del(E_Move_Border *mb)
{
- E_Move *m = NULL;
- Evas_Object *move_layer = NULL;
+ E_Move *m = NULL;
+ E_Manager *man = NULL;
+ E_Zone *zone = NULL;
+ Evas_Object *move_layer = NULL;
+ E_Move_Border *mini_apptray_mb = NULL;
E_CHECK_RETURN(mb, EINA_FALSE);
E_CHECK_RETURN(TYPE_QUICKPANEL_CHECK(mb), EINA_FALSE);
m = mb->m;
+ E_CHECK_RETURN(m, EINA_FALSE);
+ man = m->man;
+ E_CHECK_RETURN(man,EINA_FALSE);
+ zone = e_util_zone_current_get(man);
+ // restore comp layer's position
+ if (zone) _e_mod_move_quickpanel_comp_layer_obj_move_intern(zone->x, zone->y);
move_layer = e_mod_move_util_comp_layer_get(m, "move");
E_CHECK_RETURN(move_layer, EINA_FALSE);
if (evas_object_visible_get(move_layer))
- evas_object_hide(move_layer);
+ {
+ mini_apptray_mb = e_mod_move_mini_apptray_find();
+ if (!e_mod_move_mini_apptray_objs_animation_state_get(mini_apptray_mb))
+ evas_object_hide(move_layer);
+ }
if (m->qp_scroll_with_clipping)
{
{
if (!bd) continue;
if (!bd->visible) continue;
+
+ /* UTILITY type such as keyboard window could come first, before NORMAL
+ type such as app tray, quickpanel window comes */
+ if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UTILITY) continue;
if (bd->client.netwm.type != ECORE_X_WINDOW_TYPE_NORMAL) break;
name = bd->client.icccm.name;
{
if (!bd) continue;
if (!bd->visible) continue;
+
+ /* UTILITY type such as keyboard window could come first, before NORMAL
+ type such as app tray, quickpanel window comes */
+ if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UTILITY) continue;
if (bd->client.netwm.type != ECORE_X_WINDOW_TYPE_NORMAL) break;
name = bd->client.icccm.name;
ecore_x_e_illume_quickpanel_state_send
(ecore_x_e_illume_zone_get(bd->client.win),
ECORE_X_ILLUME_QUICKPANEL_STATE_ON);
+
+ /* set unfocused window to quickpanel (unfocused window), otherwise
+ target window would set to focused window in _target_window_find(); */
+ target_win = bd->client.win;
+ unfocused_win = bd->client.win;
break;
}
}
bd = e_border_focused_get();
if (bd)
{
+ /* if there was an unfocused window, the target window is changed
+ in the _target_window_find();. so reset unfocused window here */
+ if (unfocused_win) unfocused_win = 0;
+
target_win = bd->client.win;
_screen_reader_support_check();
}