From: SooChan Lim Date: Fri, 12 Apr 2024 00:20:04 +0000 (+0900) Subject: e_comp_wl: remove "kill_request" smart call X-Git-Tag: accepted/tizen/unified/20240422.153206~29 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2bcbdf8ab20d1e3328ccd3a54a33eab5029fca9d;p=platform%2Fupstream%2Fenlightenment.git e_comp_wl: remove "kill_request" smart call e_client provides the kill_reuqest signal and move the implementation of kill_request callback function to e_desk_area Change-Id: I81abc29a48fe0d47855280866f10a336b9361788 --- diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 924ac6696c..3aaa36a541 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -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); } //////////////////////////////////////////// @@ -7464,6 +7466,13 @@ e_client_delete_request_listener_add(E_Client *ec, struct wl_listener *listener) wl_signal_add(&priv->events.delete_request, 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) { diff --git a/src/bin/e_client_intern.h b/src/bin/e_client_intern.h index b2f027fa8d..4825fc8089 100644 --- a/src/bin/e_client_intern.h +++ b/src/bin/e_client_intern.h @@ -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); diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 94b03c82b5..32f7288546 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -2207,27 +2207,6 @@ _e_comp_wl_evas_cb_focus_out(void *data, Evas *evas EINA_UNUSED, Evas_Object *ob e_input_thread_safe_call(_e_comp_wl_input_thread_focus_out, (void *)&surface, sizeof(struct wl_resource *)); } -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) { @@ -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); diff --git a/src/bin/e_desk_area.c b/src/bin/e_desk_area.c index 0d4a945c74..621da9ca58 100644 --- a/src/bin/e_desk_area.c +++ b/src/bin/e_desk_area.c @@ -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); @@ -1853,6 +1855,33 @@ _desk_area_cb_client_delete_request(struct wl_listener *listener, void *data) * NB: No such animal wrt wayland */ } +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) { @@ -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;