tiling: place popup on the current active zone

Otherwise the popup will be where you are not looking at.

This patch adds a new function to e_comp_object where you can pass the
zone where you want to place the e_comp_object on.

ref T4499
This commit is contained in:
Marcel Hollerbach 2016-09-06 16:31:13 +02:00
parent 5df7963ad1
commit f5e4403164
3 changed files with 34 additions and 4 deletions

View File

@ -3043,14 +3043,12 @@ e_comp_object_util_zone_get(Evas_Object *obj)
}
E_API void
e_comp_object_util_center(Evas_Object *obj)
e_comp_object_util_center_on_zone(Evas_Object *obj, E_Zone *zone)
{
int x, y, w, h, ow, oh;
E_Zone *zone;
SOFT_ENTRY();
zone = e_comp_object_util_zone_get(obj);
EINA_SAFETY_ON_NULL_RETURN(zone);
e_zone_useful_geometry_get(zone, &x, &y, &w, &h);
if (cw && (cw->ec->changes.size || cw->ec->new_client))
@ -3062,6 +3060,16 @@ e_comp_object_util_center(Evas_Object *obj)
evas_object_move(obj, x, y);
}
E_API void
e_comp_object_util_center(Evas_Object *obj)
{
E_Zone *zone;
zone = e_comp_object_util_zone_get(obj);
e_comp_object_util_center_on_zone(obj, zone);
}
E_API void
e_comp_object_util_center_on(Evas_Object *obj, Evas_Object *on)
{

View File

@ -54,6 +54,7 @@ E_API Eina_Bool e_comp_object_util_autoclose_on_escape(void *d EINA_UNUSED, Ecor
E_API void e_comp_object_util_autoclose(Evas_Object *obj, E_Comp_Object_Autoclose_Cb del_cb, E_Comp_Object_Key_Cb cb, const void *data);
E_API void e_comp_object_util_center(Evas_Object *obj);
E_API void e_comp_object_util_center_on(Evas_Object *obj, Evas_Object *on);
E_API void e_comp_object_util_center_on_zone(Evas_Object *obj, E_Zone *zone);
E_API void e_comp_object_util_center_pos_get(Evas_Object *obj, int *x, int *y);
E_API void e_comp_object_util_fullscreen(Evas_Object *obj);
E_API Eina_Bool e_comp_object_frame_allowed(Evas_Object *obj);

View File

@ -96,6 +96,7 @@ static struct tiling_mod_main_g
Evas_Object *comp_obj;
Evas_Object *obj;
Ecore_Timer *timer;
E_Desk *desk;
} split_popup;
} _G =
{
@ -844,6 +845,7 @@ _split_type_popup_timer_del_cb(void *data EINA_UNUSED)
_G.split_popup.comp_obj = NULL;
_G.split_popup.obj = NULL;
_G.split_popup.timer = NULL;
_G.split_popup.desk = NULL;
return EINA_FALSE;
}
@ -853,8 +855,19 @@ _tiling_split_type_changed_popup(void)
{
Evas_Object *comp_obj = _G.split_popup.comp_obj;
Evas_Object *o = _G.split_popup.obj;
E_Desk *desk = NULL;
/* If this is not NULL, the rest isn't either. */
/* check for the current desk we have */
if (e_client_focused_get())
{
E_Client *c;
c = e_client_focused_get();
desk = c->desk;
}
if (!o)
{
_G.split_popup.obj = o = edje_object_add(e_comp->evas);
@ -864,7 +877,12 @@ _tiling_split_type_changed_popup(void)
evas_object_resize(o, TILING_POPUP_SIZE, TILING_POPUP_SIZE);
_G.split_popup.comp_obj = comp_obj = e_comp_object_util_add(o, E_COMP_OBJECT_TYPE_POPUP);
e_comp_object_util_center(comp_obj);
if (desk)
e_comp_object_util_center_on_zone(comp_obj, e_zone_current_get());
else
e_comp_object_util_center(comp_obj);
_G.split_popup.desk = desk;
evas_object_layer_set(comp_obj, E_LAYER_POPUP);
evas_object_pass_events_set(comp_obj, EINA_TRUE);
@ -874,9 +892,12 @@ _tiling_split_type_changed_popup(void)
}
else
{
if (desk != _G.split_popup.desk)
e_comp_object_util_center_on_zone(comp_obj, e_zone_current_get());
ecore_timer_reset(_G.split_popup.timer);
}
_edje_tiling_icon_set(o);
}