Improving ibox.

* New config options that allow to show iconified wins from all zones/current zone/all zone desktops/current zone desktop.
* fixing multiple config dialogs issue. Only one config dialog is allowed per module instance.


SVN revision: 23103
This commit is contained in:
sndev 2006-06-03 00:03:09 +00:00 committed by sndev
parent 590b5ac93d
commit d13e0da18a
4 changed files with 291 additions and 67 deletions

3
TODO
View File

@ -82,9 +82,6 @@ Some of the things (in very short form) that need to be done to E17...
* option to allow flipping desktops to wrap at virtual desktop grid edges * option to allow flipping desktops to wrap at virtual desktop grid edges
* window menu with raise/lower for windows (obviously missing currently) * window menu with raise/lower for windows (obviously missing currently)
* ibox should have options "Show from this desktop", "Show from all desktops",
"show from zones", "show from this zone", etc. Similarly to those, that are
in winlist.
* winlist and exebuf can let the mouse select items * winlist and exebuf can let the mouse select items
* option to NOT raise on focus in click to focus * option to NOT raise on focus in click to focus
* switch to desktop of a new window if it opens on another desktop than the * switch to desktop of a new window if it opens on another desktop than the

View File

@ -7,6 +7,15 @@
struct _E_Config_Dialog_Data struct _E_Config_Dialog_Data
{ {
int show_label; int show_label;
int zone_policy;
int desk_policy;
struct
{
Evas_Object *o_desk_show_all;
Evas_Object *o_desk_show_active;
} gui;
}; };
/* Protos */ /* Protos */
@ -15,6 +24,11 @@ static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static void _cb_zone_policy_change(void *data, Evas_Object *obj);
void void
_config_ibox_module(Config_Item *ci) _config_ibox_module(Config_Item *ci)
{ {
@ -34,13 +48,15 @@ _config_ibox_module(Config_Item *ci)
/* Create The Dialog */ /* Create The Dialog */
cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()), cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
_("IBox Configuration"), NULL, 0, v, ci); _("IBox Configuration"), NULL, 0, v, ci);
ibox_config->config_dialog = cfd; ibox_config->config_dialog = evas_list_append(ibox_config->config_dialog, cfd);
} }
static void static void
_fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata) _fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata)
{ {
cfdata->show_label = ci->show_label; cfdata->show_label = ci->show_label;
cfdata->zone_policy = ci->show_zone;
cfdata->desk_policy = ci->show_desk;
} }
static void * static void *
@ -58,32 +74,110 @@ _create_data(E_Config_Dialog *cfd)
static void static void
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{ {
ibox_config->config_dialog = NULL; ibox_config->config_dialog = evas_list_remove(ibox_config->config_dialog, cfd);
free(cfdata); free(cfdata);
} }
static Evas_Object * static Evas_Object *
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{ {
Evas_Object *o, *of, *ob; E_Radio_Group *rg;
Evas_Object *o, *ol, *of, *ob;
Evas_List *l, *l2;
int zone_count;
char buf[256];
o = e_widget_list_add(evas, 0, 0); o = e_widget_list_add(evas, 0, 0);
of = e_widget_framelist_add(evas, _("General Settings"), 0); of = e_widget_framelist_add(evas, _("General Settings"), 0);
ob = e_widget_check_add(evas, _("Show Icon Label"), &(cfdata->show_label)); ob = e_widget_check_add(evas, _("Show Icon Label"), &(cfdata->show_label));
e_widget_framelist_object_append(of, ob); e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5); e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Zone"), 0);
zone_count = 0;
for (l = e_manager_list(); l; l = l->next)
{
E_Manager *man;
man = l->data;
for (l2 = man->containers; l2; l2 = l2->next)
{
E_Container *con;
con = l2->data;
zone_count += evas_list_count(con->zones);
}
}
if (zone_count <= 1) cfdata->zone_policy = 1;
rg = e_widget_radio_group_new((int *)&(cfdata->zone_policy));
ob = e_widget_radio_add(evas, _("Show windows from all zones"), 0, rg);
e_widget_on_change_hook_set(ob, _cb_zone_policy_change, cfdata);
e_widget_framelist_object_append(of, ob);
if (zone_count <= 1) e_widget_disabled_set(ob, 1);
ob = e_widget_radio_add(evas, _("Show windows from current zone"), 1, rg);
e_widget_on_change_hook_set(ob, _cb_zone_policy_change, cfdata);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Desktop"), 0);
rg = e_widget_radio_group_new((int *)&(cfdata->desk_policy));
ob = e_widget_radio_add(evas, _("Show windows from all desktops"), 0, rg);
e_widget_framelist_object_append(of, ob);
if (cfdata->zone_policy == 0) e_widget_disabled_set(ob, 1);
cfdata->gui.o_desk_show_all = ob;
ob = e_widget_radio_add(evas, _("Show windows from active desktop"), 1, rg);
e_widget_framelist_object_append(of, ob);
if (cfdata->zone_policy == 0) e_widget_disabled_set(ob, 1);
cfdata->gui.o_desk_show_active = ob;
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o; return o;
} }
static int static int
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{ {
Config_Item *ci; Config_Item *ci;
ci = cfd->data; ci = cfd->data;
ci->show_label = cfdata->show_label; ci->show_label = cfdata->show_label;
ci->show_zone = cfdata->zone_policy;
ci->show_desk = cfdata->desk_policy;
_ibox_config_update(); _ibox_config_update();
e_config_save_queue(); e_config_save_queue();
return 1; return 1;
} }
/****** callbacks **********/
static void
_cb_zone_policy_change(void *data, Evas_Object *obj)
{
E_Config_Dialog_Data *cfdata;
cfdata = data;
if (cfdata->zone_policy == 0)
{
e_widget_disabled_set(cfdata->gui.o_desk_show_all, 1);
e_widget_disabled_set(cfdata->gui.o_desk_show_active, 1);
}
else
{
e_widget_disabled_set(cfdata->gui.o_desk_show_all, 0);
e_widget_disabled_set(cfdata->gui.o_desk_show_active, 0);
}
}

View File

@ -53,6 +53,8 @@ struct _IBox
int drop_before; int drop_before;
Evas_List *icons; Evas_List *icons;
int show_label; int show_label;
int show_zone;
int show_desk;
E_Zone *zone; E_Zone *zone;
}; };
@ -88,7 +90,8 @@ static void _ibox_icon_free(IBox_Icon *ic);
static void _ibox_icon_fill(IBox_Icon *ic); static void _ibox_icon_fill(IBox_Icon *ic);
static void _ibox_icon_empty(IBox_Icon *ic); static void _ibox_icon_empty(IBox_Icon *ic);
static void _ibox_icon_signal_emit(IBox_Icon *ic, char *sig, char *src); static void _ibox_icon_signal_emit(IBox_Icon *ic, char *sig, char *src);
static IBox *_ibox_zone_find(E_Zone *zone); //static IBox *_ibox_zone_find(E_Zone *zone);
static Evas_List *_ibox_zone_find(E_Zone *zone);
static int _ibox_cb_timer_drop_recalc(void *data); static int _ibox_cb_timer_drop_recalc(void *data);
static void _ibox_cb_obj_moveresize(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _ibox_cb_obj_moveresize(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _ibox_cb_menu_post(void *data, E_Menu *m); static void _ibox_cb_menu_post(void *data, E_Menu *m);
@ -111,6 +114,7 @@ static int _ibox_cb_event_border_iconify(void *data, int type, void *event);
static int _ibox_cb_event_border_uniconify(void *data, int type, void *event); static int _ibox_cb_event_border_uniconify(void *data, int type, void *event);
static int _ibox_cb_event_border_icon_change(void *data, int type, void *event); static int _ibox_cb_event_border_icon_change(void *data, int type, void *event);
static int _ibox_cb_event_border_zone_set(void *data, int type, void *event); static int _ibox_cb_event_border_zone_set(void *data, int type, void *event);
static int _ibox_cb_event_desk_show(void *data, int type, void *event);
static Config_Item *_ibox_config_item_get(const char *id); static Config_Item *_ibox_config_item_get(const char *id);
static E_Config_DD *conf_edd = NULL; static E_Config_DD *conf_edd = NULL;
@ -137,6 +141,10 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
b = _ibox_new(gc->evas, gc->zone); b = _ibox_new(gc->evas, gc->zone);
b->show_label = ci->show_label; b->show_label = ci->show_label;
b->show_zone = ci->show_zone;
b->show_desk = ci->show_desk;
_ibox_fill(b);
b->inst = inst; b->inst = inst;
inst->ibox = b; inst->ibox = b;
o = b->o_box; o = b->o_box;
@ -249,7 +257,6 @@ _ibox_new(Evas *evas, E_Zone *zone)
e_box_orientation_set(b->o_box, 1); e_box_orientation_set(b->o_box, 1);
e_box_align_set(b->o_box, 0.5, 0.5); e_box_align_set(b->o_box, 0.5, 0.5);
b->zone = zone; b->zone = zone;
_ibox_fill(b);
return b; return b;
} }
@ -344,15 +351,34 @@ _ibox_fill(IBox *b)
IBox_Icon *ic; IBox_Icon *ic;
E_Border_List *bl; E_Border_List *bl;
E_Border *bd; E_Border *bd;
int ok;
bl = e_container_border_list_first(b->zone->container); bl = e_container_border_list_first(b->zone->container);
while ((bd = e_container_border_list_next(bl))) while ((bd = e_container_border_list_next(bl)))
{ {
if ((bd->zone == b->zone) && (bd->iconic)) ok = 0;
if ((b->show_zone == 0) && (bd->iconic))
{ {
ok = 1;
}
else if((b->show_zone == 1) && (bd->iconic))
{
if ((b->show_desk == 0) && (bd->zone == b->zone))
{
ok = 1;
}
else if((b->show_desk == 1) && (bd->zone == b->zone) &&
(bd->desk == e_desk_current_get(b->zone)))
{
ok = 1;
}
}
if (ok)
{
ic = _ibox_icon_new(b, bd); ic = _ibox_icon_new(b, bd);
b->icons = evas_list_append(b->icons, ic); b->icons = evas_list_append(b->icons, ic);
e_box_pack_end(b->o_box, ic->o_holder); e_box_pack_end(b->o_box, ic->o_holder);
} }
} }
@ -547,19 +573,29 @@ _ibox_icon_signal_emit(IBox_Icon *ic, char *sig, char *src)
edje_object_signal_emit(ic->o_icon2, sig, src); edje_object_signal_emit(ic->o_icon2, sig, src);
} }
static IBox * static Evas_List *
_ibox_zone_find(E_Zone *zone) _ibox_zone_find(E_Zone *zone)
{ {
Evas_List *ibox = NULL;
Evas_List *l; Evas_List *l;
for (l = ibox_config->instances; l; l = l->next) for (l = ibox_config->instances; l; l = l->next)
{ {
Instance *inst; Instance *inst;
Config_Item *ci;
inst = l->data; inst = l->data;
if (inst->ibox->zone == zone) return inst->ibox; ci = _ibox_config_item_get(inst->gcc->id);
if (!ci) continue;
if (ci->show_zone == 0)
ibox = evas_list_append(ibox, inst->ibox);
else if (ci->show_zone == 1)
{
if (inst->ibox->zone == zone) ibox = evas_list_append(ibox, inst->ibox);
}
} }
return NULL; return ibox;
} }
static int static int
@ -971,6 +1007,7 @@ _ibox_inst_cb_drop(void *data, const char *type, void *event_info)
static int static int
_ibox_cb_event_border_add(void *data, int type, void *event) _ibox_cb_event_border_add(void *data, int type, void *event)
{ {
int ok;
E_Event_Border_Add *ev; E_Event_Border_Add *ev;
IBox *b; IBox *b;
IBox_Icon *ic; IBox_Icon *ic;
@ -979,16 +1016,23 @@ _ibox_cb_event_border_add(void *data, int type, void *event)
/* add if iconic */ /* add if iconic */
if (ev->border->iconic) if (ev->border->iconic)
{ {
b = _ibox_zone_find(ev->border->zone); Evas_List *l, *ibox;
if (!b) return 1; ibox = _ibox_zone_find(ev->border->zone);
if (_ibox_icon_find(b, ev->border)) return 1; for (l = ibox; l; l = l->next)
ic = _ibox_icon_new(b, ev->border); {
if (!ic) return 1; b = l->data;
b->icons = evas_list_append(b->icons, ic); if (_ibox_icon_find(b, ev->border)) continue;
e_box_pack_end(b->o_box, ic->o_holder); ic = _ibox_icon_new(b, ev->border);
_ibox_empty_handle(b); if (!ic) continue;
_ibox_resize_handle(b); b->icons = evas_list_append(b->icons, ic);
_gc_orient(b->inst->gcc); e_box_pack_end(b->o_box, ic->o_holder);
_ibox_empty_handle(b);
_ibox_resize_handle(b);
_gc_orient(b->inst->gcc);
}
while (ibox)
ibox = evas_list_remove_list(ibox, ibox);
} }
return 1; return 1;
} }
@ -999,18 +1043,25 @@ _ibox_cb_event_border_remove(void *data, int type, void *event)
E_Event_Border_Remove *ev; E_Event_Border_Remove *ev;
IBox *b; IBox *b;
IBox_Icon *ic; IBox_Icon *ic;
Evas_List *l, *ibox;
ev = event; ev = event;
/* find icon and remove if there */ /* find icon and remove if there */
b = _ibox_zone_find(ev->border->zone); ibox = _ibox_zone_find(ev->border->zone);
if (!b) return 1; for (l = ibox; l; l = l->next)
ic = _ibox_icon_find(b, ev->border); {
if (!ic) return 1; b = l->data;
_ibox_icon_free(ic); ic = _ibox_icon_find(b, ev->border);
b->icons = evas_list_remove(b->icons, ic); if (!ic) continue;
_ibox_empty_handle(b); _ibox_icon_free(ic);
_ibox_resize_handle(b); b->icons = evas_list_remove(b->icons, ic);
_gc_orient(b->inst->gcc); _ibox_empty_handle(b);
_ibox_resize_handle(b);
_gc_orient(b->inst->gcc);
}
while (ibox)
ibox = evas_list_remove_list(ibox, ibox);
return 1; return 1;
} }
@ -1020,20 +1071,27 @@ _ibox_cb_event_border_iconify(void *data, int type, void *event)
E_Event_Border_Iconify *ev; E_Event_Border_Iconify *ev;
IBox *b; IBox *b;
IBox_Icon *ic; IBox_Icon *ic;
Evas_List *l, *ibox;
ev = event; ev = event;
/* add icon for ibox for right zone */ /* add icon for ibox for right zone */
/* do some sort of anim when iconifying */ /* do some sort of anim when iconifying */
b = _ibox_zone_find(ev->border->zone); ibox = _ibox_zone_find(ev->border->zone);
if (!b) return 1; for (l = ibox; l; l = l->next)
if (_ibox_icon_find(b, ev->border)) return 1; {
ic = _ibox_icon_new(b, ev->border); b = l->data;
if (!ic) return 1; if (_ibox_icon_find(b, ev->border)) continue;
b->icons = evas_list_append(b->icons, ic); ic = _ibox_icon_new(b, ev->border);
e_box_pack_end(b->o_box, ic->o_holder); if (!ic) continue;
_ibox_empty_handle(b); b->icons = evas_list_append(b->icons, ic);
_ibox_resize_handle(b); e_box_pack_end(b->o_box, ic->o_holder);
_gc_orient(b->inst->gcc); _ibox_empty_handle(b);
_ibox_resize_handle(b);
_gc_orient(b->inst->gcc);
}
while (ibox)
ibox = evas_list_remove_list(ibox, ibox);
return 1; return 1;
} }
@ -1043,19 +1101,27 @@ _ibox_cb_event_border_uniconify(void *data, int type, void *event)
E_Event_Border_Uniconify *ev; E_Event_Border_Uniconify *ev;
IBox *b; IBox *b;
IBox_Icon *ic; IBox_Icon *ic;
Evas_List *l, *ibox;
ev = event; ev = event;
/* del icon for ibox for right zone */ /* del icon for ibox for right zone */
/* do some sort of anim when uniconifying */ /* do some sort of anim when uniconifying */
b = _ibox_zone_find(ev->border->zone); ibox = _ibox_zone_find(ev->border->zone);
if (!b) return 1; for (l = ibox; l; l = l->next)
ic = _ibox_icon_find(b, ev->border); {
if (!ic) return 1; b = l->data;
_ibox_icon_free(ic); ic = _ibox_icon_find(b, ev->border);
b->icons = evas_list_remove(b->icons, ic); if (!ic) continue;
_ibox_empty_handle(b); _ibox_icon_free(ic);
_ibox_resize_handle(b); b->icons = evas_list_remove(b->icons, ic);
_gc_orient(b->inst->gcc); _ibox_empty_handle(b);
_ibox_resize_handle(b);
_gc_orient(b->inst->gcc);
}
while (ibox)
ibox = evas_list_remove_list(ibox, ibox);
return 1; return 1;
} }
@ -1065,15 +1131,23 @@ _ibox_cb_event_border_icon_change(void *data, int type, void *event)
E_Event_Border_Icon_Change *ev; E_Event_Border_Icon_Change *ev;
IBox *b; IBox *b;
IBox_Icon *ic; IBox_Icon *ic;
Evas_List *l, *ibox;
ev = event; ev = event;
/* update icon */ /* update icon */
b = _ibox_zone_find(ev->border->zone); ibox = _ibox_zone_find(ev->border->zone);
if (!b) return 1; for (l = ibox; l; l = l->next)
ic = _ibox_icon_find(b, ev->border); {
if (!ic) return 1; b = l->data;
_ibox_icon_empty(ic); ic = _ibox_icon_find(b, ev->border);
_ibox_icon_fill(ic); if (!ic) continue;
_ibox_icon_empty(ic);
_ibox_icon_fill(ic);
}
while (ibox)
ibox = evas_list_remove_list(ibox, ibox);
return 1; return 1;
} }
@ -1092,6 +1166,30 @@ _ibox_cb_event_border_zone_set(void *data, int type, void *event)
return 1; return 1;
} }
static int _ibox_cb_event_desk_show(void *data, int type, void *event)
{
E_Event_Desk_Show *ev;
IBox *b;
Evas_List *l, *ibox;
ev = event;
/* delete all wins from ibox and add only for current desk */
ibox = _ibox_zone_find(ev->desk->zone);
for (l = ibox; l; l = l->next)
{
b = l->data;
_ibox_empty(b);
_ibox_fill(b);
_ibox_resize_handle(b);
_gc_orient(b->inst->gcc);
}
while (ibox)
ibox = evas_list_remove_list(ibox, ibox);
return 1;
}
static Config_Item * static Config_Item *
_ibox_config_item_get(const char *id) _ibox_config_item_get(const char *id)
{ {
@ -1107,6 +1205,8 @@ _ibox_config_item_get(const char *id)
ci = E_NEW(Config_Item, 1); ci = E_NEW(Config_Item, 1);
ci->id = evas_stringshare_add(id); ci->id = evas_stringshare_add(id);
ci->show_label = 0; ci->show_label = 0;
ci->show_zone = 1;
ci->show_desk = 0;
ibox_config->items = evas_list_append(ibox_config->items, ci); ibox_config->items = evas_list_append(ibox_config->items, ci);
return ci; return ci;
} }
@ -1123,6 +1223,13 @@ _ibox_config_update(void)
inst = l->data; inst = l->data;
ci = _ibox_config_item_get(inst->gcc->id); ci = _ibox_config_item_get(inst->gcc->id);
inst->ibox->show_label = ci->show_label; inst->ibox->show_label = ci->show_label;
inst->ibox->show_zone = ci->show_zone;
inst->ibox->show_desk = ci->show_desk;
_ibox_empty(inst->ibox);
_ibox_fill(inst->ibox);
_ibox_resize_handle(inst->ibox);
_gc_orient(inst->gcc);
} }
} }
@ -1131,10 +1238,23 @@ _ibox_cb_menu_configuration(void *data, E_Menu *m, E_Menu_Item *mi)
{ {
IBox *b; IBox *b;
Config_Item *ci; Config_Item *ci;
int ok = 1;
Evas_List *l;
b = data; b = data;
ci = _ibox_config_item_get(b->inst->gcc->id); ci = _ibox_config_item_get(b->inst->gcc->id);
_config_ibox_module(ci); for (l = ibox_config->config_dialog; l; l = l->next)
{
E_Config_Dialog *cfd;
cfd = l->data;
if (cfd->data == ci)
{
ok = 0;
break;
}
}
if (ok) _config_ibox_module(ci);
} }
/***************************************************************************/ /***************************************************************************/
@ -1156,6 +1276,8 @@ e_modapi_init(E_Module *m)
#define D conf_item_edd #define D conf_item_edd
E_CONFIG_VAL(D, T, id, STR); E_CONFIG_VAL(D, T, id, STR);
E_CONFIG_VAL(D, T, show_label, INT); E_CONFIG_VAL(D, T, show_label, INT);
E_CONFIG_VAL(D, T, show_zone, INT);
E_CONFIG_VAL(D, T, show_desk, INT);
conf_edd = E_CONFIG_DD_NEW("IBox_Config", Config); conf_edd = E_CONFIG_DD_NEW("IBox_Config", Config);
#undef T #undef T
@ -1174,6 +1296,8 @@ e_modapi_init(E_Module *m)
ci = E_NEW(Config_Item, 1); ci = E_NEW(Config_Item, 1);
ci->id = evas_stringshare_add("0"); ci->id = evas_stringshare_add("0");
ci->show_label = 0; ci->show_label = 0;
ci->show_zone = 1;
ci->show_desk = 0;
ibox_config->items = evas_list_append(ibox_config->items, ci); ibox_config->items = evas_list_append(ibox_config->items, ci);
} }
@ -1197,6 +1321,9 @@ e_modapi_init(E_Module *m)
ibox_config->handlers = evas_list_append ibox_config->handlers = evas_list_append
(ibox_config->handlers, ecore_event_handler_add (ibox_config->handlers, ecore_event_handler_add
(E_EVENT_BORDER_ZONE_SET, _ibox_cb_event_border_zone_set, NULL)); (E_EVENT_BORDER_ZONE_SET, _ibox_cb_event_border_zone_set, NULL));
ibox_config->handlers = evas_list_append
(ibox_config->handlers, ecore_event_handler_add
(E_EVENT_DESK_SHOW, _ibox_cb_event_desk_show, NULL));
/* FIXME: add these later for things taskbar-like functionality /* FIXME: add these later for things taskbar-like functionality
ibox_config->handlers = evas_list_append ibox_config->handlers = evas_list_append
@ -1224,14 +1351,18 @@ e_modapi_shutdown(E_Module *m)
{ {
e_gadcon_provider_unregister(&_gadcon_class); e_gadcon_provider_unregister(&_gadcon_class);
if (ibox_config->config_dialog)
e_object_del(E_OBJECT(ibox_config->config_dialog));
while (ibox_config->handlers) while (ibox_config->handlers)
{ {
ecore_event_handler_del(ibox_config->handlers->data); ecore_event_handler_del(ibox_config->handlers->data);
ibox_config->handlers = evas_list_remove_list(ibox_config->handlers, ibox_config->handlers); ibox_config->handlers = evas_list_remove_list(ibox_config->handlers, ibox_config->handlers);
} }
while (ibox_config->config_dialog)
/* there is no need to eves_list_remove_list. It is done implicitly in
* dialog _free_data function
*/
e_object_del(E_OBJECT(ibox_config->config_dialog->data));
if (ibox_config->menu) if (ibox_config->menu)
{ {
e_menu_post_deactivate_callback_set(ibox_config->menu, NULL, NULL); e_menu_post_deactivate_callback_set(ibox_config->menu, NULL, NULL);

View File

@ -15,13 +15,15 @@ struct _Config
E_Menu *menu; E_Menu *menu;
Evas_List *handlers; Evas_List *handlers;
Evas_List *items; Evas_List *items;
E_Config_Dialog *config_dialog; Evas_List *config_dialog;//E_Config_Dialog *;
}; };
struct _Config_Item struct _Config_Item
{ {
const char *id; const char *id;
int show_label; int show_label;
int show_zone;
int show_desk;
}; };
EAPI extern E_Module_Api e_modapi; EAPI extern E_Module_Api e_modapi;