add workarounds for ctxpopup geometry for use in input shape tiling

ref T4687
This commit is contained in:
Mike Blumenkrantz 2016-10-26 10:27:40 -04:00
parent 2af066c97a
commit 3e6f2f1fa7
2 changed files with 19 additions and 0 deletions

View File

@ -706,6 +706,12 @@ _e_comp_shapes_update_object_shape_comp_helper(Evas_Object *o, Eina_Tiler *tb)
if (_e_comp_shapes_update_object_checker_function_thingy(o)) return;
SHAPE_INF("OBJ: %p:%s", o, evas_object_name_get(o) ?: evas_object_type_get(o));
evas_object_geometry_get(o, &x, &y, &w, &h);
if ((!w) && (!h) && elm_object_widget_check(o))
{
Evas_Object *content = elm_object_content_get(o);
if (content)
evas_object_geometry_get(content, &x, &y, &w, &h);
}
eina_tiler_rect_add(tb, &(Eina_Rectangle){x, y, w, h});
SHAPE_INF("ADD: %d,%d@%dx%d", x, y, w, h);
}

View File

@ -1557,17 +1557,25 @@ _gadget_util_ctxpopup_visibility(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Ev
e_comp_shape_queue();
}
static void
_gadget_util_ctxpopup_moveresize(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
e_comp_shape_queue();
}
E_API void
e_gadget_util_ctxpopup_place(Evas_Object *g, Evas_Object *ctx, Evas_Object *pos_obj)
{
int x, y, w, h;
E_Layer layer;
E_Gadget_Config *zgc;
Evas_Object *content;
EINA_SAFETY_ON_NULL_RETURN(g);
zgc = evas_object_data_get(g, "__e_gadget");
EINA_SAFETY_ON_NULL_RETURN(zgc);
content = elm_object_content_get(ctx);
elm_ctxpopup_hover_parent_set(ctx, e_comp->elm);
layer = MAX(evas_object_layer_get(pos_obj ?: g), E_LAYER_POPUP);
evas_object_layer_set(ctx, layer);
@ -1590,6 +1598,11 @@ e_gadget_util_ctxpopup_place(Evas_Object *g, Evas_Object *ctx, Evas_Object *pos_
evas_object_move(ctx, x, y);
evas_object_event_callback_add(ctx, EVAS_CALLBACK_SHOW, _gadget_util_ctxpopup_visibility, NULL);
evas_object_event_callback_add(ctx, EVAS_CALLBACK_HIDE, _gadget_util_ctxpopup_visibility, NULL);
if (content)
{
evas_object_event_callback_add(content, EVAS_CALLBACK_MOVE, _gadget_util_ctxpopup_moveresize, NULL);
evas_object_event_callback_add(content, EVAS_CALLBACK_RESIZE, _gadget_util_ctxpopup_moveresize, NULL);
}
evas_object_smart_callback_call(zgc->site->layout, "gadget_site_popup", ctx);
if (evas_object_visible_get(ctx))
e_comp_shape_queue();