e_client: update input thread data on evas_move callback 80/318580/1
authorduna.oh <duna.oh@samsung.com>
Wed, 2 Oct 2024 07:17:02 +0000 (16:17 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 2 Oct 2024 11:17:43 +0000 (20:17 +0900)
When evas_object geometry is updated, E20 also needs to update
the cloned input thread data.

Refer to the commit '0ea97294388e53c79891e2a9850f8d7dcaeac583'

Change-Id: I400673049160d5c72b56883b355f846bc4ffc666

src/bin/core/e_client.c

index e839dee5de12b8a38eeb7bbcef86bea18e9e5295..ec59ee55ba17deda3521faea3e978e88f0522301 100644 (file)
@@ -191,6 +191,7 @@ EINTERN void e_client_focused_set(E_Client *ec);
 static void _e_client_transient_for_group_make(E_Client *ec, Eina_List **list);
 static Evas_Object *_e_client_resize_object_create(E_Client *ec);
 static void _e_client_resize_object_del(E_Client *ec);
+static void _e_client_input_thread_eo_geometry_set(void *data);
 
 static Eina_Inlist *_e_client_hooks[] =
 {
@@ -1998,7 +1999,8 @@ _e_client_cb_evas_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN
 {
    E_Client *ec = data;
    E_Map *map;
-   Evas_Coord x, y;
+   Evas_Coord x, y, w, h;
+   Eina_Bool update = EINA_FALSE;
 
    if (e_object_is_del(data)) return;
 
@@ -2006,7 +2008,7 @@ _e_client_cb_evas_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN
 
    _e_client_event_simple(ec, E_EVENT_CLIENT_MOVE);
 
-   e_view_position_get(e_view_client_view_get(PRI(ec)->view_client), &x, &y);
+   e_view_client_geometry_get(PRI(ec)->view_client, &x, &y, &w, &h);
    if ((e_config->transient.move) && (ec->transients))
      {
         Eina_List *list = eina_list_clone(ec->transients);
@@ -2039,6 +2041,23 @@ _e_client_cb_evas_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN
    wl_signal_emit(&PRI(ec)->events.move, NULL);
 
    e_comp_visibility_calculation_set(EINA_TRUE);
+
+   update = (!ec->is_cursor) && (w != 0) && (h != 0);
+
+   if (update && e_input_thread_check_client_cloning_needed())
+     {
+        E_Input_Thread_Request_EClient_Data ec_data;
+        memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data));
+        ec_data.ec = ec;
+        ec_data.eo_geometry.x = x;
+        ec_data.eo_geometry.y = y;
+        ec_data.eo_geometry.w = w;
+        ec_data.eo_geometry.h = h;
+
+        ICINF("[%s] ec(%p), eo.x(%d), eo.y(%d), eo.w(%d), eo.h(%d)\n", __func__, ec, x, y, w, h);
+
+        e_input_backend_thread_safe_call(_e_client_input_thread_eo_geometry_set, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
+     }
 }
 
 static void