e_client/e_policy: add maximize_type for maximizing window 86/300186/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Wed, 18 Oct 2023 04:32:01 +0000 (13:32 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 18 Oct 2023 06:39:32 +0000 (15:39 +0900)
There is a requirement to maximize window to full screen size.
In most cases, when the window request to maximize, it is maximized to a size exculuding
the obstacles(such as taskbar) area.
However, special apps such as home screen should be maximized to the size of the entire
screen.

So, we add a maximize_type in the E_Client structure to decide the maximize type.

Change-Id: Ifde8188b04a43c256f88439bdfac7e84086f1537

src/bin/e_client.c
src/bin/e_client.h
src/bin/e_policy.c
src/bin/e_policy_wl.c

index dce655c..4820274 100644 (file)
@@ -4295,6 +4295,7 @@ e_client_new(E_Pixmap *cp, int first_map, int internal)
    ec->post_raise = EINA_TRUE;
    ec->post_lower = EINA_FALSE;
    ec->animatable = EINA_TRUE;
+   ec->maximize_type = e_config->maximize_policy & E_MAXIMIZE_TYPE;
 
    /* FIXME: if first_map is 1 then we should ignore the first hide event
     * or ensure the window is already hidden and events flushed before we
index 1fcddc3..51e6149 100644 (file)
@@ -106,12 +106,20 @@ typedef enum _E_Maximize
 
 typedef enum _E_Maximize_Direction
 {
-   E_MAXIMIZE_DIRECTION_NONE,
-   E_MAXIMIZE_DIRECTION_ALL,
-   E_MAXIMIZE_DIRECTION_LEFT,
-   E_MAXIMIZE_DIRECTION_RIGHT,
+   E_MAXIMIZE_DIRECTION_NONE  = E_MAXIMIZE_NONE,
+   E_MAXIMIZE_DIRECTION_ALL   = E_MAXIMIZE_BOTH,
+   E_MAXIMIZE_DIRECTION_LEFT  = E_MAXIMIZE_LEFT,
+   E_MAXIMIZE_DIRECTION_RIGHT = E_MAXIMIZE_RIGHT,
 } E_Maximize_Direction;
 
+typedef enum _E_Maximize_Type
+{
+   E_MAXIMIZE_TYPE_FULLSCREEN = E_MAXIMIZE_FULLSCREEN,
+   E_MAXIMIZE_TYPE_SMART      = E_MAXIMIZE_SMART,
+   E_MAXIMIZE_TYPE_EXPAND     = E_MAXIMIZE_EXPAND,
+   E_MAXIMIZE_TYPE_FILL       = E_MAXIMIZE_FILL,
+} E_Maximize_Type;
+
 // TODO: should be removed - yigl
 typedef enum _E_Fullscreen
 {
@@ -1035,6 +1043,7 @@ struct E_Client
    } desk_zoom;
 
    E_Maximize_Direction maximize_dir;
+   E_Maximize_Type      maximize_type;
    Eina_Bool apply_layout;
 
    struct
index 63967af..e6e2180 100644 (file)
@@ -342,20 +342,21 @@ _e_policy_client_maximize_policy_apply(E_Policy_Client *pc)
          * E_Desk.
          */
         ec->placed = 1;
-        E_Maximize max;
         if ((e_policy_client_is_home_screen(ec)) ||
             (e_policy_client_is_lockscreen(ec)) ||
             (e_policy_client_is_quickpanel(ec)) ||
             (e_policy_client_is_taskbar(ec)))
           {
-             max = E_MAXIMIZE_FULLSCREEN | E_MAXIMIZE_BOTH;
+             ec->maximize_type = E_MAXIMIZE_TYPE_FULLSCREEN;
+             ec->maximize_dir = E_MAXIMIZE_DIRECTION_ALL;
           }
         else
           {
-             max = E_MAXIMIZE_EXPAND | E_MAXIMIZE_BOTH;
+             ec->maximize_type = E_MAXIMIZE_EXPAND;
+             ec->maximize_dir = E_MAXIMIZE_DIRECTION_ALL;
           }
 
-        e_client_maximize(ec, max);
+        e_client_maximize(ec, ec->maximize_type | ec->maximize_dir);
 
         if (ec->changes.need_maximize)
           _e_policy_client_maximize_pre(pc);
@@ -1372,17 +1373,23 @@ static Eina_Bool
 _e_policy_cb_client_property(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
 {
    E_Event_Client_Property *ev;
+   E_Client *ec;
 
    ev = event;
-   if (!ev || (!ev->ec)) return ECORE_CALLBACK_PASS_ON;
+   ec = ev->ec;
+   if (!ev || (!ec)) return ECORE_CALLBACK_PASS_ON;
    if (ev->property & E_CLIENT_PROPERTY_CLIENT_TYPE)
      {
-        if (e_policy_client_is_home_screen(ev->ec))
+        if (e_policy_client_is_home_screen(ec))
           {
-             ev->ec->lock_client_stacking = 0;
-             e_client_desk_iconify_skip_set(ev->ec, EINA_TRUE);
-             if (ev->ec->maximized)
-               e_client_maximize(ev->ec, E_MAXIMIZE_FULLSCREEN | E_MAXIMIZE_BOTH);
+             ec->lock_client_stacking = 0;
+             e_client_desk_iconify_skip_set(ec, EINA_TRUE);
+             if (ec->maximized)
+               {
+                  ec->maximize_type = E_MAXIMIZE_TYPE_FULLSCREEN;
+                  ec->maximize_dir = E_MAXIMIZE_DIRECTION_ALL;
+                  e_client_maximize(ec, ec->maximize_type | ec->maximize_dir);
+               }
           }
      }
 
index 712bfac..a811ff5 100644 (file)
@@ -3584,26 +3584,28 @@ _tzpol_iface_cb_set_maximize_direction(struct wl_client *client EINA_UNUSED, str
      {
         ec->maximize_dir = E_MAXIMIZE_DIRECTION_NONE;
         e_client_unmaximize(ec, E_MAXIMIZE_BOTH);
+        return;
      }
-   else if (direction == TIZEN_POLICY_MAXIMIZE_DIRECTION_ALL)
+
+   if (direction == TIZEN_POLICY_MAXIMIZE_DIRECTION_ALL)
      {
         ec->maximize_dir = E_MAXIMIZE_DIRECTION_ALL;
-        e_client_maximize(ec, E_MAXIMIZE_EXPAND | E_MAXIMIZE_BOTH);
      }
    else if (direction == TIZEN_POLICY_MAXIMIZE_DIRECTION_LEFT)
      {
         ec->maximize_dir = E_MAXIMIZE_DIRECTION_LEFT;
-        e_client_maximize(ec, E_MAXIMIZE_EXPAND | E_MAXIMIZE_LEFT);
      }
    else if (direction == TIZEN_POLICY_MAXIMIZE_DIRECTION_RIGHT)
      {
         ec->maximize_dir = E_MAXIMIZE_DIRECTION_RIGHT;
-        e_client_maximize(ec, E_MAXIMIZE_EXPAND | E_MAXIMIZE_RIGHT);
      }
    else
      {
         ELOGF("TZPOL", "Not supported direction:%d", ec, direction);
+        return;
      }
+
+   e_client_maximize(ec, ec->maximize_type | ec->maximize_dir);
 }
 
 static void