Luncher: Add config options to function only as a launcher, only as a taskbar, or as both.

This commit is contained in:
Stephen 'Okra' Houston 2017-02-27 20:57:18 -06:00
parent fa0d585aa5
commit 2ef2c37062
4 changed files with 280 additions and 78 deletions

View File

@ -239,12 +239,12 @@ _bar_instance_watch(void *data, E_Exec_Instance *ex, E_Exec_Watch_Type type)
case E_EXEC_WATCH_STARTED: case E_EXEC_WATCH_STARTED:
if (ic->starting) elm_layout_signal_emit(ic->o_layout, "e,state,started", "e"); if (ic->starting) elm_layout_signal_emit(ic->o_layout, "e,state,started", "e");
ic->starting = EINA_FALSE; ic->starting = EINA_FALSE;
if (!ic->execs) if (!ic->execs && ic->inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY)
{ {
snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(ic->inst)); snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(ic->inst));
elm_layout_signal_emit(ic->o_layout, ori, "e"); elm_layout_signal_emit(ic->o_layout, ori, "e");
} }
if (!eina_list_data_find(ic->execs, ex)) if (!eina_list_data_find(ic->execs, ex) && ic->inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY)
ic->execs = eina_list_append(ic->execs, ex); ic->execs = eina_list_append(ic->execs, ex);
break; break;
case E_EXEC_WATCH_TIMEOUT: case E_EXEC_WATCH_TIMEOUT:
@ -1057,40 +1057,6 @@ _bar_icon_file_set(Icon *ic, Efreet_Desktop *desktop, E_Client *non_desktop_clie
elm_image_file_set(ic->o_overlay, path, k); elm_image_file_set(ic->o_overlay, path, k);
} }
static void
_bar_icon_resized(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
{
//This code is supposed to adjust aspect correctly when there is an effect happening. Uncomment to test.
/*Instance *inst = data;
Icon *ic = NULL;
Eina_List *l = NULL;
Evas_Coord aspect = 0, large = 0, w, h;
if (!inst->effect) return;
switch (e_gadget_site_orient_get(e_gadget_site_get(inst->o_main)))
{
case E_GADGET_SITE_ORIENT_VERTICAL:
EINA_LIST_FOREACH(inst->icons, l, ic)
{
evas_object_geometry_get(ic->o_icon, 0, 0, &w, &h);
if (w > large)
large = w;
aspect += h;
}
evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, large, aspect);
break;
default:
EINA_LIST_FOREACH(inst->icons, l, ic)
{
evas_object_geometry_get(ic->o_icon, 0, 0, &w, &h);
if (h > large)
large = h;
aspect += w;
}
evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, aspect, large);
}*/
}
static Icon * static Icon *
_bar_icon_add(Instance *inst, Efreet_Desktop *desktop, E_Client *non_desktop_client) _bar_icon_add(Instance *inst, Efreet_Desktop *desktop, E_Client *non_desktop_client)
{ {
@ -1119,7 +1085,7 @@ _bar_icon_add(Instance *inst, Efreet_Desktop *desktop, E_Client *non_desktop_cli
"e/gadget/luncher/icon"); "e/gadget/luncher/icon");
E_EXPAND(ic->o_layout); E_EXPAND(ic->o_layout);
E_FILL(ic->o_layout); E_FILL(ic->o_layout);
edje_object_signal_callback_add(elm_layout_edje_get(ic->o_layout), "e,state,resized", "e", _bar_icon_resized, inst); // edje_object_signal_callback_add(elm_layout_edje_get(ic->o_layout), "e,state,resized", "e", _bar_icon_resized, inst);
elm_box_pack_end(inst->o_icon_con, ic->o_layout); elm_box_pack_end(inst->o_icon_con, ic->o_layout);
evas_object_show(ic->o_layout); evas_object_show(ic->o_layout);
@ -1179,12 +1145,15 @@ _bar_icon_add(Instance *inst, Efreet_Desktop *desktop, E_Client *non_desktop_cli
if (desktop) if (desktop)
{ {
l = e_exec_desktop_instances_find(desktop); if (inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY)
if (l)
{ {
snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(inst)); l = e_exec_desktop_instances_find(desktop);
elm_layout_signal_emit(ic->o_layout, ori, "e"); if (l)
ic->execs = eina_list_clone(l); {
snprintf(ori, sizeof(ori), "e,state,on,%s", _bar_location_get(inst));
elm_layout_signal_emit(ic->o_layout, ori, "e");
ic->execs = eina_list_clone(l);
}
} }
} }
else else
@ -1497,7 +1466,7 @@ _bar_fill(Instance *inst)
Icon *ic; Icon *ic;
char ori[32]; char ori[32];
if (inst->order) if (inst->order && inst->cfg->type != E_LUNCHER_MODULE_TASKS_ONLY)
{ {
Efreet_Desktop *desktop; Efreet_Desktop *desktop;
Eina_List *list; Eina_List *list;
@ -1509,6 +1478,11 @@ _bar_fill(Instance *inst)
inst->icons = eina_list_append(inst->icons, ic); inst->icons = eina_list_append(inst->icons, ic);
} }
} }
if (inst->cfg->type == E_LUNCHER_MODULE_LAUNCH_ONLY)
{
_bar_aspect(inst);
return;
}
it = eina_hash_iterator_data_new(execs); it = eina_hash_iterator_data_new(execs);
EINA_ITERATOR_FOREACH(it, l) EINA_ITERATOR_FOREACH(it, l)
{ {
@ -1796,11 +1770,17 @@ _bar_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data)
{ {
Instance *inst = data; Instance *inst = data;
char buf[4096]; char buf[4096];
Ecore_Event_Handler *handler;
if (inst->o_main != event_data) return; if (inst->o_main != event_data) return;
if (e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s", inst->cfg->dir) >= sizeof(buf)) if (e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s", inst->cfg->dir) >= sizeof(buf))
return; return;
EINA_LIST_FREE(handlers, handler)
E_FREE_FUNC(handler, ecore_event_handler_del);
E_FREE_FUNC(inst->iconify_provider, e_comp_object_effect_mover_del);
luncher_config->items = eina_list_remove(luncher_config->items, inst->cfg); luncher_config->items = eina_list_remove(luncher_config->items, inst->cfg);
eina_stringshare_del(inst->cfg->style); eina_stringshare_del(inst->cfg->style);
eina_stringshare_del(inst->cfg->dir); eina_stringshare_del(inst->cfg->dir);
@ -1909,19 +1889,23 @@ _bar_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED)
inst->order = e_order_new(buf); inst->order = e_order_new(buf);
e_order_update_callback_set(inst->order, _bar_order_update, inst); e_order_update_callback_set(inst->order, _bar_order_update, inst);
inst->iconify_provider = e_comp_object_effect_mover_add(80, "e,action,*iconify", if (inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY)
_bar_iconify_start, inst); {
inst->iconify_provider = e_comp_object_effect_mover_add(80, "e,action,*iconify",
_bar_iconify_start, inst);
}
_bar_fill(inst); _bar_fill(inst);
inst->drop_handler = if (inst->cfg->type != E_LUNCHER_MODULE_TASKS_ONLY)
e_gadget_drop_handler_add(inst->o_main, inst, {
_bar_drop_enter, _bar_drop_move, inst->drop_handler =
_bar_drop_leave, _bar_drop_drop, e_gadget_drop_handler_add(inst->o_main, inst,
drop, 3); _bar_drop_enter, _bar_drop_move,
elm_layout_content_set(inst->o_main, "e.swallow.drop", inst->drop_handler); _bar_drop_leave, _bar_drop_drop,
evas_object_show(inst->drop_handler); drop, 3);
elm_layout_content_set(inst->o_main, "e.swallow.drop", inst->drop_handler);
evas_object_show(inst->drop_handler);
}
evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_RESIZE, _bar_resize, inst); evas_object_event_callback_add(inst->o_main, EVAS_CALLBACK_RESIZE, _bar_resize, inst);
} }
@ -1945,6 +1929,7 @@ _conf_item_get(int *id)
ci->id = -1; ci->id = -1;
ci->dir = eina_stringshare_add("default"); ci->dir = eina_stringshare_add("default");
ci->style = eina_stringshare_add("default"); ci->style = eina_stringshare_add("default");
ci->type = E_LUNCHER_MODULE_FULL;
luncher_config->items = eina_list_append(luncher_config->items, ci); luncher_config->items = eina_list_append(luncher_config->items, ci);
return ci; return ci;
@ -1996,6 +1981,61 @@ bar_reorder(Instance *inst)
} }
} }
EINTERN void
bar_config_updated(Instance *inst)
{
Ecore_Event_Handler *handler;
const char *drop[] = { "enlightenment/desktop", "enlightenment/border", "text/uri-list" };
EINA_LIST_FREE(handlers, handler)
E_FREE_FUNC(handler, ecore_event_handler_del);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIG_ICON_THEME,
_bar_cb_update_icons, NULL);
E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_ICON_CACHE_UPDATE,
_bar_cb_update_icons, NULL);
if (inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY)
{
E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW,
_bar_cb_exec_new, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW_CLIENT,
_bar_cb_exec_new, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_PROPERTY,
_bar_cb_exec_client_prop, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_DEL,
_bar_cb_exec_del, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_REMOVE,
_bar_cb_client_remove, NULL);
}
if (!inst->iconify_provider && inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY)
{
inst->iconify_provider = e_comp_object_effect_mover_add(80, "e,action,*iconify",
_bar_iconify_start, inst);
}
else if (inst->iconify_provider && inst->cfg->type == E_LUNCHER_MODULE_LAUNCH_ONLY)
{
E_FREE_FUNC(inst->iconify_provider, e_comp_object_effect_mover_del);
}
bar_reorder(inst);
if (!inst->drop_handler && inst->cfg->type != E_LUNCHER_MODULE_TASKS_ONLY)
{
inst->drop_handler =
e_gadget_drop_handler_add(inst->o_main, inst,
_bar_drop_enter, _bar_drop_move,
_bar_drop_leave, _bar_drop_drop,
drop, 3);
elm_layout_content_set(inst->o_main, "e.swallow.drop", inst->drop_handler);
evas_object_show(inst->drop_handler);
}
else if (inst->drop_handler && inst->cfg->type == E_LUNCHER_MODULE_TASKS_ONLY)
{
E_FREE_FUNC(inst->drop_handler, evas_object_del);
}
}
EINTERN Evas_Object * EINTERN Evas_Object *
bar_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED) bar_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED)
{ {
@ -2026,17 +2066,19 @@ bar_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED
_bar_cb_update_icons, NULL); _bar_cb_update_icons, NULL);
E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_ICON_CACHE_UPDATE, E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_ICON_CACHE_UPDATE,
_bar_cb_update_icons, NULL); _bar_cb_update_icons, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW, if (inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY)
_bar_cb_exec_new, NULL); {
E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW_CLIENT, E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW,
_bar_cb_exec_new, NULL); _bar_cb_exec_new, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_PROPERTY, E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_NEW_CLIENT,
_bar_cb_exec_client_prop, NULL); _bar_cb_exec_new, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_DEL, E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_PROPERTY,
_bar_cb_exec_del, NULL); _bar_cb_exec_client_prop, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_REMOVE, E_LIST_HANDLER_APPEND(handlers, E_EVENT_EXEC_DEL,
_bar_cb_client_remove, NULL); _bar_cb_exec_del, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_REMOVE,
_bar_cb_client_remove, NULL);
}
if (inst->cfg->id < 0) return inst->o_main; if (inst->cfg->id < 0) return inst->o_main;
luncher_instances = eina_list_append(luncher_instances, inst); luncher_instances = eina_list_append(luncher_instances, inst);

View File

@ -10,6 +10,55 @@ _config_close(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA
e_config_save_queue(); e_config_save_queue();
} }
static void
_config_show_general(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
evas_object_hide(luncher_config->contents);
evas_object_hide(luncher_config->style);
evas_object_show(luncher_config->general);
}
static void
_config_show_contents(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
evas_object_hide(luncher_config->general);
evas_object_hide(luncher_config->style);
evas_object_show(luncher_config->contents);
}
static void
_config_show_style(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
evas_object_hide(luncher_config->general);
evas_object_hide(luncher_config->contents);
evas_object_show(luncher_config->style);
}
static void
_type_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Instance *inst = data;
int value = elm_radio_value_get(obj);
switch (value)
{
case 0:
inst->cfg->type = E_LUNCHER_MODULE_FULL;
break;
case 1:
inst->cfg->type = E_LUNCHER_MODULE_LAUNCH_ONLY;
break;
case 2:
inst->cfg->type = E_LUNCHER_MODULE_TASKS_ONLY;
break;
default:
inst->cfg->type = E_LUNCHER_MODULE_FULL;
}
e_config_save_queue();
bar_config_updated(inst);
}
static void static void
_config_style_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) _config_style_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{ {
@ -269,8 +318,9 @@ _icon_theme_file_set(Evas_Object *img, const char *icon)
EINTERN Evas_Object * EINTERN Evas_Object *
config_luncher(E_Zone *zone, Instance *inst, Eina_Bool bar) config_luncher(E_Zone *zone, Instance *inst, Eina_Bool bar)
{ {
Evas_Object *popup, *tb, *lbl, *fr, *box, *list; Evas_Object *popup, *tb, *lbl, *fr, *box, *list, *mlist;
Evas_Object *butbox, *sep, *hbox, *img, *but; Evas_Object *butbox, *sep, *hbox, *img, *but, *o, *group;
Elm_Object_Item *it;
luncher_config->bar = bar; luncher_config->bar = bar;
@ -291,21 +341,98 @@ config_luncher(E_Zone *zone, Instance *inst, Eina_Bool bar)
elm_object_style_set(lbl, "marker"); elm_object_style_set(lbl, "marker");
evas_object_show(lbl); evas_object_show(lbl);
elm_object_text_set(lbl, _("Luncher Configuration")); elm_object_text_set(lbl, _("Luncher Configuration"));
elm_table_pack(tb, lbl, 0, 0, 1, 1); elm_table_pack(tb, lbl, 0, 0, 2, 1);
box = elm_box_add(tb); mlist = elm_list_add(tb);
E_ALIGN(mlist, 0, EVAS_HINT_FILL);
E_WEIGHT(mlist, 0, EVAS_HINT_EXPAND);
elm_table_pack(tb, mlist, 0, 1, 1, 1);
elm_list_select_mode_set(mlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
elm_scroller_content_min_limit(mlist, 1, 1);
it = elm_list_item_append(mlist, _("General"), NULL, NULL,
_config_show_general, inst);
elm_list_item_selected_set(it, 1);
it = elm_list_item_append(mlist, _("Contents"), NULL, NULL,
_config_show_contents, inst);
it = elm_list_item_append(mlist, _("Style"), NULL, NULL,
_config_show_style, inst);
elm_list_go(mlist);
evas_object_show(mlist);
fr = elm_frame_add(tb);
elm_object_text_set(fr, _("General"));
E_EXPAND(fr);
evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_table_pack(tb, fr, 1, 1, 1, 1);
evas_object_show(fr);
luncher_config->general = fr;
box = elm_box_add(fr);
elm_box_horizontal_set(box, EINA_FALSE); elm_box_horizontal_set(box, EINA_FALSE);
E_EXPAND(box); E_EXPAND(box);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_table_pack(tb, box, 0, 1, 1, 1);
evas_object_show(box); evas_object_show(box);
fr = elm_frame_add(box); lbl = elm_label_add(box);
elm_object_text_set(lbl, _("Luncher Type:"));
E_ALIGN(lbl, 0.0, 0.0);
E_WEIGHT(lbl, EVAS_HINT_EXPAND, 0);
elm_box_pack_end(box, lbl);
evas_object_show(lbl);
o = elm_radio_add(box);
elm_radio_state_value_set(o, 0);
E_ALIGN(o, 0.0, 0.0);
E_WEIGHT(o, EVAS_HINT_EXPAND, 0);
elm_object_text_set(o, _("Launcher and Taskbar"));
elm_box_pack_end(box, o);
evas_object_smart_callback_add(o, "changed", _type_changed, inst);
evas_object_show(o);
group = o;
o = elm_radio_add(box);
elm_radio_state_value_set(o, 1);
elm_radio_group_add(o, group);
E_ALIGN(o, 0.0, 0.0);
E_WEIGHT(o, EVAS_HINT_EXPAND, 0);
elm_object_text_set(o, _("Launcher Only"));
elm_box_pack_end(box, o);
evas_object_smart_callback_add(o, "changed", _type_changed, inst);
evas_object_show(o);
o = elm_radio_add(box);
elm_radio_state_value_set(o, 2);
elm_radio_group_add(o, group);
E_ALIGN(o, 0.0, 0.0);
E_WEIGHT(o, EVAS_HINT_EXPAND, 0);
elm_object_text_set(o, _("Taskbar Only"));
elm_box_pack_end(box, o);
evas_object_smart_callback_add(o, "changed", _type_changed, inst);
evas_object_show(o);
switch(inst->cfg->type)
{
case E_LUNCHER_MODULE_FULL:
elm_radio_value_set(group, 0);
break;
case E_LUNCHER_MODULE_LAUNCH_ONLY:
elm_radio_value_set(group, 1);
break;
case E_LUNCHER_MODULE_TASKS_ONLY:
elm_radio_value_set(group, 2);
break;
default:
elm_radio_value_set(group, 0);
}
elm_object_content_set(fr, box);
fr = elm_frame_add(tb);
elm_object_text_set(fr, _("Style")); elm_object_text_set(fr, _("Style"));
E_EXPAND(fr); E_EXPAND(fr);
evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, fr); elm_table_pack(tb, fr, 1, 1, 1, 1);
evas_object_show(fr); evas_object_show(fr);
luncher_config->style = fr;
list = elm_list_add(fr); list = elm_list_add(fr);
E_ALIGN(list, EVAS_HINT_FILL, EVAS_HINT_FILL); E_ALIGN(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
@ -317,12 +444,13 @@ config_luncher(E_Zone *zone, Instance *inst, Eina_Bool bar)
luncher_config->slist = list; luncher_config->slist = list;
_config_populate_style_list(list, inst); _config_populate_style_list(list, inst);
fr = elm_frame_add(box); fr = elm_frame_add(tb);
elm_object_text_set(fr, _("Icon Order")); elm_object_text_set(fr, _("Contents"));
E_EXPAND(fr); E_EXPAND(fr);
evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, fr); elm_table_pack(tb, fr, 1, 1, 1, 1);
evas_object_show(fr); evas_object_show(fr);
luncher_config->contents = fr;
box = elm_box_add(fr); box = elm_box_add(fr);
elm_box_horizontal_set(box, EINA_FALSE); elm_box_horizontal_set(box, EINA_FALSE);
@ -430,6 +558,8 @@ config_luncher(E_Zone *zone, Instance *inst, Eina_Bool bar)
elm_object_content_set(fr, box); elm_object_content_set(fr, box);
_config_show_general(NULL, NULL, NULL);
popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE); popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE);
evas_object_layer_set(popup, E_LAYER_POPUP); evas_object_layer_set(popup, E_LAYER_POPUP);
evas_object_resize(popup, zone->w / 4, zone->h / 3); evas_object_resize(popup, zone->w / 4, zone->h / 3);

View File

@ -13,6 +13,14 @@ typedef struct _Config Config;
typedef struct _Config_Item Config_Item; typedef struct _Config_Item Config_Item;
typedef struct _Instance Instance; typedef struct _Instance Instance;
typedef struct _Icon Icon; typedef struct _Icon Icon;
typedef enum _Luncher_Type Luncher_Type;
enum _Luncher_Type
{
E_LUNCHER_MODULE_FULL = 0,
E_LUNCHER_MODULE_LAUNCH_ONLY,
E_LUNCHER_MODULE_TASKS_ONLY
};
struct _Config struct _Config
{ {
@ -22,14 +30,19 @@ struct _Config
Evas_Object *config_dialog; Evas_Object *config_dialog;
Evas_Object *slist; Evas_Object *slist;
Evas_Object *list; Evas_Object *list;
Evas_Object *general;
Evas_Object *contents;
Evas_Object *style;
Eina_Bool bar; Eina_Bool bar;
}; };
struct _Config_Item struct _Config_Item
{ {
int id; int id;
int version;
Eina_Stringshare *style; Eina_Stringshare *style;
Eina_Stringshare *dir; Eina_Stringshare *dir;
Luncher_Type type;
}; };
struct _Instance struct _Instance
@ -87,6 +100,7 @@ EINTERN Evas_Object *config_luncher(E_Zone *zone, Instance *inst, Eina_Bool bar)
EINTERN Evas_Object *bar_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); EINTERN Evas_Object *bar_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient);
EINTERN void bar_reorder(Instance *inst); EINTERN void bar_reorder(Instance *inst);
EINTERN void bar_recalculate(Instance *inst); EINTERN void bar_recalculate(Instance *inst);
EINTERN void bar_config_updated(Instance *inst);
EINTERN Evas_Object *grid_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); EINTERN Evas_Object *grid_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient);
EINTERN void grid_reorder(Instance *inst); EINTERN void grid_reorder(Instance *inst);
EINTERN void grid_recalculate(Instance *inst); EINTERN void grid_recalculate(Instance *inst);

View File

@ -1,4 +1,7 @@
#include "luncher.h" #include "luncher.h"
#define CONFIG_VERSION 2
static E_Config_DD *conf_edd = NULL; static E_Config_DD *conf_edd = NULL;
static E_Config_DD *conf_item_edd = NULL; static E_Config_DD *conf_item_edd = NULL;
Eina_List *luncher_instances = NULL; Eina_List *luncher_instances = NULL;
@ -8,14 +11,19 @@ Config *luncher_config = NULL;
EINTERN void EINTERN void
luncher_init(void) luncher_init(void)
{ {
Eina_List *l;
Config_Item *ci;
conf_item_edd = E_CONFIG_DD_NEW("Luncher_Config_Item", Config_Item); conf_item_edd = E_CONFIG_DD_NEW("Luncher_Config_Item", Config_Item);
#undef T #undef T
#undef D #undef D
#define T Config_Item #define T Config_Item
#define D conf_item_edd #define D conf_item_edd
E_CONFIG_VAL(D, T, id, INT); E_CONFIG_VAL(D, T, id, INT);
E_CONFIG_VAL(D, T, version, INT);
E_CONFIG_VAL(D, T, style, STR); E_CONFIG_VAL(D, T, style, STR);
E_CONFIG_VAL(D, T, dir, STR); E_CONFIG_VAL(D, T, dir, STR);
E_CONFIG_VAL(D, T, type, INT);
conf_edd = E_CONFIG_DD_NEW("Luncher_Config", Config); conf_edd = E_CONFIG_DD_NEW("Luncher_Config", Config);
#undef T #undef T
@ -28,15 +36,23 @@ luncher_init(void)
if (!luncher_config) if (!luncher_config)
{ {
Config_Item *ci;
luncher_config = E_NEW(Config, 1); luncher_config = E_NEW(Config, 1);
ci = E_NEW(Config_Item, 1); ci = E_NEW(Config_Item, 1);
ci->id = 0; ci->id = 0;
ci->version = CONFIG_VERSION;
ci->style = eina_stringshare_add("default"); ci->style = eina_stringshare_add("default");
ci->dir = eina_stringshare_add("default"); ci->dir = eina_stringshare_add("default");
ci->type = E_LUNCHER_MODULE_FULL;
luncher_config->items = eina_list_append(luncher_config->items, ci); luncher_config->items = eina_list_append(luncher_config->items, ci);
} }
EINA_LIST_FOREACH(luncher_config->items, l, ci)
{
if (ci->version < CONFIG_VERSION)
{
ci->version = CONFIG_VERSION;
ci->type = E_LUNCHER_MODULE_FULL;
}
}
e_gadget_type_add("Luncher Bar", bar_create, NULL); e_gadget_type_add("Luncher Bar", bar_create, NULL);
e_gadget_type_add("Luncher Grid", grid_create, NULL); e_gadget_type_add("Luncher Grid", grid_create, NULL);
} }