The e_desk_area adds the lisenter of the resize signal in e_comp_object.
Change-Id: I05c9e211d894a6ef02248d48b4389418a6d7f6c1
e_client_size_set(cw->ec, w, h);
cw->ec->client.w = w - cw->client_inset.l - cw->client_inset.r;
cw->ec->client.h = h - cw->client_inset.t - cw->client_inset.b;
- evas_object_smart_callback_call(obj, "client_resize", NULL);
+ wl_signal_emit(&cw->events.resize, NULL);
}
return;
}
(((w - fw != pw) || (h - fh != ph))))
{
//INF("CALLBACK: REQ(%dx%d) != CUR(%dx%d)", w - fw, h - fh, pw, ph);
- evas_object_smart_callback_call(obj, "client_resize", NULL);
+ wl_signal_emit(&cw->events.resize, NULL);
/* flip for CSD */
if (cw->frame_object || cw->ec->input_only)
e_comp_object_frame_wh_adjust(obj, pw, ph, &w, &h);
}
else
{
- evas_object_smart_callback_call(obj, "client_resize", NULL);
-
/* flip for CSD */
if ((!cw->frame_object) && (!cw->ec->input_only))
w = pw, h = ph;
+
+ wl_signal_emit(&cw->events.resize, NULL);
/* "just do it" for overrides */
evas_object_resize(obj, w, h);
}
wl_signal_init(&cw->events.content_type_set);
wl_signal_init(&cw->events.color_set);
wl_signal_init(&cw->events.color_visible_set);
+ wl_signal_init(&cw->events.resize);
cw->smart_obj = obj;
cw->x = cw->y = cw->w = cw->h = -1;
API_ENTRY;
wl_signal_add(&cw->events.color_visible_set, listener);
}
+
+EINTERN void
+e_comp_object_resize_listener_add(Evas_Object *obj, struct wl_listener *listener)
+{
+ API_ENTRY;
+ wl_signal_add(&cw->events.resize, listener);
+}
struct wl_signal content_type_set;
struct wl_signal color_set;
struct wl_signal color_visible_set;
+ struct wl_signal resize;
} events;
Eina_Bool color_visible;
EINTERN void e_comp_object_content_type_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
EINTERN void e_comp_object_color_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
EINTERN void e_comp_object_color_visible_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
+EINTERN void e_comp_object_resize_listener_add(Evas_Object *obj, struct wl_listener *listener);
#endif
}
static void
-_e_comp_wl_evas_cb_resize(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
-{
- E_Client *ec;
-
- if (!(ec = data)) return;
-
- if (!ec->comp_data->shell.configure_send) return;
-
- /* TODO: calculate x, y with transfrom object */
- if ((e_client_util_resizing_get(ec)) && (!ec->transformed) && (e_comp_wl->resize.edges))
- {
- int w, h;
-
- w = ec->mouse.last_down[ec->moveinfo.down.button - 1].w;
- h = ec->mouse.last_down[ec->moveinfo.down.button - 1].h;
- if (e_comp_object_frame_exists(ec->frame))
- e_comp_object_frame_wh_unadjust(ec->frame, w, h, &w, &h);
-
- switch (ec->resize_mode)
- {
- case E_POINTER_RESIZE_TL:
- case E_POINTER_RESIZE_L:
- case E_POINTER_RESIZE_BL:
- w += ec->mouse.last_down[ec->moveinfo.down.button - 1].mx -
- ec->mouse.current.mx;
- break;
- case E_POINTER_RESIZE_TR:
- case E_POINTER_RESIZE_R:
- case E_POINTER_RESIZE_BR:
- w += ec->mouse.current.mx - ec->mouse.last_down[ec->moveinfo.down.button - 1].mx;
- break;
- default:
- break;;
- }
- switch (ec->resize_mode)
- {
- case E_POINTER_RESIZE_TL:
- case E_POINTER_RESIZE_T:
- case E_POINTER_RESIZE_TR:
- h += ec->mouse.last_down[ec->moveinfo.down.button - 1].my -
- ec->mouse.current.my;
- break;
- case E_POINTER_RESIZE_BL:
- case E_POINTER_RESIZE_B:
- case E_POINTER_RESIZE_BR:
- h += ec->mouse.current.my - ec->mouse.last_down[ec->moveinfo.down.button - 1].my;
- break;
- default:
- break;
- }
- w = E_CLAMP(w, 1, w);
- h = E_CLAMP(h, 1, h);
- e_client_resize_limit(ec, &w, &h);
-
- e_client_shell_configure_send(ec, e_comp_wl->resize.edges, w, h);
- }
- else if ((!ec->fullscreen) && (!ec->maximized) &&
- (!ec->comp_data->maximize_pre))
- {
- int pw = 0;
- int ph = 0;
- e_pixmap_size_get(ec->pixmap, &pw, &ph);
- if ((pw != ec->w) || (ph != ec->h))
- {
- _e_comp_wl_configure_send(ec, 1, 1);
- }
- }
-
- if (ec->comp_data->sub.below_obj)
- e_comp_wl_subsurface_bg_rectangle_map_apply(ec);
-}
-
-static void
_e_comp_wl_evas_cb_maximize_pre(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
{
E_Client *ec = data;
if (!ec->override)
{
- evas_object_smart_callback_add(ec->frame, "client_resize", _e_comp_wl_evas_cb_resize, ec);
evas_object_smart_callback_add(ec->frame, "maximize_pre", _e_comp_wl_evas_cb_maximize_pre, ec);
evas_object_smart_callback_add(ec->frame, "maximize_done", _e_comp_wl_evas_cb_maximize_done, ec);
evas_object_smart_callback_add(ec->frame, "unmaximize_pre", _e_comp_wl_evas_cb_unmaximize_pre, ec);
if (!ec->override)
{
- evas_object_smart_callback_del(ec->frame, "client_resize", _e_comp_wl_evas_cb_resize);
evas_object_smart_callback_del(ec->frame, "maximize_pre", _e_comp_wl_evas_cb_maximize_pre);
evas_object_smart_callback_del(ec->frame, "maximize_done", _e_comp_wl_evas_cb_maximize_done);
evas_object_smart_callback_del(ec->frame, "unmaximize_pre", _e_comp_wl_evas_cb_unmaximize_pre);
struct wl_listener comp_object_set_layer;
struct wl_listener comp_object_stack_above;
struct wl_listener comp_object_stack_below;
+ struct wl_listener comp_object_resize;
};
struct _E_Desk_Area_Smart_Data
}
static void
+_e_desk_area_configure_send(E_Client *ec, Eina_Bool edges, Eina_Bool send_size)
+{
+ int w, h;
+
+ if (send_size)
+ {
+ if (e_comp_object_frame_exists(ec->frame))
+ w = ec->client.w, h = ec->client.h;
+ else
+ w = ec->w, h = ec->h;
+ }
+ else
+ {
+ // Width and Height are -1 means that we don't consider size value
+ w = h = -1;
+ }
+
+ e_client_shell_configure_send(ec, edges * e_comp_wl->resize.edges, w, h);
+}
+
+static void
_e_comp_input_thread_layers_update(void *data)
{
E_Comp_Input_Layer_Data *layer_data = data;
_e_desk_area_client_data_del(eda, ec);
// wl_list remove
+ wl_list_remove(&eda_client->comp_object_resize.link);
wl_list_remove(&eda_client->comp_object_stack_below.link);
wl_list_remove(&eda_client->comp_object_stack_above.link);
wl_list_remove(&eda_client->comp_object_set_layer.link);
}
#endif
+
+static void
+_desk_area_cb_comp_object_resize(struct wl_listener *listener, void *data)
+{
+ E_Desk_Area_Private_Client *eda_client;
+ E_Client *ec;
+
+ eda_client = wl_container_of(listener, eda_client, comp_object_resize);
+ ec = eda_client->ec;
+
+ // "override = 1" means that ec is not controlled by wm policy
+ if (ec->override) return;
+ if (!ec->comp_data->shell.configure_send) return;
+
+ /* TODO: calculate x, y with transfrom object */
+ if ((e_client_util_resizing_get(ec)) && (!ec->transformed) && (e_comp_wl->resize.edges))
+ {
+ int w, h;
+
+ w = ec->mouse.last_down[ec->moveinfo.down.button - 1].w;
+ h = ec->mouse.last_down[ec->moveinfo.down.button - 1].h;
+ if (e_comp_object_frame_exists(ec->frame))
+ e_comp_object_frame_wh_unadjust(ec->frame, w, h, &w, &h);
+
+ switch (ec->resize_mode)
+ {
+ case E_POINTER_RESIZE_TL:
+ case E_POINTER_RESIZE_L:
+ case E_POINTER_RESIZE_BL:
+ w += ec->mouse.last_down[ec->moveinfo.down.button - 1].mx -
+ ec->mouse.current.mx;
+ break;
+ case E_POINTER_RESIZE_TR:
+ case E_POINTER_RESIZE_R:
+ case E_POINTER_RESIZE_BR:
+ w += ec->mouse.current.mx - ec->mouse.last_down[ec->moveinfo.down.button - 1].mx;
+ break;
+ default:
+ break;;
+ }
+ switch (ec->resize_mode)
+ {
+ case E_POINTER_RESIZE_TL:
+ case E_POINTER_RESIZE_T:
+ case E_POINTER_RESIZE_TR:
+ h += ec->mouse.last_down[ec->moveinfo.down.button - 1].my -
+ ec->mouse.current.my;
+ break;
+ case E_POINTER_RESIZE_BL:
+ case E_POINTER_RESIZE_B:
+ case E_POINTER_RESIZE_BR:
+ h += ec->mouse.current.my - ec->mouse.last_down[ec->moveinfo.down.button - 1].my;
+ break;
+ default:
+ break;
+ }
+ w = E_CLAMP(w, 1, w);
+ h = E_CLAMP(h, 1, h);
+ e_client_resize_limit(ec, &w, &h);
+
+ e_client_shell_configure_send(ec, e_comp_wl->resize.edges, w, h);
+ }
+ else if ((!ec->fullscreen) && (!ec->maximized) &&
+ (!ec->comp_data->maximize_pre))
+ {
+ int pw = 0;
+ int ph = 0;
+ e_pixmap_size_get(ec->pixmap, &pw, &ph);
+ if ((pw != ec->w) || (ph != ec->h))
+ {
+ _e_desk_area_configure_send(ec, 1, 1);
+ }
+ }
+
+ if (ec->comp_data->sub.below_obj)
+ e_comp_wl_subsurface_bg_rectangle_map_apply(ec);
+}
+
EINTERN E_Desk_Area *
e_desk_area_new(E_Desk *desk, int id, int x, int y, int w, int h, E_Desk_Area_Layer eda_layer)
{
eda_client->comp_object_stack_below.notify = _desk_area_cb_comp_object_stack_below;
e_comp_object_stack_below_listener_add(ec->frame, &eda_client->comp_object_stack_below);
+ eda_client->comp_object_resize.notify = _desk_area_cb_comp_object_resize;
+ e_comp_object_resize_listener_add(ec->frame, &eda_client->comp_object_resize);
+
_e_desk_area_client_data_set(eda, ec);
_e_desk_area_smart_client_add(eda->smart_obj, ec);
#else