e_comp_wl: remove "delete_request" smart call 62/309562/1
authorSooChan Lim <sc1.lim@samsung.com>
Fri, 12 Apr 2024 00:11:31 +0000 (09:11 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 12 Apr 2024 06:08:29 +0000 (15:08 +0900)
e_client provides the delete_reuqest signal and
move the implementation of delete_request callback function
to e_desk_area

Change-Id: Id38a62fba649987c89ea09b6a13cb34121a26500

src/bin/e_client.c
src/bin/e_client_intern.h
src/bin/e_comp_wl.c
src/bin/e_desk_area.c

index 065efdf..924ac66 100644 (file)
@@ -104,6 +104,8 @@ struct _E_Client_Private
         struct wl_signal get_visible_below;
         struct wl_signal subsurface_stack_update;
 #endif
+
+        struct wl_signal delete_request;
      } events;
 
    Eina_Bool hide_by_request;
@@ -965,6 +967,8 @@ _e_client_private_init(E_Client *ec)
    wl_signal_init(&priv->events.subsurface_stack_update);
 #endif
 
+   wl_signal_init(&priv->events.delete_request);
+
    e_object_data_set(E_OBJECT(ec), priv);
 
    return EINA_TRUE;
@@ -4932,7 +4936,7 @@ e_client_act_close_begin(E_Client *ec)
    if (ec->icccm.delete_request)
      {
         ec->delete_requested = 1;
-        evas_object_smart_callback_call(ec->frame, "delete_request", NULL);
+        wl_signal_emit(&PRI(ec)->events.delete_request, ec);
      }
    else if (e_config->kill_if_close_not_possible)
      {
@@ -7454,6 +7458,13 @@ e_client_subsurface_stack_update_listener_add(E_Client *ec, struct wl_listener *
 #endif
 
 EINTERN void
+e_client_delete_request_listener_add(E_Client *ec, struct wl_listener *listener)
+{
+   API_ENTRY;
+   wl_signal_add(&priv->events.delete_request, listener);
+}
+
+EINTERN void
 e_client_shell_configure_send(E_Client *ec, uint32_t edges, int32_t width, int32_t height)
 {
    EINA_SAFETY_ON_NULL_RETURN(ec);
index 7b2eb55..b2f027f 100644 (file)
@@ -275,6 +275,8 @@ EINTERN void e_client_get_visible_below_listener_add(E_Client *ec, struct wl_lis
 EINTERN void e_client_subsurface_stack_update_listener_add(E_Client *ec, struct wl_listener *listener);
 //#endif
 
+EINTERN void e_client_delete_request_listener_add(E_Client *ec, struct wl_listener *listener);
+
 EINTERN struct wl_listener  *e_client_destroy_listener_get(E_Client *ec, wl_notify_func_t notify);
 
 void e_client_show(E_Client *ec);
index 8b037d9..94b03c8 100644 (file)
@@ -2208,23 +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_delete_request(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
-{
-   E_Client *ec;
-
-   if (!(ec = data)) return;
-
-   e_comp_ignore_win_del(E_PIXMAP_TYPE_WL, e_pixmap_window_get(ec->pixmap));
-
-   e_object_del(E_OBJECT(ec));
-
-   _e_comp_wl_focus_check();
-
-   /* TODO: Delete request send ??
-    * NB: No such animal wrt wayland */
-}
-
-static void
 _e_comp_wl_evas_cb_kill_request(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
 {
    E_Client *ec;
@@ -2335,7 +2318,6 @@ _e_comp_wl_client_evas_init(E_Client *ec)
    evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_FOCUS_OUT,   EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_focus_out,   ec);
 
    /* setup delete/kill callbacks */
-   evas_object_smart_callback_add(ec->frame, "delete_request", _e_comp_wl_evas_cb_delete_request, ec);
    evas_object_smart_callback_add(ec->frame, "kill_request",   _e_comp_wl_evas_cb_kill_request,   ec);
 
    /* setup ping callback */
@@ -2369,7 +2351,6 @@ _e_comp_wl_client_evas_deinit(E_Client *ec)
    evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_FOCUS_IN,  _e_comp_wl_evas_cb_focus_in);
    evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_FOCUS_OUT, _e_comp_wl_evas_cb_focus_out);
 
-   evas_object_smart_callback_del(ec->frame, "delete_request", _e_comp_wl_evas_cb_delete_request);
    evas_object_smart_callback_del(ec->frame, "kill_request",   _e_comp_wl_evas_cb_kill_request);
 
    evas_object_smart_callback_del(ec->frame, "ping",           _e_comp_wl_evas_cb_ping);
index e9678ff..0d4a945 100644 (file)
@@ -14,6 +14,8 @@
 #include "e_zone_intern.h"
 #include "e_desk_intern.h"
 #include "e_utils_intern.h"
+#include "e_comp_intern.h"
+#include "e_comp_wl_intern.h"
 
 #include <libds-tizen/screen.h>
 
@@ -88,6 +90,7 @@ struct _E_Desk_Area_Private_Client
    struct wl_listener client_maximize;
    struct wl_listener client_unmaximize;
    struct wl_listener client_activate_done;
+   struct wl_listener delete_request;
 
    // comp_object listeners
    struct wl_listener comp_object_raise;
@@ -842,6 +845,7 @@ _e_desk_area_private_client_del(E_Desk_Area_Private_Client *eda_client)
    wl_list_remove(&eda_client->comp_object_lower.link);
    wl_list_remove(&eda_client->comp_object_raise.link);
 
+   wl_list_remove(&eda_client->delete_request.link);
    wl_list_remove(&eda_client->client_activate_done.link);
    wl_list_remove(&eda_client->client_unmaximize.link);
    wl_list_remove(&eda_client->client_maximize.link);
@@ -1827,6 +1831,29 @@ _desk_area_cb_client_activate_done(struct wl_listener *listener, void *data)
 }
 
 static void
+_desk_area_cb_client_delete_request(struct wl_listener *listener, void *data)
+{
+   E_Desk_Area_Private_Client *eda_client;
+   E_Desk_Area *eda;
+   E_Client *ec;
+
+   eda_client = wl_container_of(listener, eda_client, delete_request);
+   eda = eda_client->eda;
+   ec = eda_client->ec;
+
+   ELOGF("EDA", "CLIENT DELETE REQUEST. eda:%p", ec, eda);
+
+   e_comp_ignore_win_del(E_PIXMAP_TYPE_WL, e_pixmap_window_get(ec->pixmap));
+
+   e_object_del(E_OBJECT(ec));
+
+   e_comp_wl_focus_check();
+
+   /* TODO: Delete request send ??
+    * NB: No such animal wrt wayland */
+}
+
+static void
 _desk_area_cb_comp_object_lower(struct wl_listener *listener, void *data)
 {
    E_Desk_Area_Private_Client *eda_client;
@@ -2578,6 +2605,8 @@ e_desk_area_ec_add(E_Desk_Area *eda, E_Client *ec)
    e_client_unmaximize_listener_add(ec, &eda_client->client_unmaximize);
    eda_client->client_activate_done.notify = _desk_area_cb_client_activate_done;
    e_client_activate_done_listener_add(ec, &eda_client->client_activate_done);
+   eda_client->delete_request.notify = _desk_area_cb_client_delete_request;
+   e_client_delete_request_listener_add(ec, &eda_client->delete_request);
 
    // e_comp_object listeners
    eda_client->comp_object_lower.notify = _desk_area_cb_comp_object_lower;