e_service_taskbar: support auto_placement request 32/297932/2
authorDoyoun Kang <doyoun.kang@samsung.com>
Mon, 28 Aug 2023 12:01:13 +0000 (21:01 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Tue, 29 Aug 2023 02:02:34 +0000 (02:02 +0000)
Change-Id: I1625e3c5050180c075e54d05b793c57af42adab4

src/bin/e_policy_wl.c
src/bin/services/e_service_taskbar.c
src/bin/services/e_service_taskbar.h

index 2a149f1..d3228e9 100644 (file)
@@ -4517,11 +4517,28 @@ _tzsh_srv_taskbar_cb_size_set(struct wl_client *client EINA_UNUSED, struct wl_re
    e_service_taskbar_size_set(ec, width, height);
 }
 
+static void
+_tzsh_srv_taskbar_cb_auto_placement_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, uint32_t auto_placement)
+{
+   E_Policy_Wl_Tzsh_Srv *tzsh_srv;
+   E_Client *ec;
+
+   tzsh_srv = wl_resource_get_user_data(resource);
+   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv->tzsh);
+
+   ec = tzsh_srv->ec;
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   e_service_taskbar_auto_placement_set(ec, auto_placement);
+}
+
 static const struct tws_service_taskbar_interface _tzsh_srv_taskbar_iface =
 {
    _tzsh_srv_taskbar_cb_destroy,
    _tzsh_srv_taskbar_cb_place_type_set,
    _tzsh_srv_taskbar_cb_size_set,
+   _tzsh_srv_taskbar_cb_auto_placement_set,
 };
 
 static void
index bfa4516..a42dd48 100644 (file)
@@ -4,6 +4,8 @@
 #include <wayland-server.h>
 #include <tzsh_server.h>
 
+static void _e_service_taskbar_update(E_Service_Taskbar *taskbar_service);
+
 /* private data for taskbar */
 static E_Service_Taskbar   *_taskbar_service = NULL;
 
@@ -57,6 +59,7 @@ _taskbar_cb_client_zone_set(void *data, int type EINA_UNUSED, void *event)
          taskbar_service->ec, taskbar_service, taskbar_service->zone, ev->zone);
 
    taskbar_service->zone = ev->zone;
+   _e_service_taskbar_update(taskbar_service);
 
 end:
    return ECORE_CALLBACK_PASS_ON;
@@ -125,7 +128,8 @@ _e_service_taskbar_update(E_Service_Taskbar *taskbar_service)
    Eina_Bool vertical;
    E_Client *ec;
 
-   if (!taskbar_service) return;
+   if (!taskbar_service->ec) return;
+   if (!taskbar_service->zone) return;
 
    ec = taskbar_service->ec;
 
@@ -154,7 +158,9 @@ _e_service_taskbar_update(E_Service_Taskbar *taskbar_service)
         vertical = EINA_TRUE;
      }
 
-   e_client_util_move_without_frame(ec, taskbar_service->x, taskbar_service->y);
+   if (taskbar_service->auto_placement == EINA_TRUE)
+     e_client_util_move_without_frame(ec, taskbar_service->x, taskbar_service->y);
+
    e_zone_obstacle_update(taskbar_service->zone, ec,
                           &(Eina_Rectangle){taskbar_service->x, taskbar_service->y, taskbar_service->w, taskbar_service->h},
                           vertical);
@@ -210,3 +216,26 @@ e_service_taskbar_size_set(E_Client *ec, unsigned int w, unsigned int h)
    _e_service_taskbar_update(_taskbar_service);
    return EINA_TRUE;
 }
+
+EINTERN Eina_Bool
+e_service_taskbar_auto_placement_set(E_Client *ec, Eina_Bool set)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(_taskbar_service, EINA_FALSE);
+
+   ELOGF("TASKBAR", "Set Auto Placement to %d", ec, set);
+
+   if (ec != _taskbar_service->ec)
+     {
+        ELOGF("TASKBAR", "ERROR... Taskbar ec is not matched...regisered(%p)..", ec, _taskbar_service->ec);
+        return EINA_FALSE;
+     }
+
+   if (set == _taskbar_service->auto_placement)
+     return EINA_TRUE;
+
+   _taskbar_service->auto_placement = set;
+   _e_service_taskbar_update(_taskbar_service);
+
+   return EINA_TRUE;
+}
index fcde94b..61d5020 100644 (file)
@@ -15,11 +15,13 @@ struct _E_Service_Taskbar
    int place_type;
    int x, y;
    unsigned int w, h;
+   Eina_Bool auto_placement;
 };
 
 EINTERN Eina_Bool     e_service_taskbar_client_set(E_Client *ec);
 EINTERN E_Client     *e_service_taskbar_client_get(void);
 EINTERN Eina_Bool     e_service_taskbar_place_type_set(E_Client *ec, int type);
 EINTERN Eina_Bool     e_service_taskbar_size_set(E_Client *ec, unsigned int w, unsigned int h);
+EINTERN Eina_Bool     e_service_taskbar_auto_placement_set(E_Client *ec, Eina_Bool set);
 
 #endif /* E_SERVICE_TASKBAR_H */