Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/modules/cpufreq


Modified Files:
        e_mod_main.c e_mod_main.h 


Log Message:


e packages build again - also not much point having an enlightenment-data as
it's built as an arch specific package and it is intrinsically required by e
and cannot work without it nor is the data shared betwene e and other apps
unless e itself is installed too

===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/cpufreq/e_mod_main.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -3 -r1.34 -r1.35
--- e_mod_main.c        12 Mar 2006 16:12:57 -0000      1.34
+++ e_mod_main.c        20 Apr 2006 11:30:24 -0000      1.35
@@ -1,296 +1,302 @@
 /*
  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
  */
-#include <Ecore.h>
-#include <errno.h>
-#include <ctype.h>
+#include "e.h"
 #include "e_mod_main.h"
-#include "config.h"
 
 #ifdef __FreeBSD__   
 #include <sys/types.h>
 #include <sys/sysctl.h>
 #endif  
 
-/* FIXME: check permissions (can execute) setfreq before trying
- * FIXME: display throttling state ???
- * FIXME: handle multiple cpu's (yes it's likely rare - but possible)
- */
-
-static Cpufreq *_cpufreq_new(E_Module *module);
-static void     _cpufreq_free(Cpufreq *cpufreq);
-static void     _cpufreq_set_governor(Cpufreq *cpufreq, const char *governor);
-static void     _cpufreq_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi);
-static void     _cpufreq_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi);
-static void     _cpufreq_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi);
-static void     _cpufreq_menu_slow(void *data, E_Menu *m, E_Menu_Item *mi);
-static void     _cpufreq_menu_very_slow(void *data, E_Menu *m, E_Menu_Item 
*mi);
-static void     _cpufreq_menu_restore_governor(void *data, E_Menu *m, 
E_Menu_Item *mi);
-static void     _cpufreq_menu_governor(void *data, E_Menu *m, E_Menu_Item *mi);
-static void     _cpufreq_menu_frequency(void *data, E_Menu *m, E_Menu_Item 
*mi);
-static void     _cpufreq_config_menu_new(Cpufreq *cpufreq);
-static int      _cpufreq_cb_check(void *data);
-
-static Status * _cpufreq_status_new();
-static void     _cpufreq_status_free(Status *e);
-static int      _cpufreq_status_check_available(Status *e);
-static int      _cpufreq_status_check_current(Status *e);
-static int      _cpufreq_cb_sort(void *item1, void *item2);
-
-static Cpufreq_Face *_cpufreq_face_new(E_Container *con, Cpufreq *owner);
-static void          _cpufreq_face_free(Cpufreq_Face *face);
-static void          _cpufreq_face_menu_new(Cpufreq_Face *face);
-static void          _cpufreq_face_enable(Cpufreq_Face *face);
-static void          _cpufreq_face_disable(Cpufreq_Face *face);
-static void          _cpufreq_face_cb_gmc_change(void *data, E_Gadman_Client 
*gmc, E_Gadman_Change change);
-static void          _cpufreq_face_cb_menu_edit(void *data, E_Menu *m, 
E_Menu_Item *mi);
-static void          _cpufreq_face_cb_mouse_down(void *data, Evas *e, 
Evas_Object *obj, void *event_info);
-static void          _cpufreq_face_update_available(Cpufreq_Face *face);
-static void          _cpufreq_face_update_current(Cpufreq_Face *face);
-static void          _cpufreq_face_cb_set_frequency(void *data, Evas_Object 
*o, const char *emission, const char *source);
-static void          _cpufreq_face_cb_set_governor(void *data, Evas_Object *o, 
const char *emission, const char *source);
+/***************************************************************************/
+/**/
+/* gadcon requirements */
+static E_Gadcon_Client *_gc_init(E_Gadcon *gc, char *name, char *id, char 
*style);
+static void _gc_shutdown(E_Gadcon_Client *gcc);
+static void _gc_orient(E_Gadcon_Client *gcc);
+/* and actually define the gadcon class that this module provides (just 1) */
+static const E_Gadcon_Client_Class _gadcon_class =
+{
+   GADCON_CLIENT_CLASS_VERSION,
+     "cpufreq",
+     {
+       _gc_init, _gc_shutdown, _gc_orient
+     }
+};
+/**/
+/***************************************************************************/
 
-static E_Config_DD *conf_edd;
-static E_Config_DD *conf_face_edd;
+/***************************************************************************/
+/**/
+/* actual module specifics */
 
-static int cpufreq_count;
+typedef struct _Instance Instance;
 
-/* public module routines */
-EAPI E_Module_Api e_modapi = 
+struct _Instance
 {
-   E_MODULE_API_VERSION,
-   "Cpufreq"
+   E_Gadcon_Client *gcc;
+   Evas_Object     *o_cpu;
 };
 
-EAPI void *
-e_modapi_init(E_Module *module)
-{
-   Cpufreq *freq;
-   
-   freq = _cpufreq_new(module);
-   module->config_menu = freq->config_menu;
-   return freq;
-}
-
-EAPI int
-e_modapi_shutdown(E_Module *module)
-{
-   Cpufreq *cpufreq;
+static void _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void 
*event_info);
+static void _menu_cb_post(void *data, E_Menu *m);
+static void _cpufreq_set_governor(const char *governor);
+static void _cpufreq_set_frequency(int frequency);
+static int _cpufreq_cb_check(void *data);
+static Status *_cpufreq_status_new();
+static void _cpufreq_status_free(Status *s);
+static int _cpufreq_status_check_available(Status *s);
+static int _cpufreq_status_check_current(Status *s);
+static int _cpufreq_cb_sort(void *item1, void *item2);
+static void _cpufreq_face_update_available(Instance *inst);
+static void _cpufreq_face_update_current(Instance *inst);
+static void _cpufreq_face_cb_set_frequency(void *data, Evas_Object *o, const 
char *emission, const char *source);
+static void _cpufreq_face_cb_set_governor(void *data, Evas_Object *o, const 
char *emission, const char *source);
+
+static void _cpufreq_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi);
+static void _cpufreq_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi);
+static void _cpufreq_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi);
+static void _cpufreq_menu_slow(void *data, E_Menu *m, E_Menu_Item *mi);
+static void _cpufreq_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi);
+static void _cpufreq_menu_restore_governor(void *data, E_Menu *m, E_Menu_Item 
*mi);
+static void _cpufreq_menu_governor(void *data, E_Menu *m, E_Menu_Item *mi);
+static void _cpufreq_menu_frequency(void *data, E_Menu *m, E_Menu_Item *mi);
 
-   if (module->config_menu)
-     module->config_menu = NULL;
+static E_Config_DD *conf_edd = NULL;
 
-   cpufreq = module->data;
-   if (cpufreq)
-     _cpufreq_free(cpufreq);
-   
-   return 1;
-}
+Config *cpufreq_config = NULL;
 
-EAPI int
-e_modapi_save(E_Module *module)
+static E_Gadcon_Client *
+_gc_init(E_Gadcon *gc, char *name, char *id, char *style)
 {
-   Cpufreq *e;
-
-   e = module->data;
-   e_config_domain_save("module.cpufreq", conf_edd, e->conf);
-   return 1;
+   Evas_Object *o;
+   E_Gadcon_Client *gcc;
+   Instance *inst;
+   
+   inst = E_NEW(Instance, 1);
+   
+   o = edje_object_add(gc->evas);
+   e_theme_edje_object_set(o, "base/theme/modules/cpufreq",
+                          "modules/cpufreq/main");
+   edje_object_signal_callback_add(o, "next_governor", "governor", 
_cpufreq_face_cb_set_governor, NULL);
+   edje_object_signal_callback_add(o, "increase_frequency", "frequency", 
_cpufreq_face_cb_set_frequency, NULL);
+   edje_object_signal_callback_add(o, "decrease_frequency", "frequency", 
_cpufreq_face_cb_set_frequency, NULL);
+   
+   gcc = e_gadcon_client_new(gc, name, id, style, o);
+   gcc->data = inst;
+   
+   inst->gcc = gcc;
+   inst->o_cpu = o;
+   
+   evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
+                                 _button_cb_mouse_down, inst);
+   cpufreq_config->instances = evas_list_append(cpufreq_config->instances, 
inst);
+   if (cpufreq_config->status) _cpufreq_status_free(cpufreq_config->status);
+   cpufreq_config->status = _cpufreq_status_new();
+   _cpufreq_cb_check(NULL);
+   _cpufreq_face_update_available(inst);
+   return gcc;
 }
 
-EAPI int
-e_modapi_info(E_Module *module)
+static void
+_gc_shutdown(E_Gadcon_Client *gcc)
 {
-   char buf[4096];
+   Instance *inst;
    
-   snprintf(buf, sizeof(buf), "%s/module_icon.png", e_module_dir_get(module));
-   module->icon_file = strdup(buf);
-   return 1;
+   inst = gcc->data;
+   cpufreq_config->instances = evas_list_remove(cpufreq_config->instances, 
inst);
+   evas_object_del(inst->o_cpu);
+   free(inst);
 }
 
-EAPI int
-e_modapi_about(E_Module *module)
+static void
+_gc_orient(E_Gadcon_Client *gcc)
 {
-   e_module_dialog_show(_("CPU Frequency Controller Module"), 
-                       _("A simple module to control the frequency of the 
system CPU.<br>"
-                         "This is especially useful to save power on 
laptops."));
-   return 1;
+   Instance *inst;
+   
+   inst = gcc->data;
+   e_gadcon_client_aspect_set(gcc, 16, 16);
+   e_gadcon_client_min_size_set(gcc, 16, 16);
 }
+/**/
+/***************************************************************************/
 
-static Cpufreq *
-_cpufreq_new(E_Module *module)
+/***************************************************************************/
+/**/
+static void
+_button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
 {
-   Cpufreq *e;
-   Evas_List *managers, *l, *l2, *cl;
-   E_Menu_Item *mi;
-   char buf[4096];
+   Instance *inst;
+   Evas_Event_Mouse_Down *ev;
    
-   cpufreq_count = 0;
-   e = E_NEW(Cpufreq, 1);
-   if (!e) return NULL;
+   inst = data;
+   ev = event_info;
+   if ((ev->button == 3) && (!cpufreq_config->menu))
+     {
+       E_Menu *mn;
+       E_Menu_Item *mi;
+       int cx, cy, cw, ch;
+       Evas_List *l;
+       char buf[256];
+       
+       mn = e_menu_new();
+       cpufreq_config->menu_poll = mn;
+       
+       mi = e_menu_item_new(mn);
+       e_menu_item_label_set(mi, _("Fast (0.5 sec)"));
+       e_menu_item_radio_set(mi, 1);
+       e_menu_item_radio_group_set(mi, 1);
+       if (cpufreq_config->poll_time <= 0.5) e_menu_item_toggle_set(mi, 1);
+       e_menu_item_callback_set(mi, _cpufreq_menu_fast, NULL);
 
-   conf_face_edd = E_CONFIG_DD_NEW("Cpufreq_Config_Face", Config_Face);
-#undef T
-#undef D
-#define T Config_Face
-#define D conf_face_edd
-   E_CONFIG_VAL(D, T, enabled, UCHAR);
+       mi = e_menu_item_new(mn);
+       e_menu_item_label_set(mi, _("Medium (1 sec)"));
+       e_menu_item_radio_set(mi, 1);
+       e_menu_item_radio_group_set(mi, 1);
+       if (cpufreq_config->poll_time > 0.5) e_menu_item_toggle_set(mi, 1);
+       e_menu_item_callback_set(mi, _cpufreq_menu_medium, NULL);
 
-   conf_edd = E_CONFIG_DD_NEW("Cpufreq_Config", Config);
-#undef T
-#undef D
-#define T Config
-#define D conf_edd
-   E_CONFIG_VAL(D, T, poll_time, DOUBLE);
-   E_CONFIG_LIST(D, T, faces, conf_face_edd);
-   E_CONFIG_VAL(D, T, restore_governor, INT);
-   E_CONFIG_VAL(D, T, governor, STR);
-   
-   e->conf = e_config_domain_load("module.cpufreq", conf_edd);
-   if (!e->conf)
-     {
-       e->conf = E_NEW(Config, 1);
-       e->conf->poll_time = 2.0;
-       e->conf->restore_governor = 0;
-       e->conf->governor = NULL;
-     }
-   E_CONFIG_LIMIT(e->conf->poll_time, 0.5, 60.0);
-#ifdef __FreeBSD__     
-   /* does e_module_dir_get(module) work correctly in linux???  - yes it 
does... what's wrong in bsd? */
-   snprintf(buf, sizeof(buf), "%s/%s/cpufreq/freqset", 
e_module_dir_get(module), MODULE_ARCH);
-#else   
-   snprintf(buf, sizeof(buf), "%s/%s/freqset", e_module_dir_get(module), 
MODULE_ARCH);
-#endif
-   buf[sizeof(buf) - 1] = 0;
-   e->set_exe_path = strdup(buf);
-   e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, 
_cpufreq_cb_check, e);
-   e->status = _cpufreq_status_new();
+       mi = e_menu_item_new(mn);
+       e_menu_item_label_set(mi, _("Normal (2 sec)"));
+       e_menu_item_radio_set(mi, 1);
+       e_menu_item_radio_group_set(mi, 1);
+       if (cpufreq_config->poll_time >= 2.0) e_menu_item_toggle_set(mi, 1);
+       e_menu_item_callback_set(mi, _cpufreq_menu_normal, NULL);
 
-   _cpufreq_status_check_available(e->status);
-   if ((e->conf->restore_governor) && (e->conf->governor))
-     {
-       /* If the governor is available, restore it */
-       for (l = e->status->governors; l; l = l->next)
+       mi = e_menu_item_new(mn);
+       e_menu_item_label_set(mi, _("Slow (5 sec)"));
+       e_menu_item_radio_set(mi, 1);
+       e_menu_item_radio_group_set(mi, 1);
+       if (cpufreq_config->poll_time >= 5.0) e_menu_item_toggle_set(mi, 1);
+       e_menu_item_callback_set(mi, _cpufreq_menu_slow, NULL);
+
+       mi = e_menu_item_new(mn);
+       e_menu_item_label_set(mi, _("Very Slow (30 sec)"));
+       e_menu_item_radio_set(mi, 1);
+       e_menu_item_radio_group_set(mi, 1);
+       if (cpufreq_config->poll_time >= 30.0) e_menu_item_toggle_set(mi, 1);
+       e_menu_item_callback_set(mi, _cpufreq_menu_very_slow, NULL);
+
+       if (cpufreq_config->status->governors)
          {
-            if (!strcmp(l->data, e->conf->governor))
-              _cpufreq_set_governor(e, e->conf->governor);
+            mn = e_menu_new();
+            cpufreq_config->menu_governor = mn;
+            
+            for (l = cpufreq_config->status->governors; l; l = l->next)
+              {
+                 mi = e_menu_item_new(mn);
+                 if (!strcmp(l->data, "userspace"))
+                   e_menu_item_label_set(mi, _("Manual"));
+                 else if (!strcmp(l->data, "ondemand"))
+                   e_menu_item_label_set(mi, _("Automatic"));
+                 else if (!strcmp(l->data, "conservative"))
+                   e_menu_item_label_set(mi, _("Lower Power Automatic"));
+                 else if (!strcmp(l->data, "powersave"))
+                   e_menu_item_label_set(mi, _("Minimum Speed"));
+                 else if (!strcmp(l->data, "performance"))
+                   e_menu_item_label_set(mi, _("Maximum Speed"));
+                 e_menu_item_radio_set(mi, 1);
+                 e_menu_item_radio_group_set(mi, 1);
+                 e_object_data_set(E_OBJECT(mi), l->data);
+                 if (!strcmp(cpufreq_config->status->cur_governor, l->data))
+                   e_menu_item_toggle_set(mi, 1);
+                 e_menu_item_callback_set(mi, _cpufreq_menu_governor, NULL);
+              }
          }
-     }
-   _cpufreq_config_menu_new(e);
-       
-   managers = e_manager_list();
-   cl = e->conf->faces;
-   for (l = managers; l; l = l->next)
-     {
-       E_Manager *man;
-               
-       man = l->data;
-       for (l2 = man->containers; l2; l2 = l2->next)
-         {
-            E_Container *con;
-            Cpufreq_Face *ef;
 
-            con = l2->data;
-            ef = _cpufreq_face_new(con, e);
-            if (ef)
+       if ((cpufreq_config->status->frequencies) &&
+           (cpufreq_config->status->can_set_frequency))
+         {
+            mn = e_menu_new();
+            cpufreq_config->menu_frequency = mn;
+       
+            for (l = cpufreq_config->status->frequencies; l; l = l->next)
               {
-                 e->faces = evas_list_append(e->faces, ef);
-
-                 if (!cl)
-                   {
-                      ef->conf = E_NEW(Config_Face, 1);
-                      ef->conf->enabled = 1;
-                      e->conf->faces = evas_list_append(e->conf->faces, 
ef->conf);
-                   }
-                 else
-                   {
-                      ef->conf = cl->data;
-                      cl = cl->next;
-                   }
-
-                 _cpufreq_face_menu_new(ef);
-
-                 /* Add poll time menu to this face */
-                 mi = e_menu_item_new(ef->menu);
-                 e_menu_item_label_set(mi, _("Set Poll Time"));
-                 e_menu_item_submenu_set(mi, e->config_menu_poll);
-
-                 if (e->menu_governor)
-                   {
-                      mi = e_menu_item_new(ef->menu);
-                      e_menu_item_label_set(mi, _("Restore Controller on 
Startup"));
-                      e_menu_item_check_set(mi, 1);
-                      e_menu_item_toggle_set(mi, e->conf->restore_governor);
-                      e_menu_item_callback_set(mi, 
_cpufreq_menu_restore_governor, e);
-
-                      /* Add governors menu to this face */
-                      mi = e_menu_item_new(ef->menu);
-                      e_menu_item_label_set(mi, _("Set Controller"));
-                      e_menu_item_submenu_set(mi, e->menu_governor);
-                   }
+                 int frequency;
                  
-                 if (e->menu_frequency)
-                   {
-                      /* Add frequency menu to this face */
-                      mi = e_menu_item_new(ef->menu);
-                      e_menu_item_label_set(mi, _("Set Speed"));
-                      e_menu_item_submenu_set(mi, e->menu_frequency);
-                   }
-
-                 /* Add this face to the main menu */
-                 mi = e_menu_item_new(e->config_menu);
-                 e_menu_item_label_set(mi, con->name);
-                 e_menu_item_submenu_set(mi, ef->menu);
-
-                 if (!ef->conf->enabled)
-                   _cpufreq_face_disable(ef);
+                 frequency = (int)l->data;
+                 mi = e_menu_item_new(mn);
+                 if (frequency < 1000000)
+                   snprintf(buf, sizeof(buf), _("%i MHz"), frequency / 1000);
+                 else
+                   snprintf(buf, sizeof(buf), _("%i.%i GHz"), 
+                            frequency / 1000000, (frequency % 1000000) / 
100000);
+                 buf[sizeof(buf) - 1] = 0;
+                 e_menu_item_label_set(mi, buf);
+                 e_menu_item_radio_set(mi, 1);
+                 e_menu_item_radio_group_set(mi, 1);
+                 e_object_data_set(E_OBJECT(mi), l->data);
+                 if (cpufreq_config->status->cur_frequency == frequency)
+                   e_menu_item_toggle_set(mi, 1);
+                 e_menu_item_callback_set(mi, _cpufreq_menu_frequency, NULL);
               }
          }
-     }
+       
+       mn = e_menu_new();
+       cpufreq_config->menu = mn;
+       e_menu_post_deactivate_callback_set(mn, _menu_cb_post, inst);
+       
+       mi = e_menu_item_new(mn);
+       e_menu_item_label_set(mi, _("Time Between Updates"));
+       e_menu_item_submenu_set(mi, cpufreq_config->menu_poll);
 
-   _cpufreq_cb_check(e);
+       if (cpufreq_config->menu_governor)
+         {
+            mi = e_menu_item_new(mn);
+            e_menu_item_label_set(mi, _("Restore CPU Power Policy"));
+            e_menu_item_check_set(mi, 1);
+            e_menu_item_toggle_set(mi, cpufreq_config->restore_governor);
+            e_menu_item_callback_set(mi, _cpufreq_menu_restore_governor, NULL);
+            
+            mi = e_menu_item_new(mn);
+            e_menu_item_label_set(mi, _("Set CPU Power Policy"));
+            e_menu_item_submenu_set(mi, cpufreq_config->menu_governor);
+         }
+       
+       if (cpufreq_config->menu_frequency)
+         {
+            mi = e_menu_item_new(mn);
+            e_menu_item_label_set(mi, _("Set CPU Speed"));
+            e_menu_item_submenu_set(mi, cpufreq_config->menu_frequency);
+         }
+       
+        e_gadcon_client_util_menu_items_append(inst->gcc, mn, 0);
+       
+       e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon,
+                                         &cx, &cy, &cw, &ch);
+       e_menu_activate_mouse(mn,
+                             e_util_zone_current_get(e_manager_current_get()),
+                             cx + ev->output.x, cy + ev->output.y, 1, 1,
+                             E_MENU_POP_DIRECTION_DOWN, ev->timestamp);
+       evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button,
+                                EVAS_BUTTON_NONE, ev->timestamp, NULL);
+     }
 
-   return e;
 }
 
 static void
-_cpufreq_free(Cpufreq *e)
+_menu_cb_post(void *data, E_Menu *m)
 {
-   Evas_List *l;
-
-   E_CONFIG_DD_FREE(conf_edd);
-   E_CONFIG_DD_FREE(conf_face_edd);
-
-   for (l = e->faces; l; l = l->next)
-     _cpufreq_face_free(l->data);
-   evas_list_free(e->faces);
-
-   e_object_del(E_OBJECT(e->config_menu));
-   e_object_del(E_OBJECT(e->config_menu_poll));
-   if (e->menu_governor)
-     e_object_del(E_OBJECT(e->menu_governor));
-   if (e->menu_frequency)
-     e_object_del(E_OBJECT(e->menu_frequency));
-
-   ecore_timer_del(e->frequency_check_timer);
-
-   _cpufreq_status_free(e->status);
-
-   evas_list_free(e->conf->faces);
-   free(e->set_exe_path);
-   if (e->conf->governor) evas_stringshare_del(e->conf->governor);
-   free(e->conf);
-   free(e);
+   if (!cpufreq_config->menu) return;
+   e_object_del(E_OBJECT(cpufreq_config->menu));
+   cpufreq_config->menu = NULL;
+   if (cpufreq_config->menu_poll) 
e_object_del(E_OBJECT(cpufreq_config->menu_poll));
+   cpufreq_config->menu_poll = NULL;
+   if (cpufreq_config->menu_governor) 
e_object_del(E_OBJECT(cpufreq_config->menu_governor));
+   cpufreq_config->menu_governor = NULL;
+   if (cpufreq_config->menu_frequency) 
e_object_del(E_OBJECT(cpufreq_config->menu_frequency));
+   cpufreq_config->menu_frequency = NULL;
 }
 
 static void
-_cpufreq_set_governor(Cpufreq *e, const char *governor)
+_cpufreq_set_governor(const char *governor)
 {
-   /* TODO: Use ecore_exe */
    char buf[4096];
    int ret;
 
    snprintf(buf, sizeof(buf), 
-           "%s %s %s", e->set_exe_path, "governor", governor);
+           "%s %s %s", cpufreq_config->set_exe_path, "governor", governor);
    ret = system(buf);
    if (ret != 0)
      {
@@ -300,8 +306,9 @@
        if (!dia) return;
        e_dialog_title_set(dia, "Enlightenment Cpufreq Module");
        e_dialog_icon_set(dia, "enlightenment/e", 64);
-       e_dialog_text_set(dia, _("There was an error trying to set the cpu 
frequency<br>"
-                                "governor via the module's setfreq utility."));
+       e_dialog_text_set(dia, _("There was an error trying to set the<br>"
+                                "cpu frequency governor via the module's<br>"
+                                "setfreq utility."));
        e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
        e_win_centered_set(dia->win, 1);
        e_dialog_show(dia);
@@ -309,7 +316,7 @@
 }
 
 static void
-_cpufreq_set_frequency(Cpufreq *e, int frequency)
+_cpufreq_set_frequency(int frequency)
 {
    char buf[4096];
    int ret;
@@ -317,10 +324,7 @@
 #ifdef __FreeBSD__
    frequency /= 1000;
 #endif 
-   snprintf(buf, sizeof(buf),
-           "%s %s %i", e->set_exe_path, "frequency", frequency);
-   ret = system(buf);
-   if (ret != 0)
+   if (!cpufreq_config->status->can_set_frequency)
      {
        E_Dialog *dia;
 
@@ -328,274 +332,60 @@
        if (!dia) return;
        e_dialog_title_set(dia, "Enlightenment Cpufreq Module");
        e_dialog_icon_set(dia, "enlightenment/e", 64);
-       e_dialog_text_set(dia, _("There was an error trying to set the cpu 
frequency<br>"
-                                "setting via the module's setfreq utility."));
+       e_dialog_text_set(dia, _("Your kernel does not support setting the<br>"
+                                "CPU frequency at all. You may be missing<br>"
+                                "Kernel modules or features, or your CPU<br>"
+                                "simply does not support this feature."));
        e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
        e_win_centered_set(dia->win, 1);
        e_dialog_show(dia);
+       return;
      }
-}
-
-static void
-_cpufreq_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi)
-{
-   Cpufreq *e;
-
-   e = data;
-   e->conf->poll_time = 0.5;
-   ecore_timer_del(e->frequency_check_timer);
-   e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, 
_cpufreq_cb_check, e);
-   e_config_save_queue();
-}
-
-static void
-_cpufreq_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi)
-{
-   Cpufreq *e;
-
-   e = data;
-   e->conf->poll_time = 1.0;
-   ecore_timer_del(e->frequency_check_timer);
-   e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, 
_cpufreq_cb_check, e);
-   e_config_save_queue();
-}
-
-static void
-_cpufreq_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi)
-{
-   Cpufreq *e;
-
-   e = data;
-   e->conf->poll_time = 2.0;
-   ecore_timer_del(e->frequency_check_timer);
-   e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, 
_cpufreq_cb_check, e);
-   e_config_save_queue();
-}
-
-static void
-_cpufreq_menu_slow(void *data, E_Menu *m, E_Menu_Item *mi)
-{
-   Cpufreq *e;
-
-   e = data;
-   e->conf->poll_time = 5.0;
-   ecore_timer_del(e->frequency_check_timer);
-   e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, 
_cpufreq_cb_check, e);
-   e_config_save_queue();
-}
-
-static void
-_cpufreq_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi)
-{
-   Cpufreq *e;
-
-   e = data;
-   e->conf->poll_time = 30.0;
-   ecore_timer_del(e->frequency_check_timer);
-   e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, 
_cpufreq_cb_check, e);
-   e_config_save_queue();
-}
-
-static void
-_cpufreq_menu_restore_governor(void *data, E_Menu *m, E_Menu_Item *mi)
-{
-   Cpufreq *e;
-
-   e = data;
-   e->conf->restore_governor = e_menu_item_toggle_get(mi);
-   if ((!e->conf->governor) || strcmp(e->status->cur_governor, 
e->conf->governor))
-     {
-       if (e->conf->governor) evas_stringshare_del(e->conf->governor);
-       e->conf->governor = evas_stringshare_add(e->status->cur_governor);
-     }
-   e_config_save_queue();
-}
-
-static void
-_cpufreq_menu_governor(void *data, E_Menu *m, E_Menu_Item *mi)
-{
-   Cpufreq *e;
-   char *governor;
-
-   e = data;
-   governor = e_object_data_get(E_OBJECT(mi));
-   if (governor)
-     {
-       _cpufreq_set_governor(e, governor);
-       if (e->conf->governor) evas_stringshare_del(e->conf->governor);
-       e->conf->governor = evas_stringshare_add(governor);
-     }
-   e_config_save_queue();
-}
-
-static void
-_cpufreq_menu_frequency(void * data, E_Menu *m, E_Menu_Item *mi)
-{
-   int frequency;
-   
-   frequency = (int) e_object_data_get(E_OBJECT(mi));
-   if (frequency > 0)
-     {
-       _cpufreq_set_frequency(data, frequency);
-     }
-}
-
-static void
-_cpufreq_config_menu_new(Cpufreq *e)
-{
-   E_Menu *mn;
-   E_Menu_Item *mi;
-   Evas_List *l;
-   char buf[256];
-
-   mn = e_menu_new();
-
-   mi = e_menu_item_new(mn);
-   e_menu_item_label_set(mi, _("Check Fast (0.5 sec)"));
-   e_menu_item_radio_set(mi, 1);
-   e_menu_item_radio_group_set(mi, 1);
-   if (e->conf->poll_time <= 0.5) e_menu_item_toggle_set(mi, 1);
-   e_menu_item_callback_set(mi, _cpufreq_menu_fast, e);
-
-   mi = e_menu_item_new(mn);
-   e_menu_item_label_set(mi, _("Check Medium (1 sec)"));
-   e_menu_item_radio_set(mi, 1);
-   e_menu_item_radio_group_set(mi, 1);
-   if (e->conf->poll_time > 0.5) e_menu_item_toggle_set(mi, 1);
-   e_menu_item_callback_set(mi, _cpufreq_menu_medium, e);
-
-   mi = e_menu_item_new(mn);
-   e_menu_item_label_set(mi, _("Check Normal (2 sec)"));
-   e_menu_item_radio_set(mi, 1);
-   e_menu_item_radio_group_set(mi, 1);
-   if (e->conf->poll_time >= 2.0) e_menu_item_toggle_set(mi, 1);
-   e_menu_item_callback_set(mi, _cpufreq_menu_normal, e);
-
-   mi = e_menu_item_new(mn);
-   e_menu_item_label_set(mi, _("Check Slow (5 sec)"));
-   e_menu_item_radio_set(mi, 1);
-   e_menu_item_radio_group_set(mi, 1);
-   if (e->conf->poll_time >= 5.0) e_menu_item_toggle_set(mi, 1);
-   e_menu_item_callback_set(mi, _cpufreq_menu_slow, e);
-
-   mi = e_menu_item_new(mn);
-   e_menu_item_label_set(mi, _("Check Very Slow (30 sec)"));
-   e_menu_item_radio_set(mi, 1);
-   e_menu_item_radio_group_set(mi, 1);
-   if (e->conf->poll_time >= 30.0) e_menu_item_toggle_set(mi, 1);
-   e_menu_item_callback_set(mi, _cpufreq_menu_very_slow, e);
-
-   e->config_menu_poll = mn;
-
-   if (e->status->governors)
-     {
-       mn = e_menu_new();
-
-       for (l = e->status->governors; l; l = l->next)
-         {
-            mi = e_menu_item_new(mn);
-            if (!strcmp(l->data, "userspace"))
-              e_menu_item_label_set(mi, _("Manual"));
-            else if (!strcmp(l->data, "ondemand"))
-              e_menu_item_label_set(mi, _("Automatic"));
-            else if (!strcmp(l->data, "conservative"))
-              e_menu_item_label_set(mi, _("Lower Power Automatic"));
-            else if (!strcmp(l->data, "powersave"))
-              e_menu_item_label_set(mi, _("Minimum Speed"));
-            else if (!strcmp(l->data, "performance"))
-              e_menu_item_label_set(mi, _("Maximum Speed"));
-            e_menu_item_radio_set(mi, 1);
-            e_menu_item_radio_group_set(mi, 1);
-            e_object_data_set(E_OBJECT(mi), l->data);
-            e_menu_item_callback_set(mi, _cpufreq_menu_governor, e);
-         }
-       
-       e->menu_governor = mn;
-     }
-
-   if (e->status->frequencies)
-     {
-       mn = e_menu_new();
-       
-       /* FIXME: sotring ints in pointers for freq's? BAD! */
-       for (l = e->status->frequencies; l; l = l->next)
-         {
-            int frequency;
-            
-            frequency = (int)l->data;
-            mi = e_menu_item_new(mn);
-            if (frequency < 1000000)
-              snprintf(buf, sizeof(buf), _("%i MHz"), 
-                       frequency / 1000);
-            else
-              snprintf(buf, sizeof(buf), _("%i.%i GHz"), 
-                       frequency / 1000000, (frequency % 1000000) / 100000);
-            buf[sizeof(buf) - 1] = 0;
-            e_menu_item_label_set(mi, buf);
-            e_menu_item_radio_set(mi, 1);
-            e_menu_item_radio_group_set(mi, 1);
-            e_object_data_set(E_OBJECT(mi), l->data);
-            e_menu_item_callback_set(mi, _cpufreq_menu_frequency, e);
-         }
-       e->menu_frequency = mn;
-     }
-
-   mn = e_menu_new();
-   
-   mi = e_menu_item_new(mn);
-   e_menu_item_label_set(mi, _("Set Poll Time"));
-   e_menu_item_submenu_set(mi, e->config_menu_poll);
-
-   if (e->menu_governor)
+   snprintf(buf, sizeof(buf),
+           "%s %s %i", cpufreq_config->set_exe_path, "frequency", frequency);
+   ret = system(buf);
+   if (ret != 0)
      {
-       mi = e_menu_item_new(mn);
-       e_menu_item_label_set(mi, _("Restore Governor on Startup"));
-       e_menu_item_check_set(mi, 1);
-       e_menu_item_toggle_set(mi, e->conf->restore_governor);
-       e_menu_item_callback_set(mi, _cpufreq_menu_restore_governor, e);
+       E_Dialog *dia;
 
-       mi = e_menu_item_new(mn);
-       e_menu_item_label_set(mi, _("Set Controller"));
-       e_menu_item_submenu_set(mi, e->menu_governor);
-     }
-   
-   if (e->menu_frequency)
-     {
-       mi = e_menu_item_new(mn);
-       e_menu_item_label_set(mi, _("Set Speed"));
-       e_menu_item_submenu_set(mi, e->menu_frequency);
+       dia = e_dialog_new(e_container_current_get(e_manager_current_get()));
+       if (!dia) return;
+       e_dialog_title_set(dia, "Enlightenment Cpufreq Module");
+       e_dialog_icon_set(dia, "enlightenment/e", 64);
+       e_dialog_text_set(dia, _("There was an error trying to set the<br>"
+                                "cpu frequency setting via the module's<br>"
+                                "setfreq utility."));
+       e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
+       e_win_centered_set(dia->win, 1);
+       e_dialog_show(dia);
      }
-
-   e->config_menu = mn;
 }
 
 static int
 _cpufreq_cb_check(void *data)
 {
-   Cpufreq *e;
-   Cpufreq_Face *face;
+   Instance *inst;
    Evas_List *l;
    int active;
    
-   e = data;
-   active = e->status->active;
-   if (_cpufreq_status_check_current(e->status))
+   active = cpufreq_config->status->active;
+   if (_cpufreq_status_check_current(cpufreq_config->status))
      {
-       for (l = e->faces; l; l = l->next) 
+       for (l = cpufreq_config->instances; l; l = l->next) 
          {
-            face = l->data;
-            _cpufreq_face_update_current(face);
+            inst = l->data;
+            _cpufreq_face_update_current(inst);
          }
      }
-   if (active != e->status->active)
+   if (active != cpufreq_config->status->active)
      {
-       for (l = e->faces; l; l = l->next) 
+       for (l = cpufreq_config->instances; l; l = l->next) 
          {
-            face = l->data;
-            if (e->status->active == 0)
-              edje_object_signal_emit(face->freq_object, "passive", "");
-            else if (e->status->active == 1)
-              edje_object_signal_emit(face->freq_object, "active", "");
+            inst = l->data;
+            if (cpufreq_config->status->active == 0)
+              edje_object_signal_emit(inst->o_cpu, "passive", "");
+            else if (cpufreq_config->status->active == 1)
+              edje_object_signal_emit(inst->o_cpu, "active", "");
          }
      }
 
@@ -605,38 +395,27 @@
 static Status *
 _cpufreq_status_new()
 {
-   Status *e;
-
-   e = E_NEW(Status, 1);
-   if (!e) return NULL;
+   Status *s;
 
-   e->frequencies = NULL;
-   e->governors = NULL;
-   e->cur_frequency = 0;
-   e->can_set_frequency = 0;
-   e->cur_governor = NULL;
-   e->active = -1;
-
-   return e;
+   s = E_NEW(Status, 1);
+   if (!s) return NULL;
+   s->active = -1;
+   return s;
 }
 
 static void
-_cpufreq_status_free(Status *e)
+_cpufreq_status_free(Status *s)
 {
    Evas_List *l;
 
-   if (e->frequencies)
-     evas_list_free(e->frequencies);
-   if (e->governors)
-     {
-       for (l = e->governors; l; l = l->next)
-         free(l->data);
-       evas_list_free(e->governors);
+   if (s->frequencies) evas_list_free(s->frequencies);
+   if (s->governors)
+     {
+       for (l = s->governors; l; l = l->next) free(l->data);
+       evas_list_free(s->governors);
      }
-   if (e->cur_governor)
-     free(e->cur_governor);
-
-   free(e);
+   if (s->cur_governor) free(s->cur_governor);
+   free(s);
 }
 
 static int
@@ -644,18 +423,15 @@
 {
    int a, b;
 
-   a = (int) item1;
-   b = (int) item2;
-   if (a < b)
-     return -1;
-   else if (a > b)
-     return 1;
-   else
-     return 0;
+   a = (int)item1;
+   b = (int)item2;
+   if (a < b) return -1;
+   else if (a > b) return 1;
+   return 0;
 }
 
 static int
-_cpufreq_status_check_available(Status *e)
+_cpufreq_status_check_available(Status *s)
 {
    char buf[4096];
    Evas_List *l;
@@ -669,13 +445,13 @@
    if (sysctlbyname("dev.cpu.0.freq_levels", buf, &len, NULL, 0) == 0)
      {    
        /* sysctl returns 0 on success */
-       if (e->frequencies)
+       if (s->frequencies)
          {
-            evas_list_free(e->frequencies);
-            e->frequencies = NULL;
+            evas_list_free(s->frequencies);
+            s->frequencies = NULL;
          }
 
-       /* parse freqs and store the frequencies in e->frequencies */ 
+       /* parse freqs and store the frequencies in s->frequencies */ 
        pos = buf;
        while (pos)
          {
@@ -685,7 +461,7 @@
             *q = '\0';
             freq = atoi(pos);
             freq *= 1000;
-            e->frequencies = evas_list_append(e->frequencies, (void *)freq);
+            s->frequencies = evas_list_append(s->frequencies, (void *)freq);
 
             pos = q + 1;
             pos = strchr(pos, ' ');
@@ -694,11 +470,11 @@
    
    /* sort is not necessary because freq_levels is already sorted */
    /* freebsd doesn't have governors */
-   if (e->governors)
+   if (s->governors)
      {
-       for (l = e->governors; l; l = l->next) free(l->data);
-       evas_list_free(e->governors);
-       e->governors = NULL;
+       for (l = s->governors; l; l = l->next) free(l->data);
+       evas_list_free(s->governors);
+       s->governors = NULL;
      }
 #else
    FILE *f;
@@ -708,10 +484,10 @@
      {
        char *freq;
        
-       if (e->frequencies)
+       if (s->frequencies)
          {
-            evas_list_free(e->frequencies);
-            e->frequencies = NULL;
+            evas_list_free(s->frequencies);
+            s->frequencies = NULL;
          }
        
        fgets(buf, sizeof(buf), f);
@@ -723,15 +499,15 @@
          {
             if (atoi(freq) != 0) 
               {
-                 e->frequencies = evas_list_append(e->frequencies,     
+                 s->frequencies = evas_list_append(s->frequencies,     
                                                    (void *) atoi(freq));
               }
             freq = strtok(NULL, " ");
          }
        while (freq != NULL);
 
-       // sort list
-       e->frequencies = evas_list_sort(e->frequencies, 
evas_list_count(e->frequencies),
+       s->frequencies = evas_list_sort(s->frequencies,
+                                       evas_list_count(s->frequencies),
                                        _cpufreq_cb_sort);
      }
 
@@ -740,12 +516,12 @@
      {
        char *gov;
        
-       if (e->governors)
+       if (s->governors)
          {
-            for (l = e->governors; l; l = l->next)
+            for (l = s->governors; l; l = l->next)
               free(l->data);
-            evas_list_free(e->governors);
-            e->governors = NULL;
+            evas_list_free(s->governors);
+            s->governors = NULL;
          }
 
        fgets(buf, sizeof(buf), f);
@@ -757,19 +533,13 @@
          {
             while ((*gov) && (isspace(*gov))) gov++;
             if (strlen(gov) != 0)
-              {
-//               if ((!strcmp(gov, "ondemand")) ||
-//                   (!strcmp(gov, "userspace")) ||
-//                   (!strcmp(gov, "powersave")) ||
-//                   (!strcmp(gov, "performance"))
-//                   )
-                   e->governors = evas_list_append(e->governors, strdup(gov));
-              }
+              s->governors = evas_list_append(s->governors, strdup(gov));
             gov = strtok(NULL, " ");
          }
        while (gov != NULL);
 
-       e->governors = evas_list_sort(e->governors, 
evas_list_count(e->governors),
+       s->governors = evas_list_sort(s->governors,
+                                     evas_list_count(s->governors),
                                      (int (*)(void *, void *))strcmp);
      }
 #endif
@@ -777,7 +547,7 @@
 }
 
 static int
-_cpufreq_status_check_current(Status *e)
+_cpufreq_status_check_current(Status *s)
 {
    char buf[4096];
    int i;
@@ -787,21 +557,21 @@
 #ifdef __FreeBSD__
    int len = 4;
 
-   e->active = 0;
+   s->active = 0;
    /* frequency is stored in dev.cpu.0.freq */
    if (sysctlbyname("dev.cpu.0.freq", &frequency, &len, NULL, 0) == 0)
      {
        frequency *= 1000;
-       if (frequency != e->cur_frequency) ret = 1;
-       e->cur_frequency = frequency;
-       e->active = 1;
+       if (frequency != s->cur_frequency) ret = 1;
+       s->cur_frequency = frequency;
+       s->active = 1;
      }
 
     /* hardcoded for testing */
-    e->can_set_frequency = 1;
-    e->cur_governor = NULL;
+    s->can_set_frequency = 1;
+    s->cur_governor = NULL;
 #else
-   e->active = 0;
+   s->active = 0;
    
    f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", "r");
    if (f)
@@ -811,21 +581,21 @@
        fclose(f);
        
        frequency = atoi(buf);
-       if (frequency != e->cur_frequency)
+       if (frequency != s->cur_frequency)
          ret = 1;
-       e->cur_frequency = frequency;
-       e->active = 1;
+       s->cur_frequency = frequency;
+       s->active = 1;
      }
    
    f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed", "r");
    if (f)
      {
-       e->can_set_frequency = 1;
+       s->can_set_frequency = 1;
        fclose(f);
      }
    else
      {
-       e->can_set_frequency = 0;
+       s->can_set_frequency = 0;
      }
    
    f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor", "r");
@@ -835,18 +605,18 @@
        buf[sizeof(buf) - 1] = 0;
        fclose(f);
 
-       if ((e->cur_governor == NULL) || (strcmp(buf, e->cur_governor)))
+       if ((s->cur_governor == NULL) || (strcmp(buf, s->cur_governor)))
          {
             ret = 1;
 
-            if (e->cur_governor)
-              free(e->cur_governor);
-            e->cur_governor = strdup(buf);
+            if (s->cur_governor)
+              free(s->cur_governor);
+            s->cur_governor = strdup(buf);
 
-            for (i = strlen(e->cur_governor) - 1; i >= 0; i--)
+            for (i = strlen(s->cur_governor) - 1; i >= 0; i--)
               {
-                 if (isspace(e->cur_governor[i]))
-                   e->cur_governor[i] = 0;
+                 if (isspace(s->cur_governor[i]))
+                   s->cur_governor[i] = 0;
                  else
                    break;
               }
@@ -856,306 +626,291 @@
    return ret;
 }
 
-static Cpufreq_Face *
-_cpufreq_face_new(E_Container *con, Cpufreq *owner)
+static void
+_cpufreq_face_update_available(Instance *inst)
 {
-   Evas_Object *o;
-   Cpufreq_Face *ef;
-   E_Gadman_Policy  policy;
-
-   ef = E_NEW(Cpufreq_Face, 1);
-   if (!ef) return NULL;
-
-   ef->con = con;
-   e_object_ref(E_OBJECT(con));
-   ef->owner = owner;
+   Edje_Message_Int_Set *frequency_msg;
+   Edje_Message_String_Set *governor_msg;
+   Evas_List *l;
+   int i;
+   int count;
 
-   evas_event_freeze(con->bg_evas);
+   count = evas_list_count(cpufreq_config->status->frequencies);
+   frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + (count - 1) * 
sizeof(int));
+   frequency_msg->count = count;
+   for (l = cpufreq_config->status->frequencies, i = 0; l; l = l->next, i++) 
+     frequency_msg->val[i] = (int)l->data;
+   edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_INT_SET, 1, 
frequency_msg);
+   free(frequency_msg);
 
-   o = edje_object_add(con->bg_evas);
-   ef->freq_object = o;
-   e_theme_edje_object_set(o, "base/theme/modules/cpufreq",
-                          "modules/cpufreq/main");
-   edje_object_signal_callback_add(o, "next_governor", "governor", 
_cpufreq_face_cb_set_governor, owner);
-   edje_object_signal_callback_add(o, "increase_frequency", "frequency", 
_cpufreq_face_cb_set_frequency, owner);
-   edje_object_signal_callback_add(o, "decrease_frequency", "frequency", 
_cpufreq_face_cb_set_frequency, owner);
-   evas_object_show(o);
-
-   o = evas_object_rectangle_add(con->bg_evas);
-   ef->event_object = o;
-   evas_object_layer_set(o, 0);
-   evas_object_repeat_events_set(o, 1);
-   evas_object_color_set(o, 0, 0, 0, 0);
-   evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, 
_cpufreq_face_cb_mouse_down, ef);
-   evas_object_show(o);
-
-   ef->gmc = e_gadman_client_new(ef->con->gadman);
-   e_gadman_client_domain_set(ef->gmc, "module.cpufreq", cpufreq_count++);
-
-   policy = E_GADMAN_POLICY_ANYWHERE  |
-           E_GADMAN_POLICY_HMOVE     |
-           E_GADMAN_POLICY_VMOVE     |
-           E_GADMAN_POLICY_HSIZE     |
-           E_GADMAN_POLICY_VSIZE;
-
-   e_gadman_client_policy_set(ef->gmc, policy);
-   e_gadman_client_min_size_set(ef->gmc, 4, 4);
-   e_gadman_client_max_size_set(ef->gmc, 128, 128);
-   /* This module needs a slightly higher min size */
-   e_gadman_client_auto_size_set(ef->gmc, 40, 40);
-   e_gadman_client_align_set(ef->gmc, 1.0, 1.0);
-   e_gadman_client_resize(ef->gmc, 40, 40);
-   e_gadman_client_change_func_set(ef->gmc, _cpufreq_face_cb_gmc_change, ef);
-   e_gadman_client_load(ef->gmc);
+   count = evas_list_count(cpufreq_config->status->governors);
+   governor_msg = malloc(sizeof(Edje_Message_String_Set) + (count - 1) * 
sizeof(char *));
+   governor_msg->count = count;
+   for (l = cpufreq_config->status->governors, i = 0; l; l = l->next, i++)
+     governor_msg->str[i] = (char *)l->data;
+   edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_STRING_SET, 2, 
governor_msg);
+   free(governor_msg);
+}
 
-   _cpufreq_face_update_available(ef);
+static void
+_cpufreq_face_update_current(Instance *inst)
+{
+   Edje_Message_Int_Set *frequency_msg;
+   Edje_Message_String governor_msg;
 
-   evas_event_thaw(con->bg_evas);
+   frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + sizeof(int));
+   frequency_msg->count = 2;
+   frequency_msg->val[0] = cpufreq_config->status->cur_frequency;
+   frequency_msg->val[1] = cpufreq_config->status->can_set_frequency;
+   edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_INT_SET, 3,
+                           frequency_msg);
+   free(frequency_msg);
 
-   return ef;
+   /* BSD crashes here without the if-condition
+    * since it has no governors (yet) */
+   if (cpufreq_config->status->cur_governor != NULL)
+     {
+       governor_msg.str = cpufreq_config->status->cur_governor;
+       edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_STRING, 4, 
+                                &governor_msg);
+     }
 }
 
 static void
-_cpufreq_face_free(Cpufreq_Face *ef)
+_cpufreq_face_cb_set_frequency(void *data, Evas_Object *obj, const char 
*emission, const char *src)
 {
-   e_object_unref(E_OBJECT(ef->con));
-   e_object_del(E_OBJECT(ef->gmc));
-   e_object_del(E_OBJECT(ef->menu));
-   evas_object_del(ef->freq_object);
-   evas_object_del(ef->event_object);
-   
-   free(ef->conf);
-   free(ef);
-   cpufreq_count--;
+   Evas_List *l;
+   int next_frequency = 0;
+
+   for (l = cpufreq_config->status->frequencies; l; l = l->next)
+     {
+       if (cpufreq_config->status->cur_frequency == (int)l->data)
+         {
+            if (!strcmp(emission, "increase_frequency"))
+              {
+                 if (l->next) next_frequency = (int)l->next->data;
+                 break;
+              }
+            else if (!strcmp(emission, "decrease_frequency"))
+              {
+                 if (l->prev) next_frequency = (int)l->prev->data;
+                 break;
+              }
+            else
+              break;
+         }
+     }
+   if (next_frequency != 0) _cpufreq_set_frequency(next_frequency);
 }
 
 static void
-_cpufreq_face_menu_new(Cpufreq_Face *face)
+_cpufreq_face_cb_set_governor(void *data, Evas_Object *obj, const char 
*emission, const char *src)
 {
-   E_Menu *mn;
-   E_Menu_Item *mi;
+   Evas_List *l;
+   char *next_governor = NULL;
 
-   mn = e_menu_new();
-   face->menu = mn;
-   
-   /* Edit */
-   mi = e_menu_item_new(mn);
-   e_menu_item_label_set(mi, _("Edit Mode"));
-   e_menu_item_callback_set(mi, _cpufreq_face_cb_menu_edit, face);
+   for (l = cpufreq_config->status->governors; l; l = l->next)
+     {
+       if (!strcmp(l->data, cpufreq_config->status->cur_governor))
+         {
+            if (l->next)
+              next_governor = l->next->data;
+            else
+              next_governor = cpufreq_config->status->governors->data;
+            break;
+         }
+     }
+   if (next_governor != NULL) _cpufreq_set_governor(next_governor);
 }
 
 static void
-_cpufreq_face_enable(Cpufreq_Face *face)
+_cpufreq_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   face->conf->enabled = 1;
-   evas_object_show(face->freq_object);
-   evas_object_show(face->event_object);
+   cpufreq_config->poll_time = 0.5;
+   ecore_timer_del(cpufreq_config->frequency_check_timer);
+   cpufreq_config->frequency_check_timer = 
ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
    e_config_save_queue();
 }
 
 static void
-_cpufreq_face_disable(Cpufreq_Face *face)
+_cpufreq_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   face->conf->enabled = 0;
-   evas_object_hide(face->freq_object);
-   evas_object_hide(face->event_object);
+   cpufreq_config->poll_time = 1.0;
+   ecore_timer_del(cpufreq_config->frequency_check_timer);
+   cpufreq_config->frequency_check_timer = 
ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
    e_config_save_queue();
 }
 
 static void
-_cpufreq_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change 
change)
+_cpufreq_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   Cpufreq_Face *ef;
-   Evas_Coord x, y, w, h;
-
-   ef = data;
-   switch (change)
-     {
-      case E_GADMAN_CHANGE_MOVE_RESIZE:
-        e_gadman_client_geometry_get(ef->gmc, &x, &y, &w, &h);
-        evas_object_move(ef->freq_object, x, y);
-        evas_object_move(ef->event_object, x, y);
-        evas_object_resize(ef->freq_object, w, h);
-        evas_object_resize(ef->event_object, w, h);
-        break;
-      case E_GADMAN_CHANGE_RAISE:
-        evas_object_raise(ef->freq_object);
-        evas_object_raise(ef->event_object);
-        break;
-      case E_GADMAN_CHANGE_EDGE:
-      case E_GADMAN_CHANGE_ZONE:
-        break;
-     }
+   cpufreq_config->poll_time = 2.0;
+   ecore_timer_del(cpufreq_config->frequency_check_timer);
+   cpufreq_config->frequency_check_timer = 
ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
+   e_config_save_queue();
 }
 
 static void
-_cpufreq_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi)
+_cpufreq_menu_slow(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   Cpufreq_Face *face;
-
-   face = data;
-   e_gadman_mode_set(face->gmc->gadman, E_GADMAN_MODE_EDIT);
+   cpufreq_config->poll_time = 5.0;
+   ecore_timer_del(cpufreq_config->frequency_check_timer);
+   cpufreq_config->frequency_check_timer = 
ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
+   e_config_save_queue();
 }
 
 static void
-_cpufreq_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void 
*event_info)
+_cpufreq_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   Evas_Event_Mouse_Down *ev;
-   Cpufreq_Face *ef;
+   cpufreq_config->poll_time = 30.0;
+   ecore_timer_del(cpufreq_config->frequency_check_timer);
+   cpufreq_config->frequency_check_timer = 
ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
+   e_config_save_queue();
+}
 
-   ev = event_info;
-   ef = data;
-   if (ev->button == 3)
+static void
+_cpufreq_menu_restore_governor(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   cpufreq_config->restore_governor = e_menu_item_toggle_get(mi);
+   if ((!cpufreq_config->governor) || 
+       (strcmp(cpufreq_config->status->cur_governor, 
cpufreq_config->governor)))
      {
-       e_menu_activate_mouse(ef->menu, e_zone_current_get(ef->con),
-                             ev->output.x, ev->output.y, 1, 1,
-                             E_MENU_POP_DIRECTION_DOWN, ev->timestamp);
-       e_util_container_fake_mouse_up_all_later(ef->con);
+       if (cpufreq_config->governor) 
evas_stringshare_del(cpufreq_config->governor);
+       cpufreq_config->governor = 
evas_stringshare_add(cpufreq_config->status->cur_governor);
      }
+   e_config_save_queue();
 }
 
 static void
-_cpufreq_face_update_available(Cpufreq_Face *face)
+_cpufreq_menu_governor(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   Edje_Message_Int_Set *frequency_msg;
-   Edje_Message_String_Set *governor_msg;
-   Evas_List *l;
-   int i;
-   int count;
+   char *governor;
 
-   count = evas_list_count(face->owner->status->frequencies);
-   frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + (count - 1) * 
sizeof(int));
-   frequency_msg->count = count;
-   for (l = face->owner->status->frequencies, i = 0; l; l = l->next, i++) 
+   governor = e_object_data_get(E_OBJECT(mi));
+   if (governor)
      {
-       frequency_msg->val[i] = (int) l->data;
+       _cpufreq_set_governor(governor);
+       if (cpufreq_config->governor) 
evas_stringshare_del(cpufreq_config->governor);
+       cpufreq_config->governor = evas_stringshare_add(governor);
      }
-   edje_object_message_send(face->freq_object, EDJE_MESSAGE_INT_SET, 1, 
frequency_msg);
-   free(frequency_msg);
-
-   count = evas_list_count(face->owner->status->governors);
-   governor_msg = malloc(sizeof(Edje_Message_String_Set) + (count - 1) * 
sizeof(char *));
-   governor_msg->count = count;
-   for (l = face->owner->status->governors, i = 0; l; l = l->next, i++)
-     governor_msg->str[i] = (char *) l->data;
-   edje_object_message_send(face->freq_object, EDJE_MESSAGE_STRING_SET, 2, 
governor_msg);
-   free(governor_msg);
+   e_config_save_queue();
 }
 
 static void
-_cpufreq_face_update_current(Cpufreq_Face *face)
+_cpufreq_menu_frequency(void * data, E_Menu *m, E_Menu_Item *mi)
 {
-   Edje_Message_Int_Set *frequency_msg;
-   Edje_Message_String governor_msg;
-
-   frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + sizeof(int));
-   frequency_msg->count = 2;
-   frequency_msg->val[0] = face->owner->status->cur_frequency;
-   frequency_msg->val[1] = face->owner->status->can_set_frequency;
-   edje_object_message_send(face->freq_object, EDJE_MESSAGE_INT_SET, 3, 
frequency_msg);
-   free(frequency_msg);
-
-   /* BSD crashes here without the if-condition
-    * since it has no governors (yet) */
-   if (face->owner->status->cur_governor != NULL)
-     {
-         governor_msg.str = face->owner->status->cur_governor;
-         edje_object_message_send(face->freq_object, EDJE_MESSAGE_STRING, 4, 
&governor_msg);
-    }
-        
-   if (face->owner->menu_frequency)
-     {
-       Evas_List *l;
-       
-       for (l = face->owner->menu_frequency->items; l; l = l->next)
-         {
-            E_Menu_Item *mi;
-            int freq;
-            
-            mi = l->data;
-            freq = (int)e_object_data_get(E_OBJECT(mi));
-            if (freq == face->owner->status->cur_frequency)
-              {
-                 e_menu_item_toggle_set(mi, 1);
-                 break;
-              }
-         }
-     }
-   if (face->owner->menu_governor)
+   int frequency;
+   
+   frequency = (int)e_object_data_get(E_OBJECT(mi));
+   if (frequency > 0)
      {
-       Evas_List *l;
-       
-       for (l = face->owner->menu_governor->items; l; l = l->next)
-         {
-            E_Menu_Item *mi;
-            char *gov;
-            
-            mi = l->data;
-            gov = (char *)e_object_data_get(E_OBJECT(mi));
-            if (!strcmp(face->owner->status->cur_governor, gov))
-              {
-                 e_menu_item_toggle_set(mi, 1);
-                 break;
-              }
-         }
+       _cpufreq_set_frequency(frequency);
      }
 }
 
-static void
-_cpufreq_face_cb_set_frequency(void *data, Evas_Object *obj, const char 
*emission, const char *src)
+/***************************************************************************/
+/**/
+/* module setup */
+EAPI E_Module_Api e_modapi = 
 {
-   Cpufreq *e;
-   Evas_List *l;
-   int next_frequency = 0;
+   E_MODULE_API_VERSION,
+     "Cpufreq"
+};
 
-   e = data;
+EAPI void *
+e_modapi_init(E_Module *module)
+{
+   char buf[4096];
+   Evas_List *l;
+   
+   conf_edd = E_CONFIG_DD_NEW("Cpufreq_Config", Config);
+#undef T
+#undef D
+#define T Config
+#define D conf_edd
+   E_CONFIG_VAL(D, T, poll_time, DOUBLE);
+   E_CONFIG_VAL(D, T, restore_governor, INT);
+   E_CONFIG_VAL(D, T, governor, STR);
    
-   for (l = e->status->frequencies; l; l = l->next)
+   cpufreq_config = e_config_domain_load("module.cpufreq", conf_edd);
+   if (!cpufreq_config)
      {
-       if (e->status->cur_frequency == (int) l->data)
+       cpufreq_config = E_NEW(Config, 1);
+       cpufreq_config->poll_time = 2.0;
+       cpufreq_config->restore_governor = 0;
+       cpufreq_config->governor = NULL;
+     }
+   E_CONFIG_LIMIT(cpufreq_config->poll_time, 0.5, 60.0);
+   
+   snprintf(buf, sizeof(buf), "%s/%s/freqset",
+           e_module_dir_get(module), MODULE_ARCH);
+   cpufreq_config->set_exe_path = strdup(buf);
+   cpufreq_config->frequency_check_timer = 
ecore_timer_add(cpufreq_config->poll_time,
+                                                  _cpufreq_cb_check, NULL);
+   cpufreq_config->status = _cpufreq_status_new();
+
+   _cpufreq_status_check_available(cpufreq_config->status);
+   if ((cpufreq_config->restore_governor) && (cpufreq_config->governor))
+     {
+       /* If the governor is available, restore it */
+       for (l = cpufreq_config->status->governors; l; l = l->next)
          {
-            if (!strcmp(emission, "increase_frequency"))
+            if (!strcmp(l->data, cpufreq_config->governor))
               {
-                 if (l->next)
-                   next_frequency = (int) l->next->data;
+                 _cpufreq_set_governor(cpufreq_config->governor);
                  break;
               }
-            else if (!strcmp(emission, "decrease_frequency"))
-              {
-                 if (l->prev)
-                   next_frequency = (int) l->prev->data;
-                 break;
-              }
-            else
-              break;
          }
      }
+   
+   e_gadcon_provider_register(&_gadcon_class);
+   return 1;
+}
 
-   if (next_frequency != 0)
-     _cpufreq_set_frequency(e, next_frequency);
+EAPI int
+e_modapi_shutdown(E_Module *module)
+{
+   e_gadcon_provider_unregister(&_gadcon_class);
+   
+   if (cpufreq_config->frequency_check_timer)
+     ecore_timer_del(cpufreq_config->frequency_check_timer);
+   if (cpufreq_config->menu) e_object_del(E_OBJECT(cpufreq_config->menu));
+   if (cpufreq_config->menu_poll) 
e_object_del(E_OBJECT(cpufreq_config->menu_poll));
+   if (cpufreq_config->menu_governor) 
e_object_del(E_OBJECT(cpufreq_config->menu_governor));
+   if (cpufreq_config->menu_frequency) 
e_object_del(E_OBJECT(cpufreq_config->menu_frequency));
+   if (cpufreq_config->status) _cpufreq_status_free(cpufreq_config->status);
+   if (cpufreq_config->governor)
+     evas_stringshare_del(cpufreq_config->governor);
+   free(cpufreq_config);
+   cpufreq_config = NULL;
+   E_CONFIG_DD_FREE(conf_edd);
+   return 1;
 }
 
-static void
-_cpufreq_face_cb_set_governor(void *data, Evas_Object *obj, const char 
*emission, const char *src)
+EAPI int
+e_modapi_save(E_Module *module)
 {
-   Cpufreq *e;
-   Evas_List *l;
-   char *next_governor = NULL;
+   e_config_domain_save("module.cpufreq", conf_edd, cpufreq_config);
+   return 1;
+}
 
-   e = data;
+EAPI int
+e_modapi_info(E_Module *module)
+{
+   char buf[4096];
    
-   for (l = e->status->governors; l; l = l->next)
-     {
-       if (!strcmp(l->data, e->status->cur_governor))
-         {
-            if (l->next)
-              next_governor = l->next->data;
-            else
-              next_governor = e->status->governors->data;
-            break;
-         }
-     }
+   snprintf(buf, sizeof(buf), "%s/module_icon.png", e_module_dir_get(module));
+   module->icon_file = strdup(buf);
+   return 1;
+}
 
-   if (next_governor != NULL)
-     _cpufreq_set_governor(e, next_governor);
+EAPI int
+e_modapi_about(E_Module *module)
+{
+   e_module_dialog_show(_("CPU Frequency Controller Module"), 
+                       _("A simple module to control the frequency of the 
system CPU.<br>"
+                         "This is especially useful to save power on 
laptops."));
+   return 1;
 }
+/**/
+/***************************************************************************/
===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/cpufreq/e_mod_main.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- e_mod_main.h        12 Mar 2006 16:12:57 -0000      1.9
+++ e_mod_main.h        20 Apr 2006 11:30:24 -0000      1.10
@@ -1,67 +1,34 @@
 #ifndef E_MOD_MAIN_H
 #define E_MOD_MAIN_H
 
-#include <e.h>
-#include <Evas.h>
-
 typedef struct _Status       Status;
 typedef struct _Config       Config;
-typedef struct _Config_Face  Config_Face;
-typedef struct _Cpufreq      Cpufreq;
-typedef struct _Cpufreq_Face Cpufreq_Face;
 
 struct _Status
 {
-   Evas_List   *frequencies;
-   Evas_List   *governors;
-   int          cur_frequency;
-   int          can_set_frequency;
-   char        *cur_governor;
-   unsigned char active;
+   Evas_List     *frequencies;
+   Evas_List     *governors;
+   int            cur_frequency;
+   int            can_set_frequency;
+   char          *cur_governor;
+   unsigned char  active;
 };
 
 struct _Config
 {
-   double poll_time;
-   Evas_List *faces;
-
-   int   restore_governor;
-   char *governor;
-};
-
-struct _Config_Face
-{
-   unsigned char enabled;
-};
-
-struct _Cpufreq
-{
-   E_Menu    *config_menu;
-   E_Menu    *config_menu_poll;
-   E_Menu    *menu_governor;
-   E_Menu    *menu_frequency;
-   Evas_List *faces;
-
-   Config    *conf;
-   Status    *status;
-   
-   char      *set_exe_path;
-   
-   Ecore_Timer *frequency_check_timer;   
-};
-
-struct _Cpufreq_Face
-{
-   E_Container *con;
-   
+   /* saved * loaded config values */
+   double       poll_time;
+   int          restore_governor;
+   char        *governor;
+   /* just config state */
+   Evas_List   *instances;
    E_Menu      *menu;
-   Config_Face *conf;
-   Cpufreq     *owner;
-   
-   Evas_Object *freq_object;
-   Evas_Object *event_object;
-   
-   E_Gadman_Client *gmc;
+   E_Menu      *menu_poll;
+   E_Menu      *menu_governor;
+   E_Menu      *menu_frequency;
+   Status      *status;
+   char        *set_exe_path;
+   Ecore_Timer *frequency_check_timer;
 };
 
 EAPI extern E_Module_Api e_modapi;




-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to