Break out the Home button into separate module.
authorChristopher Michael <cpmichael1@comcast.net>
Tue, 20 Apr 2010 19:37:46 +0000 (19:37 +0000)
committerChristopher Michael <cpmichael1@comcast.net>
Tue, 20 Apr 2010 19:37:46 +0000 (19:37 +0000)
Fix illume-home to not include gadget button.
Fix illume-home efreet_desktop_cache_update.

SVN revision: 48174

src/modules/Makefile.am
src/modules/illume-home-toggle/Makefile.am [new file with mode: 0644]
src/modules/illume-home-toggle/e-module-illume-home-toggle.edj [new file with mode: 0644]
src/modules/illume-home-toggle/e_mod_main.c [new file with mode: 0644]
src/modules/illume-home-toggle/e_mod_main.h [new file with mode: 0644]
src/modules/illume-home-toggle/module.desktop.in [new file with mode: 0644]
src/modules/illume-home/e_mod_main.c

index 98bdcd5..390f99b 100644 (file)
@@ -247,7 +247,7 @@ SUBDIRS += illume
 endif
 
 if USE_MODULE_ILLUME2
-SUBDIRS += illume2 illume-home illume-softkey illume-keyboard illume-indicator illume-kbd-toggle illume-mode-toggle illume-bluetooth
+SUBDIRS += illume2 illume-home illume-softkey illume-keyboard illume-indicator illume-kbd-toggle illume-mode-toggle illume-bluetooth illume-home-toggle
 endif
 
 if USE_MODULE_SYSCON
diff --git a/src/modules/illume-home-toggle/Makefile.am b/src/modules/illume-home-toggle/Makefile.am
new file mode 100644 (file)
index 0000000..89bb6c9
--- /dev/null
@@ -0,0 +1,29 @@
+MAINTAINERCLEANFILES = Makefile.in
+MODULE = illume-home-toggle
+
+# data files for the module
+filesdir = $(libdir)/enlightenment/modules/$(MODULE)
+files_DATA = \
+e-module-$(MODULE).edj module.desktop
+
+EXTRA_DIST = $(files_DATA)
+
+# the module .so file
+INCLUDES               = -I. \
+                         -I$(top_srcdir) \
+                         -I$(top_srcdir)/src/modules/$(MODULE) \
+                         -I$(top_srcdir)/src/bin \
+                         -I$(top_srcdir)/src/lib \
+                         -I$(top_srcdir)/src/modules \
+                         @e_cflags@
+pkgdir                 = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH)
+pkg_LTLIBRARIES        = module.la
+module_la_SOURCES      = e_mod_main.c \
+                         e_mod_main.h
+
+module_la_LIBADD       = @e_libs@ @dlopen_libs@
+module_la_LDFLAGS      = -module -avoid-version
+module_la_DEPENDENCIES = $(top_builddir)/config.h
+
+uninstall:
+       rm -rf $(DESTDIR)$(libdir)/enlightenment/modules/$(MODULE)
diff --git a/src/modules/illume-home-toggle/e-module-illume-home-toggle.edj b/src/modules/illume-home-toggle/e-module-illume-home-toggle.edj
new file mode 100644 (file)
index 0000000..9b54110
Binary files /dev/null and b/src/modules/illume-home-toggle/e-module-illume-home-toggle.edj differ
diff --git a/src/modules/illume-home-toggle/e_mod_main.c b/src/modules/illume-home-toggle/e_mod_main.c
new file mode 100644 (file)
index 0000000..8bc709f
--- /dev/null
@@ -0,0 +1,137 @@
+#include "e.h"
+#include "e_mod_main.h"
+
+typedef struct _Instance Instance;
+struct _Instance 
+{
+   E_Gadcon_Client *gcc;
+   Evas_Object *o_btn;
+};
+
+/* local function prototypes */
+static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);
+static void _gc_shutdown(E_Gadcon_Client *gcc);
+static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient);
+static char *_gc_label(E_Gadcon_Client_Class *cc);
+static Evas_Object *_gc_icon(E_Gadcon_Client_Class *cc, Evas *evas);
+static const char *_gc_id_new(E_Gadcon_Client_Class *cc);
+static void _cb_btn_click(void *data, void *data2);
+
+/* local variables */
+static Eina_List *instances = NULL;
+static const char *mod_dir = NULL;
+
+static const E_Gadcon_Client_Class _gc_class = 
+{
+   GADCON_CLIENT_CLASS_VERSION, "illume-home-toggle", 
+     { _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL, 
+          e_gadcon_site_is_not_toolbar
+     }, E_GADCON_CLIENT_STYLE_PLAIN
+};
+
+/* public functions */
+EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume Home Toggle" };
+
+EAPI void *
+e_modapi_init(E_Module *m) 
+{
+   mod_dir = eina_stringshare_add(m->dir);
+   e_gadcon_provider_register(&_gc_class);
+   return m;
+}
+
+EAPI int 
+e_modapi_shutdown(E_Module *m) 
+{
+   e_gadcon_provider_unregister(&_gc_class);
+   if (mod_dir) eina_stringshare_del(mod_dir);
+   mod_dir = NULL;
+   return 1;
+}
+
+EAPI int 
+e_modapi_save(E_Module *m) 
+{
+   return 1;
+}
+
+/* local functions */
+static E_Gadcon_Client *
+_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) 
+{
+   Instance *inst;
+   Evas_Object *icon;
+   char buff[PATH_MAX];
+
+   snprintf(buff, sizeof(buff), "%s/e-module-illume-home-toggle.edj", mod_dir);
+
+   inst = E_NEW(Instance, 1);
+   inst->o_btn = e_widget_button_add(gc->evas, NULL, NULL, 
+                                     _cb_btn_click, inst, NULL);
+   icon = e_icon_add(evas_object_evas_get(inst->o_btn));
+   e_icon_file_edje_set(icon, buff, "icon");
+   e_widget_button_icon_set(inst->o_btn, icon);
+
+   inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_btn);
+   inst->gcc->data = inst;
+
+   instances = eina_list_append(instances, inst);
+   return inst->gcc;
+}
+
+static void 
+_gc_shutdown(E_Gadcon_Client *gcc) 
+{
+   Instance *inst;
+
+   if (!(inst = gcc->data)) return;
+   instances = eina_list_remove(instances, inst);
+   if (inst->o_btn) evas_object_del(inst->o_btn);
+   E_FREE(inst);
+}
+
+static void 
+_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient) 
+{
+   e_gadcon_client_aspect_set(gcc, 16, 16);
+   e_gadcon_client_min_size_set(gcc, 16, 16);
+}
+
+static char *
+_gc_label(E_Gadcon_Client_Class *cc) 
+{
+   return _("Illume-Home-Toggle");
+}
+
+static Evas_Object *
+_gc_icon(E_Gadcon_Client_Class *cc, Evas *evas) 
+{
+   Evas_Object *o;
+   char buff[PATH_MAX];
+
+   snprintf(buff, sizeof(buff), "%s/e-module-illume-home-toggle.edj", mod_dir);
+   o = edje_object_add(evas);
+   edje_object_file_set(o, buff, "icon");
+   return o;
+}
+
+static const char *
+_gc_id_new(E_Gadcon_Client_Class *cc) 
+{
+   static char buff[32];
+
+   snprintf(buff, sizeof(buff), "%s.%d", _gc_class.name, 
+            eina_list_count(instances));
+   return buff;
+}
+
+static void 
+_cb_btn_click(void *data, void *data2) 
+{
+   Instance *inst;
+   E_Zone *zone;
+
+   if (!(inst = data)) return;
+   zone = inst->gcc->gadcon->zone;
+   ecore_x_e_illume_focus_home_send(zone->black_win);
+}
diff --git a/src/modules/illume-home-toggle/e_mod_main.h b/src/modules/illume-home-toggle/e_mod_main.h
new file mode 100644 (file)
index 0000000..f884cc0
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef E_MOD_MAIN_H
+#define E_MOD_MAIN_H
+
+EAPI extern E_Module_Api e_modapi;
+
+EAPI void *e_modapi_init(E_Module *m);
+EAPI int e_modapi_shutdown(E_Module *m);
+EAPI int e_modapi_save(E_Module *m);
+
+#endif
diff --git a/src/modules/illume-home-toggle/module.desktop.in b/src/modules/illume-home-toggle/module.desktop.in
new file mode 100644 (file)
index 0000000..8191664
--- /dev/null
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Link
+Name=Illume-Home-Toggle
+Icon=e-module-illume-home-toggle
+X-Enlightenment-ModuleType=system
+Comment=
+Comment[fr]=
+Comment[it]=
index 58c44a2..6eecbef 100644 (file)
@@ -6,17 +6,9 @@
 #define IL_HOME_WIN_TYPE 0xE0b0102f
 
 /* local structures */
-typedef struct _Instance Instance;
 typedef struct _Il_Home_Win Il_Home_Win;
 typedef struct _Il_Home_Exec Il_Home_Exec;
 
-struct _Instance 
-{
-   E_Gadcon_Client *gcc;
-   Evas_Object *o_btn;
-   Eina_List *wins, *handlers;
-};
-
 struct _Il_Home_Win 
 {
    E_Object e_obj_inherit;
@@ -41,122 +33,134 @@ struct _Il_Home_Exec
 };
 
 /* local function prototypes */
-static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);
-static void _gc_shutdown(E_Gadcon_Client *gcc);
-static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient);
-static char *_gc_label(E_Gadcon_Client_Class *cc);
-static Evas_Object *_gc_icon(E_Gadcon_Client_Class *cc, Evas *evas);
-static const char *_gc_id_new(E_Gadcon_Client_Class *cc);
-static void _il_home_btn_cb_click(void *data, void *data2);
-static void _il_home_win_new(Instance *inst);
+static void _il_home_apps_populate(void);
+static void _il_home_apps_unpopulate(void);
+static void _il_home_desks_populate(void);
+static void _il_home_desktop_run(Il_Home_Win *hwin, Efreet_Desktop *desktop);
+static E_Border *_il_home_desktop_find_border(E_Zone *zone, Efreet_Desktop *desktop);
+static void _il_home_win_new(E_Zone *zone);
 static void _il_home_win_cb_free(Il_Home_Win *hwin);
 static void _il_home_win_cb_resize(E_Win *win);
+static void _il_home_fmc_set(Evas_Object *obj);
+static int _il_home_update_deferred(void *data __UNUSED__);
 static void _il_home_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
 static void _il_home_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y);
 static void _il_home_pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y);
 static void _il_home_pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
-static void _il_home_cb_selected(void *data, Evas_Object *obj, void *event);
-static void _il_home_desktop_run(Il_Home_Win *hwin, Efreet_Desktop *desktop);
-static void _il_home_apps_populate(void);
-static void _il_home_apps_unpopulate(void);
-static void _il_home_fmc_set(Evas_Object *obj);
-static void _il_home_desks_populate(void);
-static int _il_home_desktop_cache_update(void *data, int type, void *event);
-static int _il_home_update_deferred(void *data);
-static int _il_home_win_cb_exe_del(void *data, int type, void *event);
-static E_Border *_il_home_desktop_find_border(E_Zone *zone, Efreet_Desktop *desktop);
-static int _il_home_win_cb_timeout(void *data);
-static int _il_home_border_add(void *data, int type, void *event);
-static int _il_home_border_remove(void *data, int type, void *event);
-static int _il_home_cb_client_message(void *data, int type, void *event);
-static int _il_home_cb_prop_change(void *data, int type, void *event);
+static void _il_home_cb_selected(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__);
+static int _il_home_desktop_cache_update(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__);
+static int _il_home_cb_border_add(void *data __UNUSED__, int type __UNUSED__, void *event);
+static int _il_home_cb_border_del(void *data __UNUSED__, int type __UNUSED__, void *event);
+static int _il_home_cb_exe_del(void *data __UNUSED__, int type __UNUSED__, void *event);
+static int _il_home_cb_exe_timeout(void *data);
+static int _il_home_cb_client_message(void *data __UNUSED__, int type __UNUSED__, void *event);
+static int _il_home_cb_prop_change(void *data __UNUSED__, int type __UNUSED__, void *event);
 
 /* local variables */
-static Eina_List *instances = NULL;
+static Eina_List *hwins = NULL;
+static Eina_List *hdls = NULL;
 static Eina_List *desks = NULL;
-static Eina_List *handlers = NULL;
 static Eina_List *exes = NULL;
 static Ecore_Timer *defer = NULL;
 
-static const E_Gadcon_Client_Class _gc_class = 
-{
-   GADCON_CLIENT_CLASS_VERSION, "illume-home", 
-     { _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL, 
-          e_gadcon_site_is_not_toolbar
-     }, E_GADCON_CLIENT_STYLE_PLAIN
-};
-
 /* public functions */
 EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume Home" };
 
 EAPI void *
 e_modapi_init(E_Module *m) 
 {
-   if (!il_home_config_init(m)) return NULL;
+   E_Manager *man;
+   Eina_List *ml;
 
-   _il_home_apps_unpopulate();
-   _il_home_apps_populate();
+   if (!il_home_config_init(m)) return NULL;
 
-   handlers = 
-     eina_list_append(handlers, 
+   hdls = 
+     eina_list_append(hdls, 
                       ecore_event_handler_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE, 
                                               _il_home_desktop_cache_update, 
                                               NULL));
-   handlers = 
-     eina_list_append(handlers, 
+   hdls = 
+     eina_list_append(hdls, 
                       ecore_event_handler_add(E_EVENT_BORDER_ADD, 
-                                              _il_home_border_add, NULL));
-   handlers = 
-     eina_list_append(handlers, 
+                                              _il_home_cb_border_add, NULL));
+   hdls = 
+     eina_list_append(hdls, 
                       ecore_event_handler_add(E_EVENT_BORDER_REMOVE, 
-                                              _il_home_border_remove, NULL));
-
-   handlers = 
-     eina_list_append(handlers, 
+                                              _il_home_cb_border_del, NULL));
+   hdls = 
+     eina_list_append(hdls, 
                       ecore_event_handler_add(ECORE_EXE_EVENT_DEL, 
-                                              _il_home_win_cb_exe_del, NULL));
+                                              _il_home_cb_exe_del, NULL));
+   hdls = 
+     eina_list_append(hdls, 
+                      ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, 
+                                              _il_home_cb_client_message, 
+                                              NULL));
+   hdls = 
+     eina_list_append(hdls, 
+                      ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, 
+                                              _il_home_cb_prop_change, 
+                                              NULL));
+
+   EINA_LIST_FOREACH(e_manager_list(), ml, man) 
+     {
+        E_Container *con;
+        Eina_List *cl;
+
+        EINA_LIST_FOREACH(man->containers, cl, con) 
+          {
+             E_Zone *zone;
+             Eina_List *zl;
+
+             EINA_LIST_FOREACH(con->zones, zl, zone) 
+               {
+                  Ecore_X_Illume_Mode mode;
+
+                  mode = ecore_x_e_illume_mode_get(zone->black_win);
+                  _il_home_win_new(zone);
+                  if (mode > ECORE_X_ILLUME_MODE_SINGLE)
+                    _il_home_win_new(zone);
+               }
+          }
+     }
 
-   e_gadcon_provider_register(&_gc_class);
    return m;
 }
 
 EAPI int 
 e_modapi_shutdown(E_Module *m) 
 {
-   Ecore_Event_Handler *handle;
+   Ecore_Event_Handler *hdl;
+   Il_Home_Win *hwin;
    Il_Home_Exec *exe;
 
+   EINA_LIST_FREE(hwins, hwin)
+     e_object_del(E_OBJECT(hwin));
+
    EINA_LIST_FREE(exes, exe) 
      {
         if (exe->exec) 
           {
              ecore_exe_terminate(exe->exec);
              ecore_exe_free(exe->exec);
-             exe->exec = NULL;
-          }
-        if (exe->handle) 
-          {
-             e_busycover_pop(exe->cover, exe->handle);
-             exe->handle = NULL;
           }
+        if (exe->handle) e_busycover_pop(exe->cover, exe->handle);
         if (exe->timeout) ecore_timer_del(exe->timeout);
-       if (exe->desktop) efreet_desktop_free(exe->desktop);
-       E_FREE(exe);
+        if (exe->desktop) efreet_desktop_free(exe->desktop);
+        E_FREE(exe);
      }
 
-   _il_home_apps_unpopulate();
-
-   EINA_LIST_FREE(handlers, handle)
-     ecore_event_handler_del(handle);
+   EINA_LIST_FREE(hdls, hdl)
+     ecore_event_handler_del(hdl);
 
-   e_gadcon_provider_unregister(&_gc_class);
+   _il_home_apps_unpopulate();
 
    il_home_config_shutdown();
    return 1;
 }
 
-EAPI int 
-e_modapi_save(E_Module *m) 
+EAPI 
+int e_modapi_save(E_Module *m) 
 {
    return il_home_config_save();
 }
@@ -168,162 +172,231 @@ il_home_win_cfg_update(void)
    _il_home_apps_populate();
 }
 
-/* local functions */
-static E_Gadcon_Client *
-_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style
+/* local function prototypes */
+static void 
+_il_home_apps_populate(void
 {
-   Instance *inst;
-   Evas_Object *icon;
-   Ecore_X_Window xwin;
-   Ecore_X_Illume_Mode mode;
+   Il_Home_Win *hwin;
+   Eina_List *l;
    char buff[PATH_MAX];
 
-   snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj", 
-            il_home_cfg->mod_dir);
+   e_user_dir_concat_static(buff, "appshadow");
+   ecore_file_mkpath(buff);
 
-   inst = E_NEW(Instance, 1);
-   inst->o_btn = e_widget_button_add(gc->evas, NULL, NULL, 
-                                     _il_home_btn_cb_click, inst, NULL);
-   icon = e_icon_add(evas_object_evas_get(inst->o_btn));
-   e_icon_file_edje_set(icon, buff, "icon");
-   e_widget_button_icon_set(inst->o_btn, icon);
+   _il_home_desks_populate();
 
-   inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_btn);
-   inst->gcc->data = inst;
+   EINA_LIST_FOREACH(hwins, l, hwin) 
+     {
+        _il_home_fmc_set(hwin->o_fm);
+        e_fm2_path_set(hwin->o_fm, NULL, buff);
+     }
+}
+
+static void 
+_il_home_apps_unpopulate(void) 
+{
+   Efreet_Desktop *desktop;
+   Eina_List *files;
+   char buff[PATH_MAX], *file;
+   size_t len;
 
-   _il_home_win_new(inst);
+   EINA_LIST_FREE(desks, desktop) 
+     efreet_desktop_free(desktop);
 
-   xwin = inst->gcc->gadcon->zone->black_win;
-   mode = ecore_x_e_illume_mode_get(xwin);
-   if (mode > ECORE_X_ILLUME_MODE_SINGLE)
-     _il_home_win_new(inst);
+   len = e_user_dir_concat_static(buff, "appshadow");
+   if ((len + 2) >= sizeof(buff)) return;
 
-   inst->handlers = 
-     eina_list_append(inst->handlers, 
-                      ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, 
-                                              _il_home_cb_client_message, inst));
-   inst->handlers = 
-     eina_list_append(inst->handlers, 
-                      ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, 
-                                              _il_home_cb_prop_change, inst));
+   files = ecore_file_ls(buff);
+   buff[len] = '/';
+   len++;
 
-   instances = eina_list_append(instances, inst);
-   return inst->gcc;
+   EINA_LIST_FREE(files, file) 
+     {
+        if (eina_strlcpy(buff + len, file, sizeof(buff) - len) >= sizeof(buff) - len)
+          continue;
+        ecore_file_unlink(buff);
+        free(file);
+     }
 }
 
 static void 
-_gc_shutdown(E_Gadcon_Client *gcc
+_il_home_desks_populate(void
 {
-   Instance *inst;
-   Il_Home_Win *hwin;
-   Ecore_Event_Handler *hdl;
+   Efreet_Menu *menu, *entry;
+   Eina_List *ml, *settings, *sys, *kbd;
+   Efreet_Desktop *desktop;
+   int num = 0;
 
-   if (!(inst = gcc->data)) return;
+   if (!(menu = efreet_menu_get())) return;
 
-   instances = eina_list_remove(instances, inst);
+   settings = efreet_util_desktop_category_list("Settings");
+   sys = efreet_util_desktop_category_list("System");
+   kbd = efreet_util_desktop_category_list("Keyboard");
 
-   EINA_LIST_FREE(inst->handlers, hdl)
-     ecore_event_handler_del(hdl);
+   EINA_LIST_FOREACH(menu->entries, ml, entry) 
+     {
+        Eina_List *sl;
+        Efreet_Menu *sm;
 
-   if (inst->o_btn) evas_object_del(inst->o_btn);
+        if (entry->type != EFREET_MENU_ENTRY_MENU) continue;
+        EINA_LIST_FOREACH(entry->entries, sl, sm) 
+          {
+             char buff[PATH_MAX];
+
+             if (sm->type != EFREET_MENU_ENTRY_DESKTOP) continue;
+             if (!(desktop = sm->desktop)) continue;
+             if ((settings) && (eina_list_data_find(settings, desktop)))
+               continue;
+             if ((sys) && (eina_list_data_find(sys, desktop))) 
+               continue;
+             if ((kbd) && (eina_list_data_find(kbd, desktop))) 
+               continue;
+             efreet_desktop_ref(desktop);
+             desks = eina_list_append(desks, desktop);
+             e_user_dir_snprintf(buff, sizeof(buff), 
+                                 "appshadow/%04x.desktop", num);
+             ecore_file_symlink(desktop->orig_path, buff);
+             num++;
+          }
+     }
 
-   EINA_LIST_FREE(inst->wins, hwin)
-     e_object_del(E_OBJECT(hwin));
+   efreet_menu_free(menu);
 
-   E_FREE(inst);
+   EINA_LIST_FREE(settings, desktop)
+     efreet_desktop_free(desktop);
+   EINA_LIST_FREE(sys, desktop)
+     efreet_desktop_free(desktop);
+   EINA_LIST_FREE(kbd, desktop)
+     efreet_desktop_free(desktop);
 }
 
 static void 
-_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient) 
-{
-   e_gadcon_client_aspect_set(gcc, 16, 16);
-   e_gadcon_client_min_size_set(gcc, 16, 16);
-}
-
-static char *
-_gc_label(E_Gadcon_Client_Class *cc) 
-{
-   return _("Illume-Home");
-}
-
-static Evas_Object *
-_gc_icon(E_Gadcon_Client_Class *cc, Evas *evas) 
+_il_home_desktop_run(Il_Home_Win *hwin, Efreet_Desktop *desktop) 
 {
-   Evas_Object *o;
+   E_Exec_Instance *eins;
+   Il_Home_Exec *exec;
+   Eina_List *l;
+   E_Border *bd;
    char buff[PATH_MAX];
 
-   snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj", 
-            il_home_cfg->mod_dir);
-   o = edje_object_add(evas);
-   edje_object_file_set(o, buff, "icon");
-   return o;
-}
-
-static const char *
-_gc_id_new(E_Gadcon_Client_Class *cc) 
-{
-   static char buff[32];
+   if ((!hwin) || (!desktop) || (!desktop->exec)) return;
+   EINA_LIST_FOREACH(exes, l, exec) 
+     {
+        if (exec->desktop != desktop) continue;
+        if ((exec->border) && (exec->border->zone == hwin->zone)) 
+          {
+             e_border_uniconify(exec->border);
+             e_border_raise(exec->border);
+             e_border_focus_set(exec->border, 1, 1);
+             return;
+          }
+     }
+   if (bd = _il_home_desktop_find_border(hwin->zone, desktop)) 
+     {
+        e_border_uniconify(bd);
+        e_border_raise(bd);
+        e_border_focus_set(bd, 1, 1);
+        return;
+     }
 
-   snprintf(buff, sizeof(buff), "%s.%d", _gc_class.name, 
-            eina_list_count(instances));
-   return buff;
+   exec = E_NEW(Il_Home_Exec, 1);
+   if (!exec) return;
+   exec->cover = hwin->cover;
+   eins = e_exec(hwin->zone, desktop, NULL, NULL, "illume-home");
+   exec->desktop = desktop;
+   exec->zone = hwin->zone;
+   if (eins) 
+     {
+        exec->exec = eins->exe;
+        exec->startup_id = eins->startup_id;
+        if (eins->exe) 
+          exec->pid = ecore_exe_pid_get(eins->exe);
+     }
+   exec->timeout = ecore_timer_add(2.0, _il_home_cb_exe_timeout, exec);
+   snprintf(buff, sizeof(buff), "Starting %s", desktop->name);
+   exec->handle = e_busycover_push(hwin->cover, buff, NULL);
+   exes = eina_list_append(exes, exec);
 }
 
-static void 
-_il_home_btn_cb_click(void *data, void *data2
+static E_Border *
+_il_home_desktop_find_border(E_Zone *zone, Efreet_Desktop *desktop
 {
-   Instance *inst;
-   E_Zone *zone;
-   Ecore_X_Illume_Mode mode;
-   int hcount = 0;
-
-   if (!(inst = data)) return;
-
-   /* we need to check current illume mode here first */
-   zone = inst->gcc->gadcon->zone;
-   mode = ecore_x_e_illume_mode_get(zone->black_win);
+   Eina_List *l;
+   E_Border *bd;
+   char *exe = NULL, *p;
 
-   if (mode <= ECORE_X_ILLUME_MODE_SINGLE) 
-     hcount = 1;
+   if (!desktop) return NULL;
+   if (!desktop->exec) return NULL;
+   p = strchr(desktop->exec, ' ');
+   if (!p)
+     exe = strdup(desktop->exec);
    else 
-     hcount = 2;
+     {
+        exe = malloc(p - desktop->exec + 1);
+        memset(exe, 0, sizeof(exe));
+        if (exe) eina_strlcpy(exe, desktop->exec, p - desktop->exec + 1);
+     }
+   if (exe) 
+     {
+        p = strrchr(exe, '/');
+        if (p) strcpy(exe, p + 1);
+     }
 
-   /* if there are less than 2 home windows, create a new one */
-   if (eina_list_count(inst->wins) < hcount) 
-     _il_home_win_new(inst);
-   else 
+   EINA_LIST_FOREACH(e_border_client_list(), l, bd) 
      {
-        /* already 2 home windows, so tell illume to focus one */
-        ecore_x_e_illume_focus_home_send(zone->black_win);
+        if (bd->zone != zone) continue;
+        if (e_exec_startup_id_pid_find(bd->client.netwm.pid, 
+                                       bd->client.netwm.startup_id) == desktop) 
+          {
+             if (exe) free(exe);
+             return bd;
+          }
+        if (exe) 
+          {
+             if (bd->client.icccm.command.argv) 
+               {
+                  char *pp;
+
+                  pp = strrchr(bd->client.icccm.command.argv[0], '/');
+                  if (!pp) pp = bd->client.icccm.command.argv[0];
+                  if (!strcmp(exe, pp)) 
+                    {
+                       free(exe);
+                       return bd;
+                    }
+               }
+             if ((bd->client.icccm.name) && 
+                 (!strcasecmp(bd->client.icccm.name, exe))) 
+               {
+                  free(exe);
+                  return bd;
+               }
+          }
      }
+   if (exe) free(exe);
+   return NULL;
 }
 
 static void 
-_il_home_win_new(Instance *inst
+_il_home_win_new(E_Zone *zone
 {
    Il_Home_Win *hwin;
-   E_Zone *zone;
+   Evas *evas;
    E_Desk *desk;
    char buff[PATH_MAX];
    const char *bgfile;
 
-   if (!inst) return;
-
-   hwin = E_OBJECT_ALLOC(Il_Home_Win, IL_HOME_WIN_TYPE, 
-                         _il_home_win_cb_free);
+   hwin = E_OBJECT_ALLOC(Il_Home_Win, IL_HOME_WIN_TYPE, _il_home_win_cb_free);
    if (!hwin) return;
-   inst->wins = eina_list_append(inst->wins, hwin);
 
-   zone = inst->gcc->gadcon->zone;
    hwin->zone = zone;
-
    hwin->win = e_win_new(zone->container);
    if (!hwin->win) 
      {
         e_object_del(E_OBJECT(hwin));
         return;
      }
-   hwin->win->data = inst;
+   hwin->win->data = hwin;
    e_win_title_set(hwin->win, _("Illume Home"));
    e_win_name_class_set(hwin->win, "Illume-Home", "Illume-Home");
    e_win_resize_callback_set(hwin->win, _il_home_win_cb_resize);
@@ -332,33 +405,32 @@ _il_home_win_new(Instance *inst)
    snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj", 
             il_home_cfg->mod_dir);
 
+   evas = e_win_evas_get(hwin->win);
+
    desk = e_desk_current_get(zone);
    if (desk)
      bgfile = e_bg_file_get(zone->container->num, zone->num, desk->x, desk->y);
    else
      bgfile = e_bg_file_get(zone->container->num, zone->num, -1, -1);
 
-   hwin->o_bg = edje_object_add(e_win_evas_get(hwin->win));
+   hwin->o_bg = edje_object_add(evas);
    edje_object_file_set(hwin->o_bg, bgfile, "e/desktop/background");
    evas_object_move(hwin->o_bg, 0, 0);
    evas_object_show(hwin->o_bg);
 
-   hwin->o_sf = e_scrollframe_add(e_win_evas_get(hwin->win));
-   e_scrollframe_single_dir_set(hwin->o_sf, 1);
-   evas_object_move(hwin->o_sf, 0, 0);
-   evas_object_show(hwin->o_sf);
-
+   hwin->o_sf = e_scrollframe_add(evas);
+   e_scrollframe_single_dir_set(hwin->o_sf, EINA_TRUE);
    e_scrollframe_custom_edje_file_set(hwin->o_sf, buff, 
                                       "modules/illume-home/launcher/scrollview");
+   evas_object_move(hwin->o_sf, 0, 0);
+   evas_object_show(hwin->o_sf);
 
-   hwin->o_fm = e_fm2_add(e_win_evas_get(hwin->win));
+   hwin->o_fm = e_fm2_add(evas);
    _il_home_fmc_set(hwin->o_fm);
    evas_object_show(hwin->o_fm);
    e_user_dir_concat_static(buff, "appshadow");
    e_fm2_path_set(hwin->o_fm, NULL, buff);
-
    e_fm2_window_object_set(hwin->o_fm, E_OBJECT(hwin->win));
-
    e_scrollframe_extern_pan_set(hwin->o_sf, hwin->o_fm, 
                                 _il_home_pan_set, 
                                 _il_home_pan_get, 
@@ -372,217 +444,37 @@ _il_home_win_new(Instance *inst)
 
    e_win_move_resize(hwin->win, zone->x, zone->y, zone->w, (zone->h / 2));
    e_win_show(hwin->win);
-
    e_border_zone_set(hwin->win->border, zone);
+   if (hwin->win->evas_win) 
+     e_drop_xdnd_register_set(hwin->win->evas_win, EINA_TRUE);
 
-   if (hwin->win->evas_win)
-     e_drop_xdnd_register_set(hwin->win->evas_win, 1);
+   hwins = eina_list_append(hwins, hwin);
 }
 
 static void 
 _il_home_win_cb_free(Il_Home_Win *hwin) 
 {
-   if (hwin->win->evas_win)
-     e_drop_xdnd_register_set(hwin->win->evas_win, 0);
-
+   if (hwin->win->evas_win) e_drop_xdnd_register_set(hwin->win->evas_win, 0);
    if (hwin->cover) e_object_del(E_OBJECT(hwin->cover));
-   hwin->cover = NULL;
-
    if (hwin->o_bg) evas_object_del(hwin->o_bg);
-   hwin->o_bg = NULL;
    if (hwin->o_sf) evas_object_del(hwin->o_sf);
-   hwin->o_sf = NULL;
    if (hwin->o_fm) evas_object_del(hwin->o_fm);
-   hwin->o_fm = NULL;
-
    if (hwin->win) e_object_del(E_OBJECT(hwin->win));
-   hwin->win = NULL;
+   E_FREE(hwin);
 }
 
 static void 
 _il_home_win_cb_resize(E_Win *win) 
 {
-   Instance *inst;
    Il_Home_Win *hwin;
-   Eina_List *l;
-
-   if (!(inst = win->data)) return;
-   EINA_LIST_FOREACH(inst->wins, l, hwin) 
-     {
-        if (hwin->win != win) 
-          {
-             hwin = NULL;
-             continue;
-          }
-        else break;
-     }
-   if (!hwin) return;
 
+   if (!(hwin = win->data)) return;
    if (hwin->o_bg) evas_object_resize(hwin->o_bg, win->w, win->h);
    if (hwin->o_sf) evas_object_resize(hwin->o_sf, win->w, win->h);
    if (hwin->cover) e_busycover_resize(hwin->cover, win->w, win->h);
 }
 
 static void 
-_il_home_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) 
-{
-   e_fm2_pan_set(obj, x, y);
-}
-
-static void 
-_il_home_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) 
-{
-   e_fm2_pan_get(obj, x, y);
-}
-
-static void 
-_il_home_pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) 
-{
-   e_fm2_pan_max_get(obj, x, y);
-}
-
-static void 
-_il_home_pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) 
-{
-   e_fm2_pan_child_size_get(obj, w, h);
-}
-
-static void 
-_il_home_cb_selected(void *data, Evas_Object *obj, void *event) 
-{
-   Il_Home_Win *hwin;
-   Eina_List *selected;
-   E_Fm2_Icon_Info *ici;
-
-   if (!(hwin = data)) return;
-   if (!(selected = e_fm2_selected_list_get(hwin->o_fm))) return;
-   EINA_LIST_FREE(selected, ici) 
-     {
-        Efreet_Desktop *desktop;
-
-        if (ici) 
-          {
-             if (ici->real_link) 
-               {
-                  desktop = efreet_desktop_get(ici->real_link);
-                  if (desktop) 
-                    _il_home_desktop_run(hwin, desktop);
-               }
-          }
-     }
-}
-
-static void 
-_il_home_desktop_run(Il_Home_Win *hwin, Efreet_Desktop *desktop) 
-{
-   E_Exec_Instance *eins;
-   Il_Home_Exec *exe;
-   Eina_List *l;
-   E_Border *b;
-   char buff[PATH_MAX];
-
-   if ((!desktop) || (!desktop->exec)) return;
-
-   EINA_LIST_FOREACH(exes, l, exe) 
-     {
-        if (exe->desktop == desktop) 
-          {
-             if ((exe->border) && 
-                 (exe->border->zone == hwin->win->border->zone))
-               {
-                  e_border_uniconify(exe->border);
-                  e_border_show(exe->border);
-                  e_border_raise(exe->border);
-                  e_border_focus_set(exe->border, 1, 1);
-                  return;
-               }
-          }
-     }
-
-   b = _il_home_desktop_find_border(hwin->win->border->zone, desktop);
-   if (b) 
-     {
-        e_border_uniconify(b);
-        e_border_show(b);
-        e_border_raise(b);
-        e_border_focus_set(b, 1, 1);
-        return;
-     }
-
-   exe = E_NEW(Il_Home_Exec, 1);
-   if (!exe) return;
-   exe->cover = hwin->cover;
-
-   eins = e_exec(hwin->win->border->zone, desktop, NULL, NULL, "illume-home");
-   exe->desktop = desktop;
-   exe->zone = hwin->win->border->zone;
-   if (eins) 
-     {
-        exe->exec = eins->exe;
-        exe->startup_id = eins->startup_id;
-        if (eins->exe) 
-          exe->pid = ecore_exe_pid_get(eins->exe);
-     }
-
-   exe->timeout = ecore_timer_add(20.0, _il_home_win_cb_timeout, exe);
-   snprintf(buff, sizeof(buff), "Starting %s", desktop->name);
-   exe->handle = e_busycover_push(hwin->cover, buff, NULL);
-   exes = eina_list_append(exes, exe);
-}
-
-static void 
-_il_home_apps_populate(void) 
-{
-   Eina_List *l, *ll;
-   Instance *inst;
-   char buff[PATH_MAX];
-
-   e_user_dir_concat_static(buff, "appshadow");
-   ecore_file_mkpath(buff);
-
-   _il_home_desks_populate();
-
-   EINA_LIST_FOREACH(instances, l, inst) 
-     {
-        Il_Home_Win *hwin;
-
-        EINA_LIST_FOREACH(inst->wins, ll, hwin) 
-          {
-             if (!hwin) continue;
-             _il_home_fmc_set(hwin->o_fm);
-             e_fm2_path_set(hwin->o_fm, NULL, buff);
-          }
-     }
-}
-
-static void 
-_il_home_apps_unpopulate(void) 
-{
-   Efreet_Desktop *desktop;
-   Eina_List *files;
-   char buff[PATH_MAX], *file;
-   size_t len;
-
-   EINA_LIST_FREE(desks, desktop)
-     efreet_desktop_free(desktop);
-
-   len = e_user_dir_concat_static(buff, "appshadow");
-   if ((len + 2) >= sizeof(buff)) return;
-
-   files = ecore_file_ls(buff);
-   buff[len] = '/';
-   len++;
-
-   EINA_LIST_FREE(files, file) 
-     {
-        if (eina_strlcpy(buff + len, file, sizeof(buff) - len) >= sizeof(buff) - len)
-          continue;
-        ecore_file_unlink(buff);
-        free(file);
-     }
-}
-
-static void 
 _il_home_fmc_set(Evas_Object *obj) 
 {
    E_Fm2_Config fmc;
@@ -608,179 +500,68 @@ _il_home_fmc_set(Evas_Object *obj)
    e_fm2_config_set(obj, &fmc);
 }
 
-static void 
-_il_home_desks_populate(void) 
-{
-   Efreet_Menu *menu;
-
-   menu = efreet_menu_get();
-   if (menu) 
-     {
-        Eina_List *l, *ll;
-        Efreet_Menu *entry, *subentry;
-        Eina_List *settings, *sys, *kbd;
-        int num = 0;
-
-        settings = efreet_util_desktop_category_list("Settings");
-        sys = efreet_util_desktop_category_list("System");
-        kbd = efreet_util_desktop_category_list("Keyboard");
-        EINA_LIST_FOREACH(menu->entries, l, entry) 
-          {
-             if (entry->type != EFREET_MENU_ENTRY_MENU) continue;
-             EINA_LIST_FOREACH(entry->entries, ll, subentry) 
-               {
-                 Efreet_Desktop *desktop;
-
-                  if (subentry->type != EFREET_MENU_ENTRY_DESKTOP) continue;
-                  if (!(desktop = subentry->desktop)) continue;
-                  if ((settings) && (sys) && 
-                      (eina_list_data_find(settings, desktop)) && 
-                      (eina_list_data_find(sys, desktop))) continue;
-                  if ((kbd) && (eina_list_data_find(kbd, desktop)))
-                    continue;
-                  if (desktop) 
-                    {
-                       char buff[PATH_MAX];
-
-                       desks = eina_list_append(desks, desktop);
-                       efreet_desktop_ref(desktop);
-                       e_user_dir_snprintf(buff, sizeof(buff), 
-                                           "appshadow/%04x.desktop", num);
-                       ecore_file_symlink(desktop->orig_path, buff);
-                       num++;
-                    }
-               }
-          }
-       efreet_menu_free(menu);
-     }
-}
-
 static int 
-_il_home_desktop_cache_update(void *data, int type, void *event
+_il_home_update_deferred(void *data __UNUSED__
 {
    _il_home_apps_unpopulate();
-   if (defer) ecore_timer_del(defer);
-   defer = ecore_timer_add(1.0, _il_home_update_deferred, NULL);
-   return 1;
-}
-
-static int 
-_il_home_update_deferred(void *data) 
-{
    _il_home_apps_populate();
    defer = NULL;
    return 0;
 }
 
-static int 
-_il_home_win_cb_exe_del(void *data, int type, void *event
+static void 
+_il_home_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y
 {
-   Il_Home_Exec *exe;
-   Ecore_Exe_Event_Del *ev;
-   Eina_List *l;
+   e_fm2_pan_set(obj, x, y);
+}
 
-   ev = event;
-   EINA_LIST_FOREACH(exes, l, exe) 
-     {
-        if (exe->pid == ev->pid) 
-          {
-             if (exe->handle) 
-               {
-                  e_busycover_pop(exe->cover, exe->handle);
-                  exe->handle = NULL;
-               }
-             exes = eina_list_remove_list(exes, l);
-             if (exe->timeout) ecore_timer_del(exe->timeout);
-            if (exe->desktop) efreet_desktop_free(exe->desktop);
-             E_FREE(exe);
-             return 1;
-          }
-     }
-   return 1;
+static void 
+_il_home_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) 
+{
+   e_fm2_pan_get(obj, x, y);
 }
 
-static E_Border *
-_il_home_desktop_find_border(E_Zone *zone, Efreet_Desktop *desktop
+static void 
+_il_home_pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y
 {
-   Eina_List *l;
-   E_Border *bd;
-   char *exe = NULL, *p;
+   e_fm2_pan_max_get(obj, x, y);
+}
 
-   if (!desktop) return NULL;
-   if (!desktop->exec) return NULL;
-   p = strchr(desktop->exec, ' ');
-   if (!p)
-     exe = strdup(desktop->exec);
-   else 
-     {
-        exe = malloc(p - desktop->exec + 1);
-        memset(exe, 0, sizeof(exe));
-        if (exe) eina_strlcpy(exe, desktop->exec, p - desktop->exec + 1);
-     }
-   if (exe) 
-     {
-        p = strrchr(exe, '/');
-        if (p) strcpy(exe, p + 1);
-     }
+static void 
+_il_home_pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) 
+{
+   e_fm2_pan_child_size_get(obj, w, h);
+}
 
-   EINA_LIST_FOREACH(e_border_client_list(), l, bd) 
+static void 
+_il_home_cb_selected(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__) 
+{
+   Il_Home_Win *hwin;
+   Eina_List *selected;
+   E_Fm2_Icon_Info *ici;
+
+   if (!(hwin = data)) return;
+   if (!(selected = e_fm2_selected_list_get(hwin->o_fm))) return;
+   EINA_LIST_FREE(selected, ici) 
      {
-        if (bd->zone != zone) continue;
-        if (e_exec_startup_id_pid_find(bd->client.netwm.pid, 
-                                       bd->client.netwm.startup_id) == desktop) 
-          {
-             if (exe) free(exe);
-             return bd;
-          }
-        if (exe) 
-          {
-             if (bd->client.icccm.command.argv) 
-               {
-                  char *pp;
+        Efreet_Desktop *desktop;
 
-                  pp = strrchr(bd->client.icccm.command.argv[0], '/');
-                  if (!pp) pp = bd->client.icccm.command.argv[0];
-                  if (!strcmp(exe, pp)) 
-                    {
-                       free(exe);
-                       return bd;
-                    }
-               }
-             if ((bd->client.icccm.name) && 
-                 (!strcasecmp(bd->client.icccm.name, exe))) 
-               {
-                  free(exe);
-                  return bd;
-               }
-          }
+        if ((!ici) || (!ici->real_link)) continue;
+        if (!(desktop = efreet_desktop_get(ici->real_link))) continue;
+        _il_home_desktop_run(hwin, desktop);
      }
-   if (exe) free(exe);
-   return NULL;
 }
 
 static int 
-_il_home_win_cb_timeout(void *data
+_il_home_desktop_cache_update(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__
 {
-   Il_Home_Exec *exe;
-
-   if (!(exe = data)) return 1;
-
-   if (exe->handle) e_busycover_pop(exe->cover, exe->handle);
-   exe->handle = NULL;
-
-   if (!exe->border) 
-     {
-        exes = eina_list_remove(exes, exe);
-       if (exe->desktop) efreet_desktop_free(exe->desktop);
-       E_FREE(exe);
-        return 0;
-     }
-   exe->timeout = NULL;
-   return 0;
+   if (defer) ecore_timer_del(defer);
+   defer = ecore_timer_add(0.5, _il_home_update_deferred, NULL);
+   return 1;
 }
 
 static int 
-_il_home_border_add(void *data, int type, void *event) 
+_il_home_cb_border_add(void *data __UNUSED__, int type __UNUSED__, void *event) 
 {
    E_Event_Border_Add *ev;
    Il_Home_Exec *exe;
@@ -818,7 +599,7 @@ _il_home_border_add(void *data, int type, void *event)
 }
 
 static int 
-_il_home_border_remove(void *data, int type, void *event) 
+_il_home_cb_border_del(void *data __UNUSED__, int type __UNUSED__, void *event) 
 {
    E_Event_Border_Remove *ev;
    Il_Home_Exec *exe;
@@ -834,6 +615,8 @@ _il_home_border_remove(void *data, int type, void *event)
              if (exe->handle) e_busycover_pop(exe->cover, exe->handle);
              exe->handle = NULL;
              exe->border = NULL;
+             exes = eina_list_remove(exes, exe);
+             E_FREE(exe);
              break;
           }
      }
@@ -841,20 +624,64 @@ _il_home_border_remove(void *data, int type, void *event)
 }
 
 static int 
-_il_home_cb_client_message(void *data, int type, void *event) 
+_il_home_cb_exe_del(void *data __UNUSED__, int type __UNUSED__, void *event) 
+{
+   Il_Home_Exec *exe;
+   Ecore_Exe_Event_Del *ev;
+   Eina_List *l;
+
+   ev = event;
+   EINA_LIST_FOREACH(exes, l, exe) 
+     {
+        if (exe->pid == ev->pid) 
+          {
+             if (exe->handle) 
+               {
+                  e_busycover_pop(exe->cover, exe->handle);
+                  exe->handle = NULL;
+               }
+             exes = eina_list_remove_list(exes, l);
+             if (exe->timeout) ecore_timer_del(exe->timeout);
+            if (exe->desktop) efreet_desktop_free(exe->desktop);
+             E_FREE(exe);
+             break;
+          }
+     }
+   return 1;
+}
+
+static int 
+_il_home_cb_exe_timeout(void *data) 
+{
+   Il_Home_Exec *exe;
+
+   if (!(exe = data)) return 1;
+   if (exe->handle) e_busycover_pop(exe->cover, exe->handle);
+   exe->handle = NULL;
+   if (!exe->border) 
+     {
+        exes = eina_list_remove(exes, exe);
+        if (exe->desktop) efreet_desktop_free(exe->desktop);
+        E_FREE(exe);
+        return 0;
+     }
+   exe->timeout = NULL;
+   return 0;
+}
+
+static int 
+_il_home_cb_client_message(void *data __UNUSED__, int type __UNUSED__, void *event) 
 {
    Ecore_X_Event_Client_Message *ev;
-   Instance *inst;
 
    ev = event;
-   if (!(inst = data)) return 1;
    if (ev->message_type == ECORE_X_ATOM_E_ILLUME_HOME_NEW) 
      {
         E_Zone *zone;
 
-        zone = inst->gcc->gadcon->zone;
+        zone = e_util_zone_window_find(ev->win);
         if (zone->black_win != ev->win) return 1;
-        _il_home_win_new(inst);
+        _il_home_win_new(zone);
      }
    else if (ev->message_type == ECORE_X_ATOM_E_ILLUME_HOME_DEL) 
      {
@@ -863,34 +690,29 @@ _il_home_cb_client_message(void *data, int type, void *event)
         Il_Home_Win *hwin;
 
         if (!(bd = e_border_find_by_client_window(ev->win))) return 1;
-        EINA_LIST_FOREACH(inst->wins, l, hwin) 
+        EINA_LIST_FOREACH(hwins, l, hwin) 
           {
              if (hwin->win->border == bd) 
                {
-                  inst->wins = eina_list_remove_list(inst->wins, inst->wins);
+                  hwins = eina_list_remove_list(hwins, hwins);
                   e_object_del(E_OBJECT(hwin));
                   break;
                }
           }
      }
-
    return 1;
 }
 
 static int 
-_il_home_cb_prop_change(void *data, int type, void *event) 
+_il_home_cb_prop_change(void *data __UNUSED__, int type __UNUSED__, void *event) 
 {
-   Instance *inst;
    Ecore_X_Event_Window_Property *ev;
-   Eina_List *l;
    Il_Home_Win *hwin;
+   Eina_List *l;
 
    ev = event;
-   if (!(inst = data)) return 1;
-//   if (ev->win != ecore_x_window_root_first_get()) return 1;
    if (ev->atom != ATM_ENLIGHTENMENT_SCALE) return 1;
-
-   EINA_LIST_FOREACH(inst->wins, l, hwin) 
+   EINA_LIST_FOREACH(hwins, l, hwin) 
      if (hwin->o_fm) 
        {
           _il_home_fmc_set(hwin->o_fm);