e_input_thread_client: add a new API for setting zone_id 26/317526/1
authorduna.oh <duna.oh@samsung.com>
Thu, 2 Jan 2025 10:36:18 +0000 (19:36 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 3 Jan 2025 06:39:53 +0000 (15:39 +0900)
Change-Id: Ief720f5d8fff95b0d92ff2e1236c7c478f78160b

src/bin/inputmgr/e_input_thread_client.c
src/bin/inputmgr/e_input_thread_client_intern.h
src/bin/windowmgr/e_policy_zone.c

index 0d45fdd5aed0a1c492e164287d31aa216ec622c1..e94783939b815cff14c58c73ed7e2fe2e8429ae0 100644 (file)
@@ -17,6 +17,7 @@ struct _E_Input_Thread_Client
    Eina_Bool is_cursor;
    Eina_Bool mouse_in;
    Eina_Bool pointer_enter_sent;
+   int zone_id;
    Eina_Stringshare *icccm_name;
    Eina_Stringshare *netwm_name;
    Eina_Stringshare *icccm_title;
@@ -695,3 +696,18 @@ e_input_thread_client_pointer_enter_sent_get(E_Input_Thread_Client *iec)
 
    return iec->pointer_enter_sent;
 }
+
+EINTERN void e_input_thread_client_zone_id_set(E_Input_Thread_Client *iec, int zone_id)
+{
+   EINA_SAFETY_ON_NULL_RETURN(iec);
+
+   iec->zone_id = zone_id;
+   ICINF("[%s] iec(%p), ec(%p), zone_id(%d)\n", __func__, iec, iec->ec, iec->zone_id);
+}
+
+EINTERN int e_input_thread_client_zone_id_get(E_Input_Thread_Client *iec)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(iec, -1);
+
+   return iec->zone_id;
+}
index 8d72c4b3f8f9fb32dcc3904213314581b8d57f84..dd90f42b511854bb1ea4f09816c7604b0b8261d8 100644 (file)
@@ -20,6 +20,7 @@ typedef struct
   bool is_video;
   Eina_Bool deleted;
   Eina_Bool is_cursor;
+  int zone_id;
 
   Evas_Object *frame;
   int x, y, w, h;
@@ -88,4 +89,7 @@ EINTERN Eina_Bool e_input_thread_client_mouse_in_get(E_Input_Thread_Client *ec);
 EINTERN void e_input_thread_client_pointer_enter_sent_set(E_Input_Thread_Client *iec, Eina_Bool sent);
 EINTERN Eina_Bool e_input_thread_client_pointer_enter_sent_get(E_Input_Thread_Client *iec);
 
+EINTERN void e_input_thread_client_zone_id_set(E_Input_Thread_Client *iec, int zone_id);
+EINTERN int e_input_thread_client_zone_id_get(E_Input_Thread_Client *iec);
+
 #endif
index a888640d7298ebb4b4e6908675737e417caa138b..1e9ceb0a7895e508218e4e9af0a178d9bf96ca77 100644 (file)
@@ -255,10 +255,22 @@ _e_policy_zone_client_set(E_Zone *zone, E_Client *ec)
    e_zone_client_set_event_emit(zone, ec);
 }
 
+static void
+_e_policy_wl_input_thread_zone_id_set(void *data)
+{
+   E_Input_Thread_Request_EClient_Data *ec_data = data;
+   EINA_SAFETY_ON_NULL_RETURN(ec_data);
+
+   ICINF("[input thread|%s] ec(%p), zone_id(%d)\n", __func__, ec_data->ec, ec_data->zone_id);
+   e_input_thread_client_zone_id_set(e_input_thread_client_get(ec_data->ec), ec_data->zone_id);
+}
+
 static void
 _e_policy_zone_client_data_set(E_Zone *zone, E_Client *ec)
 {
    E_Zone *data;
+   E_Input_Thread_Request_EClient_Data ec_data;
+   memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data));
 
    data = e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), ZONE_EC_DATA_KEY);
    if (data)
@@ -273,6 +285,13 @@ _e_policy_zone_client_data_set(E_Zone *zone, E_Client *ec)
      }
 
    e_view_data_set(e_view_client_view_get(e_client_view_get(ec)), ZONE_EC_DATA_KEY, zone);
+   if (e_input_thread_check_client_cloning_needed())
+     {
+        ec_data.ec = ec;
+        ec_data.zone_id = zone->id;
+        ICINF("[%s] ec(%p), zone_id(%d)\n", __func__, ec, zone->id);
+        e_input_backend_thread_safe_call(_e_policy_wl_input_thread_zone_id_set, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
+     }
 }
 
 static void