From 5494ddd424d0f8c02f15df3b15649c142d93659d Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 14 Mar 2016 14:26:29 -0400 Subject: [PATCH] enforce bryce zone setting and clip setting resolves issues where non-primary screens would have differing behaviors --- src/bin/e_bryce.c | 81 +++++++++++++++++++++++++--------------- src/bin/e_bryce_editor.c | 6 +++ 2 files changed, 56 insertions(+), 31 deletions(-) diff --git a/src/bin/e_bryce.c b/src/bin/e_bryce.c index f68445ce1..3cc9088aa 100644 --- a/src/bin/e_bryce.c +++ b/src/bin/e_bryce.c @@ -184,7 +184,10 @@ _bryce_autosize(Bryce *b) E_FREE_FUNC(b->calc_job, ecore_job_del); if (!b->autosize) { - evas_object_geometry_get(b->parent, NULL, NULL, &w, &h); + if (b->parent == e_comp->elm) + w = e_comp_zone_number_get(b->zone)->w, h = e_comp_zone_number_get(b->zone)->h; + else + evas_object_geometry_get(b->parent, NULL, NULL, &w, &h); if (b->size_changed) elm_object_content_unset(b->scroller); _bryce_position(b, w, h, &x, &y); @@ -382,6 +385,40 @@ _bryce_moveresize_save(void *data) return EINA_FALSE; } +static void +_bryce_zone_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Bryce *b = data; + e_object_del(E_OBJECT(b->e_obj_inherit)); +} + +static void +_bryce_zone_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Bryce *b = data; + if (!b->calc_job) + b->calc_job = ecore_job_add((Ecore_Cb)_bryce_autosize, b); +} + +static void +_bryce_zone_setup(Bryce *b) +{ + Evas_Object *zone_clip; + + zone_clip = evas_object_clip_get(b->bryce); + if (zone_clip) + { + evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_DEL, _bryce_zone_del, b); + evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_MOVE, _bryce_zone_moveresize, b); + evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_RESIZE, _bryce_zone_moveresize, b); + } + zone_clip = e_comp_zone_number_get(b->zone)->bg_clip_object; + evas_object_clip_set(b->bryce, zone_clip); + evas_object_event_callback_add(zone_clip, EVAS_CALLBACK_DEL, _bryce_zone_del, b); + evas_object_event_callback_add(zone_clip, EVAS_CALLBACK_MOVE, _bryce_zone_moveresize, b); + evas_object_event_callback_add(zone_clip, EVAS_CALLBACK_RESIZE, _bryce_zone_moveresize, b); +} + static void _bryce_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { @@ -401,7 +438,7 @@ _bryce_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event else size = w; - if (b->size != size) + if (size && (b->size != size)) { if (b->save_timer) ecore_timer_reset(b->save_timer); @@ -461,9 +498,11 @@ _bryce_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event } } if (!zone) return; - if (b->zone != zone->num) - e_config_save_queue(); + if (b->zone == zone->num) return; + e_config_save_queue(); b->zone = zone->num; + _bryce_zone_setup(b); + _bryce_autosize(b); } static Eina_Bool @@ -541,27 +580,12 @@ _bryce_popup_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event _bryce_autohide_hide(b); } -static void -_bryce_zone_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - e_object_del(E_OBJECT(b->e_obj_inherit)); -} - -static void -_bryce_zone_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Bryce *b = data; - if (!b->calc_job) - b->calc_job = ecore_job_add((Ecore_Cb)_bryce_autosize, b); -} - static void _bryce_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Bryce *b = data; Evas_Object *p; - E_Zone *zone; + Evas_Object *zone_clip; void *obs; EINA_LIST_FREE(b->zone_obstacles, obs) @@ -575,12 +599,12 @@ _bryce_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void * ecore_timer_del(b->save_timer); EINA_LIST_FREE(b->popups, p) evas_object_event_callback_del(p, EVAS_CALLBACK_HIDE, _bryce_popup_hide); - zone = e_comp_zone_number_get(b->zone); - if (zone) + zone_clip = evas_object_clip_get(b->bryce); + if (zone_clip) { - evas_object_event_callback_del(zone->bg_clip_object, EVAS_CALLBACK_DEL, _bryce_zone_del); - evas_object_event_callback_del(zone->bg_clip_object, EVAS_CALLBACK_MOVE, _bryce_zone_moveresize); - evas_object_event_callback_del(zone->bg_clip_object, EVAS_CALLBACK_RESIZE, _bryce_zone_moveresize); + evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_DEL, _bryce_zone_del, b); + evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_MOVE, _bryce_zone_moveresize, b); + evas_object_event_callback_del_full(zone_clip, EVAS_CALLBACK_RESIZE, _bryce_zone_moveresize, b); } E_FREE(b->e_obj_inherit); } @@ -779,7 +803,6 @@ static void _bryce_create(Bryce *b, Evas_Object *parent) { Evas_Object *ly, *bryce, *scr; - Evas_Object *zone_clip; b->e_obj_inherit = E_OBJECT_ALLOC(E_Object, E_BRYCE_TYPE, _bryce_object_free); e_object_data_set(b->e_obj_inherit, b); @@ -813,11 +836,7 @@ _bryce_create(Bryce *b, Evas_Object *parent) evas_object_event_callback_add(bryce, EVAS_CALLBACK_MOUSE_UP, _bryce_mouse_up, b); evas_object_event_callback_add(bryce, EVAS_CALLBACK_MOUSE_WHEEL, _bryce_mouse_wheel, b); - zone_clip = e_comp_zone_number_get(b->zone)->bg_clip_object; - evas_object_clip_set(bryce, zone_clip); - evas_object_event_callback_add(zone_clip, EVAS_CALLBACK_DEL, _bryce_zone_del, b); - evas_object_event_callback_add(zone_clip, EVAS_CALLBACK_MOVE, _bryce_zone_moveresize, b); - evas_object_event_callback_add(zone_clip, EVAS_CALLBACK_RESIZE, _bryce_zone_moveresize, b); + _bryce_zone_setup(b); _bryce_autohide_setup(b); _bryce_autosize(b); } diff --git a/src/bin/e_bryce_editor.c b/src/bin/e_bryce_editor.c index 6cd0f5a5f..895e4a651 100644 --- a/src/bin/e_bryce_editor.c +++ b/src/bin/e_bryce_editor.c @@ -40,6 +40,8 @@ _editor_bryce_add(Evas_Object *obj) char buf[1024]; const char *loc = "", *loc2 = ""; Bryce_Info *bi; + E_Zone *zone; + int x, y; E_Gadget_Site_Gravity gravity = E_GADGET_SITE_GRAVITY_CENTER; bi = evas_object_data_get(obj, "__bryce_info"); @@ -90,6 +92,10 @@ _editor_bryce_add(Evas_Object *obj) e_gadget_site_gadget_add(site, "Digital Clock", 0); e_gadget_site_gadget_add(site, "Wireless", 0); } + zone = e_comp_object_util_zone_get(obj); + if (!zone) zone = e_zone_current_get(); + evas_object_geometry_get(b, &x, &y, NULL, NULL); + evas_object_move(b, x + zone->x, y + zone->y); e_gadget_site_gravity_set(site, gravity); e_bryce_style_set(b, bi->style); e_bryce_autohide_set(b, bi->autohide);