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

Change-Id: I81abc29a48fe0d47855280866f10a336b9361788

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

index 924ac66..3aaa36a 100644 (file)
@@ -106,6 +106,7 @@ struct _E_Client_Private
 #endif
 
         struct wl_signal delete_request;
+        struct wl_signal kill_request;
      } events;
 
    Eina_Bool hide_by_request;
@@ -968,6 +969,7 @@ _e_client_private_init(E_Client *ec)
 #endif
 
    wl_signal_init(&priv->events.delete_request);
+   wl_signal_init(&priv->events.kill_request);
 
    e_object_data_set(E_OBJECT(ec), priv);
 
@@ -4958,7 +4960,7 @@ e_client_act_kill_begin(E_Client *ec)
                                          _e_client_cb_kill_timer, ec);
      }
    else
-     evas_object_smart_callback_call(ec->frame, "kill_request", NULL);
+     wl_signal_emit(&PRI(ec)->events.kill_request, ec);
 }
 
 ////////////////////////////////////////////
@@ -7465,6 +7467,13 @@ e_client_delete_request_listener_add(E_Client *ec, struct wl_listener *listener)
 }
 
 EINTERN void
+e_client_kill_request_listener_add(E_Client *ec, struct wl_listener *listener)
+{
+   API_ENTRY;
+   wl_signal_add(&priv->events.kill_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 b2f027f..4825fc8 100644 (file)
@@ -276,6 +276,7 @@ EINTERN void e_client_subsurface_stack_update_listener_add(E_Client *ec, struct
 //#endif
 
 EINTERN void e_client_delete_request_listener_add(E_Client *ec, struct wl_listener *listener);
+EINTERN void e_client_kill_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);
 
index 94b03c8..32f7288 100644 (file)
@@ -2208,27 +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_kill_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));
-   if (ec->comp_data)
-     {
-        if (ec->comp_data->reparented)
-          e_client_comp_hidden_set(ec, EINA_TRUE);
-     }
-
-   evas_object_pass_events_set(ec->frame, EINA_TRUE);
-   if (ec->visible) evas_object_hide(ec->frame);
-   if (!ec->internal) e_object_del(E_OBJECT(ec));
-
-   _e_comp_wl_focus_check();
-}
-
-static void
 _e_comp_wl_evas_cb_ping(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
 {
    E_Client *ec;
@@ -2317,9 +2296,6 @@ _e_comp_wl_client_evas_init(E_Client *ec)
    evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_FOCUS_IN,    EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_focus_in,    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, "kill_request",   _e_comp_wl_evas_cb_kill_request,   ec);
-
    /* setup ping callback */
    evas_object_smart_callback_add(ec->frame, "ping",           _e_comp_wl_evas_cb_ping,           ec);
    evas_object_smart_callback_add(ec->frame, "color_set",      _e_comp_wl_evas_cb_color_set,      ec);
@@ -2351,8 +2327,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, "kill_request",   _e_comp_wl_evas_cb_kill_request);
-
    evas_object_smart_callback_del(ec->frame, "ping",           _e_comp_wl_evas_cb_ping);
    evas_object_smart_callback_del(ec->frame, "color_set",      _e_comp_wl_evas_cb_color_set);
 
index 0d4a945..621da9c 100644 (file)
@@ -91,6 +91,7 @@ struct _E_Desk_Area_Private_Client
    struct wl_listener client_unmaximize;
    struct wl_listener client_activate_done;
    struct wl_listener delete_request;
+   struct wl_listener kill_request;
 
    // comp_object listeners
    struct wl_listener comp_object_raise;
@@ -845,6 +846,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->kill_request.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);
@@ -1854,6 +1856,33 @@ _desk_area_cb_client_delete_request(struct wl_listener *listener, void *data)
 }
 
 static void
+_desk_area_cb_client_kill_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, kill_request);
+   eda = eda_client->eda;
+   ec = eda_client->ec;
+
+   ELOGF("EDA", "CLIENT KILL REQUEST. eda:%p", ec, eda);
+
+   e_comp_ignore_win_del(E_PIXMAP_TYPE_WL, e_pixmap_window_get(ec->pixmap));
+   if (ec->comp_data)
+     {
+        if (ec->comp_data->reparented)
+          e_client_comp_hidden_set(ec, EINA_TRUE);
+     }
+
+   evas_object_pass_events_set(ec->frame, EINA_TRUE);
+   if (ec->visible) evas_object_hide(ec->frame);
+   if (!ec->internal) e_object_del(E_OBJECT(ec));
+
+   e_comp_wl_focus_check();
+}
+
+static void
 _desk_area_cb_comp_object_lower(struct wl_listener *listener, void *data)
 {
    E_Desk_Area_Private_Client *eda_client;
@@ -2607,6 +2636,8 @@ e_desk_area_ec_add(E_Desk_Area *eda, E_Client *ec)
    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);
+   eda_client->kill_request.notify = _desk_area_cb_client_kill_request;
+   e_client_kill_request_listener_add(ec, &eda_client->kill_request);
 
    // e_comp_object listeners
    eda_client->comp_object_lower.notify = _desk_area_cb_comp_object_lower;