Enlightenment CVS committal

Author  : doursse
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_wince


Modified Files:
        Ecore_WinCE.h ecore_wince.c ecore_wince_event.c 
        ecore_wince_private.h ecore_wince_window.c 


Log Message:
add stylus support

===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_wince/Ecore_WinCE.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- Ecore_WinCE.h       31 May 2008 05:05:01 -0000      1.1
+++ Ecore_WinCE.h       3 Jun 2008 17:09:44 -0000       1.2
@@ -44,6 +44,11 @@
 
 typedef struct _Ecore_WinCE_Event_Key_Down              
Ecore_WinCE_Event_Key_Down;
 typedef struct _Ecore_WinCE_Event_Key_Up                
Ecore_WinCE_Event_Key_Up;
+typedef struct _Ecore_WinCE_Event_Mouse_Button_Down     
Ecore_WinCE_Event_Mouse_Button_Down;
+typedef struct _Ecore_WinCE_Event_Mouse_Button_Up       
Ecore_WinCE_Event_Mouse_Button_Up;
+typedef struct _Ecore_WinCE_Event_Mouse_Move            
Ecore_WinCE_Event_Mouse_Move;
+typedef struct _Ecore_WinCE_Event_Mouse_In              
Ecore_WinCE_Event_Mouse_In;
+typedef struct _Ecore_WinCE_Event_Mouse_Out             
Ecore_WinCE_Event_Mouse_Out;
 typedef struct _Ecore_WinCE_Event_Window_Focus_In       
Ecore_WinCE_Event_Window_Focus_In;
 typedef struct _Ecore_WinCE_Event_Window_Focus_Out      
Ecore_WinCE_Event_Window_Focus_Out;
 typedef struct _Ecore_WinCE_Event_Window_Damage         
Ecore_WinCE_Event_Window_Damage;
@@ -71,6 +76,52 @@
    double              time;
 };
 
+struct _Ecore_WinCE_Event_Mouse_Button_Down
+{
+   Ecore_WinCE_Window *window;
+   int                 button;
+   int                 x;
+   int                 y;
+   double              time;
+   unsigned int        double_click : 1;
+   unsigned int        triple_click : 1;
+};
+
+struct _Ecore_WinCE_Event_Mouse_Button_Up
+{
+   Ecore_WinCE_Window *window;
+   int                 button;
+   int                 x;
+   int                 y;
+   double              time;
+   unsigned int        double_click : 1;
+   unsigned int        triple_click : 1;
+};
+
+struct _Ecore_WinCE_Event_Mouse_Move
+{
+   Ecore_WinCE_Window *window;
+   int                 x;
+   int                 y;
+   double              time;
+};
+
+struct _Ecore_WinCE_Event_Mouse_In
+{
+   Ecore_WinCE_Window *window;
+   int                 x;
+   int                 y;
+   double              time;
+};
+
+struct _Ecore_WinCE_Event_Mouse_Out
+{
+   Ecore_WinCE_Window *window;
+   int                 x;
+   int                 y;
+   double              time;
+};
+
 struct _Ecore_WinCE_Event_Window_Focus_In
 {
    Ecore_WinCE_Window *window;
@@ -126,6 +177,11 @@
 
 EAPI extern int ECORE_WINCE_EVENT_KEY_DOWN;
 EAPI extern int ECORE_WINCE_EVENT_KEY_UP;
+EAPI extern int ECORE_WINCE_EVENT_MOUSE_BUTTON_DOWN;
+EAPI extern int ECORE_WINCE_EVENT_MOUSE_BUTTON_UP;
+EAPI extern int ECORE_WINCE_EVENT_MOUSE_MOVE;
+EAPI extern int ECORE_WINCE_EVENT_MOUSE_IN;
+EAPI extern int ECORE_WINCE_EVENT_MOUSE_OUT;
 EAPI extern int ECORE_WINCE_EVENT_WINDOW_FOCUS_IN;
 EAPI extern int ECORE_WINCE_EVENT_WINDOW_FOCUS_OUT;
 EAPI extern int ECORE_WINCE_EVENT_WINDOW_DAMAGE;
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_wince/ecore_wince.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ecore_wince.c       31 May 2008 05:05:01 -0000      1.1
+++ ecore_wince.c       3 Jun 2008 17:09:44 -0000       1.2
@@ -16,20 +16,26 @@
 
 /***** Global declarations *****/
 
+double              _ecore_wince_double_click_time = 0.25;
 double              _ecore_wince_event_last_time = 0.0;
+Ecore_WinCE_Window *_ecore_wince_event_last_window = NULL;
+HINSTANCE           _ecore_wince_instance = NULL;
 
-HINSTANCE _ecore_wince_instance = NULL;
-
-EAPI int ECORE_WINCE_EVENT_KEY_DOWN              = 0;
-EAPI int ECORE_WINCE_EVENT_KEY_UP                = 0;
-EAPI int ECORE_WINCE_EVENT_WINDOW_FOCUS_IN       = 0;
-EAPI int ECORE_WINCE_EVENT_WINDOW_FOCUS_OUT      = 0;
-EAPI int ECORE_WINCE_EVENT_WINDOW_DAMAGE         = 0;
-EAPI int ECORE_WINCE_EVENT_WINDOW_CREATE         = 0;
-EAPI int ECORE_WINCE_EVENT_WINDOW_DESTROY        = 0;
-EAPI int ECORE_WINCE_EVENT_WINDOW_SHOW           = 0;
-EAPI int ECORE_WINCE_EVENT_WINDOW_HIDE           = 0;
-EAPI int ECORE_WINCE_EVENT_WINDOW_DELETE_REQUEST = 0;
+int ECORE_WINCE_EVENT_KEY_DOWN              = 0;
+int ECORE_WINCE_EVENT_KEY_UP                = 0;
+int ECORE_WINCE_EVENT_MOUSE_BUTTON_DOWN     = 0;
+int ECORE_WINCE_EVENT_MOUSE_BUTTON_UP       = 0;
+int ECORE_WINCE_EVENT_MOUSE_MOVE            = 0;
+int ECORE_WINCE_EVENT_MOUSE_IN              = 0;
+int ECORE_WINCE_EVENT_MOUSE_OUT             = 0;
+int ECORE_WINCE_EVENT_WINDOW_FOCUS_IN       = 0;
+int ECORE_WINCE_EVENT_WINDOW_FOCUS_OUT      = 0;
+int ECORE_WINCE_EVENT_WINDOW_DAMAGE         = 0;
+int ECORE_WINCE_EVENT_WINDOW_CREATE         = 0;
+int ECORE_WINCE_EVENT_WINDOW_DESTROY        = 0;
+int ECORE_WINCE_EVENT_WINDOW_SHOW           = 0;
+int ECORE_WINCE_EVENT_WINDOW_HIDE           = 0;
+int ECORE_WINCE_EVENT_WINDOW_DELETE_REQUEST = 0;
 
 
 /***** Private declarations *****/
@@ -82,6 +88,9 @@
      {
         ECORE_WINCE_EVENT_KEY_DOWN              = ecore_event_type_new();
         ECORE_WINCE_EVENT_KEY_UP                = ecore_event_type_new();
+        ECORE_WINCE_EVENT_MOUSE_BUTTON_DOWN     = ecore_event_type_new();
+        ECORE_WINCE_EVENT_MOUSE_BUTTON_UP       = ecore_event_type_new();
+        ECORE_WINCE_EVENT_MOUSE_MOVE            = ecore_event_type_new();
         ECORE_WINCE_EVENT_WINDOW_FOCUS_IN       = ecore_event_type_new();
         ECORE_WINCE_EVENT_WINDOW_FOCUS_OUT      = ecore_event_type_new();
         ECORE_WINCE_EVENT_WINDOW_DAMAGE         = ecore_event_type_new();
@@ -94,6 +103,8 @@
 
    _ecore_wince_init_count++;
 
+   printf ("ecore_wince : instance + class bon\n");
+
    return _ecore_wince_init_count;
 }
 
@@ -113,6 +124,44 @@
    return _ecore_wince_init_count;
 }
 
+/**
+ * Sets the timeout for a double and triple clicks to be flagged.
+ *
+ * This sets the time between clicks before the double_click flag is
+ * set in a button down event. If 3 clicks occur within double this
+ * time, the triple_click flag is also set.
+ *
+ * @param t The time in seconds
+ */
+EAPI void
+ecore_wince_double_click_time_set(double t)
+{
+   if (t < 0.0) t = 0.0;
+   _ecore_wince_double_click_time = t;
+}
+
+/**
+ * Retrieves the double and triple click flag timeout.
+ *
+ * See @ref ecore_wince_double_click_time_set for more information.
+ *
+ * @return The timeout for double clicks in seconds.
+ */
+EAPI double
+ecore_wince_double_click_time_get(void)
+{
+   return _ecore_wince_double_click_time;
+}
+
+/**
+ * Return the last event time
+ */
+EAPI double
+ecore_wince_current_time_get(void)
+{
+   return _ecore_wince_event_last_time;
+}
+
 
 /***** Private functions definitions *****/
 
@@ -162,6 +211,50 @@
        printf (" * ecore message : focus out\n");
        _ecore_wince_event_handle_focus_out(data);
        return 0;
+       /* Mouse input notifications */
+     case WM_LBUTTONDOWN:
+       printf (" * ecore message : lbuttondown\n");
+       _ecore_wince_event_handle_button_press(data, 1);
+       return 0;
+     case WM_LBUTTONUP:
+       printf (" * ecore message : lbuttonup\n");
+       _ecore_wince_event_handle_button_release(data, 1);
+       return 0;
+     case WM_MOUSEMOVE:
+       {
+          RECT                        rect;
+          struct _Ecore_WinCE_Window *w = NULL;
+
+          w = (struct _Ecore_WinCE_Window *)GetWindowLong(window, 
GWL_USERDATA);
+
+          if (GetClientRect(window, &rect))
+          {
+             POINT pt;
+
+             pt.x = LOWORD(data_param);
+             pt.y = HIWORD(data_param);
+             if (!PtInRect(&rect, pt))
+               {
+                  if (w->pointer_is_in)
+                    {
+                       w->pointer_is_in = 0;
+                       _ecore_wince_event_handle_leave_notify(data);
+                    }
+               }
+             else
+               {
+                  if (!w->pointer_is_in)
+                    {
+                       w->pointer_is_in = 1;
+                       _ecore_wince_event_handle_enter_notify(data);
+                    }
+
+               }
+          }
+          _ecore_wince_event_handle_motion_notify(data);
+
+          return 0;
+       }
        /* Window notifications */
      case WM_CREATE:
        {
@@ -201,13 +294,22 @@
      case WM_PAINT:
        {
           RECT rect;
+          PAINTSTRUCT paint;
 
-          ValidateRect(window, NULL);
-          if (GetUpdateRect(window, &rect, FALSE))
+          printf (" * ecore message : paint\n");
+          if (BeginPaint(window, &paint))
             {
-               data->update = rect;
+               printf (" * ecore message : painting...\n");
+               data->update = paint.rcPaint;
                _ecore_wince_event_handle_expose(data);
+               EndPaint(window, &paint);
             }
+/*           if (GetUpdateRect(window, &rect, FALSE)) */
+/*             { */
+/*               printf (" * ecore message : painting...\n"); */
+/*                data->update = rect; */
+/*                _ecore_wince_event_handle_expose(data); */
+/*             } */
           return 0;
        }
      default:
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_wince/ecore_wince_event.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ecore_wince_event.c 31 May 2008 05:05:01 -0000      1.1
+++ ecore_wince_event.c 3 Jun 2008 17:09:44 -0000       1.2
@@ -16,6 +16,14 @@
 
 /***** Private declarations *****/
 
+static Ecore_WinCE_Window *_ecore_wince_mouse_down_last_window = NULL;
+static Ecore_WinCE_Window *_ecore_wince_mouse_down_last_last_window = NULL;
+static double              _ecore_wince_mouse_down_last_time = 0;
+static double              _ecore_wince_mouse_down_last_last_time = 0;
+static int                 _ecore_wince_mouse_down_did_triple = 0;
+static int                 _ecore_wince_mouse_up_count = 0;
+
+
 static void _ecore_wince_event_free_key_down(void *data,
                                              void *ev);
 
@@ -93,6 +101,241 @@
    _ecore_wince_event_last_time = e->time;
 
    ecore_event_add(ECORE_WINCE_EVENT_KEY_UP, e, 
_ecore_wince_event_free_key_up, NULL);
+}
+
+void
+_ecore_wince_event_handle_button_press(Ecore_WinCE_Callback_Data *msg,
+                                       int                        button)
+{
+   Ecore_WinCE_Window *window;
+
+   window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
+
+   {
+      Ecore_WinCE_Event_Mouse_Move *e;
+
+      e = (Ecore_WinCE_Event_Mouse_Move *)calloc(1, 
sizeof(Ecore_WinCE_Event_Mouse_Move));
+      if (!e) return;
+
+      e->window = window;
+      e->x = LOWORD(msg->data_param);
+      e->y = HIWORD(msg->data_param);
+      e->time = (double)msg->time / 1000.0;
+
+      _ecore_wince_event_last_time = e->time;
+      _ecore_wince_event_last_window = e->window;
+
+      ecore_event_add(ECORE_WINCE_EVENT_MOUSE_MOVE, e, NULL, NULL);
+   }
+
+   {
+      Ecore_WinCE_Event_Mouse_Button_Down *e;
+
+      if (_ecore_wince_mouse_down_did_triple)
+        {
+           _ecore_wince_mouse_down_last_window = NULL;
+           _ecore_wince_mouse_down_last_last_window = NULL;
+           _ecore_wince_mouse_down_last_time = 0.0;
+           _ecore_wince_mouse_down_last_last_time = 0.0;
+        }
+
+      e = (Ecore_WinCE_Event_Mouse_Button_Down *)calloc(1, 
sizeof(Ecore_WinCE_Event_Mouse_Button_Down));
+      if (!e) return;
+
+      e->window = window;
+      e->button = button;
+      e->x = LOWORD(msg->data_param);
+      e->y = HIWORD(msg->data_param);
+      e->time = (double)msg->time / 1000.0;
+
+      if (((e->time - _ecore_wince_mouse_down_last_time) <= 
_ecore_wince_double_click_time) &&
+          (e->window == _ecore_wince_mouse_down_last_window))
+        e->double_click = 1;
+
+      if (((e->time - _ecore_wince_mouse_down_last_last_time) <= (2.0 * 
_ecore_wince_double_click_time)) &&
+          (e->window == _ecore_wince_mouse_down_last_window) &&
+          (e->window == _ecore_wince_mouse_down_last_last_window))
+        {
+           e->triple_click = 1;
+           _ecore_wince_mouse_down_did_triple = 1;
+        }
+      else
+        _ecore_wince_mouse_down_did_triple = 0;
+
+      if (!e->double_click && !e->triple_click)
+        _ecore_wince_mouse_up_count = 0;
+
+      _ecore_wince_event_last_time = e->time;
+      _ecore_wince_event_last_window = e->window;
+
+      if (!_ecore_wince_mouse_down_did_triple)
+        {
+           _ecore_wince_mouse_down_last_last_window = 
_ecore_wince_mouse_down_last_window;
+           _ecore_wince_mouse_down_last_window = e->window;
+           _ecore_wince_mouse_down_last_last_time = 
_ecore_wince_mouse_down_last_time;
+           _ecore_wince_mouse_down_last_time = e->time;
+        }
+
+      ecore_event_add(ECORE_WINCE_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL);
+   }
+   printf (" * ecore event button press\n");
+}
+
+void
+_ecore_wince_event_handle_button_release(Ecore_WinCE_Callback_Data *msg,
+                                         int                          button)
+{
+   Ecore_WinCE_Window *window;
+
+   window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
+
+   {
+      Ecore_WinCE_Event_Mouse_Move *e;
+
+      e = (Ecore_WinCE_Event_Mouse_Move *)calloc(1, 
sizeof(Ecore_WinCE_Event_Mouse_Move));
+      if (!e) return;
+
+      e->window = window;
+      e->x = LOWORD(msg->data_param);
+      e->y = HIWORD(msg->data_param);
+      e->time = (double)msg->time / 1000.0;
+
+      _ecore_wince_event_last_time = e->time;
+      _ecore_wince_event_last_window = e->window;
+
+      ecore_event_add(ECORE_WINCE_EVENT_MOUSE_MOVE, e, NULL, NULL);
+   }
+
+   {
+      Ecore_WinCE_Event_Mouse_Button_Up *e;
+
+      e = (Ecore_WinCE_Event_Mouse_Button_Up *)calloc(1, 
sizeof(Ecore_WinCE_Event_Mouse_Button_Up));
+      if (!e) return;
+
+      e->window = window;
+      e->button = button;
+      e->x = LOWORD(msg->data_param);
+      e->y = HIWORD(msg->data_param);
+      e->time = (double)msg->time / 1000.0;
+
+      _ecore_wince_mouse_up_count++;
+
+      if ((_ecore_wince_mouse_up_count >= 2) &&
+          ((e->time - _ecore_wince_mouse_down_last_time) <= 
_ecore_wince_double_click_time) &&
+          (e->window == _ecore_wince_mouse_down_last_window))
+        e->double_click = 1;
+
+      if ((_ecore_wince_mouse_up_count >= 3) &&
+          ((e->time - _ecore_wince_mouse_down_last_last_time) <= (2.0 * 
_ecore_wince_double_click_time)) &&
+          (e->window == _ecore_wince_mouse_down_last_window) &&
+          (e->window == _ecore_wince_mouse_down_last_last_window))
+        e->triple_click = 1;
+
+      _ecore_wince_event_last_time = e->time;
+      _ecore_wince_event_last_window = e->window;
+
+      ecore_event_add(ECORE_WINCE_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL);
+   }
+
+   printf (" * ecore event button release\n");
+}
+
+void
+_ecore_wince_event_handle_motion_notify(Ecore_WinCE_Callback_Data *msg)
+{
+   Ecore_WinCE_Event_Mouse_Move *e;
+
+   e = (Ecore_WinCE_Event_Mouse_Move *)calloc(1, 
sizeof(Ecore_WinCE_Event_Mouse_Move));
+   if (!e) return;
+
+   e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
+   e->x = LOWORD(msg->data_param);
+   e->y = HIWORD(msg->data_param);
+   e->time = (double)msg->time / 1000.0;
+
+   ecore_event_add(ECORE_WINCE_EVENT_MOUSE_MOVE, e, NULL, NULL);
+}
+
+void
+_ecore_wince_event_handle_enter_notify(Ecore_WinCE_Callback_Data *msg)
+{
+   Ecore_WinCE_Window *window;
+
+   window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
+
+   {
+      Ecore_WinCE_Event_Mouse_Move *e;
+
+      e = (Ecore_WinCE_Event_Mouse_Move *)calloc(1, 
sizeof(Ecore_WinCE_Event_Mouse_Move));
+      if (!e) return;
+
+      e->window = window;
+      e->x = msg->x;
+      e->y = msg->y;
+      e->time = (double)msg->time / 1000.0;
+
+      _ecore_wince_event_last_time = e->time;
+      _ecore_wince_event_last_window = e->window;
+
+      ecore_event_add(ECORE_WINCE_EVENT_MOUSE_MOVE, e, NULL, NULL);
+   }
+
+   {
+      Ecore_WinCE_Event_Mouse_In *e;
+
+      e = (Ecore_WinCE_Event_Mouse_In *)calloc(1, 
sizeof(Ecore_WinCE_Event_Mouse_In));
+      if (!e) return;
+
+      e->window = window;
+      e->x = msg->x;
+      e->y = msg->y;
+      e->time = (double)msg->time / 1000.0;
+
+      _ecore_wince_event_last_time = e->time;
+
+      ecore_event_add(ECORE_WINCE_EVENT_MOUSE_IN, e, NULL, NULL);
+   }
+}
+
+void
+_ecore_wince_event_handle_leave_notify(Ecore_WinCE_Callback_Data *msg)
+{
+   Ecore_WinCE_Window *window;
+
+   window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
+
+   {
+      Ecore_WinCE_Event_Mouse_Move *e;
+
+      e = (Ecore_WinCE_Event_Mouse_Move *)calloc(1, 
sizeof(Ecore_WinCE_Event_Mouse_Move));
+      if (!e) return;
+
+      e->window = window;
+      e->x = msg->x;
+      e->y = msg->y;
+      e->time = (double)msg->time / 1000.0;
+
+      _ecore_wince_event_last_time = e->time;
+      _ecore_wince_event_last_window = e->window;
+
+      ecore_event_add(ECORE_WINCE_EVENT_MOUSE_MOVE, e, NULL, NULL);
+   }
+
+   {
+      Ecore_WinCE_Event_Mouse_Out *e;
+
+      e = (Ecore_WinCE_Event_Mouse_Out *)calloc(1, 
sizeof(Ecore_WinCE_Event_Mouse_Out));
+      if (!e) return;
+
+      e->window = window;
+      e->x = msg->x;
+      e->y = msg->y;
+      e->time = (double)msg->time / 1000.0;
+
+      _ecore_wince_event_last_time = e->time;
+
+      ecore_event_add(ECORE_WINCE_EVENT_MOUSE_OUT, e, NULL, NULL);
+   }
 }
 
 void
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_wince/ecore_wince_private.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ecore_wince_private.h       31 May 2008 05:05:01 -0000      1.1
+++ ecore_wince_private.h       3 Jun 2008 17:09:44 -0000       1.2
@@ -34,15 +34,24 @@
 
    ecore_wince_suspend suspend;
    ecore_wince_resume  resume;
+
+   unsigned int        pointer_is_in : 1;
 };
 
+extern double              _ecore_wince_double_click_time;
 extern double              _ecore_wince_event_last_time;
+extern Ecore_WinCE_Window *_ecore_wince_event_last_window;
 
-extern HINSTANCE _ecore_wince_instance;
+extern HINSTANCE           _ecore_wince_instance;
 
 
 void  _ecore_wince_event_handle_key_press(Ecore_WinCE_Callback_Data *msg);
 void  _ecore_wince_event_handle_key_release(Ecore_WinCE_Callback_Data *msg);
+void  _ecore_wince_event_handle_button_press(Ecore_WinCE_Callback_Data *msg, 
int button);
+void  _ecore_wince_event_handle_button_release(Ecore_WinCE_Callback_Data *msg, 
int button);
+void  _ecore_wince_event_handle_motion_notify(Ecore_WinCE_Callback_Data *msg);
+void  _ecore_wince_event_handle_enter_notify(Ecore_WinCE_Callback_Data *msg);
+void  _ecore_wince_event_handle_leave_notify(Ecore_WinCE_Callback_Data *msg);
 void  _ecore_wince_event_handle_focus_in(Ecore_WinCE_Callback_Data *msg);
 void  _ecore_wince_event_handle_focus_out(Ecore_WinCE_Callback_Data *msg);
 void  _ecore_wince_event_handle_expose(Ecore_WinCE_Callback_Data *msg);
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_wince/ecore_wince_window.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_wince_window.c        3 Jun 2008 05:13:17 -0000       1.2
+++ ecore_wince_window.c        3 Jun 2008 17:09:44 -0000       1.3
@@ -99,6 +99,8 @@
         return NULL;
      }
 
+   w->pointer_is_in = 0;
+
    return w;
 }
 



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to