From 9a2e2bb44594e770f45360323a1a9e2677f8084c Mon Sep 17 00:00:00 2001 From: Gwanglim Lee Date: Tue, 2 Jul 2013 01:50:23 +0900 Subject: [PATCH] Merged with devel Change-Id: I4d1a60d88947e6d9292d85ed3f0bbbda869a60f5 --- comp-tizen/src/e_mod_comp_effect.c | 22 ++- comp-tizen/src/e_mod_comp_effect_win_rotation.c | 30 ++-- comp-tizen/src/e_mod_comp_policy.c | 168 ++------------------- comp-tizen/src/e_mod_comp_policy.h | 6 +- comp-tizen/src/e_mod_comp_win_type.c | 14 +- comp-tizen/src/e_mod_comp_win_type.h | 7 + illume2-tizen/src/e-module-illume2-tizen.edc | 8 +- illume2-tizen/src/e_mod_floating_window.c | 3 +- illume2-tizen/src/images/RB0_resize_notAvail.png | Bin 5883 -> 0 bytes .../images/{RB0_resize.png => mw_frame_press.png} | Bin .../src/images/mw_frame_press_overscroll.png | Bin 0 -> 10676 bytes illume2-tizen/src/policies/illume/policy.c | 27 ++-- move-tizen/src/e_mod_move_border_type.c | 9 ++ move-tizen/src/e_mod_move_border_type.h | 4 + move-tizen/src/e_mod_move_indicator_widget.c | 22 ++- move-tizen/src/e_mod_move_mini_apptray.c | 11 +- move-tizen/src/e_mod_move_mini_apptray_widget.c | 4 + move-tizen/src/e_mod_move_quickpanel.c | 22 ++- screen-reader/src/e_mod_main.c | 17 +++ 19 files changed, 168 insertions(+), 206 deletions(-) delete mode 100755 illume2-tizen/src/images/RB0_resize_notAvail.png rename illume2-tizen/src/images/{RB0_resize.png => mw_frame_press.png} (100%) create mode 100755 illume2-tizen/src/images/mw_frame_press_overscroll.png diff --git a/comp-tizen/src/e_mod_comp_effect.c b/comp-tizen/src/e_mod_comp_effect.c index 1f1f124..38dad4f 100644 --- a/comp-tizen/src/e_mod_comp_effect.c +++ b/comp-tizen/src/e_mod_comp_effect.c @@ -937,17 +937,31 @@ _effect_show(E_Comp_Win *cw) _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"); diff --git a/comp-tizen/src/e_mod_comp_effect_win_rotation.c b/comp-tizen/src/e_mod_comp_effect_win_rotation.c index ef32686..43277bf 100644 --- a/comp-tizen/src/e_mod_comp_effect_win_rotation.c +++ b/comp-tizen/src/e_mod_comp_effect_win_rotation.c @@ -109,7 +109,7 @@ e_mod_comp_effect_zone_rotation_begin(E_Comp_Effect_Zone_Rotation *zr) */ 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); @@ -119,10 +119,28 @@ e_mod_comp_effect_zone_rotation_begin(E_Comp_Effect_Zone_Rotation *zr) 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) { @@ -139,12 +157,6 @@ e_mod_comp_effect_zone_rotation_begin(E_Comp_Effect_Zone_Rotation *zr) 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; - } } } } diff --git a/comp-tizen/src/e_mod_comp_policy.c b/comp-tizen/src/e_mod_comp_policy.c index 43a8b0d..2fb27e8 100644 --- a/comp-tizen/src/e_mod_comp_policy.c +++ b/comp-tizen/src/e_mod_comp_policy.c @@ -4,7 +4,6 @@ #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; @@ -45,6 +44,7 @@ e_mod_comp_policy_init(void) 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; } @@ -79,96 +79,27 @@ e_mod_comp_policy_app_close_check(E_Comp_Win *cw) 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; } @@ -176,77 +107,4 @@ e_mod_comp_policy_win_lower_check(E_Comp_Win *cw, 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; -} diff --git a/comp-tizen/src/e_mod_comp_policy.h b/comp-tizen/src/e_mod_comp_policy.h index 715eaff..b0b3c94 100644 --- a/comp-tizen/src/e_mod_comp_policy.h +++ b/comp-tizen/src/e_mod_comp_policy.h @@ -6,11 +6,9 @@ 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 diff --git a/comp-tizen/src/e_mod_comp_win_type.c b/comp-tizen/src/e_mod_comp_win_type.c index 63b8715..7272caa 100644 --- a/comp-tizen/src/e_mod_comp_win_type.c +++ b/comp-tizen/src/e_mod_comp_win_type.c @@ -19,6 +19,7 @@ typedef enum _E_Comp_Win_Class_Type 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; @@ -38,6 +39,7 @@ typedef enum _E_Comp_Win_Name_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; @@ -63,6 +65,7 @@ static const char *win_class[] = "MINIAPP_TRAY", "volume", "BACKGROUND", + "SETUP_WIZARD", "ISF", }; @@ -82,6 +85,7 @@ static const char *win_name[] = "MINIAPP_TRAY", "volume", "BACKGROUND", + "SETUP_WIZARD", // E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD "Virtual Keyboard", // E_COMP_WIN_NAME_TYPE_ISF_SUB @@ -108,7 +112,8 @@ static E_Comp_Win_Class_Type win_class_vals[] = 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[] = @@ -127,8 +132,9 @@ 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; @@ -287,6 +293,10 @@ e_mod_comp_win_type_setup(E_Comp_Win *cw) 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; } diff --git a/comp-tizen/src/e_mod_comp_win_type.h b/comp-tizen/src/e_mod_comp_win_type.h index 3a2751a..6d7b61d 100644 --- a/comp-tizen/src/e_mod_comp_win_type.h +++ b/comp-tizen/src/e_mod_comp_win_type.h @@ -38,6 +38,12 @@ #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, @@ -69,6 +75,7 @@ typedef enum _E_Comp_Win_Type 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; diff --git a/illume2-tizen/src/e-module-illume2-tizen.edc b/illume2-tizen/src/e-module-illume2-tizen.edc index b4dd0a0..e5abf4c 100644 --- a/illume2-tizen/src/e-module-illume2-tizen.edc +++ b/illume2-tizen/src/e-module-illume2-tizen.edc @@ -25,8 +25,8 @@ collections 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 @@ -49,14 +49,14 @@ collections 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; } } diff --git a/illume2-tizen/src/e_mod_floating_window.c b/illume2-tizen/src/e_mod_floating_window.c index 8b54821..9f545f3 100644 --- a/illume2-tizen/src/e_mod_floating_window.c +++ b/illume2-tizen/src/e_mod_floating_window.c @@ -497,6 +497,7 @@ _e_mod_floating_smart_cleanup(Ecore_X_Event_Client_Message *event __UNUSED__) { 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)) { @@ -527,7 +528,7 @@ _e_mod_floating_smart_cleanup(Ecore_X_Event_Client_Message *event __UNUSED__) 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); diff --git a/illume2-tizen/src/images/RB0_resize_notAvail.png b/illume2-tizen/src/images/RB0_resize_notAvail.png deleted file mode 100755 index 5dc8588aedaa4fc799b3ccb8f3f701e6a89efd4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5883 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.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); } @@ -1047,7 +1048,8 @@ _policy_border_post_fetch(E_Border *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)) @@ -5388,7 +5390,7 @@ _policy_change_root_angle_by_border_angle (E_Border* bd) if (ang == -1) ang = 0; if (dep_rot.ang != ang) - _policy_border_dependent_rotation(bd); + _policy_border_dependent_rotation(bd, ang); } } @@ -6528,21 +6530,23 @@ fin: 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; @@ -6550,10 +6554,10 @@ _policy_border_dependent_rotation(E_Border *bd) { 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 @@ -6596,6 +6600,7 @@ _policy_property_active_indicator_win_change(Ecore_X_Event_Window_Property *even { Ecore_X_Window active_win = 0; E_Border *bd = NULL; + int rotation = 0; if (!event) return; @@ -6649,9 +6654,9 @@ _policy_property_active_indicator_win_change(Ecore_X_Event_Window_Property *even 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); } } } diff --git a/move-tizen/src/e_mod_move_border_type.c b/move-tizen/src/e_mod_move_border_type.c index 2e03b2d..0b84651 100644 --- a/move-tizen/src/e_mod_move_border_type.c +++ b/move-tizen/src/e_mod_move_border_type.c @@ -16,6 +16,7 @@ typedef enum _E_Move_Border_Class_Type 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, @@ -35,6 +36,7 @@ typedef enum _E_Move_Border_Name_Type 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, @@ -58,6 +60,7 @@ static const char *border_class[] = "APP_TRAY", "MINIAPP_TRAY", "SETUP_WIZARD", + "APP_SELECTOR", //"PW_LOCK", "pwlock", "BACKGROUND", @@ -77,6 +80,7 @@ static const char *border_name[] = "APP_TRAY", "MINIAPP_TRAY", "SETUP_WIZARD", + "APP_SELECTOR", //"PW_LOCK", "pwlock", "BACKGROUND", @@ -135,6 +139,7 @@ static E_Move_Border_Class_Type border_class_vals[] = 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 @@ -153,6 +158,7 @@ static E_Move_Border_Class_Type border_name_vals[] = 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, @@ -338,6 +344,9 @@ e_mod_move_border_type_setup(E_Move_Border *mb) 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; diff --git a/move-tizen/src/e_mod_move_border_type.h b/move-tizen/src/e_mod_move_border_type.h index 3fd1c0f..17d66ba 100644 --- a/move-tizen/src/e_mod_move_border_type.h +++ b/move-tizen/src/e_mod_move_border_type.h @@ -37,6 +37,9 @@ #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, @@ -65,6 +68,7 @@ typedef enum _E_Move_Border_Type 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, diff --git a/move-tizen/src/e_mod_move_indicator_widget.c b/move-tizen/src/e_mod_move_indicator_widget.c index c3e7c7e..7d8aa93 100644 --- a/move-tizen/src/e_mod_move_indicator_widget.c +++ b/move-tizen/src/e_mod_move_indicator_widget.c @@ -120,6 +120,8 @@ _e_mod_move_indicator_widget_cb_motion_start_internal_apptray_check(E_Move_Borde 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); @@ -136,6 +138,10 @@ _e_mod_move_indicator_widget_cb_motion_start_internal_quickpanel_check(E_Move_Bo 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); @@ -1099,7 +1105,7 @@ _e_mod_move_indicator_widget_target_window_find_by_pointer(Ecore_X_Window *win, 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)) { @@ -1224,7 +1230,7 @@ _e_mod_move_indicator_widget_active_indicator_win_find_and_set(void) { 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)) { @@ -1317,12 +1323,11 @@ e_mod_move_indicator_widget_apply(void) 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)) { @@ -1340,7 +1345,7 @@ e_mod_move_indicator_widget_apply(void) 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)) { @@ -1356,9 +1361,10 @@ e_mod_move_indicator_widget_apply(void) //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)) { ; } diff --git a/move-tizen/src/e_mod_move_mini_apptray.c b/move-tizen/src/e_mod_move_mini_apptray.c index 30ade60..8e7af9f 100644 --- a/move-tizen/src/e_mod_move_mini_apptray.c +++ b/move-tizen/src/e_mod_move_mini_apptray.c @@ -629,6 +629,7 @@ e_mod_move_mini_apptray_objs_add(E_Move_Border *mb) 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); @@ -661,17 +662,23 @@ e_mod_move_mini_apptray_objs_add_with_pos(E_Move_Border *mb, 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; } diff --git a/move-tizen/src/e_mod_move_mini_apptray_widget.c b/move-tizen/src/e_mod_move_mini_apptray_widget.c index 3e6d4c2..851bfcc 100644 --- a/move-tizen/src/e_mod_move_mini_apptray_widget.c +++ b/move-tizen/src/e_mod_move_mini_apptray_widget.c @@ -36,6 +36,7 @@ _e_mod_move_mini_apptray_widget_cb_motion_start_internal_mini_apptray_check(E_Mo { 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(); @@ -47,6 +48,9 @@ _e_mod_move_mini_apptray_widget_cb_motion_start_internal_mini_apptray_check(E_Mo 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. diff --git a/move-tizen/src/e_mod_move_quickpanel.c b/move-tizen/src/e_mod_move_quickpanel.c index 0b56fb6..33d0a29 100644 --- a/move-tizen/src/e_mod_move_quickpanel.c +++ b/move-tizen/src/e_mod_move_quickpanel.c @@ -674,9 +674,6 @@ _e_mod_move_quickpanel_objs_animation_frame(void *data, 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; @@ -1762,17 +1759,30 @@ e_mod_move_quickpanel_objs_add(E_Move_Border *mb) 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) { diff --git a/screen-reader/src/e_mod_main.c b/screen-reader/src/e_mod_main.c index 1522359..195adb1 100644 --- a/screen-reader/src/e_mod_main.c +++ b/screen-reader/src/e_mod_main.c @@ -274,6 +274,10 @@ _app_tray_open(Cover *cov) { 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; @@ -310,6 +314,10 @@ _quickpanel_open(void) { 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; @@ -324,6 +332,11 @@ _quickpanel_open(void) 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; } } @@ -1283,6 +1296,10 @@ _cb_property_change(void *data __UNUSED__, 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(); } -- 2.7.4