Author: jackson
Date: 2007-06-20 14:55:56 -0400 (Wed, 20 Jun 2007)
New Revision: 80348
Modified:
trunk/moon/plugin/ChangeLog
trunk/moon/plugin/moonlight.cs
Log:
* moonlight.cs: Tie into events.
Modified: trunk/moon/plugin/ChangeLog
===================================================================
--- trunk/moon/plugin/ChangeLog 2007-06-20 18:53:45 UTC (rev 80347)
+++ trunk/moon/plugin/ChangeLog 2007-06-20 18:55:56 UTC (rev 80348)
@@ -1,3 +1,7 @@
+2007-06-20 Jackson Harper <[EMAIL PROTECTED]>
+
+ * moonlight.cs: Tie into events.
+
2007-06-20 Everaldo Canuto <[EMAIL PROTECTED]>
* plugin-class.cpp: Update DependencyObject setter to work with strings
Modified: trunk/moon/plugin/moonlight.cs
===================================================================
--- trunk/moon/plugin/moonlight.cs 2007-06-20 18:53:45 UTC (rev 80347)
+++ trunk/moon/plugin/moonlight.cs 2007-06-20 18:55:56 UTC (rev 80348)
@@ -40,6 +40,7 @@
internal delegate IntPtr CreateElementCallback (string xmlns, string
name);
internal delegate void SetAttributeCallback (IntPtr target, string
name, string value);
+ internal delegate void HookupEventCallback (IntPtr target, string name,
string value);
public class Hosting {
@@ -48,11 +49,11 @@
[DllImport ("moon")]
internal extern static IntPtr xaml_create_from_file (string
file, bool create_namescope,
- CreateElementCallback ce, SetAttributeCallback
sa, ref int kind_type);
+ CreateElementCallback ce, SetAttributeCallback
sa, HookupEventCallback hue, ref int kind_type);
[DllImport ("moon")]
internal extern static IntPtr xaml_create_from_str (string
file, bool create_namescope,
- CreateElementCallback ce, SetAttributeCallback
sa, ref int kind_type);
+ CreateElementCallback ce, SetAttributeCallback
sa, HookupEventCallback hue, ref int kind_type);
[DllImport("moon",EntryPoint="dependency_object_get_name")]
internal extern static IntPtr _dependency_object_get_name
(IntPtr obj);
@@ -126,6 +127,7 @@
CreateElementCallback create_element_callback;
SetAttributeCallback set_attribute_callback;
+ HookupEventCallback hookup_event_callback;
Hashtable h = new Hashtable ();
@@ -148,7 +150,7 @@
create_element_callback = new CreateElementCallback
(create_element);
set_attribute_callback = new SetAttributeCallback
(set_attribute);
-
+ hookup_event_callback = new HookupEventCallback
(hookup_event);
Type t = typeof (System.Windows.Interop.BrowserHost);
MethodInfo m = t.GetMethod ("SetPluginHandle",
BindingFlags.Static | BindingFlags.NonPublic);
@@ -185,9 +187,9 @@
IntPtr element;
if (filename != String.Empty)
- element = Hosting.xaml_create_from_file
(filename, true, create_element_callback, set_attribute_callback, ref kind);
+ element = Hosting.xaml_create_from_file
(filename, true, create_element_callback, set_attribute_callback,
hookup_event_callback, ref kind);
else
- element = Hosting.xaml_create_from_str
(contents, true, create_element_callback, set_attribute_callback, ref kind);
+ element = Hosting.xaml_create_from_str
(contents, true, create_element_callback, set_attribute_callback,
hookup_event_callback, ref kind);
// HERE:
// Insert code to check the output of from_file
@@ -305,6 +307,32 @@
pd.SetValue (target, pd.Converter.ConvertFrom (value));
}
+ private void hookup_event (IntPtr target_ptr, string name,
string value)
+ {
+ MethodInfo m = typeof (DependencyObject).GetMethod
("Lookup",
+ BindingFlags.Static |
BindingFlags.NonPublic, null, new Type [] { typeof (IntPtr) }, null);
+ DependencyObject target = (DependencyObject) m.Invoke
(null, new object [] { target_ptr });
+
+ if (target == null) {
+ Console.WriteLine ("hookup event unable to
create target object from: 0x{0}", target_ptr);
+ return;
+ }
+
+ EventInfo src = target.GetType ().GetEvent (name);
+ if (src == null) {
+ Console.WriteLine ("hookup event unable to find
event to hook to: '{0}'.", name);
+ return;
+ }
+
+ Delegate d = Delegate.CreateDelegate
(src.EventHandlerType, target, value);
+ if (d == null) {
+ Console.WriteLine ("hookup event unable to
create delegate.");
+ return;
+ }
+
+ src.AddEventHandler (target, d);
+ }
+
internal static void ParseXmlns (string xmlns, out string
type_name, out string ns, out string asm)
{
type_name = null;
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches