e_comp_wl: replace "client_resize" smart call into resize signal 55/309555/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 11 Apr 2024 10:42:55 +0000 (19:42 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 12 Apr 2024 06:08:29 +0000 (15:08 +0900)
The e_desk_area adds the lisenter of the resize signal in e_comp_object.

Change-Id: I05c9e211d894a6ef02248d48b4389418a6d7f6c1

src/bin/e_comp_object.c
src/bin/e_comp_object_intern.h
src/bin/e_comp_wl.c
src/bin/e_desk_area.c

index 2d75c2a..d46ee35 100644 (file)
@@ -1661,7 +1661,7 @@ _e_comp_intercept_resize(void *data, Evas_Object *obj, int w, int h)
              e_client_size_set(cw->ec, w, h);
              cw->ec->client.w = w - cw->client_inset.l - cw->client_inset.r;
              cw->ec->client.h = h - cw->client_inset.t - cw->client_inset.b;
-             evas_object_smart_callback_call(obj, "client_resize", NULL);
+             wl_signal_emit(&cw->events.resize, NULL);
           }
         return;
      }
@@ -1755,7 +1755,7 @@ _e_comp_intercept_resize(void *data, Evas_Object *obj, int w, int h)
        (((w - fw != pw) || (h - fh != ph))))
      {
         //INF("CALLBACK: REQ(%dx%d) != CUR(%dx%d)", w - fw, h - fh, pw, ph);
-        evas_object_smart_callback_call(obj, "client_resize", NULL);
+        wl_signal_emit(&cw->events.resize, NULL);
         /* flip for CSD */
         if (cw->frame_object || cw->ec->input_only)
           e_comp_object_frame_wh_adjust(obj, pw, ph, &w, &h);
@@ -1771,11 +1771,11 @@ _e_comp_intercept_resize(void *data, Evas_Object *obj, int w, int h)
      }
    else
      {
-        evas_object_smart_callback_call(obj, "client_resize", NULL);
-
         /* flip for CSD */
         if ((!cw->frame_object) && (!cw->ec->input_only))
           w = pw, h = ph;
+
+        wl_signal_emit(&cw->events.resize, NULL);
         /* "just do it" for overrides */
         evas_object_resize(obj, w, h);
      }
@@ -3202,6 +3202,7 @@ _e_comp_smart_add(Evas_Object *obj)
    wl_signal_init(&cw->events.content_type_set);
    wl_signal_init(&cw->events.color_set);
    wl_signal_init(&cw->events.color_visible_set);
+   wl_signal_init(&cw->events.resize);
 
    cw->smart_obj = obj;
    cw->x = cw->y = cw->w = cw->h = -1;
@@ -6748,3 +6749,10 @@ e_comp_object_color_visible_set_listener_add(Evas_Object *obj, struct wl_listene
    API_ENTRY;
    wl_signal_add(&cw->events.color_visible_set, listener);
 }
+
+EINTERN void
+e_comp_object_resize_listener_add(Evas_Object *obj, struct wl_listener *listener)
+{
+   API_ENTRY;
+   wl_signal_add(&cw->events.resize, listener);
+}
index a1593df..a6ee784 100644 (file)
@@ -154,6 +154,7 @@ struct _E_Comp_Object
         struct wl_signal content_type_set;
         struct wl_signal color_set;
         struct wl_signal color_visible_set;
+        struct wl_signal resize;
      } events;
 
    Eina_Bool color_visible;
@@ -291,5 +292,6 @@ EINTERN void e_comp_object_render_op_set_listener_add(Evas_Object *obj, struct w
 EINTERN void e_comp_object_content_type_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
 EINTERN void e_comp_object_color_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
 EINTERN void e_comp_object_color_visible_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
+EINTERN void e_comp_object_resize_listener_add(Evas_Object *obj, struct wl_listener *listener);
 
 #endif
index 2158d64..0a8f94e 100644 (file)
@@ -2208,79 +2208,6 @@ _e_comp_wl_evas_cb_focus_out(void *data, Evas *evas EINA_UNUSED, Evas_Object *ob
 }
 
 static void
-_e_comp_wl_evas_cb_resize(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
-{
-   E_Client *ec;
-
-   if (!(ec = data)) return;
-
-   if (!ec->comp_data->shell.configure_send) return;
-
-   /* TODO: calculate x, y with transfrom object */
-   if ((e_client_util_resizing_get(ec)) && (!ec->transformed) && (e_comp_wl->resize.edges))
-     {
-        int w, h;
-
-        w = ec->mouse.last_down[ec->moveinfo.down.button - 1].w;
-        h = ec->mouse.last_down[ec->moveinfo.down.button - 1].h;
-        if (e_comp_object_frame_exists(ec->frame))
-          e_comp_object_frame_wh_unadjust(ec->frame, w, h, &w, &h);
-
-        switch (ec->resize_mode)
-          {
-           case E_POINTER_RESIZE_TL:
-           case E_POINTER_RESIZE_L:
-           case E_POINTER_RESIZE_BL:
-             w += ec->mouse.last_down[ec->moveinfo.down.button - 1].mx -
-               ec->mouse.current.mx;
-             break;
-           case E_POINTER_RESIZE_TR:
-           case E_POINTER_RESIZE_R:
-           case E_POINTER_RESIZE_BR:
-             w += ec->mouse.current.mx - ec->mouse.last_down[ec->moveinfo.down.button - 1].mx;
-             break;
-           default:
-             break;;
-          }
-        switch (ec->resize_mode)
-          {
-           case E_POINTER_RESIZE_TL:
-           case E_POINTER_RESIZE_T:
-           case E_POINTER_RESIZE_TR:
-             h += ec->mouse.last_down[ec->moveinfo.down.button - 1].my -
-               ec->mouse.current.my;
-             break;
-           case E_POINTER_RESIZE_BL:
-           case E_POINTER_RESIZE_B:
-           case E_POINTER_RESIZE_BR:
-             h += ec->mouse.current.my - ec->mouse.last_down[ec->moveinfo.down.button - 1].my;
-             break;
-           default:
-             break;
-          }
-        w = E_CLAMP(w, 1, w);
-        h = E_CLAMP(h, 1, h);
-        e_client_resize_limit(ec, &w, &h);
-
-        e_client_shell_configure_send(ec, e_comp_wl->resize.edges, w, h);
-     }
-   else if ((!ec->fullscreen) && (!ec->maximized) &&
-            (!ec->comp_data->maximize_pre))
-     {
-        int pw = 0;
-        int ph = 0;
-        e_pixmap_size_get(ec->pixmap, &pw, &ph);
-        if ((pw != ec->w) || (ph != ec->h))
-          {
-             _e_comp_wl_configure_send(ec, 1, 1);
-          }
-     }
-
-   if (ec->comp_data->sub.below_obj)
-     e_comp_wl_subsurface_bg_rectangle_map_apply(ec);
-}
-
-static void
 _e_comp_wl_evas_cb_maximize_pre(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
 {
    E_Client *ec = data;
@@ -2484,7 +2411,6 @@ _e_comp_wl_client_evas_init(E_Client *ec)
 
    if (!ec->override)
      {
-        evas_object_smart_callback_add(ec->frame, "client_resize",   _e_comp_wl_evas_cb_resize,          ec);
         evas_object_smart_callback_add(ec->frame, "maximize_pre",    _e_comp_wl_evas_cb_maximize_pre,    ec);
         evas_object_smart_callback_add(ec->frame, "maximize_done",   _e_comp_wl_evas_cb_maximize_done,   ec);
         evas_object_smart_callback_add(ec->frame, "unmaximize_pre",  _e_comp_wl_evas_cb_unmaximize_pre,  ec);
@@ -2530,7 +2456,6 @@ _e_comp_wl_client_evas_deinit(E_Client *ec)
 
    if (!ec->override)
      {
-        evas_object_smart_callback_del(ec->frame, "client_resize",   _e_comp_wl_evas_cb_resize);
         evas_object_smart_callback_del(ec->frame, "maximize_pre",    _e_comp_wl_evas_cb_maximize_pre);
         evas_object_smart_callback_del(ec->frame, "maximize_done",   _e_comp_wl_evas_cb_maximize_done);
         evas_object_smart_callback_del(ec->frame, "unmaximize_pre",  _e_comp_wl_evas_cb_unmaximize_pre);
index d995c02..2e8e375 100644 (file)
@@ -95,6 +95,7 @@ struct _E_Desk_Area_Private_Client
    struct wl_listener comp_object_set_layer;
    struct wl_listener comp_object_stack_above;
    struct wl_listener comp_object_stack_below;
+   struct wl_listener comp_object_resize;
 };
 
 struct _E_Desk_Area_Smart_Data
@@ -154,6 +155,27 @@ _e_desk_area_client_data_set(E_Desk_Area *eda, E_Client *ec)
 }
 
 static void
+_e_desk_area_configure_send(E_Client *ec, Eina_Bool edges, Eina_Bool send_size)
+{
+   int w, h;
+
+   if (send_size)
+     {
+        if (e_comp_object_frame_exists(ec->frame))
+          w = ec->client.w, h = ec->client.h;
+        else
+          w = ec->w, h = ec->h;
+     }
+   else
+     {
+        // Width and Height are -1 means that we don't consider size value
+        w = h = -1;
+     }
+
+   e_client_shell_configure_send(ec, edges * e_comp_wl->resize.edges, w, h);
+}
+
+static void
 _e_comp_input_thread_layers_update(void *data)
 {
    E_Comp_Input_Layer_Data *layer_data = data;
@@ -813,6 +835,7 @@ _e_desk_area_private_client_del(E_Desk_Area_Private_Client *eda_client)
    _e_desk_area_client_data_del(eda, ec);
 
    // wl_list remove
+   wl_list_remove(&eda_client->comp_object_resize.link);
    wl_list_remove(&eda_client->comp_object_stack_below.link);
    wl_list_remove(&eda_client->comp_object_stack_above.link);
    wl_list_remove(&eda_client->comp_object_set_layer.link);
@@ -2056,6 +2079,84 @@ _desk_area_cb_comp_object_stack_below(struct wl_listener *listener, void *data)
 }
 #endif
 
+
+static void
+_desk_area_cb_comp_object_resize(struct wl_listener *listener, void *data)
+{
+   E_Desk_Area_Private_Client *eda_client;
+   E_Client *ec;
+
+   eda_client = wl_container_of(listener, eda_client, comp_object_resize);
+   ec = eda_client->ec;
+
+   // "override = 1" means that ec is not controlled by wm policy
+   if (ec->override) return;
+   if (!ec->comp_data->shell.configure_send) return;
+
+   /* TODO: calculate x, y with transfrom object */
+   if ((e_client_util_resizing_get(ec)) && (!ec->transformed) && (e_comp_wl->resize.edges))
+     {
+        int w, h;
+
+        w = ec->mouse.last_down[ec->moveinfo.down.button - 1].w;
+        h = ec->mouse.last_down[ec->moveinfo.down.button - 1].h;
+        if (e_comp_object_frame_exists(ec->frame))
+          e_comp_object_frame_wh_unadjust(ec->frame, w, h, &w, &h);
+
+        switch (ec->resize_mode)
+          {
+           case E_POINTER_RESIZE_TL:
+           case E_POINTER_RESIZE_L:
+           case E_POINTER_RESIZE_BL:
+             w += ec->mouse.last_down[ec->moveinfo.down.button - 1].mx -
+               ec->mouse.current.mx;
+             break;
+           case E_POINTER_RESIZE_TR:
+           case E_POINTER_RESIZE_R:
+           case E_POINTER_RESIZE_BR:
+             w += ec->mouse.current.mx - ec->mouse.last_down[ec->moveinfo.down.button - 1].mx;
+             break;
+           default:
+             break;;
+          }
+        switch (ec->resize_mode)
+          {
+           case E_POINTER_RESIZE_TL:
+           case E_POINTER_RESIZE_T:
+           case E_POINTER_RESIZE_TR:
+             h += ec->mouse.last_down[ec->moveinfo.down.button - 1].my -
+               ec->mouse.current.my;
+             break;
+           case E_POINTER_RESIZE_BL:
+           case E_POINTER_RESIZE_B:
+           case E_POINTER_RESIZE_BR:
+             h += ec->mouse.current.my - ec->mouse.last_down[ec->moveinfo.down.button - 1].my;
+             break;
+           default:
+             break;
+          }
+        w = E_CLAMP(w, 1, w);
+        h = E_CLAMP(h, 1, h);
+        e_client_resize_limit(ec, &w, &h);
+
+        e_client_shell_configure_send(ec, e_comp_wl->resize.edges, w, h);
+     }
+   else if ((!ec->fullscreen) && (!ec->maximized) &&
+            (!ec->comp_data->maximize_pre))
+     {
+        int pw = 0;
+        int ph = 0;
+        e_pixmap_size_get(ec->pixmap, &pw, &ph);
+        if ((pw != ec->w) || (ph != ec->h))
+          {
+             _e_desk_area_configure_send(ec, 1, 1);
+          }
+     }
+
+   if (ec->comp_data->sub.below_obj)
+     e_comp_wl_subsurface_bg_rectangle_map_apply(ec);
+}
+
 EINTERN E_Desk_Area *
 e_desk_area_new(E_Desk *desk, int id, int x, int y, int w, int h, E_Desk_Area_Layer eda_layer)
 {
@@ -2461,6 +2562,9 @@ e_desk_area_ec_add(E_Desk_Area *eda, E_Client *ec)
    eda_client->comp_object_stack_below.notify = _desk_area_cb_comp_object_stack_below;
    e_comp_object_stack_below_listener_add(ec->frame, &eda_client->comp_object_stack_below);
 
+   eda_client->comp_object_resize.notify = _desk_area_cb_comp_object_resize;
+   e_comp_object_resize_listener_add(ec->frame, &eda_client->comp_object_resize);
+
    _e_desk_area_client_data_set(eda, ec);
    _e_desk_area_smart_client_add(eda->smart_obj, ec);
 #else