okra pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=2ef2c370623d36d02e25deb3646290ac4e078f53

commit 2ef2c370623d36d02e25deb3646290ac4e078f53
Author: Stephen 'Okra' Houston <[email protected]>
Date:   Mon Feb 27 20:57:18 2017 -0600

    Luncher: Add config options to function only as a launcher, only as a 
taskbar, or as both.
---
 src/modules/luncher/bar.c     | 172 ++++++++++++++++++++++++++----------------
 src/modules/luncher/config.c  | 152 ++++++++++++++++++++++++++++++++++---
 src/modules/luncher/luncher.h |  14 ++++
 src/modules/luncher/mod.c     |  20 ++++-
 4 files changed, 280 insertions(+), 78 deletions(-)

diff --git a/src/modules/luncher/bar.c b/src/modules/luncher/bar.c
index 1ae1e48..64878a9 100644
--- a/src/modules/luncher/bar.c
+++ b/src/modules/luncher/bar.c
@@ -239,12 +239,12 @@ _bar_instance_watch(void *data, E_Exec_Instance *ex, 
E_Exec_Watch_Type type)
       case E_EXEC_WATCH_STARTED:
         if (ic->starting) elm_layout_signal_emit(ic->o_layout, 
"e,state,started", "e");
         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));
              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);
         break;
       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);
 }
 
-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 *
 _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_EXPAND(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);
    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)
      {
-        l = e_exec_desktop_instances_find(desktop);
-        if (l)
+        if (inst->cfg->type != E_LUNCHER_MODULE_LAUNCH_ONLY)
           {
-             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);
+             l = e_exec_desktop_instances_find(desktop);
+             if (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
@@ -1497,7 +1466,7 @@ _bar_fill(Instance *inst)
    Icon *ic;
    char ori[32];
 
-   if (inst->order)
+   if (inst->order && inst->cfg->type != E_LUNCHER_MODULE_TASKS_ONLY)
      {
         Efreet_Desktop *desktop;
         Eina_List *list;
@@ -1509,6 +1478,11 @@ _bar_fill(Instance *inst)
              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);
    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;
    char buf[4096];
+   Ecore_Event_Handler *handler;
 
    if (inst->o_main != event_data) return;
    if (e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s", 
inst->cfg->dir) >= sizeof(buf))
      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);
    eina_stringshare_del(inst->cfg->style);
    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);
    e_order_update_callback_set(inst->order, _bar_order_update, inst);
 
-   inst->iconify_provider = e_comp_object_effect_mover_add(80, 
"e,action,*iconify",
-       _bar_iconify_start, inst);
-
+   if (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);
+     }
    _bar_fill(inst);
 
-   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);
-
+   if (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);
+     }
    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->dir = 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);
 
    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 *
 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);
    E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_ICON_CACHE_UPDATE,
                          _bar_cb_update_icons, NULL);
-   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->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->cfg->id < 0) return inst->o_main;
    luncher_instances = eina_list_append(luncher_instances, inst);
 
diff --git a/src/modules/luncher/config.c b/src/modules/luncher/config.c
index 743e1b7..6664bad 100644
--- a/src/modules/luncher/config.c
+++ b/src/modules/luncher/config.c
@@ -11,6 +11,55 @@ _config_close(void *data EINA_UNUSED, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA
 }
 
 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
 _config_style_changed(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
 {
    Instance *inst = data;
@@ -269,8 +318,9 @@ _icon_theme_file_set(Evas_Object *img, const char *icon)
 EINTERN Evas_Object *
 config_luncher(E_Zone *zone, Instance *inst, Eina_Bool bar)
 {
-   Evas_Object *popup, *tb, *lbl, *fr, *box, *list;
-   Evas_Object *butbox, *sep, *hbox, *img, *but;
+   Evas_Object *popup, *tb, *lbl, *fr, *box, *list, *mlist;
+   Evas_Object *butbox, *sep, *hbox, *img, *but, *o, *group;
+   Elm_Object_Item *it;
 
    luncher_config->bar = bar;
 
@@ -291,21 +341,98 @@ config_luncher(E_Zone *zone, Instance *inst, Eina_Bool 
bar)
    elm_object_style_set(lbl, "marker");
    evas_object_show(lbl);
    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);
+
+   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(tb);
+   box = elm_box_add(fr);
    elm_box_horizontal_set(box, EINA_FALSE);
    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);
 
-   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"));
    E_EXPAND(fr);
    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);
+   luncher_config->style = fr;
 
    list = elm_list_add(fr);
    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;
    _config_populate_style_list(list, inst);
 
-   fr = elm_frame_add(box);
-   elm_object_text_set(fr, _("Icon Order"));
+   fr = elm_frame_add(tb);
+   elm_object_text_set(fr, _("Contents"));
    E_EXPAND(fr);
    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);
+   luncher_config->contents = fr;
 
    box = elm_box_add(fr);
    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);
 
+   _config_show_general(NULL, NULL, NULL);
+
    popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE);
    evas_object_layer_set(popup, E_LAYER_POPUP);
    evas_object_resize(popup, zone->w / 4, zone->h / 3);
diff --git a/src/modules/luncher/luncher.h b/src/modules/luncher/luncher.h
index cbcd22c..b31665e 100644
--- a/src/modules/luncher/luncher.h
+++ b/src/modules/luncher/luncher.h
@@ -13,6 +13,14 @@ typedef struct _Config Config;
 typedef struct _Config_Item Config_Item;
 typedef struct _Instance Instance;
 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
 {
@@ -22,14 +30,19 @@ struct _Config
    Evas_Object *config_dialog;
    Evas_Object *slist;
    Evas_Object *list;
+   Evas_Object *general;
+   Evas_Object *contents;
+   Evas_Object *style;
    Eina_Bool    bar;
 };
 
 struct _Config_Item
 {
    int               id;
+   int               version;
    Eina_Stringshare *style;
    Eina_Stringshare *dir;
+   Luncher_Type      type;
 };
 
 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 void         bar_reorder(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 void         grid_reorder(Instance *inst);
 EINTERN void         grid_recalculate(Instance *inst);
diff --git a/src/modules/luncher/mod.c b/src/modules/luncher/mod.c
index fa1922c..390c1dd 100644
--- a/src/modules/luncher/mod.c
+++ b/src/modules/luncher/mod.c
@@ -1,4 +1,7 @@
 #include "luncher.h"
+
+#define CONFIG_VERSION 2
+
 static E_Config_DD *conf_edd = NULL;
 static E_Config_DD *conf_item_edd = NULL;
 Eina_List *luncher_instances = NULL;
@@ -8,14 +11,19 @@ Config *luncher_config = NULL;
 EINTERN void
 luncher_init(void)
 {
+   Eina_List *l;
+   Config_Item *ci;
+
    conf_item_edd = E_CONFIG_DD_NEW("Luncher_Config_Item", Config_Item);
 #undef T
 #undef D
 #define T Config_Item
 #define D conf_item_edd
    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, dir, STR);
+   E_CONFIG_VAL(D, T, type, INT);
 
    conf_edd = E_CONFIG_DD_NEW("Luncher_Config", Config);
 #undef T
@@ -28,15 +36,23 @@ luncher_init(void)
 
    if (!luncher_config)
      {
-        Config_Item *ci;
-
         luncher_config = E_NEW(Config, 1);
         ci = E_NEW(Config_Item, 1);
         ci->id = 0;
+        ci->version = CONFIG_VERSION;
         ci->style = 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);
      }
+   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 Grid", grid_create, NULL);
 }

-- 


Reply via email to