Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_gadcon.c e_gadcon.h e_main.c 


Log Message:


more work on gadcon - u can drag items around and they reshuffle kind of ok -
not perfectly tho.

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_gadcon.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_gadcon.c  6 Feb 2006 10:44:54 -0000       1.4
+++ e_gadcon.c  8 Feb 2006 15:06:25 -0000       1.5
@@ -6,6 +6,29 @@
 static void _e_gadcon_free(E_Gadcon *gc);
 static void _e_gadcon_client_free(E_Gadcon_Client *gcc);
 
+static void _e_gadcon_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, 
void *event_info);
+static void _e_gadcon_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, 
void *event_info);
+static void _e_gadcon_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, 
void *event_info);
+static void _e_gadcon_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, 
void *event_info);
+static void _e_gadcon_cb_move(void *data, Evas *evas, Evas_Object *obj, void 
*event_info);
+static void _e_gadcon_cb_resize(void *data, Evas *evas, Evas_Object *obj, void 
*event_info);
+
+static void _e_gadcon_cb_signal_move_start(void *data, Evas_Object *obj, const 
char *emission, const char *source);
+static void _e_gadcon_cb_signal_move_stop(void *data, Evas_Object *obj, const 
char *emission, const char *source);
+static void _e_gadcon_cb_signal_move_go(void *data, Evas_Object *obj, const 
char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_left_start(void *data, Evas_Object 
*obj, const char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_left_stop(void *data, Evas_Object *obj, 
const char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_left_go(void *data, Evas_Object *obj, 
const char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_right_start(void *data, Evas_Object 
*obj, const char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_right_stop(void *data, Evas_Object 
*obj, const char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_right_go(void *data, Evas_Object *obj, 
const char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_up_start(void *data, Evas_Object *obj, 
const char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_up_stop(void *data, Evas_Object *obj, 
const char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_up_go(void *data, Evas_Object *obj, 
const char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_down_start(void *data, Evas_Object 
*obj, const char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_down_stop(void *data, Evas_Object *obj, 
const char *emission, const char *source);
+static void _e_gadcon_cb_signal_resize_down_go(void *data, Evas_Object *obj, 
const char *emission, const char *source);
+
 static Evas_Object *e_gadcon_layout_add(Evas *evas);
 static void e_gadcon_layout_orientation_set(Evas_Object *obj, int horizontal);
 static void e_gadcon_layout_min_size_get(Evas_Object *obj, Evas_Coord *w, 
Evas_Coord *h);
@@ -215,6 +238,22 @@
      }
 }
 
+EAPI void
+e_gadcon_edit_begin(E_Gadcon *gc)
+{
+   Evas_List *l;
+   
+   E_OBJECT_CHECK(gc);
+   E_OBJECT_TYPE_CHECK(gc, E_GADCON_TYPE);
+   for (l = gc->clients; l; l = l->next)
+     {
+       E_Gadcon_Client *gcc;
+       
+       gcc = l->data;
+       e_gadcon_client_edit_begin(gcc);
+     }
+}
+
 EAPI E_Gadcon_Client *
 e_gadcon_client_new(E_Gadcon *gc, char *name, char *id, Evas_Object *base_obj)
 {
@@ -235,6 +274,76 @@
 }
 
 EAPI void
+e_gadcon_client_edit_begin(E_Gadcon_Client *gcc)
+{
+   Evas_Coord x, y, w, h;
+   
+   E_OBJECT_CHECK(gcc);
+   E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE);
+   
+   gcc->o_control = edje_object_add(gcc->gadcon->evas);
+   evas_object_layer_set(gcc->o_control, 100);
+   evas_object_geometry_get(gcc->o_base, &x, &y, &w, &h);
+   evas_object_move(gcc->o_control, x, y);
+   evas_object_resize(gcc->o_control, w, h);
+   e_theme_edje_object_set(gcc->o_control, "base/theme/gadman",
+                          "gadman/control");
+
+   edje_object_signal_emit(gcc->o_control, "hsize", "off");
+   edje_object_signal_emit(gcc->o_control, "vsize", "off");
+   edje_object_signal_emit(gcc->o_control, "move", "on");
+   
+   gcc->o_event = evas_object_rectangle_add(gcc->gadcon->evas);
+   evas_object_color_set(gcc->o_event, 0, 0, 0, 0);
+   evas_object_repeat_events_set(gcc->o_event, 1);
+   evas_object_layer_set(gcc->o_event, 100);
+   evas_object_move(gcc->o_event, x, y);
+   evas_object_resize(gcc->o_event, w, h);
+
+   edje_object_signal_callback_add(gcc->o_control, "move_start", "",
+                                  _e_gadcon_cb_signal_move_start, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "move_stop", "",
+                                  _e_gadcon_cb_signal_move_stop, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "move_go", "",
+                                  _e_gadcon_cb_signal_move_go, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_start", "left",
+                                  _e_gadcon_cb_signal_resize_left_start, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_stop", "left",
+                                  _e_gadcon_cb_signal_resize_left_stop, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_go", "left",
+                                  _e_gadcon_cb_signal_resize_left_go, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_start", "right",
+                                  _e_gadcon_cb_signal_resize_right_start, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_stop", "right",
+                                  _e_gadcon_cb_signal_resize_right_stop, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_go", "right",
+                                  _e_gadcon_cb_signal_resize_right_go, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_start", "up",
+                                  _e_gadcon_cb_signal_resize_up_start, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_stop", "up",
+                                  _e_gadcon_cb_signal_resize_up_stop, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_go", "up",
+                                  _e_gadcon_cb_signal_resize_up_go, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_start", "down",
+                                  _e_gadcon_cb_signal_resize_down_start, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_stop", "down",
+                                  _e_gadcon_cb_signal_resize_down_stop, gcc);
+   edje_object_signal_callback_add(gcc->o_control, "resize_go", "down",
+                                  _e_gadcon_cb_signal_resize_down_go, gcc);
+   
+   evas_object_event_callback_add(gcc->o_event, EVAS_CALLBACK_MOUSE_DOWN, 
_e_gadcon_cb_mouse_down, gcc);
+   evas_object_event_callback_add(gcc->o_event, EVAS_CALLBACK_MOUSE_UP, 
_e_gadcon_cb_mouse_up, gcc);
+   evas_object_event_callback_add(gcc->o_event, EVAS_CALLBACK_MOUSE_IN, 
_e_gadcon_cb_mouse_in, gcc);
+   evas_object_event_callback_add(gcc->o_event, EVAS_CALLBACK_MOUSE_OUT, 
_e_gadcon_cb_mouse_out, gcc);
+
+   evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_MOVE, 
_e_gadcon_cb_move, gcc);
+   evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_RESIZE, 
_e_gadcon_cb_resize, gcc);
+   
+   evas_object_show(gcc->o_event);
+   evas_object_show(gcc->o_control);
+}
+
+EAPI void
 e_gadcon_client_size_request(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h)
 {
    E_OBJECT_CHECK(gcc);
@@ -292,6 +401,215 @@
 
 
 
+static void
+_e_gadcon_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
+{
+   Evas_Event_Mouse_Down *ev;
+   E_Gadcon_Client *gcc;
+      
+   gcc = data;
+   ev = event_info;
+   if (ev->button == 3)
+     {
+     }
+}
+
+static void
+_e_gadcon_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
+{
+   Evas_Event_Mouse_Up *ev;
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+   ev = event_info;
+}
+
+static void
+_e_gadcon_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
+{
+   Evas_Event_Mouse_In *ev;
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+   ev = event_info;
+   edje_object_signal_emit(gcc->o_control, "active", "");
+}
+
+static void
+_e_gadcon_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
+{
+   Evas_Event_Mouse_Out *ev;
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+   ev = event_info;
+   edje_object_signal_emit(gcc->o_control, "inactive", "");
+}
+
+static void
+_e_gadcon_cb_move(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+   E_Gadcon_Client *gcc;
+   Evas_Coord x, y;
+   
+   gcc = data;
+   evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+   if (gcc->o_control) evas_object_move(gcc->o_control, x, y);
+   if (gcc->o_event) evas_object_move(gcc->o_event, x, y);
+}
+
+static void
+_e_gadcon_cb_resize(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+   E_Gadcon_Client *gcc;
+   Evas_Coord w, h;
+   
+   gcc = data;
+   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+   if (gcc->o_control) evas_object_resize(gcc->o_control, w, h);
+   if (gcc->o_event) evas_object_resize(gcc->o_event, w, h);
+}
+
+static void
+_e_gadcon_cb_signal_move_start(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   Evas_Coord x, y;
+   
+   gcc = data;
+   evas_object_raise(gcc->o_event);
+   evas_object_stack_below(gcc->o_control, gcc->o_event);
+   gcc->moving = 1;
+   evas_pointer_canvas_xy_get(gcc->gadcon->evas, &gcc->dx, &gcc->dy);
+   evas_object_geometry_get(gcc->gadcon->o_container, &x, &y, NULL, NULL);
+   evas_object_geometry_get(gcc->o_base, &gcc->sx, &gcc->sy, NULL, NULL);
+   gcc->sx -= x;
+   gcc->sy -= y;
+}
+
+static void
+_e_gadcon_cb_signal_move_stop(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+   gcc->moving = 0;
+}
+
+static void
+_e_gadcon_cb_signal_move_go(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   Evas_Coord x, y, w, h;
+   
+   gcc = data;
+   if (!gcc->moving) return;
+   evas_pointer_canvas_xy_get(gcc->gadcon->evas, &x, &y);
+   x = x - gcc->dx;
+   y = y - gcc->dy;
+   evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h);
+   e_gadcon_layout_pack_request_set(gcc->o_base, gcc->sx + x, w);
+}
+
+static void
+_e_gadcon_cb_signal_resize_left_start(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+static void
+_e_gadcon_cb_signal_resize_left_stop(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+static void
+_e_gadcon_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+static void
+_e_gadcon_cb_signal_resize_right_start(void *data, Evas_Object *obj, const 
char *emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+static void
+_e_gadcon_cb_signal_resize_right_stop(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+static void
+_e_gadcon_cb_signal_resize_right_go(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+static void
+_e_gadcon_cb_signal_resize_up_start(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+static void
+_e_gadcon_cb_signal_resize_up_stop(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+static void
+_e_gadcon_cb_signal_resize_up_go(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+static void
+_e_gadcon_cb_signal_resize_down_start(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+static void
+_e_gadcon_cb_signal_resize_down_stop(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+static void
+_e_gadcon_cb_signal_resize_down_go(void *data, Evas_Object *obj, const char 
*emission, const char *source)
+{
+   E_Gadcon_Client *gcc;
+   
+   gcc = data;
+}
+
+
+
+
 
 /* a smart object JUST for gadcon */
 
@@ -319,6 +637,7 @@
    } min, max;
    Evas_Coord       x, y, w, h;
    Evas_Object     *obj;
+   unsigned char    can_move : 1;
 };
 
 /* local subsystem functions */
@@ -581,7 +900,7 @@
    e_gadcon_layout_unpack(obj);
 }
 
-int
+static int
 _e_gadcon_sort_cb(void *d1, void *d2)
 {
    E_Gadcon_Layout_Item *bi1, *bi2;
@@ -596,14 +915,29 @@
    return v1 - v2;
 }    
 
+static int
+_e_gadcon_sort_all_cb(void *d1, void *d2)
+{
+   E_Gadcon_Layout_Item *bi1, *bi2;
+   int v1, v2;
+   
+   bi1 = evas_object_data_get(d1, "e_gadcon_layout_data");
+   bi2 = evas_object_data_get(d2, "e_gadcon_layout_data");
+   v1 = (bi1->ask.pos + (bi1->ask.size / 2));
+   if (v1 < 0) v1 = -v1;
+   v2 = (bi2->ask.pos + (bi2->ask.size / 2));
+   if (v2 < 0) v2 = -v2;
+   return v1 - v2;
+}    
+
 static void
 _e_gadcon_layout_smart_reconfigure(E_Smart_Data *sd)
 {
    Evas_Coord x, y, w, h, xx, yy;
    Evas_List *l, *l2;
-   int minw, minh, wdif, hdif;
+   int min, cur;
    int count, expand;
-   Evas_List *list_s = NULL, *list_m = NULL, *list_e = NULL;
+   Evas_List *list_s = NULL, *list_m = NULL, *list_e = NULL, *list = NULL;
 
    x = sd->x;
    y = sd->y;
@@ -617,6 +951,7 @@
        
        obj = l->data;
        bi = evas_object_data_get(obj, "e_gadcon_layout_data");
+       list = evas_list_append(list, obj);
        if (sd->horizontal)
          {
             xx = bi->ask.pos + (bi->ask.size / 2);
@@ -707,6 +1042,7 @@
    list_s = evas_list_sort(list_s, evas_list_count(list_s), _e_gadcon_sort_cb);
    list_m = evas_list_sort(list_m, evas_list_count(list_m), _e_gadcon_sort_cb);
    list_e = evas_list_sort(list_e, evas_list_count(list_e), _e_gadcon_sort_cb);
+   list = evas_list_sort(list, evas_list_count(list), _e_gadcon_sort_all_cb);
    for (l = list_s; l; l = l->next)
      {
        E_Gadcon_Layout_Item *bi;
@@ -773,15 +1109,108 @@
               }
          }
      }
-   /* FIXME: now walk all 3 lists - if any memebrs of any list overlay another
-    * then calculate how much "give" there is with items that can resize
-    * down and then resize them down and reposition */
-   /* FIXME: if not enough "give" is there - forcibly resize everything down
-    * so it all fits */
+   min = 0;
+   cur = 0;
+   for (l = list; l; l = l->next)
+     {
+       E_Gadcon_Layout_Item *bi;
+       Evas_Object *obj;
+       
+       obj = l->data;
+       bi = evas_object_data_get(obj, "e_gadcon_layout_data");
+       cur += bi->ask.size;
+        if (sd->horizontal)
+         min += bi->min.w;
+       else
+         min += bi->min.h;
+       bi->can_move = 1;
+       if (!l->prev)
+         {
+            if (bi->x <= 0)
+              {
+                 bi->x = 0;
+                 bi->can_move = 0;
+              }
+         }
+       if (!l->next)
+         {
+            if ((bi->x + bi->w) >= w)
+              {
+                 bi->x = w - bi->w;
+                 bi->can_move = 0;
+              }
+         }
+     }
+   if (sd->horizontal)
+     {
+       if (cur < w)
+         { /* reshuffle so things fit */
+            int overlap;
+            int count;
+            
+            overlap = 1;
+            count = 0;
+            while (overlap)
+              {
+                 printf("FIX OVERLAP!\n");
+                 overlap = 0;
+                 for (l = list; l; l = l->next)
+                   {
+                      E_Gadcon_Layout_Item *bi;
+                      Evas_Object *obj;
+                      
+                      obj = l->data;
+                      bi = evas_object_data_get(obj, "e_gadcon_layout_data");
+                      if (bi->can_move)
+                        {
+                           for (l2 = l->next; l2; l2 = l2->next)
+                             {
+                                E_Gadcon_Layout_Item *bi2;
+                                
+                                obj = l2->data;
+                                bi2 = evas_object_data_get(obj, 
"e_gadcon_layout_data");
+                                if (E_SPANS_COMMON(bi->x, bi->w, bi2->x, 
bi2->w))
+                                  {
+                                     bi->x = bi2->x - bi->w;
+                                     if (!bi2->can_move) bi->can_move = 0;
+                                     if ((bi->x + bi->w) >= w) bi->x = w - 
bi->w;
+                                     if (bi->x <= 0) bi->x = 0;
+                                     overlap = 1;
+                                  }
+                             }
+                           for (l2 = l->prev; l2; l2 = l2->prev)
+                             {
+                                E_Gadcon_Layout_Item *bi2;
+                                
+                                obj = l2->data;
+                                bi2 = evas_object_data_get(obj, 
"e_gadcon_layout_data");
+                                if (E_SPANS_COMMON(bi->x, bi->w, bi2->x, 
bi2->w))
+                                  {
+                                     bi->x = bi2->x + bi2->w;
+                                     if (!bi2->can_move) bi->can_move = 0;
+                                     if ((bi->x + bi->w) >= w) bi->x = w - 
bi->w;
+                                     if (bi->x <= 0) bi->x = 0;
+                                     overlap = 1;
+                                  }
+                             }
+                        }
+                   }
+                 count++;
+                 if (count > 200) break; // quick infinite loop fix
+              }
+         }
+       else if (min < w)
+         {
+         }
+       else
+         { /* EEK - all items just cant fit at their minimum! what do we do? */
+         }
+     }
    
    evas_list_free(list_s);
    evas_list_free(list_m);
    evas_list_free(list_e);
+   evas_list_free(list);
    
    for (l = sd->items; l; l = l->next)
      {
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_gadcon.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_gadcon.h  6 Feb 2006 10:44:54 -0000       1.4
+++ e_gadcon.h  8 Feb 2006 15:06:25 -0000       1.5
@@ -72,8 +72,12 @@
    char                  *name;
    char                  *id;
    Evas_Object           *o_base;
+   Evas_Object           *o_control;
+   Evas_Object           *o_event;
    E_Gadcon_Client_Class  client_class;
    void                  *data;
+   unsigned char          moving : 1;
+   Evas_Coord             dx, dy, sx, sy;
 };
 
 EAPI int              e_gadcon_init(void);
@@ -84,12 +88,13 @@
 EAPI void             e_gadcon_layout_policy_set(E_Gadcon *gc, 
E_Gadcon_Layout_Policy layout_policy);
 EAPI void             e_gadcon_populate(E_Gadcon *gc);
 EAPI void             e_gadcon_orient(E_Gadcon *gc, E_Gadcon_Orient orient);
+EAPI void             e_gadcon_edit_begin(E_Gadcon *gc);
     
 EAPI E_Gadcon_Client *e_gadcon_client_new(E_Gadcon *gc, char *name, char *id, 
Evas_Object *base_obj);
 EAPI void             e_gadcon_client_size_request(E_Gadcon_Client *gcc, 
Evas_Coord w, Evas_Coord h);
 EAPI void             e_gadcon_client_min_size_set(E_Gadcon_Client *gcc, 
Evas_Coord w, Evas_Coord h);
 EAPI void             e_gadcon_client_max_size_set(E_Gadcon_Client *gcc, 
Evas_Coord w, Evas_Coord h);
-
+EAPI void             e_gadcon_client_edit_begin(E_Gadcon_Client *gcc);
+    
 #endif
 #endif
-
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_main.c,v
retrieving revision 1.148
retrieving revision 1.149
diff -u -3 -r1.148 -r1.149
--- e_main.c    6 Feb 2006 08:06:18 -0000       1.148
+++ e_main.c    8 Feb 2006 15:06:25 -0000       1.149
@@ -685,6 +685,7 @@
                       zone = l3->data;
                       es = e_shelf_zone_new(zone, "shelf");
                       e_shelf_populate(es);
+                      e_gadcon_edit_begin(es->gadcon);
                    }
               }
          }




-------------------------------------------------------
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://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to