# HG changeset patch # User John Reimer # Date 1224993714 25200 # Node ID c317081df76f91d9620aa7f382df742412a5e374 # Parent d47095c2d585d9051a279bf5627e7d2c621b3d6e Mozilla module complete (first phase complete) diff -r d47095c2d585 -r c317081df76f dwt/browser/Mozilla.d --- a/dwt/browser/Mozilla.d Thu Oct 23 21:32:32 2008 -0700 +++ b/dwt/browser/Mozilla.d Sat Oct 25 21:01:54 2008 -0700 @@ -1663,7 +1663,7 @@ mozDelegate.onDispose (embedHandle); mozDelegate = null; - embedHandle = 0; + embedHandle = null; BrowserCount--; } @@ -1862,15 +1862,16 @@ public bool setUrl (String url) { awaitingNavigate = false; - int /*long*/[] result = new int /*long*/[1]; - int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result); + //int /*long*/[] result = new int /*long*/[1]; + nsIWebNavigation webNavigation; + int rc = webBrowser.QueryInterface (nsIWebNavigation.IID, cast(void**)&webNavigation); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); + if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE); - nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]); - char[] uri = new char[url.length () + 1]; - url.getChars (0, url.length (), uri, 0); - rc = webNavigation.LoadURI (uri, nsIWebNavigation.LOAD_FLAGS_NONE, 0, 0, 0); + //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]); + //char[] uri = new char[url.length () + 1]; + //url.getChars (0, url.length (), uri, 0); + rc = webNavigation.LoadURI (Utf.toString16(url).toString16z, nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null); webNavigation.Release (); return rc is XPCOM.NS_OK; } @@ -1878,39 +1879,40 @@ public void stop () { if (awaitingNavigate) return; - int /*long*/[] result = new int /*long*/[1]; - int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result); + nsIWebNavigation webNavigation; + //int /*long*/[] result = new int /*long*/[1]; + int rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); + if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE); - nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]); + //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]); rc = webNavigation.Stop (nsIWebNavigation.STOP_ALL); if (rc !is XPCOM.NS_OK) error (rc); webNavigation.Release (); } void hookDOMListeners (nsIDOMEventTarget target, bool isTop) { - nsEmbedString string = new nsEmbedString (XPCOM.DOMEVENT_FOCUS); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + scope auto string = new nsEmbedString (XPCOM.DOMEVENT_FOCUS); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_UNLOAD); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDOWN); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEUP); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEMOVE); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEWHEEL); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDRAG); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); /* * Only hook mouseover and mouseout if the target is a top-level frame, so that mouse moves @@ -1918,66 +1920,70 @@ */ if (isTop && mozDelegate.hookEnterExit ()) { string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOVER); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOUT); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); } string = new nsEmbedString (XPCOM.DOMEVENT_KEYDOWN); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_KEYPRESS); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_KEYUP); - target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.AddEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); } void unhookDOMListeners () { - int /*long*/[] result = new int /*long*/[1]; - int rc = webBrowser.GetContentDOMWindow (result); + //int /*long*/[] result = new int /*long*/[1]; + nsIDOMWindow window; + int rc = webBrowser.GetContentDOMWindow (&window); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); + if (window is null) error (XPCOM.NS_ERROR_NO_INTERFACE); - nsIDOMWindow window = new nsIDOMWindow (result[0]); - result[0] = 0; - rc = window.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result); + //nsIDOMWindow window = new nsIDOMWindow (result[0]); + //result[0] = 0; + nsIDOMEventTarget target; + rc = window.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); + if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE); - nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); - result[0] = 0; + //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); + //result[0] = 0; unhookDOMListeners (target); target.Release (); /* Listeners must be unhooked in pages contained in frames */ - rc = window.GetFrames (result); + nsIDOMWindowCollection frames; + rc = window.GetFrames (&frames); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); - nsIDOMWindowCollection frames = new nsIDOMWindowCollection (result[0]); - result[0] = 0; - int[] frameCount = new int[1]; - rc = frames.GetLength (frameCount); /* PRUint32 */ + if (frames is null) error (XPCOM.NS_ERROR_NO_INTERFACE); + //nsIDOMWindowCollection frames = new nsIDOMWindowCollection (result[0]); + //result[0] = 0; + PRUint32 count; + rc = frames.GetLength (&count); /* PRUint32 */ if (rc !is XPCOM.NS_OK) error (rc); - int count = frameCount[0]; + //int count = frameCount[0]; if (count > 0) { + nsIDOMWindow frame; for (int i = 0; i < count; i++) { - rc = frames.Item (i, result); + rc = frames.Item (i, &frame); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); + if (frame is null) error (XPCOM.NS_ERROR_NO_INTERFACE); - nsIDOMWindow frame = new nsIDOMWindow (result[0]); - result[0] = 0; - rc = frame.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result); + //nsIDOMWindow frame = new nsIDOMWindow (result[0]); + //result[0] = 0; + rc = frame.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); + if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE); - target = new nsIDOMEventTarget (result[0]); - result[0] = 0; + //target = new nsIDOMEventTarget (result[0]); + //result[0] = 0; unhookDOMListeners (target); target.Release (); frame.Release (); @@ -1988,47 +1994,47 @@ } void unhookDOMListeners (nsIDOMEventTarget target) { - nsEmbedString string = new nsEmbedString (XPCOM.DOMEVENT_FOCUS); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + scope auto string = new nsEmbedString (XPCOM.DOMEVENT_FOCUS); + target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_UNLOAD); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDOWN); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEUP); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEMOVE); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEWHEEL); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDRAG); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOVER); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOUT); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_KEYDOWN); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_KEYPRESS); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0); + //string.dispose (); string = new nsEmbedString (XPCOM.DOMEVENT_KEYUP); - target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); - string.dispose (); + target.RemoveEventListener (cast(nsAString*)string, domEventListener., 0); + //string.dispose (); } /* nsISupports */ -int QueryInterface (nsID* riid, void** ppvObject) { +nsresult QueryInterface (nsID* riid, void** ppvObject) { if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE; if (*riid == nsISupports.IID) { @@ -2090,12 +2096,12 @@ return XPCOM.NS_ERROR_NO_INTERFACE; } -int AddRef () { +nsrefcnt AddRef () { refCount++; return refCount; } -int Release () { +nsrefcnt Release () { refCount--; if (refCount is 0) return 0; return refCount; @@ -2103,39 +2109,42 @@ /* nsIWeakReference */ -int QueryReferent (nsID* riid, void** ppvObject) { +nsresult QueryReferent (nsID* riid, void** ppvObject) { return QueryInterface (riid, ppvObject); } /* nsIInterfaceRequestor */ -int GetInterface ( nsID* riid, void** ppvObject) { - if (riid is 0 || ppvObject is 0) return XPCOM.NS_ERROR_NO_INTERFACE; - nsID guid = new nsID (); - XPCOM.memmove (guid, riid, nsID.sizeof); - if (guid.Equals (nsIDOMWindow.NS_IDOMWINDOW_IID)) { - int /*long*/[] aContentDOMWindow = new int /*long*/[1]; - int rc = webBrowser.GetContentDOMWindow (aContentDOMWindow); +nsresult GetInterface ( nsID* riid, void** ppvObject) { + if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE; + //nsID guid = new nsID (); + //XPCOM.memmove (guid, riid, nsID.sizeof); + if ((*riid).Equals (nsIDOMWindow.IID)) { + nsIDOMWindow aContentDOMWindow; + //int /*long*/[] aContentDOMWindow = new int /*long*/[1]; + int rc = webBrowser.GetContentDOMWindow (&aContentDOMWindow); if (rc !is XPCOM.NS_OK) error (rc); - if (aContentDOMWindow[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); - XPCOM.memmove (ppvObject, aContentDOMWindow, C.PTR_SIZEOF); + if (aContentDOMWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE); + *ppvObject = cast(void*)aContentDOMWindow; + //XPCOM.memmove (ppvObject, aContentDOMWindow, C.PTR_SIZEOF); return rc; } return QueryInterface (riid, ppvObject); } -int GetWeakReference (int /*long*/ ppvObject) { - XPCOM.memmove (ppvObject, new int /*long*/[] {weakReference.getAddress ()}, C.PTR_SIZEOF); +nsresult GetWeakReference (void** ppvObject) { + *ppvObject = cast(void*)weakReference; + //XPCOM.memmove (ppvObject, new int /*long*/[] {weakReference.getAddress ()}, C.PTR_SIZEOF); AddRef (); return XPCOM.NS_OK; } /* nsIWebProgressListener */ -int OnStateChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStateFlags, int aStatus) { +nsresult OnStateChange (nsIWebProgress aWebProgress, nsIRequest aRequest, PRUint32 aStateFlags, nsresult aStatus) { if ((aStateFlags & nsIWebProgressListener.STATE_IS_DOCUMENT) is 0) return XPCOM.NS_OK; if ((aStateFlags & nsIWebProgressListener.STATE_START) !is 0) { - if (request is 0) request = aRequest; + if (request is null) request = aRequest; if (!awaitingNavigate) { /* @@ -2144,15 +2153,16 @@ * process. These listeners cannot be added yet because the * nsIDOMWindow is not ready to take them at this stage. */ - int /*long*/[] result = new int /*long*/[1]; - nsIWebProgress progress = new nsIWebProgress (aWebProgress); - int rc = progress.GetDOMWindow (result); + //int /*long*/[] result = new int /*long*/[1]; + nsIDOMWindow window; + //nsIWebProgress progress = new nsIWebProgress (aWebProgress); + int rc = aWebProgress.GetDOMWindow (&window); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); - unhookedDOMWindows.addElement (new LONG (result[0])); + if (window is null) error (XPCOM.NS_NOINTERFACE); + unhookedDOMWindows ~= window; } } else if ((aStateFlags & nsIWebProgressListener.STATE_REDIRECTING) !is 0) { - if (request is aRequest) request = 0; + if (request is aRequest) request = null; } else if ((aStateFlags & nsIWebProgressListener.STATE_STOP) !is 0) { /* * If this page's nsIDOMWindow handle is still in unhookedDOMWindows then @@ -2161,30 +2171,32 @@ * received for every window in a page, which is when these listeners * are typically added. */ - int /*long*/[] result = new int /*long*/[1]; - nsIWebProgress progress = new nsIWebProgress (aWebProgress); - int rc = progress.GetDOMWindow (result); + //int /*long*/[] result = new int /*long*/[1]; + //nsIWebProgress progress = new nsIWebProgress (aWebProgress); + nsIDOMWindow domWindow; + int rc = aWebProgress.GetDOMWindow (&domWindow); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); - nsIDOMWindow domWindow = new nsIDOMWindow (result[0]); + if (domWindow is null) error (XPCOM.NS_NOINTERFACE); + //nsIDOMWindow domWindow = new nsIDOMWindow (result[0]); - LONG ptrObject = new LONG (result[0]); - result[0] = 0; - int index = unhookedDOMWindows.indexOf (ptrObject); + //LONG ptrObject = new LONG (result[0]); + //result[0] = 0; + int index = unhookedDOMWindows.arrayIndexOf (domWindow); if (index !is -1) { - rc = webBrowser.GetContentDOMWindow (result); + nsIDOMWindow contentWindow; + rc = webBrowser.GetContentDOMWindow (&contentWindow); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); - bool isTop = result[0] is domWindow.getAddress (); - new nsISupports (result[0]).Release (); - result[0] = 0; + if (contentWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE); + bool isTop = contentWindow is domWindow; + contentWindow.Release (); + //result[0] = 0; + nsIDOMEventTarget target; + rc = domWindow.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target); + if (rc !is XPCOM.NS_OK) error (rc); + if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE); - rc = domWindow.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result); - if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); - - nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); - result[0] = 0; + //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); + //result[0] = 0; hookDOMListeners (target, isTop); target.Release (); @@ -2192,8 +2204,8 @@ * Remove and unreference the nsIDOMWindow from the collection of windows * that are waiting to have DOM listeners hooked on them. */ - unhookedDOMWindows.remove (ptrObject); - new nsISupports (ptrObject.value).Release (); + unhookedDOMWindows = unhookedDOMWindows.arrayIndexRemove (index); + domWindow.Release (); } domWindow.Release (); @@ -2229,30 +2241,32 @@ * Hook DOM listeners to the page's nsIDOMWindow here because this is * the earliest opportunity to do so. */ - int /*long*/[] result = new int /*long*/[1]; - nsIWebProgress progress = new nsIWebProgress (aWebProgress); - int rc = progress.GetDOMWindow (result); + //int /*long*/[] result = new int /*long*/[1]; + // nsIWebProgress progress = new nsIWebProgress (aWebProgress); + nsIDOMWindow domWindow; + int rc = progress.GetDOMWindow (&domWindow); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); - nsIDOMWindow domWindow = new nsIDOMWindow (result[0]); + if (domWindow is null) error (XPCOM.NS_NOINTERFACE); + //nsIDOMWindow domWindow = new nsIDOMWindow (result[0]); - LONG ptrObject = new LONG (result[0]); - result[0] = 0; - int index = unhookedDOMWindows.indexOf (ptrObject); + //LONG ptrObject = new LONG (result[0]); + //result[0] = 0; + int index = unhookedDOMWindows.arrayIndexOf (domWindow); if (index !is -1) { - rc = webBrowser.GetContentDOMWindow (result); + nsIDOMWindow contentWindow + rc = webBrowser.GetContentDOMWindow (&contentWindow); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); - bool isTop = result[0] is domWindow.getAddress (); - new nsISupports (result[0]).Release (); - result[0] = 0; + if (contentWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE); + bool isTop = contentWindow is domWindow; + contentWindow.Release (); + //result[0] = 0; + nsIDOMEventTarget target; + rc = domWindow.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target); + if (rc !is XPCOM.NS_OK) error (rc); + if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE); - rc = domWindow.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result); - if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); - - nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); - result[0] = 0; + //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); + //result[0] = 0; hookDOMListeners (target, isTop); target.Release (); @@ -2260,28 +2274,28 @@ * Remove and unreference the nsIDOMWindow from the collection of windows * that are waiting to have DOM listeners hooked on them. */ - unhookedDOMWindows.remove (ptrObject); - new nsISupports (ptrObject.value).Release (); + unhookedDOMWindows = unhookedDOMWindows.arrayIndexRemove (domWindow); + domWIndow.Release (); } domWindow.Release (); } return XPCOM.NS_OK; } -int OnProgressChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aCurSelfProgress, int aMaxSelfProgress, int aCurTotalProgress, int aMaxTotalProgress) { - if (awaitingNavigate || progressListeners.length is 0) return XPCOM.NS_OK; +nsresult OnProgressChange (nsIWebProgress aWebProgress, nsIRequest aRequest, PRint32 aCurSelfProgress, PRInt32 aMaxSelfProgress, PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress) { + if (awaitingNavigate || super.progressListeners.length is 0) return XPCOM.NS_OK; ProgressEvent event = new ProgressEvent (browser); event.display = browser.getDisplay (); event.widget = browser; event.current = aCurTotalProgress; event.total = aMaxTotalProgress; - for (int i = 0; i < progressListeners.length; i++) { - progressListeners[i].changed (event); + for (int i = 0; i < super.progressListeners.length; i++) { + super.progressListeners[i].changed (event); } return XPCOM.NS_OK; } -int OnLocationChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int /*long*/ aLocation) { +nsresult OnLocationChange (nsIWebProgress aWebProgress, nsIRequest aRequest, nsIURI aLocation) { /* * Feature in Mozilla. When a page is loaded via setText before a previous * setText page load has completed, the expected OnStateChange STATE_STOP for the @@ -2291,35 +2305,38 @@ * (but never arrives). To handle this case, the request field is updated to the new * overriding request since its OnStateChange STATE_STOP will be received next. */ - if (request !is 0 && request !is aRequest) request = aRequest; + if (request !is null && request !is aRequest) request = aRequest; if (awaitingNavigate || locationListeners.length is 0) return XPCOM.NS_OK; - nsIWebProgress webProgress = new nsIWebProgress (aWebProgress); - int /*long*/[] aDOMWindow = new int /*long*/[1]; - int rc = webProgress.GetDOMWindow (aDOMWindow); - if (rc !is XPCOM.NS_OK) error (rc); - if (aDOMWindow[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); + //nsIWebProgress webProgress = new nsIWebProgress (aWebProgress); - nsIDOMWindow domWindow = new nsIDOMWindow (aDOMWindow[0]); - int /*long*/[] aTop = new int /*long*/[1]; - rc = domWindow.GetTop (aTop); + nsIDOMWindow domWindow; + //int /*long*/[] aDOMWindow = new int /*long*/[1]; + int rc = webProgress.GetDOMWindow (&domWindow); if (rc !is XPCOM.NS_OK) error (rc); - if (aTop[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); + if (domWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE); + + //nsIDOMWindow domWindow = new nsIDOMWindow (aDOMWindow[0]); + //int /*long*/[] aTop = new int /*long*/[1]; + nsIDOMWindow topWindow; + rc = domWindow.GetTop (&topWindow); + if (rc !is XPCOM.NS_OK) error (rc); + if (topWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE); domWindow.Release (); - nsIDOMWindow topWindow = new nsIDOMWindow (aTop[0]); + //nsIDOMWindow topWindow = new nsIDOMWindow (aTop[0]); topWindow.Release (); - nsIURI location = new nsIURI (aLocation); - int /*long*/ aSpec = XPCOM.nsEmbedCString_new (); - location.GetSpec (aSpec); - int length = XPCOM.nsEmbedCString_Length (aSpec); - int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec); - byte[] dest = new byte[length]; - XPCOM.memmove (dest, buffer, length); - XPCOM.nsEmbedCString_delete (aSpec); - String url = new String (dest); + //nsIURI location = new nsIURI (aLocation); + scope auto aSpec = new nsEmbedCString; + aLocation.GetSpec (cast(nsACString*)aSpec); + //int length = XPCOM.nsEmbedCString_Length (aSpec); + //int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec); + //byte[] dest = new byte[length]; + //XPCOM.memmove (dest, buffer, length); + //XPCOM.nsEmbedCString_delete (aSpec); + String url = aSpec.toString; /* * As of Mozilla 1.8, the first time that a page is displayed, regardless of @@ -2327,7 +2344,7 @@ * to about:blank and fires the corresponding navigation events. Do not send * this event on to the user since it is not expected. */ - if (!IsPre_1_8 && aRequest is 0 && url.startsWith (ABOUT_BLANK)) return XPCOM.NS_OK; + if (!IsPre_1_8 && aRequest is null && url.startsWith (ABOUT_BLANK)) return XPCOM.NS_OK; LocationEvent event = new LocationEvent (browser); event.display = browser.getDisplay (); @@ -2338,79 +2355,79 @@ * (via setText()) then set it to about:blank to be consistent with IE. */ if (event.location.equals (URI_FROMMEMORY)) event.location = ABOUT_BLANK; - event.top = aTop[0] is aDOMWindow[0]; + event.top = topWindow is domWindow; for (int i = 0; i < locationListeners.length; i++) { locationListeners[i].changed (event); } return XPCOM.NS_OK; } -int OnStatusChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStatus, int /*long*/ aMessage) { +int OnStatusChange (nsIWebProgress aWebProgress, nsIRequest aRequest, nsresult aStatus, PRUnichar* aMessage) { if (awaitingNavigate || statusTextListeners.length is 0) return XPCOM.NS_OK; StatusTextEvent event = new StatusTextEvent (browser); event.display = browser.getDisplay (); event.widget = browser; - int length = XPCOM.strlen_PRUnichar (aMessage); - char[] dest = new char[length]; - XPCOM.memmove (dest, aMessage, length * 2); - event.text = new String (dest); + //int length = XPCOM.strlen_PRUnichar (aMessage); + //char[] dest = new char[length]; + //XPCOM.memmove (dest, aMessage, length * 2); + event.text = aMessage.fromString16z.toString; for (int i = 0; i < statusTextListeners.length; i++) { statusTextListeners[i].changed (event); } return XPCOM.NS_OK; } -int OnSecurityChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int state) { +int OnSecurityChange (nsIWebProgress aWebProgress, nsIRequest aRequest, PRUint32 state) { return XPCOM.NS_OK; } /* nsIWebBrowserChrome */ -int SetStatus (int statusType, int /*long*/ status) { +nsresult SetStatus (PRUint32 statusType, PRUinchar* status) { if (awaitingNavigate || statusTextListeners.length is 0) return XPCOM.NS_OK; StatusTextEvent event = new StatusTextEvent (browser); event.display = browser.getDisplay (); event.widget = browser; - int length = XPCOM.strlen_PRUnichar (status); - char[] dest = new char[length]; - XPCOM.memmove (dest, status, length * 2); - String string = new String (dest); - event.text = string; + //int length = XPCOM.strlen_PRUnichar (status); + //char[] dest = new char[length]; + //XPCOM.memmove (dest, status, length * 2); + //String string = new String (dest); + event.text = status.fromString16z.toString; for (int i = 0; i < statusTextListeners.length; i++) { statusTextListeners[i].changed (event); } return XPCOM.NS_OK; } -int GetWebBrowser (int /*long*/ aWebBrowser) { - int /*long*/[] ret = new int /*long*/[1]; +nsresult GetWebBrowser (nsIWebBrowser* aWebBrowser) { + //int /*long*/[] ret = new int /*long*/[1]; if (webBrowser !is null) { webBrowser.AddRef (); - ret[0] = webBrowser.getAddress (); + *aWebBrowser = cast(nsIWebBrowser)webBrowser; } - XPCOM.memmove (aWebBrowser, ret, C.PTR_SIZEOF); + //XPCOM.memmove (aWebBrowser, ret, C.PTR_SIZEOF); return XPCOM.NS_OK; } -int SetWebBrowser (int /*long*/ aWebBrowser) { +nsresult SetWebBrowser (nsIWebBrowser aWebBrowser) { if (webBrowser !is null) webBrowser.Release (); - webBrowser = aWebBrowser !is 0 ? new nsIWebBrowser (aWebBrowser) : null; + webBrowser = aWebBrowser !is null ? cast(WebBrowser)cast(void*)aWebBrowser : null; return XPCOM.NS_OK; } -int GetChromeFlags (int /*long*/ aChromeFlags) { - int[] ret = new int[1]; - ret[0] = chromeFlags; - XPCOM.memmove (aChromeFlags, ret, 4); /* PRUint32 */ +nsresult GetChromeFlags (PRUint32* aChromeFlags) { + //int[] ret = new int[1]; + *aChromeFlags = chromeFlags; + //XPCOM.memmove (aChromeFlags, ret, 4); /* PRUint32 */ return XPCOM.NS_OK; } -int SetChromeFlags (int aChromeFlags) { +nsresult SetChromeFlags (PRUint32 aChromeFlags) { chromeFlags = aChromeFlags; return XPCOM.NS_OK; } -int DestroyBrowserWindow () { +nsresult DestroyBrowserWindow () { WindowEvent newEvent = new WindowEvent (browser); newEvent.display = browser.getDisplay (); newEvent.widget = browser; @@ -2427,7 +2444,7 @@ return XPCOM.NS_OK; } -int SizeBrowserTo (int aCX, int aCY) { +nsresult SizeBrowserTo (PRInt32 aCX, PRInt32 aCY) { size = new Point (aCX, aCY); bool isChrome = (chromeFlags & nsIWebBrowserChrome.CHROME_OPENAS_CHROME) !is 0; if (isChrome) { @@ -2437,22 +2454,24 @@ return XPCOM.NS_OK; } -int ShowAsModal () { - int /*long*/[] result = new int /*long*/[1]; - int rc = XPCOM.NS_GetServiceManager (result); +nsresult ShowAsModal () { + //int /*long*/[] result = new int /*long*/[1]; + nsIServiceManager serviceManager; + int rc = XPCOM.NS_GetServiceManager (&serviceManager); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); + if (serviceManager is null) error (XPCOM.NS_NOINTERFACE); - nsIServiceManager serviceManager = new nsIServiceManager (result[0]); - result[0] = 0; - byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_CONTEXTSTACK_CONTRACTID, true); - rc = serviceManager.GetServiceByContractID (aContractID, nsIJSContextStack.NS_IJSCONTEXTSTACK_IID, result); + //nsIServiceManager serviceManager = new nsIServiceManager (result[0]); + //result[0] = 0; + //byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_CONTEXTSTACK_CONTRACTID, true); + nsIJSContextStack stack; + rc = serviceManager.GetServiceByContractID (XPCOM.NS_CONTEXTSTACK_CONTRACTID, &nsIJSContextStack.IID, cast(void**)&stack); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); + if (stack is null) error (XPCOM.NS_NOINTERFACE); serviceManager.Release (); - nsIJSContextStack stack = new nsIJSContextStack (result[0]); - result[0] = 0; + //nsIJSContextStack stack = new nsIJSContextStack (result[0]); + //result[0] = 0; rc = stack.Push (0); if (rc !is XPCOM.NS_OK) error (rc); @@ -2468,19 +2487,19 @@ return XPCOM.NS_OK; } -int IsWindowModal (int /*long*/ retval) { - int result = (chromeFlags & nsIWebBrowserChrome.CHROME_MODAL) !is 0 ? 1 : 0; - XPCOM.memmove (retval, new int[] {result}, 4); /* PRBool */ +nsresult IsWindowModal (PRBool* retval) { + *retval = (chromeFlags & nsIWebBrowserChrome.CHROME_MODAL) !is 0 ? 1 : 0; + //XPCOM.memmove (retval, new int[] {result}, 4); /* PRBool */ return XPCOM.NS_OK; } -int ExitModalEventLoop (int aStatus) { +nsresult ExitModalEventLoop (nsresult aStatus) { return XPCOM.NS_OK; } /* nsIEmbeddingSiteWindow */ -int SetDimensions (int flags, int x, int y, int cx, int cy) { +nsresult SetDimensions (PRUint32 flags, PRInt32 x, PRInt32 y, PRInt32 cx, PRInt32 cy) { if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_POSITION) !is 0) { location = new Point (x, y); browser.getShell ().setLocation (x, y); @@ -2494,32 +2513,33 @@ return XPCOM.NS_OK; } -int GetDimensions (int flags, int /*long*/ x, int /*long*/ y, int /*long*/ cx, int /*long*/ cy) { +int GetDimensions (PRUint32 flags, PRInt32* x, PRInt32* y, PRInt32* cx, PRInt32* cy) { if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_POSITION) !is 0) { Point location = browser.getShell ().getLocation (); - if (x !is 0) C.memmove (x, new int[] {location.x}, 4); /* PRInt32 */ - if (y !is 0) C.memmove (y, new int[] {location.y}, 4); /* PRInt32 */ + if (x !is null) *x = location.x; /* PRInt32 */ + if (y !is null) *y = location.y; /* PRInt32 */ } if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_INNER) !is 0) { Point size = browser.getSize (); - if (cx !is 0) C.memmove (cx, new int[] {size.x}, 4); /* PRInt32 */ - if (cy !is 0) C.memmove (cy, new int[] {size.y}, 4); /* PRInt32 */ + if (cx !is null) *cx = size.x; /* PRInt32 */ + if (cy !is null) *cy = size.y; /* PRInt32 */ } if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_OUTER) !is 0) { Point size = browser.getShell().getSize (); - if (cx !is 0) C.memmove (cx, new int[] {size.x}, 4); /* PRInt32 */ - if (cy !is 0) C.memmove (cy, new int[] {size.y}, 4); /* PRInt32 */ + if (cx !is null) *cx = size.x; /* PRInt32 */ + if (cy !is null) *cy = size.y; /* PRInt32 */ } return XPCOM.NS_OK; } -int SetFocus () { - int /*long*/[] result = new int /*long*/[1]; - int rc = webBrowser.QueryInterface (nsIBaseWindow.NS_IBASEWINDOW_IID, result); +nsresult SetFocus () { + //int /*long*/[] result = new int /*long*/[1]; + nsIBaseWindow baseWindow; + int rc = webBrowser.QueryInterface (&nsIBaseWindow.IID, cast(void**)&baseWindow); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); + if (baseWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE); - nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]); + //nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]); rc = baseWindow.SetFocus (); if (rc !is XPCOM.NS_OK) error (rc); baseWindow.Release (); @@ -2532,13 +2552,14 @@ return XPCOM.NS_OK; } -int GetVisibility (int /*long*/ aVisibility) { +nsresult GetVisibility (PRBool* aVisibility) { bool visible = browser.isVisible () && !browser.getShell ().getMinimized (); - XPCOM.memmove (aVisibility, new int[] {visible ? 1 : 0}, 4); /* PRBool */ + *aVisible = visible ? 1 : 0; + //XPCOM.memmove (aVisibility, new int[] {visible ? 1 : 0}, 4); /* PRBool */ return XPCOM.NS_OK; } -int SetVisibility (int aVisibility) { +nsresult SetVisibility (PRBool aVisibility) { if (isChild) { WindowEvent event = new WindowEvent (browser); event.display = browser.getDisplay (); @@ -2575,11 +2596,11 @@ return XPCOM.NS_OK; } -int GetTitle (int /*long*/ aTitle) { +nsresult GetTitle (PRUnichar** aTitle) { return XPCOM.NS_OK; } -int SetTitle (int /*long*/ aTitle) { +nsresult SetTitle (PRUnichar* aTitle) { if (awaitingNavigate || titleListeners.length is 0) return XPCOM.NS_OK; TitleEvent event = new TitleEvent (browser); event.display = browser.getDisplay (); @@ -2591,9 +2612,9 @@ */ int length = XPCOM.strlen_PRUnichar (aTitle); if (length > 0) { - char[] dest = new char[length]; - XPCOM.memmove (dest, aTitle, length * 2); - event.title = new String (dest); + //char[] dest = new char[length]; + //XPCOM.memmove (dest, aTitle, length * 2); + event.title = aTitle.fromString16z.toString; } else { event.title = getUrl (); } @@ -2603,7 +2624,7 @@ return XPCOM.NS_OK; } -int GetSiteWindow (int /*long*/ aSiteWindow) { +nsresult GetSiteWindow (void** aSiteWindow) { /* * Note. The handle is expected to be an HWND on Windows and * a GtkWidget* on GTK. This callback is invoked on Windows @@ -2611,13 +2632,13 @@ * dialog comes up. If no handle is returned, the print dialog * does not come up on this platform. */ - XPCOM.memmove (aSiteWindow, new int /*long*/[] {embedHandle}, C.PTR_SIZEOF); + *aSiteWindow = cast(void*) embedHandle; return XPCOM.NS_OK; } /* nsIWebBrowserChromeFocus */ -int FocusNextElement () { +nsresult FocusNextElement () { /* * Bug in Mozilla embedding API. Mozilla takes back the focus after sending * this event. This prevents tabbing out of Mozilla. This behaviour can be reproduced @@ -2633,7 +2654,7 @@ return XPCOM.NS_OK; } -int FocusPrevElement () { +nsresult FocusPrevElement () { /* * Bug in Mozilla embedding API. Mozilla takes back the focus after sending * this event. This prevents tabbing out of Mozilla. This behaviour can be reproduced @@ -2651,31 +2672,32 @@ /* nsIContextMenuListener */ -int OnShowContextMenu (int aContextFlags, int /*long*/ aEvent, int /*long*/ aNode) { +nsresult OnShowContextMenu (PRUint32 aContextFlags, nsIDOMEvent aEvent, nsIDOMNode aNode) { if (awaitingNavigate) return XPCOM.NS_OK; - nsIDOMEvent domEvent = new nsIDOMEvent (aEvent); - int /*long*/[] result = new int /*long*/[1]; - int rc = domEvent.QueryInterface (nsIDOMMouseEvent.NS_IDOMMOUSEEVENT_IID, result); + //nsIDOMEvent domEvent = new nsIDOMEvent (aEvent); + //int /*long*/[] result = new int /*long*/[1]; + nsIDOMMouseEvent domMouseEvent; + int rc = domEvent.QueryInterface (&nsIDOMMouseEvent.IID, cast(void**)&domMouseEvent); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); + if (domMouseEvent is null) error (XPCOM.NS_NOINTERFACE); - nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]); - int[] aScreenX = new int[1], aScreenY = new int[1]; - rc = domMouseEvent.GetScreenX (aScreenX); + //nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]); + PRInt32 aScreenX, aScreenY; + rc = domMouseEvent.GetScreenX (&aScreenX); if (rc !is XPCOM.NS_OK) error (rc); - rc = domMouseEvent.GetScreenY (aScreenY); + rc = domMouseEvent.GetScreenY (&aScreenY); if (rc !is XPCOM.NS_OK) error (rc); domMouseEvent.Release (); - Event event = new Event (); - event.x = aScreenX[0]; - event.y = aScreenY[0]; + Event event; + event.x = aScreenX; + event.y = aScreenY; browser.notifyListeners (DWT.MenuDetect, event); if (!event.doit) return XPCOM.NS_OK; Menu menu = browser.getMenu (); if (menu !is null && !menu.isDisposed ()) { - if (aScreenX[0] !is event.x || aScreenY[0] !is event.y) { + if (aScreenX !is event.x || aScreenY !is event.y) { menu.setLocation (event.x, event.y); } menu.setVisible (true); @@ -2685,23 +2707,24 @@ /* nsIURIContentListener */ -int OnStartURIOpen (int /*long*/ aURI, int /*long*/ retval) { +nsresult OnStartURIOpen (nsIURI aURI, PRBool* retval) { if (awaitingNavigate || locationListeners.length is 0) { - XPCOM.memmove (retval, new int[] {0}, 4); /* PRBool */ + *retval = 0; + //XPCOM.memmove (retval, new int[] {0}, 4); /* PRBool */ return XPCOM.NS_OK; } - nsIURI location = new nsIURI (aURI); - int /*long*/ aSpec = XPCOM.nsEmbedCString_new (); - location.GetSpec (aSpec); - int length = XPCOM.nsEmbedCString_Length (aSpec); - int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec); - buffer = XPCOM.nsEmbedCString_get (aSpec); - byte[] dest = new byte[length]; - XPCOM.memmove (dest, buffer, length); - XPCOM.nsEmbedCString_delete (aSpec); - String value = new String (dest); + //nsIURI location = new nsIURI (aURI); + scope auto aSpec = new nsEmbedCString; + location.GetSpec (cast(nsACString*)aSpec); + //int length = XPCOM.nsEmbedCString_Length (aSpec); + //int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec); + //buffer = XPCOM.nsEmbedCString_get (aSpec); + //byte[] dest = new byte[length]; + //XPCOM.memmove (dest, buffer, length); + //XPCOM.nsEmbedCString_delete (aSpec); + String value = aSpec.toString; bool doit = true; - if (request is 0) { + if (request is null) { /* * listeners should not be notified of internal transitions like "javascipt:..." * because this is an implementation side-effect, not a true navigate @@ -2723,57 +2746,62 @@ doit = event.doit && !browser.isDisposed(); } } - XPCOM.memmove (retval, new int[] {doit ? 0 : 1}, 4); /* PRBool */ + *retval = doit ? 0 : 1; + //XPCOM.memmove (retval, new int[] {doit ? 0 : 1}, 4); /* PRBool */ return XPCOM.NS_OK; } -int DoContent (int /*long*/ aContentType, int aIsContentPreferred, int /*long*/ aRequest, int /*long*/ aContentHandler, int /*long*/ retval) { +nsresult DoContent (char* aContentType, PRBool aIsContentPreferred, nsIRequest aRequest, nsIStreamListener* aContentHandler, PRBool* retval) { return XPCOM.NS_ERROR_NOT_IMPLEMENTED; } -int IsPreferred (int /*long*/ aContentType, int /*long*/ aDesiredContentType, int /*long*/ retval) { +nsresult IsPreferred (char* aContentType, char** aDesiredContentType, PRBool* retval) { bool preferred = false; - int size = XPCOM.strlen (aContentType); + auto size = strlen (aContentType); if (size > 0) { - byte[] typeBytes = new byte[size + 1]; - XPCOM.memmove (typeBytes, aContentType, size); - String contentType = new String (typeBytes, 0, size); + //byte[] typeBytes = new byte[size + 1]; + //XPCOM.memmove (typeBytes, aContentType, size); + String contentType = aContentType.fromStringz; /* do not attempt to handle known problematic content types */ if (!contentType.equals (XPCOM.CONTENT_MAYBETEXT) && !contentType.equals (XPCOM.CONTENT_MULTIPART)) { /* determine whether browser can handle the content type */ - int /*long*/[] result = new int /*long*/[1]; - int rc = XPCOM.NS_GetServiceManager (result); + // int /*long*/[] result = new int /*long*/[1]; + nsIServiceManager serviceManager; + int rc = XPCOM.NS_GetServiceManager (&serviceManager); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); - nsIServiceManager serviceManager = new nsIServiceManager (result[0]); - result[0] = 0; + if (serviceManager is null) error (XPCOM.NS_NOINTERFACE); + //nsIServiceManager serviceManager = new nsIServiceManager (result[0]); + //result[0] = 0; /* First try to use the nsIWebNavigationInfo if it's available (>= mozilla 1.8) */ - byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_WEBNAVIGATIONINFO_CONTRACTID, true); - rc = serviceManager.GetServiceByContractID (aContractID, nsIWebNavigationInfo.NS_IWEBNAVIGATIONINFO_IID, result); + //byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_WEBNAVIGATIONINFO_CONTRACTID, true); + nsIWebNavigationInfo info; + rc = serviceManager.GetServiceByContractID (XPCOM.NS_WEBNAVIGATIONINFO_CONTRACTID, &nsIWebNavigationInfo.IID, cast(void**)&info); if (rc is 0) { - byte[] bytes = MozillaDelegate.wcsToMbcs (null, contentType, true); - int /*long*/ typePtr = XPCOM.nsEmbedCString_new (bytes, bytes.length); - nsIWebNavigationInfo info = new nsIWebNavigationInfo (result[0]); - result[0] = 0; - int[] isSupportedResult = new int[1]; /* PRUint32 */ - rc = info.IsTypeSupported (typePtr, 0, isSupportedResult); + //byte[] bytes = MozillaDelegate.wcsToMbcs (null, contentType, true); + scope auto typePtr = nsEmbedCString(contentType); + //nsIWebNavigationInfo info = new nsIWebNavigationInfo (result[0]); + //result[0] = 0; + PRUint32 isSupportedResult; /* PRUint32 */ + rc = info.IsTypeSupported (cast(nsACString*)typePtr, null, &isSupportedResult); if (rc !is XPCOM.NS_OK) error (rc); info.Release (); - XPCOM.nsEmbedCString_delete (typePtr); - preferred = isSupportedResult[0] !is 0; + //XPCOM.nsEmbedCString_delete (typePtr); + preferred = isSupportedResult !is 0; } else { /* nsIWebNavigationInfo is not available, so do the type lookup */ - result[0] = 0; - rc = serviceManager.GetService (XPCOM.NS_CATEGORYMANAGER_CID, nsICategoryManager.NS_ICATEGORYMANAGER_IID, result); + //result[0] = 0; + nsICategoryManager categoryManager; + rc = serviceManager.GetService (XPCOM.NS_CATEGORYMANAGER_CID, &nsICategoryManager.IID, &categoryManager); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); + if (categoryManager is null) error (XPCOM.NS_NOINTERFACE); - nsICategoryManager categoryManager = new nsICategoryManager (result[0]); - result[0] = 0; - byte[] categoryBytes = MozillaDelegate.wcsToMbcs (null, "Gecko-Content-Viewers", true); //$NON-NLS-1$ - rc = categoryManager.GetCategoryEntry (categoryBytes, typeBytes, result); + //nsICategoryManager categoryManager = new nsICategoryManager (result[0]); + //result[0] = 0; + char* categoryBytes = "Gecko-Content-Viewers"; //$NON-NLS-1$ + char* result; + rc = categoryManager.GetCategoryEntry (categoryBytes, aContentType, &result); categoryManager.Release (); /* if no viewer for the content type is registered then rc is XPCOM.NS_ERROR_NOT_AVAILABLE */ preferred = rc is XPCOM.NS_OK; @@ -2782,42 +2810,42 @@ } } - XPCOM.memmove(retval, new int[] {preferred ? 1 : 0}, 4); /* PRBool */ + *retval = preferred ? 1 : 0; /* PRBool */ if (preferred) { - XPCOM.memmove (aDesiredContentType, new int /*long*/[] {0}, C.PTR_SIZEOF); + *aDesiredContentType = null; } return XPCOM.NS_OK; } -int CanHandleContent (int /*long*/ aContentType, int aIsContentPreferred, int /*long*/ aDesiredContentType, int /*long*/ retval) { +nsresult CanHandleContent (char* aContentType, PRBool aIsContentPreferred, char** aDesiredContentType, PRBool* retval) { return XPCOM.NS_ERROR_NOT_IMPLEMENTED; } -int GetLoadCookie (int /*long*/ aLoadCookie) { +nsresult GetLoadCookie (nsISupports* aLoadCookie) { return XPCOM.NS_ERROR_NOT_IMPLEMENTED; } -int SetLoadCookie (int /*long*/ aLoadCookie) { +nsresult SetLoadCookie (nsISupports aLoadCookie) { return XPCOM.NS_ERROR_NOT_IMPLEMENTED; } -int GetParentContentListener (int /*long*/ aParentContentListener) { +nsresult GetParentContentListener (nsIURIContentListener* aParentContentListener) { return XPCOM.NS_ERROR_NOT_IMPLEMENTED; } -int SetParentContentListener (int /*long*/ aParentContentListener) { +nsresult SetParentContentListener (nsIURIContentListener aParentContentListener) { return XPCOM.NS_ERROR_NOT_IMPLEMENTED; } /* nsITooltipListener */ -int OnShowTooltip (int aXCoords, int aYCoords, int /*long*/ aTipText) { +nsresult OnShowTooltip (PRInt32 aXCoords, PRInt32 aYCoords, PRUnichar* aTipText) { if (awaitingNavigate) return XPCOM.NS_OK; - int length = XPCOM.strlen_PRUnichar (aTipText); - char[] dest = new char[length]; - XPCOM.memmove (dest, aTipText, length * 2); - String text = new String (dest); + //int length = XPCOM.strlen_PRUnichar (aTipText); + //char[] dest = new char[length]; + //XPCOM.memmove (dest, aTipText, length * 2); + String text = aTipText.fromString16z.toString; if (tip !is null && !tip.isDisposed ()) tip.dispose (); Display display = browser.getDisplay (); Shell parent = browser.getShell (); @@ -2843,7 +2871,7 @@ return XPCOM.NS_OK; } -int OnHideTooltip () { +nsresult OnHideTooltip () { if (tip !is null && !tip.isDisposed ()) tip.dispose (); tip = null; return XPCOM.NS_OK; @@ -2851,26 +2879,27 @@ /* nsIDOMEventListener */ -int HandleEvent (int /*long*/ event) { - nsIDOMEvent domEvent = new nsIDOMEvent (event); +nsresult HandleEvent (nsIDOMEvent event) { + //nsIDOMEvent domEvent = new nsIDOMEvent (event); - int /*long*/ type = XPCOM.nsEmbedString_new (); - int rc = domEvent.GetType (type); + scope auto type = new nsEmbedString; + int rc = event.GetType (cast(nsAString*)type); if (rc !is XPCOM.NS_OK) error (rc); - int length = XPCOM.nsEmbedString_Length (type); - int /*long*/ buffer = XPCOM.nsEmbedString_get (type); - char[] chars = new char[length]; - XPCOM.memmove (chars, buffer, length * 2); - String typeString = new String (chars); - XPCOM.nsEmbedString_delete (type); + //int length = XPCOM.nsEmbedString_Length (type); + //int /*long*/ buffer = XPCOM.nsEmbedString_get (type); + //char[] chars = new char[length]; + //XPCOM.memmove (chars, buffer, length * 2); + String typeString = type.toString; + //XPCOM.nsEmbedString_delete (type); if (XPCOM.DOMEVENT_UNLOAD.equals (typeString)) { - int /*long*/[] result = new int /*long*/[1]; - rc = domEvent.GetCurrentTarget (result); + //int /*long*/[] result = new int /*long*/[1]; + nsIDOMEventTarget target; + rc = event.GetCurrentTarget (&target); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); + if (target is null) error (XPCOM.NS_NOINTERFACE); - nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); + //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); unhookDOMListeners (target); target.Release (); return XPCOM.NS_OK; @@ -2882,17 +2911,18 @@ } if (XPCOM.DOMEVENT_KEYDOWN.equals (typeString)) { - int /*long*/[] result = new int /*long*/[1]; - rc = domEvent.QueryInterface (nsIDOMKeyEvent.NS_IDOMKEYEVENT_IID, result); + //int /*long*/[] result = new int /*long*/[1]; + nsIDOMKeyEvent domKeyEvent; + rc = event.QueryInterface (&nsIDOMKeyEvent.IID, cast(void**)&domKeyEvent); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); - nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]); - result[0] = 0; + if (domKeyevent is null) error (XPCOM.NS_NOINTERFACE); + //nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]); + //result[0] = 0; - int[] aKeyCode = new int[1]; /* PRUint32 */ - rc = domKeyEvent.GetKeyCode (aKeyCode); + PRUint32 aKeyCode; /* PRUint32 */ + rc = domKeyEvent.GetKeyCode (&aKeyCode); if (rc !is XPCOM.NS_OK) error (rc); - int keyCode = translateKey (aKeyCode[0]); + int keyCode = super.translateKey (aKeyCode); /* * if keyCode is lastKeyCode then either a repeating key like Shift @@ -2910,25 +2940,25 @@ case DWT.SCROLL_LOCK: case DWT.COMMAND: { /* keypress events will not be received for these keys, so send KeyDowns for them now */ - int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */ - rc = domKeyEvent.GetAltKey (aAltKey); + PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */ + rc = domKeyEvent.GetAltKey (&aAltKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domKeyEvent.GetCtrlKey (aCtrlKey); + rc = domKeyEvent.GetCtrlKey (&aCtrlKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domKeyEvent.GetShiftKey (aShiftKey); + rc = domKeyEvent.GetShiftKey (&aShiftKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domKeyEvent.GetMetaKey (aMetaKey); + rc = domKeyEvent.GetMetaKey (&aMetaKey); if (rc !is XPCOM.NS_OK) error (rc); Event keyEvent = new Event (); keyEvent.widget = browser; keyEvent.type = DWT.KeyDown; keyEvent.keyCode = keyCode; - keyEvent.stateMask = (aAltKey[0] !is 0 ? DWT.ALT : 0) | (aCtrlKey[0] !is 0 ? DWT.CTRL : 0) | (aShiftKey[0] !is 0 ? DWT.SHIFT : 0) | (aMetaKey[0] !is 0 ? DWT.COMMAND : 0); + keyEvent.stateMask = (aAltKey !is 0 ? DWT.ALT : 0) | (aCtrlKey !is 0 ? DWT.CTRL : 0) | (aShiftKey !is 0 ? DWT.SHIFT : 0) | (aMetaKey !is 0 ? DWT.COMMAND : 0); keyEvent.stateMask &= ~keyCode; /* remove current keydown if it's a state key */ browser.notifyListeners (keyEvent.type, keyEvent); if (!keyEvent.doit) { - domEvent.PreventDefault (); + event.PreventDefault (); } break; } @@ -2939,28 +2969,28 @@ * does not have Meta as a modifier, or has Meta+Ctrl as a modifier, then then do nothing here * because its KeyDown event will be sent from the keypress listener. */ - int[] aMetaKey = new int[1]; /* PRBool */ - rc = domKeyEvent.GetMetaKey (aMetaKey); + PRBool aMetaKey; /* PRBool */ + rc = domKeyEvent.GetMetaKey (&aMetaKey); if (rc !is XPCOM.NS_OK) error (rc); - if (aMetaKey[0] !is 0) { - int[] aCtrlKey = new int[1]; /* PRBool */ - rc = domKeyEvent.GetCtrlKey (aCtrlKey); + if (aMetaKey !is 0) { + PRBool aCtrlKey; /* PRBool */ + rc = domKeyEvent.GetCtrlKey (&aCtrlKey); if (rc !is XPCOM.NS_OK) error (rc); - if (aCtrlKey[0] is 0) { - int[] aAltKey = new int[1], aShiftKey = new int[1]; /* PRBool */ - rc = domKeyEvent.GetAltKey (aAltKey); + if (aCtrlKey is 0) { + PRBool aAltKey, aShiftKey; /* PRBool */ + rc = domKeyEvent.GetAltKey (&aAltKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domKeyEvent.GetShiftKey (aShiftKey); + rc = domKeyEvent.GetShiftKey (&aShiftKey); if (rc !is XPCOM.NS_OK) error (rc); Event keyEvent = new Event (); keyEvent.widget = browser; keyEvent.type = DWT.KeyDown; keyEvent.keyCode = lastKeyCode; - keyEvent.stateMask = (aAltKey[0] !is 0 ? DWT.ALT : 0) | (aCtrlKey[0] !is 0? DWT.CTRL : 0) | (aShiftKey[0] !is 0? DWT.SHIFT : 0) | (aMetaKey[0] !is 0? DWT.COMMAND : 0); + keyEvent.stateMask = (aAltKey !is 0 ? DWT.ALT : 0) | (aCtrlKey !is 0? DWT.CTRL : 0) | (aShiftKey !is 0? DWT.SHIFT : 0) | (aMetaKey !is 0? DWT.COMMAND : 0); browser.notifyListeners (keyEvent.type, keyEvent); if (!keyEvent.doit) { - domEvent.PreventDefault (); + event.PreventDefault (); } } } @@ -2990,28 +3020,29 @@ case DWT.SCROLL_LOCK: return XPCOM.NS_OK; } - int /*long*/[] result = new int /*long*/[1]; - rc = domEvent.QueryInterface (nsIDOMKeyEvent.NS_IDOMKEYEVENT_IID, result); + //int /*long*/[] result = new int /*long*/[1]; + nsIDOMKeyEvent domKeyEvent; + rc = event.QueryInterface (&nsIDOMKeyEvent.IID, cast(void**)&domKeyEvent); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); - nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]); - result[0] = 0; + if (domKeyEvent is null) error (XPCOM.NS_NOINTERFACE); + //nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]); + //result[0] = 0; - int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */ - rc = domKeyEvent.GetAltKey (aAltKey); + PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */ + rc = domKeyEvent.GetAltKey (&aAltKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domKeyEvent.GetCtrlKey (aCtrlKey); + rc = domKeyEvent.GetCtrlKey (&aCtrlKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domKeyEvent.GetShiftKey (aShiftKey); + rc = domKeyEvent.GetShiftKey (&aShiftKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domKeyEvent.GetMetaKey (aMetaKey); + rc = domKeyEvent.GetMetaKey (&aMetaKey); if (rc !is XPCOM.NS_OK) error (rc); domKeyEvent.Release (); - int[] aCharCode = new int[1]; /* PRUint32 */ - rc = domKeyEvent.GetCharCode (aCharCode); + PRUint32 aCharCode; /* PRUint32 */ + rc = domKeyEvent.GetCharCode (&aCharCode); if (rc !is XPCOM.NS_OK) error (rc); - lastCharCode = aCharCode[0]; + lastCharCode = aCharCode; if (lastCharCode is 0) { switch (lastKeyCode) { case DWT.TAB: lastCharCode = DWT.TAB; break; @@ -3021,7 +3052,7 @@ case DWT.DEL: lastCharCode = DWT.DEL; break; } } - if (aCtrlKey[0] !is 0 && (0 <= lastCharCode && lastCharCode <= 0x7F)) { + if (aCtrlKey !is 0 && (0 <= lastCharCode && lastCharCode <= 0x7F)) { if ('a' <= lastCharCode && lastCharCode <= 'z') lastCharCode -= 'a' - 'A'; if (64 <= lastCharCode && lastCharCode <= 95) lastCharCode -= 64; } @@ -3030,27 +3061,28 @@ keyEvent.widget = browser; keyEvent.type = DWT.KeyDown; keyEvent.keyCode = lastKeyCode; - keyEvent.character = (char)lastCharCode; - keyEvent.stateMask = (aAltKey[0] !is 0 ? DWT.ALT : 0) | (aCtrlKey[0] !is 0 ? DWT.CTRL : 0) | (aShiftKey[0] !is 0 ? DWT.SHIFT : 0) | (aMetaKey[0] !is 0 ? DWT.COMMAND : 0); + keyEvent.character = cast(wchar)lastCharCode; + keyEvent.stateMask = (aAltKey !is 0 ? DWT.ALT : 0) | (aCtrlKey !is 0 ? DWT.CTRL : 0) | (aShiftKey !is 0 ? DWT.SHIFT : 0) | (aMetaKey !is 0 ? DWT.COMMAND : 0); browser.notifyListeners (keyEvent.type, keyEvent); if (!keyEvent.doit) { - domEvent.PreventDefault (); + event.PreventDefault (); } return XPCOM.NS_OK; } if (XPCOM.DOMEVENT_KEYUP.equals (typeString)) { - int /*long*/[] result = new int /*long*/[1]; - rc = domEvent.QueryInterface (nsIDOMKeyEvent.NS_IDOMKEYEVENT_IID, result); + //int /*long*/[] result = new int /*long*/[1]; + nsIDOMKeyEvent domKeyEvent; + rc = event.QueryInterface (&nsIDOMKeyEvent.IID, cast(void**)&domKeyEvent); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); - nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]); - result[0] = 0; + if (domKeyEvent is null) error (XPCOM.NS_NOINTERFACE); + //nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]); + //result[0] = 0; - int[] aKeyCode = new int[1]; /* PRUint32 */ - rc = domKeyEvent.GetKeyCode (aKeyCode); + PRUint32 aKeyCode; /* PRUint32 */ + rc = domKeyEvent.GetKeyCode (&aKeyCode); if (rc !is XPCOM.NS_OK) error (rc); - int keyCode = translateKey (aKeyCode[0]); + int keyCode = super.translateKey (aKeyCode); if (keyCode is 0) { /* indicates a key for which key events are not sent */ domKeyEvent.Release (); @@ -3062,14 +3094,14 @@ lastCharCode = 0; } - int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */ - rc = domKeyEvent.GetAltKey (aAltKey); + PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */ + rc = domKeyEvent.GetAltKey (&aAltKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domKeyEvent.GetCtrlKey (aCtrlKey); + rc = domKeyEvent.GetCtrlKey (&aCtrlKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domKeyEvent.GetShiftKey (aShiftKey); + rc = domKeyEvent.GetShiftKey (&aShiftKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domKeyEvent.GetMetaKey (aMetaKey); + rc = domKeyEvent.GetMetaKey (&aMetaKey); if (rc !is XPCOM.NS_OK) error (rc); domKeyEvent.Release (); @@ -3077,8 +3109,8 @@ keyEvent.widget = browser; keyEvent.type = DWT.KeyUp; keyEvent.keyCode = lastKeyCode; - keyEvent.character = (char)lastCharCode; - keyEvent.stateMask = (aAltKey[0] !is 0 ? DWT.ALT : 0) | (aCtrlKey[0] !is 0 ? DWT.CTRL : 0) | (aShiftKey[0] !is 0 ? DWT.SHIFT : 0) | (aMetaKey[0] !is 0 ? DWT.COMMAND : 0); + keyEvent.character = cast(wchar)lastCharCode; + keyEvent.stateMask = (aAltKey !is 0 ? DWT.ALT : 0) | (aCtrlKey !is 0 ? DWT.CTRL : 0) | (aShiftKey !is 0 ? DWT.SHIFT : 0) | (aMetaKey !is 0 ? DWT.COMMAND : 0); switch (lastKeyCode) { case DWT.SHIFT: case DWT.CONTROL: @@ -3089,7 +3121,7 @@ } browser.notifyListeners (keyEvent.type, keyEvent); if (!keyEvent.doit) { - domEvent.PreventDefault (); + event.PreventDefault (); } lastKeyCode = lastCharCode = 0; return XPCOM.NS_OK; @@ -3097,12 +3129,13 @@ /* mouse event */ - int /*long*/[] result = new int /*long*/[1]; - rc = domEvent.QueryInterface (nsIDOMMouseEvent.NS_IDOMMOUSEEVENT_IID, result); + //int /*long*/[] result = new int /*long*/[1]; + nsIDOMMouseEvent domMouseEvent; + rc = event.QueryInterface (&nsIDOMMouseEvent.IID, cast(void**)&domMouseEvent); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); - nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]); - result[0] = 0; + if (domMouseEvent is null) error (XPCOM.NS_NOINTERFACE); + //nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]); + //result[0] = 0; /* * MouseOver and MouseOut events are fired any time the mouse enters or exits @@ -3112,45 +3145,46 @@ * is within the Browser. */ if (XPCOM.DOMEVENT_MOUSEOVER.equals (typeString) || XPCOM.DOMEVENT_MOUSEOUT.equals (typeString)) { - rc = domMouseEvent.GetRelatedTarget (result); + nsIDOMEventTarget eventTarget; + rc = domMouseEvent.GetRelatedTarget (&eventTarget); if (rc !is XPCOM.NS_OK) error (rc); - if (result[0] !is 0) { + if (eventTarget !is null) { domMouseEvent.Release (); return XPCOM.NS_OK; } } - int[] aClientX = new int[1], aClientY = new int[1], aDetail = new int[1]; /* PRInt32 */ - rc = domMouseEvent.GetClientX (aClientX); + PRInt32 aClientX, aClientY, aDetail; /* PRInt32 */ + rc = domMouseEvent.GetClientX (&aClientX); if (rc !is XPCOM.NS_OK) error (rc); - rc = domMouseEvent.GetClientY (aClientY); + rc = domMouseEvent.GetClientY (&aClientY); if (rc !is XPCOM.NS_OK) error (rc); - rc = domMouseEvent.GetDetail (aDetail); + rc = domMouseEvent.GetDetail (&aDetail); if (rc !is XPCOM.NS_OK) error (rc); - short[] aButton = new short[1]; /* PRUint16 */ - rc = domMouseEvent.GetButton (aButton); + PRUint16 aButton; /* PRUint16 */ + rc = domMouseEvent.GetButton (&aButton); if (rc !is XPCOM.NS_OK) error (rc); - int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */ - rc = domMouseEvent.GetAltKey (aAltKey); + PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */ + rc = domMouseEvent.GetAltKey (&aAltKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domMouseEvent.GetCtrlKey (aCtrlKey); + rc = domMouseEvent.GetCtrlKey (&aCtrlKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domMouseEvent.GetShiftKey (aShiftKey); + rc = domMouseEvent.GetShiftKey (&aShiftKey); if (rc !is XPCOM.NS_OK) error (rc); - rc = domMouseEvent.GetMetaKey (aMetaKey); + rc = domMouseEvent.GetMetaKey (&aMetaKey); if (rc !is XPCOM.NS_OK) error (rc); domMouseEvent.Release (); Event mouseEvent = new Event (); mouseEvent.widget = browser; - mouseEvent.x = aClientX[0]; mouseEvent.y = aClientY[0]; - mouseEvent.stateMask = (aAltKey[0] !is 0 ? DWT.ALT : 0) | (aCtrlKey[0] !is 0 ? DWT.CTRL : 0) | (aShiftKey[0] !is 0 ? DWT.SHIFT : 0) | (aMetaKey[0] !is 0 ? DWT.COMMAND : 0); + mouseEvent.x = aClientX; mouseEvent.y = aClientY; + mouseEvent.stateMask = (aAltKey !is 0 ? DWT.ALT : 0) | (aCtrlKey !is 0 ? DWT.CTRL : 0) | (aShiftKey !is 0 ? DWT.SHIFT : 0) | (aMetaKey !is 0 ? DWT.COMMAND : 0); if (XPCOM.DOMEVENT_MOUSEDOWN.equals (typeString)) { mozDelegate.handleMouseDown (); mouseEvent.type = DWT.MouseDown; - mouseEvent.button = aButton[0] + 1; - mouseEvent.count = aDetail[0]; + mouseEvent.button = aButton + 1; + mouseEvent.count = aDetail; } else if (XPCOM.DOMEVENT_MOUSEUP.equals (typeString)) { /* * Bug on OSX. For some reason multiple mouseup events come from the DOM @@ -3159,8 +3193,8 @@ * button 3 mouseup events that do not have a count since mouse events * without a click count are not valid. */ - int button = aButton[0] + 1; - int count = aDetail[0]; + int button = aButton + 1; + int count = aDetail; if (count is 0 && button is 3) return XPCOM.NS_OK; mouseEvent.type = DWT.MouseUp; mouseEvent.button = button; @@ -3169,14 +3203,14 @@ mouseEvent.type = DWT.MouseMove; } else if (XPCOM.DOMEVENT_MOUSEWHEEL.equals (typeString)) { mouseEvent.type = DWT.MouseWheel; - mouseEvent.count = -aDetail[0]; + mouseEvent.count = -aDetail; } else if (XPCOM.DOMEVENT_MOUSEOVER.equals (typeString)) { mouseEvent.type = DWT.MouseEnter; } else if (XPCOM.DOMEVENT_MOUSEOUT.equals (typeString)) { mouseEvent.type = DWT.MouseExit; } else if (XPCOM.DOMEVENT_MOUSEDRAG.equals (typeString)) { mouseEvent.type = DWT.DragDetect; - mouseEvent.button = aButton[0] + 1; + mouseEvent.button = aButton + 1; switch (mouseEvent.button) { case 1: mouseEvent.stateMask |= DWT.BUTTON1; break; case 2: mouseEvent.stateMask |= DWT.BUTTON2; break; @@ -3187,14 +3221,14 @@ } browser.notifyListeners (mouseEvent.type, mouseEvent); - if (aDetail[0] is 2 && XPCOM.DOMEVENT_MOUSEDOWN.equals (typeString)) { + if (aDetail is 2 && XPCOM.DOMEVENT_MOUSEDOWN.equals (typeString)) { mouseEvent = new Event (); mouseEvent.widget = browser; - mouseEvent.x = aClientX[0]; mouseEvent.y = aClientY[0]; - mouseEvent.stateMask = (aAltKey[0] !is 0 ? DWT.ALT : 0) | (aCtrlKey[0] !is 0 ? DWT.CTRL : 0) | (aShiftKey[0] !is 0 ? DWT.SHIFT : 0) | (aMetaKey[0] !is 0 ? DWT.COMMAND : 0); + mouseEvent.x = aClientX; mouseEvent.y = aClientY; + mouseEvent.stateMask = (aAltKey !is 0 ? DWT.ALT : 0) | (aCtrlKey !is 0 ? DWT.CTRL : 0) | (aShiftKey !is 0 ? DWT.SHIFT : 0) | (aMetaKey !is 0 ? DWT.COMMAND : 0); mouseEvent.type = DWT.MouseDoubleClick; - mouseEvent.button = aButton[0] + 1; - mouseEvent.count = aDetail[0]; + mouseEvent.button = aButton + 1; + mouseEvent.count = aDetail; browser.notifyListeners (mouseEvent.type, mouseEvent); } return XPCOM.NS_OK; diff -r d47095c2d585 -r c317081df76f dwt/dwthelper/utils.d --- a/dwt/dwthelper/utils.d Thu Oct 23 21:32:32 2008 -0700 +++ b/dwt/dwthelper/utils.d Sat Oct 25 21:01:54 2008 -0700 @@ -1224,6 +1224,17 @@ return res; } +T[] arrayIndexRemove(T)(T[] arr, uint index) { + if (n is 0) + return arr[1..$]; + if (n > arr.length) + return arr; + if (n is arr.length-1) + return arr[0..n-1]; + // else + return arr[0..n] ~ arr[n+1..$]; +} + // int seqIndexOf( tango.util.collection.model.Seq.Seq!(Object) seq, Object v ){ // int res = -1; // int idx = 0;