Enlightenment CVS committal Author : rephorm Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_gadget.c e_gadget.h Log Message: Allow gadgets to either be 1 per container (default) or 1 per zone (like the pager). =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_gadget.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- e_gadget.c 18 Dec 2005 07:37:53 -0000 1.3 +++ e_gadget.c 18 Dec 2005 21:06:34 -0000 1.4 @@ -3,6 +3,7 @@ */ #include "e.h" +E_Gadget_Face *_e_gadget_face_new(E_Gadget *gad, E_Container *con, E_Zone *zone); static void _e_gadget_menu_init(E_Gadget *gad); static void _e_gadget_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_gadget_free(E_Gadget *gad); @@ -39,9 +40,7 @@ e_gadget_new(E_Gadget_Api *api) { E_Gadget *gad; - Evas_List *managers, *l = NULL, *l2 = NULL; - char buf[1024]; - int gadget_count = 0; + Evas_List *managers, *l = NULL, *l2 = NULL, *l3 = NULL; if (!api || !api->module || !api->name) return NULL; @@ -72,66 +71,23 @@ for(l2 = man->containers; l2; l2 = l2->next) { E_Container *con; - E_Gadget_Face *face; - E_Gadget_Change *change; - Evas_Object *o; con = l2->data; - face = E_NEW(E_Gadget_Face, 1); - if (!face) continue; - - face->gad = gad; - face->con = con; - e_object_ref(E_OBJECT(con)); - face->evas = con->bg_evas; - - evas_event_freeze(face->evas); - - /* create an event object */ - - o = evas_object_rectangle_add(con->bg_evas); - face->event_obj = o; - evas_object_layer_set(o, 2); - 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, _e_gadget_cb_mouse_down, face); - evas_object_show(o); - /* create a gadman client */ - snprintf(buf, sizeof(buf), "module.%s", gad->name); - face->gmc = e_gadman_client_new(con->gadman); - e_gadman_client_domain_set(face->gmc, buf, gadget_count++); - - /* call the user init */ - if (gad->funcs.face_init) (gad->funcs.face_init)(gad->data, face); - - _e_gadget_face_menu_init(face); - - change = E_NEW(E_Gadget_Change, 1); - if (change) + if (api->per_zone) + { + for(l3 = con->zones; l3; l3 = l3->next) + { + E_Zone *zone; + + zone = l3->data; + _e_gadget_face_new(gad, con, zone); + } + } + else { - printf("set change func\n"); - change->gadget = gad; - change->face = face; + _e_gadget_face_new(gad, con, NULL); } - - /* set up some gadman defaults */ - e_gadman_client_policy_set(face->gmc, - E_GADMAN_POLICY_ANYWHERE | - E_GADMAN_POLICY_HMOVE | - E_GADMAN_POLICY_VMOVE | - E_GADMAN_POLICY_HSIZE | - E_GADMAN_POLICY_VSIZE ); - e_gadman_client_min_size_set(face->gmc, 4, 4); - e_gadman_client_max_size_set(face->gmc, 128, 128); - e_gadman_client_auto_size_set(face->gmc, 40, 40); - e_gadman_client_align_set(face->gmc, 1.0, 1.0); - e_gadman_client_resize(face->gmc, 40, 40); - e_gadman_client_change_func_set(face->gmc, _e_gadget_face_cb_gmc_change, change); - e_gadman_client_load(face->gmc); - evas_event_thaw(face->evas); - - gad->faces = evas_list_append(gad->faces, face); } } _e_gadget_menu_init(gad); @@ -139,6 +95,76 @@ return gad; } +E_Gadget_Face * +_e_gadget_face_new(E_Gadget *gad, E_Container *con, E_Zone *zone) +{ + E_Gadget_Face *face; + E_Gadget_Change *change; + Evas_Object *o; + char buf[1024]; + + face = E_NEW(E_Gadget_Face, 1); + if (!face) return NULL; + + face->gad = gad; + face->con = con; + if (zone) face->zone = zone; + else face->zone = (E_Zone *)evas_list_data(con->zones); + e_object_ref(E_OBJECT(con)); + face->evas = con->bg_evas; + + evas_event_freeze(face->evas); + + /* create an event object */ + + o = evas_object_rectangle_add(con->bg_evas); + face->event_obj = o; + evas_object_layer_set(o, 2); + 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, _e_gadget_cb_mouse_down, face); + evas_object_show(o); + + /* create a gadman client */ + snprintf(buf, sizeof(buf), "module.%s", gad->name); + face->gmc = e_gadman_client_new(con->gadman); + e_gadman_client_zone_set(face->gmc, face->zone); + e_gadman_client_domain_set(face->gmc, buf, evas_list_count(gad->faces)); + + /* call the user init */ + if (gad->funcs.face_init) (gad->funcs.face_init)(gad->data, face); + + _e_gadget_face_menu_init(face); + + change = E_NEW(E_Gadget_Change, 1); + if (change) + { + printf("set change func\n"); + change->gadget = gad; + change->face = face; + } + + /* set up some gadman defaults */ + e_gadman_client_policy_set(face->gmc, + E_GADMAN_POLICY_ANYWHERE | + E_GADMAN_POLICY_HMOVE | + E_GADMAN_POLICY_VMOVE | + E_GADMAN_POLICY_HSIZE | + E_GADMAN_POLICY_VSIZE ); + e_gadman_client_min_size_set(face->gmc, 4, 4); + e_gadman_client_max_size_set(face->gmc, 128, 128); + e_gadman_client_auto_size_set(face->gmc, 40, 40); + e_gadman_client_align_set(face->gmc, 1.0, 1.0); + e_gadman_client_resize(face->gmc, 40, 40); + e_gadman_client_change_func_set(face->gmc, _e_gadget_face_cb_gmc_change, change); + e_gadman_client_load(face->gmc); + evas_event_thaw(face->evas); + + gad->faces = evas_list_append(gad->faces, face); + + return face; +} + void e_gadget_face_theme_set(E_Gadget_Face *face, char *category, char *group) { =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_gadget.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_gadget.h 18 Dec 2005 07:37:53 -0000 1.2 +++ e_gadget.h 18 Dec 2005 21:06:35 -0000 1.3 @@ -15,6 +15,7 @@ { E_Module *module; const char *name; + int per_zone; /* 1 - one face per zone, 0 - one per container */ void (*func_face_init) (void *data, E_Gadget_Face *gadget_face); void (*func_face_free) (void *data, E_Gadget_Face *gadget_face); void (*func_change) (void *data, E_Gadget_Face *gadget_face, E_Gadman_Client *gmc, E_Gadman_Change change); @@ -29,7 +30,7 @@ Evas_List *faces; E_Module *module; - char *name; + const char *name; E_Menu *menu; struct { @@ -47,6 +48,7 @@ { E_Gadget *gad; E_Container *con; + E_Zone *zone; Evas *evas; E_Menu *menu; ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs