public EventListener(nsIDOMEventTarget target, object owner) { this.target = target; this.owner = owner; IntPtr p = Base.StringInit(); storage = new HandleRef(this, p); }
public EventListener(nsIDOMEventTarget target, object owner) { this.target = target; this.owner = owner; IntPtr p = Base.StringInit (); storage = new HandleRef (this, p); }
/// <summary> /// Remove C# listner from the xpcom listner. /// </summary> /// <param name="Type">The name of the eventtype, for e.g 'MyCustomEvent'. This must be the same as the EventName in the JavaScript.</param> /// <param name="Handler">The handler for this event</param> public void RemoveEventListener(string Type, EventHandler <DOMJSONStringEventArgs> Handler) { nsIDOMEventTarget target = oDomWindow as nsIDOMEventTarget; nsAString strType = oEventTypes[Handler.Method.GetHashCode()] as nsAString; RouteEventHandler route = oEventListeners[Handler.Method.GetHashCode()] as RouteEventHandler; target.RemoveEventListener(strType, route, false); oEventListeners.Remove(Handler.Method.GetHashCode()); oEventTypes.Remove(Handler.Method.GetHashCode()); }
/// <summary> /// Register a listener for a custom jscrip-initiated MessageEvent /// https://developer.mozilla.org/en/DOM/document.createEvent /// http://help.dottoro.com/ljknkjqd.php /// </summary> /// <param name="eventName"></param> /// <param name="action"></param> /// <example>AddMessageEventListener("callMe", (message=>MessageBox.Show(message)));</example> public void AddMessageEventListener(string eventName, Action <string> action, bool useCapture) { nsIDOMEventTarget target = Xpcom.QueryInterface <nsIDOMEventTarget>(Xpcom.QueryInterface <nsIDOMWindow>(_webBrowser.Instance.GetContentDOMWindowAttribute()).GetWindowRootAttribute()); if (target != null) { // the argc parameter is the number of optionial argumetns we are passing. // (useCapture and wantsUntrusted are specified as optional so we always pass 2 when calling interface from C#) target.AddEventListener(new nsAString(eventName), this, /*Review*/ useCapture, true, 2); _messageEventListeners.Add(eventName, action); } }
private DomEventTarget(nsIDOMEventTarget target) { _target = new ComPtr <nsIDOMEventTarget>(target); }
public static DomEventTarget Create(nsIDOMEventTarget target) { return(new DomEventTarget(target)); }
protected override void OnHandleCreated(EventArgs e) { #if GTK if (Xpcom.IsMono) { base.OnHandleCreated(e); m_wrapper.Init(); } #endif if (!this.DesignMode) { Xpcom.Initialize(); WindowCreator.Register(); #if !GTK LauncherDialogFactory.Register(); #endif WebBrowser = Xpcom.CreateInstance <nsIWebBrowser>("@mozilla.org/embedding/browser/nsWebBrowser;1"); WebBrowserFocus = (nsIWebBrowserFocus)WebBrowser; BaseWindow = (nsIBaseWindow)WebBrowser; WebNav = (nsIWebNavigation)WebBrowser; WebBrowser.SetContainerWindowAttribute(this); #if GTK if (Xpcom.IsMono) { BaseWindow.InitWindow(m_wrapper.BrowserWindow.Handle, IntPtr.Zero, 0, 0, this.Width, this.Height); } else #endif BaseWindow.InitWindow(this.Handle, IntPtr.Zero, 0, 0, this.Width, this.Height); RecordNewJsContext(); BaseWindow.Create(); Guid nsIWebProgressListenerGUID = typeof(nsIWebProgressListener).GUID; WebBrowser.AddWebBrowserListener(this.GetWeakReference(), ref nsIWebProgressListenerGUID); if (UseHttpActivityObserver) { ObserverService.AddObserver(this, ObserverNotifications.HttpRequests.HttpOnModifyRequest, false); nsIHttpActivityDistributor activityDistributor = Xpcom.GetService <nsIHttpActivityDistributor>("@mozilla.org/network/http-activity-distributor;1"); activityDistributor = Xpcom.QueryInterface <nsIHttpActivityDistributor>(activityDistributor); activityDistributor.AddObserver(this); } // var domEventListener = new GeckoDOMEventListener(this); _target = Xpcom.QueryInterface <nsIDOMWindow>(WebBrowser.GetContentDOMWindowAttribute()).GetWindowRootAttribute(); _target.AddEventListener(new nsAString("submit"), this, true, true, 2); _target.AddEventListener(new nsAString("keydown"), this, true, true, 2); _target.AddEventListener(new nsAString("keyup"), this, true, true, 2); _target.AddEventListener(new nsAString("keypress"), this, true, true, 2); _target.AddEventListener(new nsAString("mousemove"), this, true, true, 2); _target.AddEventListener(new nsAString("mouseover"), this, true, true, 2); _target.AddEventListener(new nsAString("mouseout"), this, true, true, 2); _target.AddEventListener(new nsAString("mousedown"), this, true, true, 2); _target.AddEventListener(new nsAString("mouseup"), this, true, true, 2); _target.AddEventListener(new nsAString("click"), this, true, true, 2); _target.AddEventListener(new nsAString("dblclick"), this, true, true, 2); _target.AddEventListener(new nsAString("compositionstart"), this, true, true, 2); _target.AddEventListener(new nsAString("compositionend"), this, true, true, 2); _target.AddEventListener(new nsAString("contextmenu"), this, true, true, 2); _target.AddEventListener(new nsAString("DOMMouseScroll"), this, true, true, 2); _target.AddEventListener(new nsAString("focus"), this, true, true, 2); _target.AddEventListener(new nsAString("blur"), this, true, true, 2); // Load event added here rather than DOMDocument as DOMDocument recreated when navigating // ths losing attached listener. _target.AddEventListener(new nsAString("load"), this, true, true, 2); _target.AddEventListener(new nsAString("change"), this, true, true, 2); // history { var sessionHistory = WebNav.GetSessionHistoryAttribute(); if (sessionHistory != null) { sessionHistory.AddSHistoryListener(this); } } BaseWindow.SetVisibilityAttribute(true); // this fix prevents the browser from crashing if the first page loaded is invalid (missing file, invalid URL, etc) if (Document != null) { // only for html documents Document.Cookie = ""; } } base.OnHandleCreated(e); }
public static DomEventTarget Create(nsIDOMEventTarget target) { return new DomEventTarget(target); }
private DomEventTarget(nsIDOMEventTarget target) { _target = new ComPtr<nsIDOMEventTarget>(target); }
public virtual void FireEvent(string eventName) { nsIDOMDocument doc; this.node.getOwnerDocument(out doc); nsIDOMDocumentEvent docEvent = (nsIDOMDocumentEvent)doc; nsIDOMDocumentView docView = (nsIDOMDocumentView)doc; nsIDOMAbstractView abstractView; docView.getDefaultView(out abstractView); nsIDOMEventTarget target = (nsIDOMEventTarget)this.node; bool ret = false; string eventType; switch (eventName) { case "mousedown": case "mouseup": case "click": case "dblclick": case "mouseover": case "mouseout": case "mousemove": case "contextmenu": eventType = "mouseevents"; nsIDOMEvent evtMouse; Base.StringSet(storage, eventType); docEvent.createEvent(storage, out evtMouse); nsIDOMMouseEvent domEventMouse = evtMouse as nsIDOMMouseEvent; Base.StringSet(storage, eventName); domEventMouse.initMouseEvent(storage, true, true, abstractView, 1, 0, 0, 0, 0, false, false, false, false, 0, target); target.dispatchEvent(domEventMouse, out ret); break; case "keydown": case "keyup": case "keypress": eventType = "keyevents"; nsIDOMEvent evtKey; Base.StringSet(storage, eventType); docEvent.createEvent(storage, out evtKey); Base.StringSet(storage, eventName); nsIDOMKeyEvent domEventKey = evtKey as nsIDOMKeyEvent; domEventKey.initKeyEvent(storage, true, true, abstractView, false, false, false, false, 0, 0); target.dispatchEvent(domEventKey, out ret); break; case "DOMActivate": case "DOMFocusIn": case "DOMFocusOut": case "input": eventType = "uievents"; nsIDOMEvent evtUI; Base.StringSet(storage, eventType); docEvent.createEvent(storage, out evtUI); Base.StringSet(storage, eventName); nsIDOMUIEvent domEventUI = evtUI as nsIDOMUIEvent; domEventUI.initUIEvent(storage, true, true, abstractView, 1); target.dispatchEvent(domEventUI, out ret); break; case "focus": case "blur": case "submit": case "reset": case "change": case "select": case "load": case "beforeunload": case "unload": case "abort": case "error": default: eventType = "events"; nsIDOMEvent domEvent; Base.StringSet(storage, eventType); docEvent.createEvent(storage, out domEvent); Base.StringSet(storage, eventName); domEvent.initEvent(storage, true, true); target.dispatchEvent(domEvent, out ret); break; } }
public static DomEventTarget Create(mozIDOMWindowProxy window, nsIDOMEventTarget target) { return(new DomEventTarget((mozIDOMWindowProxy)window, target)); }
private DomEventTarget(mozIDOMWindowProxy window, nsIDOMEventTarget target) { _window = window; _target = new ComPtr <nsIDOMEventTarget>(target); }
public static nsIDOMEventTarget GetProxy (Mono.WebBrowser.IWebBrowser control, nsIDOMEventTarget obj) { object o = Base.GetProxyForObject (control, typeof(nsIDOMEventTarget).GUID, obj); return o as nsIDOMEventTarget; }
private DomEventTarget(nsIDOMEventTarget target) { _target = new InstanceWrapper <nsIDOMEventTarget>(target); }
internal static IntPtr GetJSContextForDomWindow(nsIDOMWindow window) { IntPtr context = IntPtr.Zero; nsIDOMEventTarget eventTarget = window.GetWindowRootAttribute(); try { context = eventTarget.GetJSContextForEventHandlers(); if (context == IntPtr.Zero) { IntPtr pUnk = Marshal.GetIUnknownForObject(window); Marshal.Release(pUnk); if (!_windowContexts.TryGetValue(pUnk, out context)) { context = IntPtr.Zero; IntPtr cx; IntPtr iterp = IntPtr.Zero; IntPtr rt = Runtime; while ((cx = SpiderMonkey.JS_ContextIterator(rt, ref iterp)) != IntPtr.Zero) { IntPtr pGlobal = SpiderMonkey.DefaultObjectForContextOrNull(cx); if (pGlobal != IntPtr.Zero) { using (var auto = new AutoJSContext(cx)) { using (ComPtr <nsISupports> global = auto.GetGlobalNsObject()) { if (global != null) { var domWindow = Xpcom.QueryInterface <nsIDOMWindow>(global.Instance); if (domWindow != null) { try { IntPtr pUnkTest = Marshal.GetIUnknownForObject(domWindow.GetWindowAttribute()); Marshal.Release(pUnkTest); if (pUnk == pUnkTest) { _windowContexts.Add(pUnk, cx); context = cx; break; } } finally { Xpcom.FreeComObject(ref domWindow); } } } } } } } } } } finally { if (eventTarget != null) { Xpcom.FreeComObject(ref eventTarget); } } return(context); }
public static nsIDOMEventTarget GetProxy(Mono.WebBrowser.IWebBrowser control, nsIDOMEventTarget obj) { object o = Base.GetProxyForObject(control, typeof(nsIDOMEventTarget).GUID, obj); return(o as nsIDOMEventTarget); }