hide gadget editor when dragging/wizarding a new gadget

This commit is contained in:
Mike Blumenkrantz 2017-06-23 17:41:39 -04:00
parent 11a6d7ae35
commit be0015a283
4 changed files with 55 additions and 12 deletions

View File

@ -34,6 +34,8 @@ typedef struct E_Gadget_Site
E_Gadget_Config *action;
Ecore_Event_Handler *move_handler;
Ecore_Event_Handler *mouse_up_handler;
Evas_Object *editor;
} E_Gadget_Site;
@ -126,6 +128,17 @@ static Eina_Bool _gadget_object_create(E_Gadget_Config *zgc);
static void _editor_pointer_site_init(E_Gadget_Site_Orient orient, Evas_Object *site, Evas_Object *editor, Eina_Bool );
static void _gadget_drop_handler_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED);
static Eina_Bool
_editor_site_visible(void)
{
Eina_List *l;
E_Gadget_Site *zgs;
EINA_LIST_FOREACH(sites->sites, l, zgs)
if (zgs->editor && evas_object_visible_get(zgs->editor)) return EINA_TRUE;
return EINA_FALSE;
}
static void
_comp_site_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
@ -341,11 +354,23 @@ _gadget_wizard_end(void *data, int id)
zgc->id = id;
evas_object_smart_callback_call(zgc->site->layout, "gadget_site_unlocked", NULL);
if (id)
_gadget_object_finalize(zgc);
{
_gadget_object_finalize(zgc);
added = 0;
}
else
_gadget_remove(zgc);
}
static void
_gadget_wizard_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
E_Gadget_Config *zgc = data;
if (zgc->cfg_object == obj) zgc->cfg_object = NULL;
if (zgc->site->editor) evas_object_show(zgc->site->editor);
}
static Eina_Bool
_gadget_object_create(E_Gadget_Config *zgc)
{
@ -359,12 +384,19 @@ _gadget_object_create(E_Gadget_Config *zgc)
{
if (t->wizard)
{
zgc->cfg_object = t->wizard(_gadget_wizard_end, zgc);
if (!zgc->cfg_object)
{
added = 1;
if (zgc->site->editor) evas_object_show(zgc->site->editor);
return EINA_FALSE;
}
evas_object_event_callback_add(zgc->cfg_object, EVAS_CALLBACK_DEL, _gadget_wizard_del, zgc);
evas_object_smart_callback_call(zgc->site->layout, "gadget_site_locked", NULL);
t->wizard(_gadget_wizard_end, zgc);
added = 1;
return EINA_TRUE;
}
}
if (zgc->site->editor) evas_object_show(zgc->site->editor);
if ((zgc->zone >= 0) && (!e_comp_zone_number_get(zgc->zone))) return EINA_FALSE;
/* if id is < 0, gadget creates dummy config for demo use
* if id is 0, gadget creates new config and returns id
@ -2131,6 +2163,8 @@ _editor_gadget_new(void *data, Evas_Object *obj, void *event_info)
Gadget_Item *gi = data;
E_Gadget_Site_Orient orient;
ZGS_GET(gi->site);
evas_object_hide(zgs->editor);
orient = e_gadget_site_orient_get(gi->site);
_editor_pointer_site_init(orient, gi->site, gi->editor, 0);
e_comp_object_util_del_list_append(gi->editor, pointer_site);
@ -2274,6 +2308,8 @@ e_gadget_site_edit(Evas_Object *site)
Evas_Object *comp_object, *popup, *editor, *tb, *r;
E_Zone *zone, *czone;
ZGS_GET(site);
EINA_SAFETY_ON_TRUE_RETURN_VAL(!!zgs->editor, NULL);
zone = e_comp_object_util_zone_get(site);
czone = e_zone_current_get();
if (zone != czone)
@ -2310,6 +2346,8 @@ e_gadget_site_edit(Evas_Object *site)
evas_object_show(comp_object);
evas_object_resize(comp_object, zone->w / 2, zone->h / 2);
e_comp_object_util_center_on_zone(comp_object, zone);
/* FIXME: embedded editors? */
zgs->editor = comp_object;
return comp_object;
}
@ -2369,6 +2407,7 @@ _gadget_desklock_key_handler(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event
static void
_gadget_desklock_mouse_up_handler()
{
if (!_editor_site_visible()) return;
if (!added)
_gadget_desklock_del();
added = 0;
@ -2443,6 +2482,7 @@ _gadget_desktop_key_handler(void *data, int t EINA_UNUSED, Ecore_Event_Key *ev)
static void
_gadget_desktop_mouse_up_handler()
{
if (!_editor_site_visible()) return;
if (!added)
_edit_end();
added = 0;

View File

@ -116,7 +116,7 @@ typedef enum
typedef Evas_Object *(*E_Gadget_Create_Cb)(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient);
typedef Evas_Object *(*E_Gadget_Configure_Cb)(Evas_Object *gadget);
typedef void (*E_Gadget_Wizard_End_Cb)(void *data, int id);
typedef void (*E_Gadget_Wizard_Cb)(E_Gadget_Wizard_End_Cb cb, void *data);
typedef Evas_Object *(*E_Gadget_Wizard_Cb)(E_Gadget_Wizard_End_Cb cb, void *data);
typedef void (*E_Gadget_Style_Cb)(Evas_Object *owner, Eina_Stringshare *name, Evas_Object *g);
EINTERN void e_gadget_init(void);

View File

@ -467,12 +467,13 @@ _wizard_end(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
free(wi);
}
static void
static Evas_Object *
clock_wizard(E_Gadget_Wizard_End_Cb cb, void *data, Eina_Bool digital)
{
int id = 0;
Config_Item *ci;
Wizard_Item *wi;
Evas_Object *obj;
wi = E_NEW(Wizard_Item, 1);
wi->cb = cb;
@ -480,19 +481,21 @@ clock_wizard(E_Gadget_Wizard_End_Cb cb, void *data, Eina_Bool digital)
ci = _conf_item_get(&id, digital);
wi->id = ci->id;
evas_object_event_callback_add(config_clock(ci, NULL), EVAS_CALLBACK_DEL, _wizard_end, wi);
obj = config_clock(ci, NULL);
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _wizard_end, wi);
return obj;
}
EINTERN void
EINTERN Evas_Object *
digital_clock_wizard(E_Gadget_Wizard_End_Cb cb, void *data)
{
clock_wizard(cb, data, 1);
return clock_wizard(cb, data, 1);
}
EINTERN void
EINTERN Evas_Object *
analog_clock_wizard(E_Gadget_Wizard_End_Cb cb, void *data)
{
clock_wizard(cb, data, 0);
return clock_wizard(cb, data, 0);
}
EINTERN void

View File

@ -82,8 +82,8 @@ EINTERN void time_zoneinfo_scan(Evas_Object *obj);
EINTERN Evas_Object *digital_clock_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient);
EINTERN Evas_Object *analog_clock_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient);
EINTERN void digital_clock_wizard(E_Gadget_Wizard_End_Cb cb, void *data);
EINTERN void analog_clock_wizard(E_Gadget_Wizard_End_Cb cb, void *data);
EINTERN Evas_Object *digital_clock_wizard(E_Gadget_Wizard_End_Cb cb, void *data);
EINTERN Evas_Object *analog_clock_wizard(E_Gadget_Wizard_End_Cb cb, void *data);
EINTERN void clock_popup_new(Instance *inst);
EINTERN void time_config_update(Config_Item *ci);