Author: nigel
Date: 2005-05-25 19:25:19 -0400 (Wed, 25 May 2005)
New Revision: 45020

Modified:
   trunk/efl-sharp/libs/efl-sharp/src/bin/ewl_sharp_test.cs
   trunk/efl-sharp/libs/efl-sharp/src/lib/ewl/ewl_window.cs
Log:
ewl events

Modified: trunk/efl-sharp/libs/efl-sharp/src/bin/ewl_sharp_test.cs
===================================================================
--- trunk/efl-sharp/libs/efl-sharp/src/bin/ewl_sharp_test.cs    2005-05-25 
23:16:30 UTC (rev 45019)
+++ trunk/efl-sharp/libs/efl-sharp/src/bin/ewl_sharp_test.cs    2005-05-25 
23:25:19 UTC (rev 45020)
@@ -14,9 +14,7 @@
                win.Name = "EWL_WINDOW";
                win.Class = "EWLWindow";
                win.SizeRequest(200, 100);
-               //int i = EventType.VALUE_CHANGED;
-               //Console.WriteLine(i);
-               win.DeleteEvent += new DeleteEventHandler(winDelete);
+               win.DeleteEvent += winDelete;
                
                win.Show();
                
@@ -26,7 +24,7 @@
                //lbl.Style = "soft_shadow";
                //lbl.SizeRequest(win.Width, win.Height);
                //lbl.Disable();
-               lbl.ChangedEvent += new EwlEventHandler(txtChanged);
+               //lbl.ChangedEvent += new EwlEventHandler(txtChanged);
                lbl.Text = "Enlightenment";
                
                Console.WriteLine(lbl.Text);
@@ -54,7 +52,7 @@
                
        }
        
-       void winDelete(IntPtr w, IntPtr evnt, IntPtr data) {
+       void winDelete(object o, DeleteEventInfo info) {
 
                win.Destroy();
                Application.Quit();

Modified: trunk/efl-sharp/libs/efl-sharp/src/lib/ewl/ewl_window.cs
===================================================================
--- trunk/efl-sharp/libs/efl-sharp/src/lib/ewl/ewl_window.cs    2005-05-25 
23:16:30 UTC (rev 45019)
+++ trunk/efl-sharp/libs/efl-sharp/src/lib/ewl/ewl_window.cs    2005-05-25 
23:25:19 UTC (rev 45020)
@@ -3,31 +3,54 @@
 using System;
 using System.Runtime.InteropServices;
 
-       public delegate void DeleteEventHandler(IntPtr w, IntPtr evnt, IntPtr 
data);
+       [StructLayout(LayoutKind.Sequential)]
+       public class DeleteEventInfo
+       {
+               public DeleteEventInfo()
+               { }
+               
+               public DeleteEventInfo(IntPtr EventInfo)
+               { }
+       };
 
        public class Window : Embed {
 
                HandleRef objRaw;
                const string Library = "ewl";
                
-               [DllImport(Library)]
-               static extern int ewl_callback_append(IntPtr wid, int i, 
DeleteEventHandler de, IntPtr data);
+               DeleteEventHandler userHandler;
+               privDeleteEventHandler tmp_handler;
                
                [DllImport(Library)]
-               static extern void ewl_callback_del_with_data(IntPtr wid, int 
i, DeleteEventHandler de, IntPtr data);
+               static extern int ewl_callback_append(IntPtr wid, int i, 
privDeleteEventHandler de, IntPtr data);
+               [DllImport(Library)]
+               static extern void ewl_callback_del_with_data(IntPtr wid, int 
i, privDeleteEventHandler de, IntPtr data);
                
+               public delegate void DeleteEventHandler(object o, 
DeleteEventInfo info);
+               private delegate void privDeleteEventHandler(IntPtr w, IntPtr 
info, IntPtr data);
+               
+               private void transferDeleteEvent(IntPtr w, IntPtr info, IntPtr 
data)
+               {
+               
+                       userHandler(this, new DeleteEventInfo(info));
+               
+               }
+               
                public event DeleteEventHandler DeleteEvent {
                
                        add {
                        
-                               ewl_callback_append(Raw, 6, value, new 
IntPtr());
-                               System.GC.KeepAlive(value);
+                               tmp_handler = new 
privDeleteEventHandler(transferDeleteEvent);
+                               userHandler = value;
+                               ewl_callback_append(Raw, 6, tmp_handler, new 
IntPtr());
+                               System.GC.KeepAlive(tmp_handler);
                        
                        }
                        
                        remove {
                        
-                               ewl_callback_del_with_data(Raw, 6, value, new 
IntPtr());
+                               ewl_callback_del_with_data(Raw, 6, tmp_handler, 
new IntPtr());
+                               userHandler = null;
                        
                        }
                

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to