split_screen: maximize window that normal client and client needed 36/292036/4
authorJunseok Kim <juns.kim@samsung.com>
Wed, 26 Apr 2023 10:04:43 +0000 (19:04 +0900)
committerJunseok Kim <juns.kim@samsung.com>
Thu, 27 Apr 2023 04:46:41 +0000 (13:46 +0900)
Change-Id: I3647bbab46d707866b18ae1df788e71ac0a82156

src/splitscreen/e_mod_split_screen_manager.c
src/splitscreen/e_mod_split_screen_region.c
src/splitscreen/e_mod_split_screen_region.h

index 375d73a..8564546 100644 (file)
@@ -336,7 +336,7 @@ _e_mod_split_screen_manager_client_manager_role_set(E_Client *ec, Eina_Bool set)
 
              desk = e_desk_current_get(e_zone_current_get());
              if (desk && desk->desk_area.enable)
-               _e_mod_split_screen_manager_ec_assign_to_region_name(ec, "above");
+               _e_mod_split_screen_manager_ec_assign_to_region_name(ec, "SystemUI");
           }
         else
           {
@@ -374,7 +374,7 @@ _e_mod_split_screen_activate(E_Zone *zone)
    // launcher window must be above desk group to unobscured by other windows
    launcher = _e_mod_split_screen_launcher_ec_get();
    if (launcher)
-     _e_mod_split_screen_manager_ec_assign_to_region_name(launcher, "above");
+     _e_mod_split_screen_manager_ec_assign_to_region_name(launcher, "SystemUI");
 
    return ret;
 }
@@ -511,7 +511,7 @@ _e_mod_split_screen_manager_ec_relocate(E_Client *ec)
    if (_e_mod_split_screen_manager_util_client_special_check(ec))
      {
         // special prupose windows.
-        _e_mod_split_screen_manager_ec_assign_to_region_name(ec, "above");
+        _e_mod_split_screen_manager_ec_assign_to_region_name(ec, "SystemUI");
         return EINA_TRUE;
      }
 
@@ -628,7 +628,7 @@ static Eina_Bool
 _e_mod_split_screen_manager_region_init(void)
 {
    E_Desk *desk;
-   E_Mod_Split_Screen_Region *emssr_sub1, *emssr_sub2, *emssr_above;
+   E_Mod_Split_Screen_Region *emssr_sub1, *emssr_sub2, *emssr_system;
    int desk_x, desk_y, desk_w, desk_h;
 
    desk = e_desk_current_get(e_zone_current_get());
@@ -649,10 +649,11 @@ _e_mod_split_screen_manager_region_init(void)
 
    _e_mod_split_screen_region_list = eina_list_append(_e_mod_split_screen_region_list, emssr_sub2);
 
-   emssr_above = e_mod_split_screen_region_new("above", desk_x, desk_y, desk_w, desk_h);
-   if (!emssr_above) return EINA_FALSE;
+   emssr_system = e_mod_split_screen_region_new("SystemUI", desk_x, desk_y, desk_w, desk_h);
+   if (!emssr_system) return EINA_FALSE;
+   e_mod_split_screen_region_need_maximize_set(emssr_system, EINA_FALSE);
 
-   _e_mod_split_screen_region_list = eina_list_append(_e_mod_split_screen_region_list, emssr_above);
+   _e_mod_split_screen_region_list = eina_list_append(_e_mod_split_screen_region_list, emssr_system);
 
    return EINA_TRUE;
 }
index 14bbc5b..342d60b 100644 (file)
@@ -10,8 +10,11 @@ struct _E_Mod_Split_Screen_Region
    E_Desk_Area *eda;
    Eina_Stringshare *name;
    Eina_Bool is_del;
+
    Eina_List *appid_list;
    Eina_List *client_list;
+
+   Eina_Bool need_maximize : 1;
 };
 
 /* e_mod_split_screen_region internal functions */
@@ -24,6 +27,24 @@ static Eina_Bool     _e_mod_split_screen_region_ec_dismiss(E_Client *ec);
 
 
 /* internal functions */
+static Eina_Bool
+_e_mod_split_screen_region_util_client_special_check(E_Client *ec)
+{
+   if (!ec) return EINA_FALSE;
+
+   if ((e_policy_client_is_lockscreen(ec)) ||
+       (e_policy_client_is_keyboard(ec)) ||
+       (e_policy_client_is_keyboard_sub(ec)) ||
+       (e_policy_client_is_noti(ec)) ||
+       (e_policy_client_is_quickpanel(ec)) ||
+       (e_policy_client_is_volume(ec)) ||
+       (e_policy_client_is_cursor(ec)) ||
+       (!e_util_strcmp("wl_pointer-cursor", ec->icccm.window_role)))
+     return EINA_TRUE;
+
+   return EINA_FALSE;
+}
+
 static E_Mod_Split_Screen_Region *
 _e_mod_split_screen_region_new(const char *name, int x, int y, int w, int h)
 {
@@ -49,6 +70,8 @@ _e_mod_split_screen_region_new(const char *name, int x, int y, int w, int h)
    eda->name = eina_stringshare_add(name);
    emssr->eda = eda;
 
+   emssr->need_maximize = EINA_TRUE;
+
    SSMINF("region added, desk_area:%p, name:%s, id:%d", NULL, emssr->eda, emssr->name, emssr->eda->id);
 
    return emssr;
@@ -98,7 +121,7 @@ _e_mod_split_screen_region_ec_assign(E_Mod_Split_Screen_Region *emssr, E_Client
 
    e_client_desk_area_set(ec, emssr->eda);
 
-   if (ec->lock_client_size)
+   if (emssr->need_maximize && ec->lock_client_size)
      {
         ec->maximized = E_MAXIMIZE_NONE;
         e_client_maximize(ec, E_MAXIMIZE_EXPAND | E_MAXIMIZE_BOTH);
@@ -117,12 +140,15 @@ _e_mod_split_screen_region_ec_dismiss(E_Client *ec)
 {
    E_Client *child_ec;
    Eina_List *l;
+   Eina_Bool need_maximize = EINA_TRUE;
 
    SSMINF("unset ec from regions", ec);
 
    e_client_desk_area_set(ec, NULL);
 
-   if (ec->lock_client_size)
+   need_maximize = !_e_mod_split_screen_region_util_client_special_check(ec);
+
+   if (need_maximize && ec->lock_client_size)
      {
         ec->maximized = E_MAXIMIZE_NONE;
         e_client_maximize(ec, E_MAXIMIZE_EXPAND | E_MAXIMIZE_BOTH);
@@ -216,3 +242,17 @@ e_mod_split_screen_region_ec_dismiss(E_Client *ec)
 
    return _e_mod_split_screen_region_ec_dismiss(ec);
 }
+
+EINTERN void
+e_mod_split_screen_region_need_maximize_set(E_Mod_Split_Screen_Region *emssr, Eina_Bool need_maximize)
+{
+   EINA_SAFETY_ON_NULL_RETURN(emssr);
+   emssr->need_maximize = need_maximize;
+}
+
+EINTERN Eina_Bool
+e_mod_split_screen_region_need_maximize_get(E_Mod_Split_Screen_Region *emssr)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(emssr, EINA_FALSE);
+   return emssr->need_maximize;
+}
\ No newline at end of file
index 02021fa..4e66e2f 100644 (file)
@@ -16,5 +16,8 @@ EINTERN Eina_List                 *e_mod_split_screen_region_appid_list_get(E_Mo
 EINTERN Eina_Bool                  e_mod_split_screen_region_ec_assign(E_Mod_Split_Screen_Region *emssr, E_Client *ec);
 EINTERN Eina_Bool                  e_mod_split_screen_region_ec_dismiss(E_Client *ec);
 
+EINTERN void                       e_mod_split_screen_region_need_maximize_set(E_Mod_Split_Screen_Region *emssr, Eina_Bool need_maximize);
+EINTERN Eina_Bool                  e_mod_split_screen_region_need_maximize_get(E_Mod_Split_Screen_Region *emssr);
+
 #endif