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;
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);
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;
}
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;
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;