From a1979ff87b05e9418349e2d2831b60f739d8d55e Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 15 Apr 2024 14:02:31 +0900 Subject: [PATCH] e_desk_area: add redirect listener Change-Id: Ie4cc66cdd07072e1073034f3d596fbd2e3729220 --- src/bin/e_desk_area.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/bin/e_desk_area.c b/src/bin/e_desk_area.c index b1d861f..91647e9 100644 --- a/src/bin/e_desk_area.c +++ b/src/bin/e_desk_area.c @@ -93,6 +93,7 @@ struct _E_Desk_Area_Private_Client struct wl_listener delete_request; struct wl_listener kill_request; struct wl_listener ping; + struct wl_listener redirect; // comp_object listeners struct wl_listener comp_object_raise; @@ -849,6 +850,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->redirect.link); wl_list_remove(&eda_client->ping.link); wl_list_remove(&eda_client->kill_request.link); wl_list_remove(&eda_client->delete_request.link); @@ -1269,7 +1271,7 @@ _desk_area_cb_client_unfullscreen(struct wl_listener *listener, void *data) e_client_frame_update(ec); if (ec->comp_data->shell.configure_send) - _e_comp_wl_configure_send(ec, 0, 0); + _e_desk_area_configure_send(ec, 0, 0); ec->comp_data->maximize_pre = 0; @@ -1901,6 +1903,47 @@ _desk_area_cb_client_ping(struct wl_listener *listener, void *data) } static void +_desk_area_cb_client_redirect(struct wl_listener *listener, void *data) +{ + E_Desk_Area_Private_Client *eda_client; + E_Desk_Area *eda; + E_Client *ec; + int w, h, pw, ph; + + eda_client = wl_container_of(listener, eda_client, redirect); + eda = eda_client->eda; + ec = eda_client->ec; + + ELOGF("EDA", "CLIENT REDIRECT. eda:%p", ec, eda); + + /* - get current size + * - calc new size + * - readjust for new frame size + */ + + w = ec->w, h = ec->h; + e_comp_object_frame_wh_unadjust(ec->frame, w, h, &pw, &ph); + + e_comp_object_frame_recalc(ec->frame); + + if (!ec->fullscreen) + e_comp_object_frame_wh_adjust(ec->frame, ec->client.w, ec->client.h, &w, &h); + + if (ec->fullscreen) + { + evas_object_resize(ec->frame, eda->w, eda->h); + } + else if (ec->new_client) + { + if ((ec->w < 1) || (ec->h < 1)) return; + e_comp_object_frame_wh_adjust(ec->frame, pw, ph, &w, &h); + evas_object_resize(ec->frame, w, h); + } + else if ((w != ec->w) || (h != ec->h)) + evas_object_resize(ec->frame, w, h); +} + +static void _desk_area_cb_comp_object_lower(struct wl_listener *listener, void *data) { E_Desk_Area_Private_Client *eda_client; @@ -2675,6 +2718,8 @@ e_desk_area_ec_add(E_Desk_Area *eda, E_Client *ec) e_client_kill_request_listener_add(ec, &eda_client->kill_request); eda_client->ping.notify = _desk_area_cb_client_ping; e_client_ping_listener_add(ec, &eda_client->ping); + eda_client->redirect.notify = _desk_area_cb_client_redirect; + e_client_redirect_listener_add(ec, &eda_client->redirect); // e_comp_object listeners eda_client->comp_object_lower.notify = _desk_area_cb_comp_object_lower; -- 2.7.4