comparison dwt/browser/Mozilla.d @ 339:c317081df76f

Mozilla module complete (first phase complete)
author John Reimer <terminal.node@gmail.com>
date Sat, 25 Oct 2008 21:01:54 -0700
parents 2e04c08f5e32
children 3f4a5c7d138f
comparison
equal deleted inserted replaced
338:d47095c2d585 339:c317081df76f
1661 unhookedDOMWindows = null; 1661 unhookedDOMWindows = null;
1662 1662
1663 mozDelegate.onDispose (embedHandle); 1663 mozDelegate.onDispose (embedHandle);
1664 mozDelegate = null; 1664 mozDelegate = null;
1665 1665
1666 embedHandle = 0; 1666 embedHandle = null;
1667 BrowserCount--; 1667 BrowserCount--;
1668 } 1668 }
1669 1669
1670 void Activate () { 1670 void Activate () {
1671 //int /*long*/[] result = new int /*long*/[1]; 1671 //int /*long*/[] result = new int /*long*/[1];
1860 } 1860 }
1861 1861
1862 public bool setUrl (String url) { 1862 public bool setUrl (String url) {
1863 awaitingNavigate = false; 1863 awaitingNavigate = false;
1864 1864
1865 int /*long*/[] result = new int /*long*/[1]; 1865 //int /*long*/[] result = new int /*long*/[1];
1866 int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result); 1866 nsIWebNavigation webNavigation;
1867 if (rc !is XPCOM.NS_OK) error (rc); 1867 int rc = webBrowser.QueryInterface (nsIWebNavigation.IID, cast(void**)&webNavigation);
1868 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 1868 if (rc !is XPCOM.NS_OK) error (rc);
1869 1869 if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
1870 nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]); 1870
1871 char[] uri = new char[url.length () + 1]; 1871 //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
1872 url.getChars (0, url.length (), uri, 0); 1872 //char[] uri = new char[url.length () + 1];
1873 rc = webNavigation.LoadURI (uri, nsIWebNavigation.LOAD_FLAGS_NONE, 0, 0, 0); 1873 //url.getChars (0, url.length (), uri, 0);
1874 rc = webNavigation.LoadURI (Utf.toString16(url).toString16z, nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null);
1874 webNavigation.Release (); 1875 webNavigation.Release ();
1875 return rc is XPCOM.NS_OK; 1876 return rc is XPCOM.NS_OK;
1876 } 1877 }
1877 1878
1878 public void stop () { 1879 public void stop () {
1879 if (awaitingNavigate) return; 1880 if (awaitingNavigate) return;
1880 1881
1881 int /*long*/[] result = new int /*long*/[1]; 1882 nsIWebNavigation webNavigation;
1882 int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result); 1883 //int /*long*/[] result = new int /*long*/[1];
1883 if (rc !is XPCOM.NS_OK) error (rc); 1884 int rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation);
1884 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 1885 if (rc !is XPCOM.NS_OK) error (rc);
1886 if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
1885 1887
1886 nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]); 1888 //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
1887 rc = webNavigation.Stop (nsIWebNavigation.STOP_ALL); 1889 rc = webNavigation.Stop (nsIWebNavigation.STOP_ALL);
1888 if (rc !is XPCOM.NS_OK) error (rc); 1890 if (rc !is XPCOM.NS_OK) error (rc);
1889 webNavigation.Release (); 1891 webNavigation.Release ();
1890 } 1892 }
1891 1893
1892 void hookDOMListeners (nsIDOMEventTarget target, bool isTop) { 1894 void hookDOMListeners (nsIDOMEventTarget target, bool isTop) {
1893 nsEmbedString string = new nsEmbedString (XPCOM.DOMEVENT_FOCUS); 1895 scope auto string = new nsEmbedString (XPCOM.DOMEVENT_FOCUS);
1894 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1896 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1895 string.dispose (); 1897 //string.dispose ();
1896 string = new nsEmbedString (XPCOM.DOMEVENT_UNLOAD); 1898 string = new nsEmbedString (XPCOM.DOMEVENT_UNLOAD);
1897 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1899 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1898 string.dispose (); 1900 //string.dispose ();
1899 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDOWN); 1901 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDOWN);
1900 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1902 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1901 string.dispose (); 1903 //string.dispose ();
1902 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEUP); 1904 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEUP);
1903 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1905 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1904 string.dispose (); 1906 //string.dispose ();
1905 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEMOVE); 1907 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEMOVE);
1906 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1908 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1907 string.dispose (); 1909 //string.dispose ();
1908 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEWHEEL); 1910 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEWHEEL);
1909 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1911 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1910 string.dispose (); 1912 //string.dispose ();
1911 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDRAG); 1913 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDRAG);
1912 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1914 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1913 string.dispose (); 1915 //string.dispose ();
1914 1916
1915 /* 1917 /*
1916 * Only hook mouseover and mouseout if the target is a top-level frame, so that mouse moves 1918 * Only hook mouseover and mouseout if the target is a top-level frame, so that mouse moves
1917 * between frames will not generate events. 1919 * between frames will not generate events.
1918 */ 1920 */
1919 if (isTop && mozDelegate.hookEnterExit ()) { 1921 if (isTop && mozDelegate.hookEnterExit ()) {
1920 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOVER); 1922 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOVER);
1921 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1923 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1922 string.dispose (); 1924 //string.dispose ();
1923 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOUT); 1925 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOUT);
1924 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1926 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1925 string.dispose (); 1927 //string.dispose ();
1926 } 1928 }
1927 1929
1928 string = new nsEmbedString (XPCOM.DOMEVENT_KEYDOWN); 1930 string = new nsEmbedString (XPCOM.DOMEVENT_KEYDOWN);
1929 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1931 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1930 string.dispose (); 1932 //string.dispose ();
1931 string = new nsEmbedString (XPCOM.DOMEVENT_KEYPRESS); 1933 string = new nsEmbedString (XPCOM.DOMEVENT_KEYPRESS);
1932 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1934 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1933 string.dispose (); 1935 //string.dispose ();
1934 string = new nsEmbedString (XPCOM.DOMEVENT_KEYUP); 1936 string = new nsEmbedString (XPCOM.DOMEVENT_KEYUP);
1935 target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1937 target.AddEventListener (cast(nsAString*)string, domEventListener, 0);
1936 string.dispose (); 1938 //string.dispose ();
1937 } 1939 }
1938 1940
1939 void unhookDOMListeners () { 1941 void unhookDOMListeners () {
1940 int /*long*/[] result = new int /*long*/[1]; 1942 //int /*long*/[] result = new int /*long*/[1];
1941 int rc = webBrowser.GetContentDOMWindow (result); 1943 nsIDOMWindow window;
1942 if (rc !is XPCOM.NS_OK) error (rc); 1944 int rc = webBrowser.GetContentDOMWindow (&window);
1943 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 1945 if (rc !is XPCOM.NS_OK) error (rc);
1944 1946 if (window is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
1945 nsIDOMWindow window = new nsIDOMWindow (result[0]); 1947
1946 result[0] = 0; 1948 //nsIDOMWindow window = new nsIDOMWindow (result[0]);
1947 rc = window.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result); 1949 //result[0] = 0;
1948 if (rc !is XPCOM.NS_OK) error (rc); 1950 nsIDOMEventTarget target;
1949 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 1951 rc = window.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target);
1950 1952 if (rc !is XPCOM.NS_OK) error (rc);
1951 nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); 1953 if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
1952 result[0] = 0; 1954
1955 //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
1956 //result[0] = 0;
1953 unhookDOMListeners (target); 1957 unhookDOMListeners (target);
1954 target.Release (); 1958 target.Release ();
1955 1959
1956 /* Listeners must be unhooked in pages contained in frames */ 1960 /* Listeners must be unhooked in pages contained in frames */
1957 rc = window.GetFrames (result); 1961 nsIDOMWindowCollection frames;
1958 if (rc !is XPCOM.NS_OK) error (rc); 1962 rc = window.GetFrames (&frames);
1959 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 1963 if (rc !is XPCOM.NS_OK) error (rc);
1960 nsIDOMWindowCollection frames = new nsIDOMWindowCollection (result[0]); 1964 if (frames is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
1961 result[0] = 0; 1965 //nsIDOMWindowCollection frames = new nsIDOMWindowCollection (result[0]);
1962 int[] frameCount = new int[1]; 1966 //result[0] = 0;
1963 rc = frames.GetLength (frameCount); /* PRUint32 */ 1967 PRUint32 count;
1964 if (rc !is XPCOM.NS_OK) error (rc); 1968 rc = frames.GetLength (&count); /* PRUint32 */
1965 int count = frameCount[0]; 1969 if (rc !is XPCOM.NS_OK) error (rc);
1970 //int count = frameCount[0];
1966 1971
1967 if (count > 0) { 1972 if (count > 0) {
1973 nsIDOMWindow frame;
1968 for (int i = 0; i < count; i++) { 1974 for (int i = 0; i < count; i++) {
1969 rc = frames.Item (i, result); 1975 rc = frames.Item (i, &frame);
1970 if (rc !is XPCOM.NS_OK) error (rc); 1976 if (rc !is XPCOM.NS_OK) error (rc);
1971 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 1977 if (frame is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
1972 1978
1973 nsIDOMWindow frame = new nsIDOMWindow (result[0]); 1979 //nsIDOMWindow frame = new nsIDOMWindow (result[0]);
1974 result[0] = 0; 1980 //result[0] = 0;
1975 rc = frame.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result); 1981 rc = frame.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target);
1976 if (rc !is XPCOM.NS_OK) error (rc); 1982 if (rc !is XPCOM.NS_OK) error (rc);
1977 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 1983 if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
1978 1984
1979 target = new nsIDOMEventTarget (result[0]); 1985 //target = new nsIDOMEventTarget (result[0]);
1980 result[0] = 0; 1986 //result[0] = 0;
1981 unhookDOMListeners (target); 1987 unhookDOMListeners (target);
1982 target.Release (); 1988 target.Release ();
1983 frame.Release (); 1989 frame.Release ();
1984 } 1990 }
1985 } 1991 }
1986 frames.Release (); 1992 frames.Release ();
1987 window.Release (); 1993 window.Release ();
1988 } 1994 }
1989 1995
1990 void unhookDOMListeners (nsIDOMEventTarget target) { 1996 void unhookDOMListeners (nsIDOMEventTarget target) {
1991 nsEmbedString string = new nsEmbedString (XPCOM.DOMEVENT_FOCUS); 1997 scope auto string = new nsEmbedString (XPCOM.DOMEVENT_FOCUS);
1992 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 1998 target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0);
1993 string.dispose (); 1999 //string.dispose ();
1994 string = new nsEmbedString (XPCOM.DOMEVENT_UNLOAD); 2000 string = new nsEmbedString (XPCOM.DOMEVENT_UNLOAD);
1995 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 2001 target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0);
1996 string.dispose (); 2002 //string.dispose ();
1997 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDOWN); 2003 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDOWN);
1998 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 2004 target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0);
1999 string.dispose (); 2005 //string.dispose ();
2000 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEUP); 2006 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEUP);
2001 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 2007 target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0);
2002 string.dispose (); 2008 //string.dispose ();
2003 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEMOVE); 2009 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEMOVE);
2004 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 2010 target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0);
2005 string.dispose (); 2011 //string.dispose ();
2006 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEWHEEL); 2012 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEWHEEL);
2007 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 2013 target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0);
2008 string.dispose (); 2014 //string.dispose ();
2009 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDRAG); 2015 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDRAG);
2010 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 2016 target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0);
2011 string.dispose (); 2017 //string.dispose ();
2012 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOVER); 2018 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOVER);
2013 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 2019 target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0);
2014 string.dispose (); 2020 //string.dispose ();
2015 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOUT); 2021 string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOUT);
2016 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 2022 target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0);
2017 string.dispose (); 2023 //string.dispose ();
2018 string = new nsEmbedString (XPCOM.DOMEVENT_KEYDOWN); 2024 string = new nsEmbedString (XPCOM.DOMEVENT_KEYDOWN);
2019 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 2025 target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0);
2020 string.dispose (); 2026 //string.dispose ();
2021 string = new nsEmbedString (XPCOM.DOMEVENT_KEYPRESS); 2027 string = new nsEmbedString (XPCOM.DOMEVENT_KEYPRESS);
2022 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 2028 target.RemoveEventListener (cast(nsAString*)string, domEventListener, 0);
2023 string.dispose (); 2029 //string.dispose ();
2024 string = new nsEmbedString (XPCOM.DOMEVENT_KEYUP); 2030 string = new nsEmbedString (XPCOM.DOMEVENT_KEYUP);
2025 target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0); 2031 target.RemoveEventListener (cast(nsAString*)string, domEventListener., 0);
2026 string.dispose (); 2032 //string.dispose ();
2027 } 2033 }
2028 2034
2029 /* nsISupports */ 2035 /* nsISupports */
2030 2036
2031 int QueryInterface (nsID* riid, void** ppvObject) { 2037 nsresult QueryInterface (nsID* riid, void** ppvObject) {
2032 if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE; 2038 if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE;
2033 2039
2034 if (*riid == nsISupports.IID) { 2040 if (*riid == nsISupports.IID) {
2035 *ppvObject = cast(void*)cast(nsISupports)this; 2041 *ppvObject = cast(void*)cast(nsISupports)this;
2036 AddRef (); 2042 AddRef ();
2088 } 2094 }
2089 *ppvObject = null; 2095 *ppvObject = null;
2090 return XPCOM.NS_ERROR_NO_INTERFACE; 2096 return XPCOM.NS_ERROR_NO_INTERFACE;
2091 } 2097 }
2092 2098
2093 int AddRef () { 2099 nsrefcnt AddRef () {
2094 refCount++; 2100 refCount++;
2095 return refCount; 2101 return refCount;
2096 } 2102 }
2097 2103
2098 int Release () { 2104 nsrefcnt Release () {
2099 refCount--; 2105 refCount--;
2100 if (refCount is 0) return 0; 2106 if (refCount is 0) return 0;
2101 return refCount; 2107 return refCount;
2102 } 2108 }
2103 2109
2104 /* nsIWeakReference */ 2110 /* nsIWeakReference */
2105 2111
2106 int QueryReferent (nsID* riid, void** ppvObject) { 2112 nsresult QueryReferent (nsID* riid, void** ppvObject) {
2107 return QueryInterface (riid, ppvObject); 2113 return QueryInterface (riid, ppvObject);
2108 } 2114 }
2109 2115
2110 /* nsIInterfaceRequestor */ 2116 /* nsIInterfaceRequestor */
2111 2117
2112 int GetInterface ( nsID* riid, void** ppvObject) { 2118 nsresult GetInterface ( nsID* riid, void** ppvObject) {
2113 if (riid is 0 || ppvObject is 0) return XPCOM.NS_ERROR_NO_INTERFACE; 2119 if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE;
2114 nsID guid = new nsID (); 2120 //nsID guid = new nsID ();
2115 XPCOM.memmove (guid, riid, nsID.sizeof); 2121 //XPCOM.memmove (guid, riid, nsID.sizeof);
2116 if (guid.Equals (nsIDOMWindow.NS_IDOMWINDOW_IID)) { 2122 if ((*riid).Equals (nsIDOMWindow.IID)) {
2117 int /*long*/[] aContentDOMWindow = new int /*long*/[1]; 2123 nsIDOMWindow aContentDOMWindow;
2118 int rc = webBrowser.GetContentDOMWindow (aContentDOMWindow); 2124 //int /*long*/[] aContentDOMWindow = new int /*long*/[1];
2125 int rc = webBrowser.GetContentDOMWindow (&aContentDOMWindow);
2119 if (rc !is XPCOM.NS_OK) error (rc); 2126 if (rc !is XPCOM.NS_OK) error (rc);
2120 if (aContentDOMWindow[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 2127 if (aContentDOMWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
2121 XPCOM.memmove (ppvObject, aContentDOMWindow, C.PTR_SIZEOF); 2128 *ppvObject = cast(void*)aContentDOMWindow;
2129 //XPCOM.memmove (ppvObject, aContentDOMWindow, C.PTR_SIZEOF);
2122 return rc; 2130 return rc;
2123 } 2131 }
2124 return QueryInterface (riid, ppvObject); 2132 return QueryInterface (riid, ppvObject);
2125 } 2133 }
2126 2134
2127 int GetWeakReference (int /*long*/ ppvObject) { 2135 nsresult GetWeakReference (void** ppvObject) {
2128 XPCOM.memmove (ppvObject, new int /*long*/[] {weakReference.getAddress ()}, C.PTR_SIZEOF); 2136 *ppvObject = cast(void*)weakReference;
2137 //XPCOM.memmove (ppvObject, new int /*long*/[] {weakReference.getAddress ()}, C.PTR_SIZEOF);
2129 AddRef (); 2138 AddRef ();
2130 return XPCOM.NS_OK; 2139 return XPCOM.NS_OK;
2131 } 2140 }
2132 2141
2133 /* nsIWebProgressListener */ 2142 /* nsIWebProgressListener */
2134 2143
2135 int OnStateChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStateFlags, int aStatus) { 2144 nsresult OnStateChange (nsIWebProgress aWebProgress, nsIRequest aRequest, PRUint32 aStateFlags, nsresult aStatus) {
2136 if ((aStateFlags & nsIWebProgressListener.STATE_IS_DOCUMENT) is 0) return XPCOM.NS_OK; 2145 if ((aStateFlags & nsIWebProgressListener.STATE_IS_DOCUMENT) is 0) return XPCOM.NS_OK;
2137 if ((aStateFlags & nsIWebProgressListener.STATE_START) !is 0) { 2146 if ((aStateFlags & nsIWebProgressListener.STATE_START) !is 0) {
2138 if (request is 0) request = aRequest; 2147 if (request is null) request = aRequest;
2139 2148
2140 if (!awaitingNavigate) { 2149 if (!awaitingNavigate) {
2141 /* 2150 /*
2142 * Add the page's nsIDOMWindow to the collection of windows that will 2151 * Add the page's nsIDOMWindow to the collection of windows that will
2143 * have DOM listeners added to them later on in the page loading 2152 * have DOM listeners added to them later on in the page loading
2144 * process. These listeners cannot be added yet because the 2153 * process. These listeners cannot be added yet because the
2145 * nsIDOMWindow is not ready to take them at this stage. 2154 * nsIDOMWindow is not ready to take them at this stage.
2146 */ 2155 */
2147 int /*long*/[] result = new int /*long*/[1]; 2156 //int /*long*/[] result = new int /*long*/[1];
2148 nsIWebProgress progress = new nsIWebProgress (aWebProgress); 2157 nsIDOMWindow window;
2149 int rc = progress.GetDOMWindow (result); 2158 //nsIWebProgress progress = new nsIWebProgress (aWebProgress);
2159 int rc = aWebProgress.GetDOMWindow (&window);
2150 if (rc !is XPCOM.NS_OK) error (rc); 2160 if (rc !is XPCOM.NS_OK) error (rc);
2151 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 2161 if (window is null) error (XPCOM.NS_NOINTERFACE);
2152 unhookedDOMWindows.addElement (new LONG (result[0])); 2162 unhookedDOMWindows ~= window;
2153 } 2163 }
2154 } else if ((aStateFlags & nsIWebProgressListener.STATE_REDIRECTING) !is 0) { 2164 } else if ((aStateFlags & nsIWebProgressListener.STATE_REDIRECTING) !is 0) {
2155 if (request is aRequest) request = 0; 2165 if (request is aRequest) request = null;
2156 } else if ((aStateFlags & nsIWebProgressListener.STATE_STOP) !is 0) { 2166 } else if ((aStateFlags & nsIWebProgressListener.STATE_STOP) !is 0) {
2157 /* 2167 /*
2158 * If this page's nsIDOMWindow handle is still in unhookedDOMWindows then 2168 * If this page's nsIDOMWindow handle is still in unhookedDOMWindows then
2159 * add its DOM listeners now. It's possible for this to happen since 2169 * add its DOM listeners now. It's possible for this to happen since
2160 * there is no guarantee that a STATE_TRANSFERRING state change will be 2170 * there is no guarantee that a STATE_TRANSFERRING state change will be
2161 * received for every window in a page, which is when these listeners 2171 * received for every window in a page, which is when these listeners
2162 * are typically added. 2172 * are typically added.
2163 */ 2173 */
2164 int /*long*/[] result = new int /*long*/[1]; 2174 //int /*long*/[] result = new int /*long*/[1];
2165 nsIWebProgress progress = new nsIWebProgress (aWebProgress); 2175 //nsIWebProgress progress = new nsIWebProgress (aWebProgress);
2166 int rc = progress.GetDOMWindow (result); 2176 nsIDOMWindow domWindow;
2177 int rc = aWebProgress.GetDOMWindow (&domWindow);
2167 if (rc !is XPCOM.NS_OK) error (rc); 2178 if (rc !is XPCOM.NS_OK) error (rc);
2168 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 2179 if (domWindow is null) error (XPCOM.NS_NOINTERFACE);
2169 nsIDOMWindow domWindow = new nsIDOMWindow (result[0]); 2180 //nsIDOMWindow domWindow = new nsIDOMWindow (result[0]);
2170 2181
2171 LONG ptrObject = new LONG (result[0]); 2182 //LONG ptrObject = new LONG (result[0]);
2172 result[0] = 0; 2183 //result[0] = 0;
2173 int index = unhookedDOMWindows.indexOf (ptrObject); 2184 int index = unhookedDOMWindows.arrayIndexOf (domWindow);
2174 if (index !is -1) { 2185 if (index !is -1) {
2175 rc = webBrowser.GetContentDOMWindow (result); 2186 nsIDOMWindow contentWindow;
2187 rc = webBrowser.GetContentDOMWindow (&contentWindow);
2176 if (rc !is XPCOM.NS_OK) error (rc); 2188 if (rc !is XPCOM.NS_OK) error (rc);
2177 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 2189 if (contentWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
2178 bool isTop = result[0] is domWindow.getAddress (); 2190 bool isTop = contentWindow is domWindow;
2179 new nsISupports (result[0]).Release (); 2191 contentWindow.Release ();
2180 result[0] = 0; 2192 //result[0] = 0;
2181 2193 nsIDOMEventTarget target;
2182 rc = domWindow.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result); 2194 rc = domWindow.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target);
2183 if (rc !is XPCOM.NS_OK) error (rc); 2195 if (rc !is XPCOM.NS_OK) error (rc);
2184 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 2196 if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
2185 2197
2186 nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); 2198 //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
2187 result[0] = 0; 2199 //result[0] = 0;
2188 hookDOMListeners (target, isTop); 2200 hookDOMListeners (target, isTop);
2189 target.Release (); 2201 target.Release ();
2190 2202
2191 /* 2203 /*
2192 * Remove and unreference the nsIDOMWindow from the collection of windows 2204 * Remove and unreference the nsIDOMWindow from the collection of windows
2193 * that are waiting to have DOM listeners hooked on them. 2205 * that are waiting to have DOM listeners hooked on them.
2194 */ 2206 */
2195 unhookedDOMWindows.remove (ptrObject); 2207 unhookedDOMWindows = unhookedDOMWindows.arrayIndexRemove (index);
2196 new nsISupports (ptrObject.value).Release (); 2208 domWindow.Release ();
2197 } 2209 }
2198 domWindow.Release (); 2210 domWindow.Release ();
2199 2211
2200 /* 2212 /*
2201 * Feature in Mozilla. When a request is redirected (STATE_REDIRECTING), 2213 * Feature in Mozilla. When a request is redirected (STATE_REDIRECTING),
2227 } else if ((aStateFlags & nsIWebProgressListener.STATE_TRANSFERRING) !is 0) { 2239 } else if ((aStateFlags & nsIWebProgressListener.STATE_TRANSFERRING) !is 0) {
2228 /* 2240 /*
2229 * Hook DOM listeners to the page's nsIDOMWindow here because this is 2241 * Hook DOM listeners to the page's nsIDOMWindow here because this is
2230 * the earliest opportunity to do so. 2242 * the earliest opportunity to do so.
2231 */ 2243 */
2232 int /*long*/[] result = new int /*long*/[1]; 2244 //int /*long*/[] result = new int /*long*/[1];
2233 nsIWebProgress progress = new nsIWebProgress (aWebProgress); 2245 // nsIWebProgress progress = new nsIWebProgress (aWebProgress);
2234 int rc = progress.GetDOMWindow (result); 2246 nsIDOMWindow domWindow;
2247 int rc = progress.GetDOMWindow (&domWindow);
2235 if (rc !is XPCOM.NS_OK) error (rc); 2248 if (rc !is XPCOM.NS_OK) error (rc);
2236 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 2249 if (domWindow is null) error (XPCOM.NS_NOINTERFACE);
2237 nsIDOMWindow domWindow = new nsIDOMWindow (result[0]); 2250 //nsIDOMWindow domWindow = new nsIDOMWindow (result[0]);
2238 2251
2239 LONG ptrObject = new LONG (result[0]); 2252 //LONG ptrObject = new LONG (result[0]);
2240 result[0] = 0; 2253 //result[0] = 0;
2241 int index = unhookedDOMWindows.indexOf (ptrObject); 2254 int index = unhookedDOMWindows.arrayIndexOf (domWindow);
2242 if (index !is -1) { 2255 if (index !is -1) {
2243 rc = webBrowser.GetContentDOMWindow (result); 2256 nsIDOMWindow contentWindow
2257 rc = webBrowser.GetContentDOMWindow (&contentWindow);
2244 if (rc !is XPCOM.NS_OK) error (rc); 2258 if (rc !is XPCOM.NS_OK) error (rc);
2245 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 2259 if (contentWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
2246 bool isTop = result[0] is domWindow.getAddress (); 2260 bool isTop = contentWindow is domWindow;
2247 new nsISupports (result[0]).Release (); 2261 contentWindow.Release ();
2248 result[0] = 0; 2262 //result[0] = 0;
2249 2263 nsIDOMEventTarget target;
2250 rc = domWindow.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result); 2264 rc = domWindow.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target);
2251 if (rc !is XPCOM.NS_OK) error (rc); 2265 if (rc !is XPCOM.NS_OK) error (rc);
2252 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 2266 if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
2253 2267
2254 nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); 2268 //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
2255 result[0] = 0; 2269 //result[0] = 0;
2256 hookDOMListeners (target, isTop); 2270 hookDOMListeners (target, isTop);
2257 target.Release (); 2271 target.Release ();
2258 2272
2259 /* 2273 /*
2260 * Remove and unreference the nsIDOMWindow from the collection of windows 2274 * Remove and unreference the nsIDOMWindow from the collection of windows
2261 * that are waiting to have DOM listeners hooked on them. 2275 * that are waiting to have DOM listeners hooked on them.
2262 */ 2276 */
2263 unhookedDOMWindows.remove (ptrObject); 2277 unhookedDOMWindows = unhookedDOMWindows.arrayIndexRemove (domWindow);
2264 new nsISupports (ptrObject.value).Release (); 2278 domWIndow.Release ();
2265 } 2279 }
2266 domWindow.Release (); 2280 domWindow.Release ();
2267 } 2281 }
2268 return XPCOM.NS_OK; 2282 return XPCOM.NS_OK;
2269 } 2283 }
2270 2284
2271 int OnProgressChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aCurSelfProgress, int aMaxSelfProgress, int aCurTotalProgress, int aMaxTotalProgress) { 2285 nsresult OnProgressChange (nsIWebProgress aWebProgress, nsIRequest aRequest, PRint32 aCurSelfProgress, PRInt32 aMaxSelfProgress, PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress) {
2272 if (awaitingNavigate || progressListeners.length is 0) return XPCOM.NS_OK; 2286 if (awaitingNavigate || super.progressListeners.length is 0) return XPCOM.NS_OK;
2273 ProgressEvent event = new ProgressEvent (browser); 2287 ProgressEvent event = new ProgressEvent (browser);
2274 event.display = browser.getDisplay (); 2288 event.display = browser.getDisplay ();
2275 event.widget = browser; 2289 event.widget = browser;
2276 event.current = aCurTotalProgress; 2290 event.current = aCurTotalProgress;
2277 event.total = aMaxTotalProgress; 2291 event.total = aMaxTotalProgress;
2278 for (int i = 0; i < progressListeners.length; i++) { 2292 for (int i = 0; i < super.progressListeners.length; i++) {
2279 progressListeners[i].changed (event); 2293 super.progressListeners[i].changed (event);
2280 } 2294 }
2281 return XPCOM.NS_OK; 2295 return XPCOM.NS_OK;
2282 } 2296 }
2283 2297
2284 int OnLocationChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int /*long*/ aLocation) { 2298 nsresult OnLocationChange (nsIWebProgress aWebProgress, nsIRequest aRequest, nsIURI aLocation) {
2285 /* 2299 /*
2286 * Feature in Mozilla. When a page is loaded via setText before a previous 2300 * Feature in Mozilla. When a page is loaded via setText before a previous
2287 * setText page load has completed, the expected OnStateChange STATE_STOP for the 2301 * setText page load has completed, the expected OnStateChange STATE_STOP for the
2288 * original setText never arrives because it gets replaced by the OnStateChange 2302 * original setText never arrives because it gets replaced by the OnStateChange
2289 * STATE_STOP for the new request. This results in the request field never being 2303 * STATE_STOP for the new request. This results in the request field never being
2290 * cleared because the original request's OnStateChange STATE_STOP is still expected 2304 * cleared because the original request's OnStateChange STATE_STOP is still expected
2291 * (but never arrives). To handle this case, the request field is updated to the new 2305 * (but never arrives). To handle this case, the request field is updated to the new
2292 * overriding request since its OnStateChange STATE_STOP will be received next. 2306 * overriding request since its OnStateChange STATE_STOP will be received next.
2293 */ 2307 */
2294 if (request !is 0 && request !is aRequest) request = aRequest; 2308 if (request !is null && request !is aRequest) request = aRequest;
2295 2309
2296 if (awaitingNavigate || locationListeners.length is 0) return XPCOM.NS_OK; 2310 if (awaitingNavigate || locationListeners.length is 0) return XPCOM.NS_OK;
2297 2311
2298 nsIWebProgress webProgress = new nsIWebProgress (aWebProgress); 2312 //nsIWebProgress webProgress = new nsIWebProgress (aWebProgress);
2299 int /*long*/[] aDOMWindow = new int /*long*/[1];
2300 int rc = webProgress.GetDOMWindow (aDOMWindow);
2301 if (rc !is XPCOM.NS_OK) error (rc);
2302 if (aDOMWindow[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
2303 2313
2304 nsIDOMWindow domWindow = new nsIDOMWindow (aDOMWindow[0]); 2314 nsIDOMWindow domWindow;
2305 int /*long*/[] aTop = new int /*long*/[1]; 2315 //int /*long*/[] aDOMWindow = new int /*long*/[1];
2306 rc = domWindow.GetTop (aTop); 2316 int rc = webProgress.GetDOMWindow (&domWindow);
2307 if (rc !is XPCOM.NS_OK) error (rc); 2317 if (rc !is XPCOM.NS_OK) error (rc);
2308 if (aTop[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 2318 if (domWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
2319
2320 //nsIDOMWindow domWindow = new nsIDOMWindow (aDOMWindow[0]);
2321 //int /*long*/[] aTop = new int /*long*/[1];
2322 nsIDOMWindow topWindow;
2323 rc = domWindow.GetTop (&topWindow);
2324 if (rc !is XPCOM.NS_OK) error (rc);
2325 if (topWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
2309 domWindow.Release (); 2326 domWindow.Release ();
2310 2327
2311 nsIDOMWindow topWindow = new nsIDOMWindow (aTop[0]); 2328 //nsIDOMWindow topWindow = new nsIDOMWindow (aTop[0]);
2312 topWindow.Release (); 2329 topWindow.Release ();
2313 2330
2314 nsIURI location = new nsIURI (aLocation); 2331 //nsIURI location = new nsIURI (aLocation);
2315 int /*long*/ aSpec = XPCOM.nsEmbedCString_new (); 2332 scope auto aSpec = new nsEmbedCString;
2316 location.GetSpec (aSpec); 2333 aLocation.GetSpec (cast(nsACString*)aSpec);
2317 int length = XPCOM.nsEmbedCString_Length (aSpec); 2334 //int length = XPCOM.nsEmbedCString_Length (aSpec);
2318 int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec); 2335 //int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
2319 byte[] dest = new byte[length]; 2336 //byte[] dest = new byte[length];
2320 XPCOM.memmove (dest, buffer, length); 2337 //XPCOM.memmove (dest, buffer, length);
2321 XPCOM.nsEmbedCString_delete (aSpec); 2338 //XPCOM.nsEmbedCString_delete (aSpec);
2322 String url = new String (dest); 2339 String url = aSpec.toString;
2323 2340
2324 /* 2341 /*
2325 * As of Mozilla 1.8, the first time that a page is displayed, regardless of 2342 * As of Mozilla 1.8, the first time that a page is displayed, regardless of
2326 * whether it's via Browser.setURL() or Browser.setText(), the GRE navigates 2343 * whether it's via Browser.setURL() or Browser.setText(), the GRE navigates
2327 * to about:blank and fires the corresponding navigation events. Do not send 2344 * to about:blank and fires the corresponding navigation events. Do not send
2328 * this event on to the user since it is not expected. 2345 * this event on to the user since it is not expected.
2329 */ 2346 */
2330 if (!IsPre_1_8 && aRequest is 0 && url.startsWith (ABOUT_BLANK)) return XPCOM.NS_OK; 2347 if (!IsPre_1_8 && aRequest is null && url.startsWith (ABOUT_BLANK)) return XPCOM.NS_OK;
2331 2348
2332 LocationEvent event = new LocationEvent (browser); 2349 LocationEvent event = new LocationEvent (browser);
2333 event.display = browser.getDisplay (); 2350 event.display = browser.getDisplay ();
2334 event.widget = browser; 2351 event.widget = browser;
2335 event.location = url; 2352 event.location = url;
2336 /* 2353 /*
2337 * If the URI indicates that the page is being rendered from memory 2354 * If the URI indicates that the page is being rendered from memory
2338 * (via setText()) then set it to about:blank to be consistent with IE. 2355 * (via setText()) then set it to about:blank to be consistent with IE.
2339 */ 2356 */
2340 if (event.location.equals (URI_FROMMEMORY)) event.location = ABOUT_BLANK; 2357 if (event.location.equals (URI_FROMMEMORY)) event.location = ABOUT_BLANK;
2341 event.top = aTop[0] is aDOMWindow[0]; 2358 event.top = topWindow is domWindow;
2342 for (int i = 0; i < locationListeners.length; i++) { 2359 for (int i = 0; i < locationListeners.length; i++) {
2343 locationListeners[i].changed (event); 2360 locationListeners[i].changed (event);
2344 } 2361 }
2345 return XPCOM.NS_OK; 2362 return XPCOM.NS_OK;
2346 } 2363 }
2347 2364
2348 int OnStatusChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStatus, int /*long*/ aMessage) { 2365 int OnStatusChange (nsIWebProgress aWebProgress, nsIRequest aRequest, nsresult aStatus, PRUnichar* aMessage) {
2349 if (awaitingNavigate || statusTextListeners.length is 0) return XPCOM.NS_OK; 2366 if (awaitingNavigate || statusTextListeners.length is 0) return XPCOM.NS_OK;
2350 StatusTextEvent event = new StatusTextEvent (browser); 2367 StatusTextEvent event = new StatusTextEvent (browser);
2351 event.display = browser.getDisplay (); 2368 event.display = browser.getDisplay ();
2352 event.widget = browser; 2369 event.widget = browser;
2353 int length = XPCOM.strlen_PRUnichar (aMessage); 2370 //int length = XPCOM.strlen_PRUnichar (aMessage);
2354 char[] dest = new char[length]; 2371 //char[] dest = new char[length];
2355 XPCOM.memmove (dest, aMessage, length * 2); 2372 //XPCOM.memmove (dest, aMessage, length * 2);
2356 event.text = new String (dest); 2373 event.text = aMessage.fromString16z.toString;
2357 for (int i = 0; i < statusTextListeners.length; i++) { 2374 for (int i = 0; i < statusTextListeners.length; i++) {
2358 statusTextListeners[i].changed (event); 2375 statusTextListeners[i].changed (event);
2359 } 2376 }
2360 return XPCOM.NS_OK; 2377 return XPCOM.NS_OK;
2361 } 2378 }
2362 2379
2363 int OnSecurityChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int state) { 2380 int OnSecurityChange (nsIWebProgress aWebProgress, nsIRequest aRequest, PRUint32 state) {
2364 return XPCOM.NS_OK; 2381 return XPCOM.NS_OK;
2365 } 2382 }
2366 2383
2367 /* nsIWebBrowserChrome */ 2384 /* nsIWebBrowserChrome */
2368 2385
2369 int SetStatus (int statusType, int /*long*/ status) { 2386 nsresult SetStatus (PRUint32 statusType, PRUinchar* status) {
2370 if (awaitingNavigate || statusTextListeners.length is 0) return XPCOM.NS_OK; 2387 if (awaitingNavigate || statusTextListeners.length is 0) return XPCOM.NS_OK;
2371 StatusTextEvent event = new StatusTextEvent (browser); 2388 StatusTextEvent event = new StatusTextEvent (browser);
2372 event.display = browser.getDisplay (); 2389 event.display = browser.getDisplay ();
2373 event.widget = browser; 2390 event.widget = browser;
2374 int length = XPCOM.strlen_PRUnichar (status); 2391 //int length = XPCOM.strlen_PRUnichar (status);
2375 char[] dest = new char[length]; 2392 //char[] dest = new char[length];
2376 XPCOM.memmove (dest, status, length * 2); 2393 //XPCOM.memmove (dest, status, length * 2);
2377 String string = new String (dest); 2394 //String string = new String (dest);
2378 event.text = string; 2395 event.text = status.fromString16z.toString;
2379 for (int i = 0; i < statusTextListeners.length; i++) { 2396 for (int i = 0; i < statusTextListeners.length; i++) {
2380 statusTextListeners[i].changed (event); 2397 statusTextListeners[i].changed (event);
2381 } 2398 }
2382 return XPCOM.NS_OK; 2399 return XPCOM.NS_OK;
2383 } 2400 }
2384 2401
2385 int GetWebBrowser (int /*long*/ aWebBrowser) { 2402 nsresult GetWebBrowser (nsIWebBrowser* aWebBrowser) {
2386 int /*long*/[] ret = new int /*long*/[1]; 2403 //int /*long*/[] ret = new int /*long*/[1];
2387 if (webBrowser !is null) { 2404 if (webBrowser !is null) {
2388 webBrowser.AddRef (); 2405 webBrowser.AddRef ();
2389 ret[0] = webBrowser.getAddress (); 2406 *aWebBrowser = cast(nsIWebBrowser)webBrowser;
2390 } 2407 }
2391 XPCOM.memmove (aWebBrowser, ret, C.PTR_SIZEOF); 2408 //XPCOM.memmove (aWebBrowser, ret, C.PTR_SIZEOF);
2392 return XPCOM.NS_OK; 2409 return XPCOM.NS_OK;
2393 } 2410 }
2394 2411
2395 int SetWebBrowser (int /*long*/ aWebBrowser) { 2412 nsresult SetWebBrowser (nsIWebBrowser aWebBrowser) {
2396 if (webBrowser !is null) webBrowser.Release (); 2413 if (webBrowser !is null) webBrowser.Release ();
2397 webBrowser = aWebBrowser !is 0 ? new nsIWebBrowser (aWebBrowser) : null; 2414 webBrowser = aWebBrowser !is null ? cast(WebBrowser)cast(void*)aWebBrowser : null;
2398 return XPCOM.NS_OK; 2415 return XPCOM.NS_OK;
2399 } 2416 }
2400 2417
2401 int GetChromeFlags (int /*long*/ aChromeFlags) { 2418 nsresult GetChromeFlags (PRUint32* aChromeFlags) {
2402 int[] ret = new int[1]; 2419 //int[] ret = new int[1];
2403 ret[0] = chromeFlags; 2420 *aChromeFlags = chromeFlags;
2404 XPCOM.memmove (aChromeFlags, ret, 4); /* PRUint32 */ 2421 //XPCOM.memmove (aChromeFlags, ret, 4); /* PRUint32 */
2405 return XPCOM.NS_OK; 2422 return XPCOM.NS_OK;
2406 } 2423 }
2407 2424
2408 int SetChromeFlags (int aChromeFlags) { 2425 nsresult SetChromeFlags (PRUint32 aChromeFlags) {
2409 chromeFlags = aChromeFlags; 2426 chromeFlags = aChromeFlags;
2410 return XPCOM.NS_OK; 2427 return XPCOM.NS_OK;
2411 } 2428 }
2412 2429
2413 int DestroyBrowserWindow () { 2430 nsresult DestroyBrowserWindow () {
2414 WindowEvent newEvent = new WindowEvent (browser); 2431 WindowEvent newEvent = new WindowEvent (browser);
2415 newEvent.display = browser.getDisplay (); 2432 newEvent.display = browser.getDisplay ();
2416 newEvent.widget = browser; 2433 newEvent.widget = browser;
2417 for (int i = 0; i < closeWindowListeners.length; i++) { 2434 for (int i = 0; i < closeWindowListeners.length; i++) {
2418 closeWindowListeners[i].close (newEvent); 2435 closeWindowListeners[i].close (newEvent);
2425 */ 2442 */
2426 browser.dispose (); 2443 browser.dispose ();
2427 return XPCOM.NS_OK; 2444 return XPCOM.NS_OK;
2428 } 2445 }
2429 2446
2430 int SizeBrowserTo (int aCX, int aCY) { 2447 nsresult SizeBrowserTo (PRInt32 aCX, PRInt32 aCY) {
2431 size = new Point (aCX, aCY); 2448 size = new Point (aCX, aCY);
2432 bool isChrome = (chromeFlags & nsIWebBrowserChrome.CHROME_OPENAS_CHROME) !is 0; 2449 bool isChrome = (chromeFlags & nsIWebBrowserChrome.CHROME_OPENAS_CHROME) !is 0;
2433 if (isChrome) { 2450 if (isChrome) {
2434 Shell shell = browser.getShell (); 2451 Shell shell = browser.getShell ();
2435 shell.setSize (shell.computeSize (size.x, size.y)); 2452 shell.setSize (shell.computeSize (size.x, size.y));
2436 } 2453 }
2437 return XPCOM.NS_OK; 2454 return XPCOM.NS_OK;
2438 } 2455 }
2439 2456
2440 int ShowAsModal () { 2457 nsresult ShowAsModal () {
2441 int /*long*/[] result = new int /*long*/[1]; 2458 //int /*long*/[] result = new int /*long*/[1];
2442 int rc = XPCOM.NS_GetServiceManager (result); 2459 nsIServiceManager serviceManager;
2443 if (rc !is XPCOM.NS_OK) error (rc); 2460 int rc = XPCOM.NS_GetServiceManager (&serviceManager);
2444 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 2461 if (rc !is XPCOM.NS_OK) error (rc);
2445 2462 if (serviceManager is null) error (XPCOM.NS_NOINTERFACE);
2446 nsIServiceManager serviceManager = new nsIServiceManager (result[0]); 2463
2447 result[0] = 0; 2464 //nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
2448 byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_CONTEXTSTACK_CONTRACTID, true); 2465 //result[0] = 0;
2449 rc = serviceManager.GetServiceByContractID (aContractID, nsIJSContextStack.NS_IJSCONTEXTSTACK_IID, result); 2466 //byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_CONTEXTSTACK_CONTRACTID, true);
2450 if (rc !is XPCOM.NS_OK) error (rc); 2467 nsIJSContextStack stack;
2451 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 2468 rc = serviceManager.GetServiceByContractID (XPCOM.NS_CONTEXTSTACK_CONTRACTID, &nsIJSContextStack.IID, cast(void**)&stack);
2469 if (rc !is XPCOM.NS_OK) error (rc);
2470 if (stack is null) error (XPCOM.NS_NOINTERFACE);
2452 serviceManager.Release (); 2471 serviceManager.Release ();
2453 2472
2454 nsIJSContextStack stack = new nsIJSContextStack (result[0]); 2473 //nsIJSContextStack stack = new nsIJSContextStack (result[0]);
2455 result[0] = 0; 2474 //result[0] = 0;
2456 rc = stack.Push (0); 2475 rc = stack.Push (0);
2457 if (rc !is XPCOM.NS_OK) error (rc); 2476 if (rc !is XPCOM.NS_OK) error (rc);
2458 2477
2459 Shell shell = browser.getShell (); 2478 Shell shell = browser.getShell ();
2460 Display display = browser.getDisplay (); 2479 Display display = browser.getDisplay ();
2466 if (rc !is XPCOM.NS_OK) error (rc); 2485 if (rc !is XPCOM.NS_OK) error (rc);
2467 stack.Release (); 2486 stack.Release ();
2468 return XPCOM.NS_OK; 2487 return XPCOM.NS_OK;
2469 } 2488 }
2470 2489
2471 int IsWindowModal (int /*long*/ retval) { 2490 nsresult IsWindowModal (PRBool* retval) {
2472 int result = (chromeFlags & nsIWebBrowserChrome.CHROME_MODAL) !is 0 ? 1 : 0; 2491 *retval = (chromeFlags & nsIWebBrowserChrome.CHROME_MODAL) !is 0 ? 1 : 0;
2473 XPCOM.memmove (retval, new int[] {result}, 4); /* PRBool */ 2492 //XPCOM.memmove (retval, new int[] {result}, 4); /* PRBool */
2474 return XPCOM.NS_OK; 2493 return XPCOM.NS_OK;
2475 } 2494 }
2476 2495
2477 int ExitModalEventLoop (int aStatus) { 2496 nsresult ExitModalEventLoop (nsresult aStatus) {
2478 return XPCOM.NS_OK; 2497 return XPCOM.NS_OK;
2479 } 2498 }
2480 2499
2481 /* nsIEmbeddingSiteWindow */ 2500 /* nsIEmbeddingSiteWindow */
2482 2501
2483 int SetDimensions (int flags, int x, int y, int cx, int cy) { 2502 nsresult SetDimensions (PRUint32 flags, PRInt32 x, PRInt32 y, PRInt32 cx, PRInt32 cy) {
2484 if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_POSITION) !is 0) { 2503 if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_POSITION) !is 0) {
2485 location = new Point (x, y); 2504 location = new Point (x, y);
2486 browser.getShell ().setLocation (x, y); 2505 browser.getShell ().setLocation (x, y);
2487 } 2506 }
2488 if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_INNER) !is 0) { 2507 if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_INNER) !is 0) {
2492 browser.getShell ().setSize (cx, cy); 2511 browser.getShell ().setSize (cx, cy);
2493 } 2512 }
2494 return XPCOM.NS_OK; 2513 return XPCOM.NS_OK;
2495 } 2514 }
2496 2515
2497 int GetDimensions (int flags, int /*long*/ x, int /*long*/ y, int /*long*/ cx, int /*long*/ cy) { 2516 int GetDimensions (PRUint32 flags, PRInt32* x, PRInt32* y, PRInt32* cx, PRInt32* cy) {
2498 if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_POSITION) !is 0) { 2517 if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_POSITION) !is 0) {
2499 Point location = browser.getShell ().getLocation (); 2518 Point location = browser.getShell ().getLocation ();
2500 if (x !is 0) C.memmove (x, new int[] {location.x}, 4); /* PRInt32 */ 2519 if (x !is null) *x = location.x; /* PRInt32 */
2501 if (y !is 0) C.memmove (y, new int[] {location.y}, 4); /* PRInt32 */ 2520 if (y !is null) *y = location.y; /* PRInt32 */
2502 } 2521 }
2503 if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_INNER) !is 0) { 2522 if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_INNER) !is 0) {
2504 Point size = browser.getSize (); 2523 Point size = browser.getSize ();
2505 if (cx !is 0) C.memmove (cx, new int[] {size.x}, 4); /* PRInt32 */ 2524 if (cx !is null) *cx = size.x; /* PRInt32 */
2506 if (cy !is 0) C.memmove (cy, new int[] {size.y}, 4); /* PRInt32 */ 2525 if (cy !is null) *cy = size.y; /* PRInt32 */
2507 } 2526 }
2508 if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_OUTER) !is 0) { 2527 if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_OUTER) !is 0) {
2509 Point size = browser.getShell().getSize (); 2528 Point size = browser.getShell().getSize ();
2510 if (cx !is 0) C.memmove (cx, new int[] {size.x}, 4); /* PRInt32 */ 2529 if (cx !is null) *cx = size.x; /* PRInt32 */
2511 if (cy !is 0) C.memmove (cy, new int[] {size.y}, 4); /* PRInt32 */ 2530 if (cy !is null) *cy = size.y; /* PRInt32 */
2512 } 2531 }
2513 return XPCOM.NS_OK; 2532 return XPCOM.NS_OK;
2514 } 2533 }
2515 2534
2516 int SetFocus () { 2535 nsresult SetFocus () {
2517 int /*long*/[] result = new int /*long*/[1]; 2536 //int /*long*/[] result = new int /*long*/[1];
2518 int rc = webBrowser.QueryInterface (nsIBaseWindow.NS_IBASEWINDOW_IID, result); 2537 nsIBaseWindow baseWindow;
2519 if (rc !is XPCOM.NS_OK) error (rc); 2538 int rc = webBrowser.QueryInterface (&nsIBaseWindow.IID, cast(void**)&baseWindow);
2520 if (result[0] is 0) error (XPCOM.NS_ERROR_NO_INTERFACE); 2539 if (rc !is XPCOM.NS_OK) error (rc);
2540 if (baseWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
2521 2541
2522 nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]); 2542 //nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
2523 rc = baseWindow.SetFocus (); 2543 rc = baseWindow.SetFocus ();
2524 if (rc !is XPCOM.NS_OK) error (rc); 2544 if (rc !is XPCOM.NS_OK) error (rc);
2525 baseWindow.Release (); 2545 baseWindow.Release ();
2526 2546
2527 /* 2547 /*
2530 * event on Browser focus listeners. 2550 * event on Browser focus listeners.
2531 */ 2551 */
2532 return XPCOM.NS_OK; 2552 return XPCOM.NS_OK;
2533 } 2553 }
2534 2554
2535 int GetVisibility (int /*long*/ aVisibility) { 2555 nsresult GetVisibility (PRBool* aVisibility) {
2536 bool visible = browser.isVisible () && !browser.getShell ().getMinimized (); 2556 bool visible = browser.isVisible () && !browser.getShell ().getMinimized ();
2537 XPCOM.memmove (aVisibility, new int[] {visible ? 1 : 0}, 4); /* PRBool */ 2557 *aVisible = visible ? 1 : 0;
2558 //XPCOM.memmove (aVisibility, new int[] {visible ? 1 : 0}, 4); /* PRBool */
2538 return XPCOM.NS_OK; 2559 return XPCOM.NS_OK;
2539 } 2560 }
2540 2561
2541 int SetVisibility (int aVisibility) { 2562 nsresult SetVisibility (PRBool aVisibility) {
2542 if (isChild) { 2563 if (isChild) {
2543 WindowEvent event = new WindowEvent (browser); 2564 WindowEvent event = new WindowEvent (browser);
2544 event.display = browser.getDisplay (); 2565 event.display = browser.getDisplay ();
2545 event.widget = browser; 2566 event.widget = browser;
2546 if (aVisibility !is 0) { 2567 if (aVisibility !is 0) {
2573 visible = aVisibility !is 0; 2594 visible = aVisibility !is 0;
2574 } 2595 }
2575 return XPCOM.NS_OK; 2596 return XPCOM.NS_OK;
2576 } 2597 }
2577 2598
2578 int GetTitle (int /*long*/ aTitle) { 2599 nsresult GetTitle (PRUnichar** aTitle) {
2579 return XPCOM.NS_OK; 2600 return XPCOM.NS_OK;
2580 } 2601 }
2581 2602
2582 int SetTitle (int /*long*/ aTitle) { 2603 nsresult SetTitle (PRUnichar* aTitle) {
2583 if (awaitingNavigate || titleListeners.length is 0) return XPCOM.NS_OK; 2604 if (awaitingNavigate || titleListeners.length is 0) return XPCOM.NS_OK;
2584 TitleEvent event = new TitleEvent (browser); 2605 TitleEvent event = new TitleEvent (browser);
2585 event.display = browser.getDisplay (); 2606 event.display = browser.getDisplay ();
2586 event.widget = browser; 2607 event.widget = browser;
2587 /* 2608 /*
2589 * contain the page's url if the page does not contain a <title> 2610 * contain the page's url if the page does not contain a <title>
2590 * tag. 2611 * tag.
2591 */ 2612 */
2592 int length = XPCOM.strlen_PRUnichar (aTitle); 2613 int length = XPCOM.strlen_PRUnichar (aTitle);
2593 if (length > 0) { 2614 if (length > 0) {
2594 char[] dest = new char[length]; 2615 //char[] dest = new char[length];
2595 XPCOM.memmove (dest, aTitle, length * 2); 2616 //XPCOM.memmove (dest, aTitle, length * 2);
2596 event.title = new String (dest); 2617 event.title = aTitle.fromString16z.toString;
2597 } else { 2618 } else {
2598 event.title = getUrl (); 2619 event.title = getUrl ();
2599 } 2620 }
2600 for (int i = 0; i < titleListeners.length; i++) { 2621 for (int i = 0; i < titleListeners.length; i++) {
2601 titleListeners[i].changed (event); 2622 titleListeners[i].changed (event);
2602 } 2623 }
2603 return XPCOM.NS_OK; 2624 return XPCOM.NS_OK;
2604 } 2625 }
2605 2626
2606 int GetSiteWindow (int /*long*/ aSiteWindow) { 2627 nsresult GetSiteWindow (void** aSiteWindow) {
2607 /* 2628 /*
2608 * Note. The handle is expected to be an HWND on Windows and 2629 * Note. The handle is expected to be an HWND on Windows and
2609 * a GtkWidget* on GTK. This callback is invoked on Windows 2630 * a GtkWidget* on GTK. This callback is invoked on Windows
2610 * when the javascript window.print is invoked and the print 2631 * when the javascript window.print is invoked and the print
2611 * dialog comes up. If no handle is returned, the print dialog 2632 * dialog comes up. If no handle is returned, the print dialog
2612 * does not come up on this platform. 2633 * does not come up on this platform.
2613 */ 2634 */
2614 XPCOM.memmove (aSiteWindow, new int /*long*/[] {embedHandle}, C.PTR_SIZEOF); 2635 *aSiteWindow = cast(void*) embedHandle;
2615 return XPCOM.NS_OK; 2636 return XPCOM.NS_OK;
2616 } 2637 }
2617 2638
2618 /* nsIWebBrowserChromeFocus */ 2639 /* nsIWebBrowserChromeFocus */
2619 2640
2620 int FocusNextElement () { 2641 nsresult FocusNextElement () {
2621 /* 2642 /*
2622 * Bug in Mozilla embedding API. Mozilla takes back the focus after sending 2643 * Bug in Mozilla embedding API. Mozilla takes back the focus after sending
2623 * this event. This prevents tabbing out of Mozilla. This behaviour can be reproduced 2644 * this event. This prevents tabbing out of Mozilla. This behaviour can be reproduced
2624 * with the Mozilla application TestGtkEmbed. The workaround is to 2645 * with the Mozilla application TestGtkEmbed. The workaround is to
2625 * send the traversal notification after this callback returns. 2646 * send the traversal notification after this callback returns.
2631 } 2652 }
2632 }); 2653 });
2633 return XPCOM.NS_OK; 2654 return XPCOM.NS_OK;
2634 } 2655 }
2635 2656
2636 int FocusPrevElement () { 2657 nsresult FocusPrevElement () {
2637 /* 2658 /*
2638 * Bug in Mozilla embedding API. Mozilla takes back the focus after sending 2659 * Bug in Mozilla embedding API. Mozilla takes back the focus after sending
2639 * this event. This prevents tabbing out of Mozilla. This behaviour can be reproduced 2660 * this event. This prevents tabbing out of Mozilla. This behaviour can be reproduced
2640 * with the Mozilla application TestGtkEmbed. The workaround is to 2661 * with the Mozilla application TestGtkEmbed. The workaround is to
2641 * send the traversal notification after this callback returns. 2662 * send the traversal notification after this callback returns.
2649 return XPCOM.NS_OK; 2670 return XPCOM.NS_OK;
2650 } 2671 }
2651 2672
2652 /* nsIContextMenuListener */ 2673 /* nsIContextMenuListener */
2653 2674
2654 int OnShowContextMenu (int aContextFlags, int /*long*/ aEvent, int /*long*/ aNode) { 2675 nsresult OnShowContextMenu (PRUint32 aContextFlags, nsIDOMEvent aEvent, nsIDOMNode aNode) {
2655 if (awaitingNavigate) return XPCOM.NS_OK; 2676 if (awaitingNavigate) return XPCOM.NS_OK;
2656 2677
2657 nsIDOMEvent domEvent = new nsIDOMEvent (aEvent); 2678 //nsIDOMEvent domEvent = new nsIDOMEvent (aEvent);
2658 int /*long*/[] result = new int /*long*/[1]; 2679 //int /*long*/[] result = new int /*long*/[1];
2659 int rc = domEvent.QueryInterface (nsIDOMMouseEvent.NS_IDOMMOUSEEVENT_IID, result); 2680 nsIDOMMouseEvent domMouseEvent;
2660 if (rc !is XPCOM.NS_OK) error (rc); 2681 int rc = domEvent.QueryInterface (&nsIDOMMouseEvent.IID, cast(void**)&domMouseEvent);
2661 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 2682 if (rc !is XPCOM.NS_OK) error (rc);
2662 2683 if (domMouseEvent is null) error (XPCOM.NS_NOINTERFACE);
2663 nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]); 2684
2664 int[] aScreenX = new int[1], aScreenY = new int[1]; 2685 //nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]);
2665 rc = domMouseEvent.GetScreenX (aScreenX); 2686 PRInt32 aScreenX, aScreenY;
2666 if (rc !is XPCOM.NS_OK) error (rc); 2687 rc = domMouseEvent.GetScreenX (&aScreenX);
2667 rc = domMouseEvent.GetScreenY (aScreenY); 2688 if (rc !is XPCOM.NS_OK) error (rc);
2689 rc = domMouseEvent.GetScreenY (&aScreenY);
2668 if (rc !is XPCOM.NS_OK) error (rc); 2690 if (rc !is XPCOM.NS_OK) error (rc);
2669 domMouseEvent.Release (); 2691 domMouseEvent.Release ();
2670 2692
2671 Event event = new Event (); 2693 Event event;
2672 event.x = aScreenX[0]; 2694 event.x = aScreenX;
2673 event.y = aScreenY[0]; 2695 event.y = aScreenY;
2674 browser.notifyListeners (DWT.MenuDetect, event); 2696 browser.notifyListeners (DWT.MenuDetect, event);
2675 if (!event.doit) return XPCOM.NS_OK; 2697 if (!event.doit) return XPCOM.NS_OK;
2676 Menu menu = browser.getMenu (); 2698 Menu menu = browser.getMenu ();
2677 if (menu !is null && !menu.isDisposed ()) { 2699 if (menu !is null && !menu.isDisposed ()) {
2678 if (aScreenX[0] !is event.x || aScreenY[0] !is event.y) { 2700 if (aScreenX !is event.x || aScreenY !is event.y) {
2679 menu.setLocation (event.x, event.y); 2701 menu.setLocation (event.x, event.y);
2680 } 2702 }
2681 menu.setVisible (true); 2703 menu.setVisible (true);
2682 } 2704 }
2683 return XPCOM.NS_OK; 2705 return XPCOM.NS_OK;
2684 } 2706 }
2685 2707
2686 /* nsIURIContentListener */ 2708 /* nsIURIContentListener */
2687 2709
2688 int OnStartURIOpen (int /*long*/ aURI, int /*long*/ retval) { 2710 nsresult OnStartURIOpen (nsIURI aURI, PRBool* retval) {
2689 if (awaitingNavigate || locationListeners.length is 0) { 2711 if (awaitingNavigate || locationListeners.length is 0) {
2690 XPCOM.memmove (retval, new int[] {0}, 4); /* PRBool */ 2712 *retval = 0;
2713 //XPCOM.memmove (retval, new int[] {0}, 4); /* PRBool */
2691 return XPCOM.NS_OK; 2714 return XPCOM.NS_OK;
2692 } 2715 }
2693 nsIURI location = new nsIURI (aURI); 2716 //nsIURI location = new nsIURI (aURI);
2694 int /*long*/ aSpec = XPCOM.nsEmbedCString_new (); 2717 scope auto aSpec = new nsEmbedCString;
2695 location.GetSpec (aSpec); 2718 location.GetSpec (cast(nsACString*)aSpec);
2696 int length = XPCOM.nsEmbedCString_Length (aSpec); 2719 //int length = XPCOM.nsEmbedCString_Length (aSpec);
2697 int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec); 2720 //int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
2698 buffer = XPCOM.nsEmbedCString_get (aSpec); 2721 //buffer = XPCOM.nsEmbedCString_get (aSpec);
2699 byte[] dest = new byte[length]; 2722 //byte[] dest = new byte[length];
2700 XPCOM.memmove (dest, buffer, length); 2723 //XPCOM.memmove (dest, buffer, length);
2701 XPCOM.nsEmbedCString_delete (aSpec); 2724 //XPCOM.nsEmbedCString_delete (aSpec);
2702 String value = new String (dest); 2725 String value = aSpec.toString;
2703 bool doit = true; 2726 bool doit = true;
2704 if (request is 0) { 2727 if (request is null) {
2705 /* 2728 /*
2706 * listeners should not be notified of internal transitions like "javascipt:..." 2729 * listeners should not be notified of internal transitions like "javascipt:..."
2707 * because this is an implementation side-effect, not a true navigate 2730 * because this is an implementation side-effect, not a true navigate
2708 */ 2731 */
2709 if (!value.startsWith (PREFIX_JAVASCRIPT)) { 2732 if (!value.startsWith (PREFIX_JAVASCRIPT)) {
2721 locationListeners[i].changing (event); 2744 locationListeners[i].changing (event);
2722 } 2745 }
2723 doit = event.doit && !browser.isDisposed(); 2746 doit = event.doit && !browser.isDisposed();
2724 } 2747 }
2725 } 2748 }
2726 XPCOM.memmove (retval, new int[] {doit ? 0 : 1}, 4); /* PRBool */ 2749 *retval = doit ? 0 : 1;
2750 //XPCOM.memmove (retval, new int[] {doit ? 0 : 1}, 4); /* PRBool */
2727 return XPCOM.NS_OK; 2751 return XPCOM.NS_OK;
2728 } 2752 }
2729 2753
2730 int DoContent (int /*long*/ aContentType, int aIsContentPreferred, int /*long*/ aRequest, int /*long*/ aContentHandler, int /*long*/ retval) { 2754 nsresult DoContent (char* aContentType, PRBool aIsContentPreferred, nsIRequest aRequest, nsIStreamListener* aContentHandler, PRBool* retval) {
2731 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; 2755 return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
2732 } 2756 }
2733 2757
2734 int IsPreferred (int /*long*/ aContentType, int /*long*/ aDesiredContentType, int /*long*/ retval) { 2758 nsresult IsPreferred (char* aContentType, char** aDesiredContentType, PRBool* retval) {
2735 bool preferred = false; 2759 bool preferred = false;
2736 int size = XPCOM.strlen (aContentType); 2760 auto size = strlen (aContentType);
2737 if (size > 0) { 2761 if (size > 0) {
2738 byte[] typeBytes = new byte[size + 1]; 2762 //byte[] typeBytes = new byte[size + 1];
2739 XPCOM.memmove (typeBytes, aContentType, size); 2763 //XPCOM.memmove (typeBytes, aContentType, size);
2740 String contentType = new String (typeBytes, 0, size); 2764 String contentType = aContentType.fromStringz;
2741 2765
2742 /* do not attempt to handle known problematic content types */ 2766 /* do not attempt to handle known problematic content types */
2743 if (!contentType.equals (XPCOM.CONTENT_MAYBETEXT) && !contentType.equals (XPCOM.CONTENT_MULTIPART)) { 2767 if (!contentType.equals (XPCOM.CONTENT_MAYBETEXT) && !contentType.equals (XPCOM.CONTENT_MULTIPART)) {
2744 /* determine whether browser can handle the content type */ 2768 /* determine whether browser can handle the content type */
2745 int /*long*/[] result = new int /*long*/[1]; 2769 // int /*long*/[] result = new int /*long*/[1];
2746 int rc = XPCOM.NS_GetServiceManager (result); 2770 nsIServiceManager serviceManager;
2771 int rc = XPCOM.NS_GetServiceManager (&serviceManager);
2747 if (rc !is XPCOM.NS_OK) error (rc); 2772 if (rc !is XPCOM.NS_OK) error (rc);
2748 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 2773 if (serviceManager is null) error (XPCOM.NS_NOINTERFACE);
2749 nsIServiceManager serviceManager = new nsIServiceManager (result[0]); 2774 //nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
2750 result[0] = 0; 2775 //result[0] = 0;
2751 2776
2752 /* First try to use the nsIWebNavigationInfo if it's available (>= mozilla 1.8) */ 2777 /* First try to use the nsIWebNavigationInfo if it's available (>= mozilla 1.8) */
2753 byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_WEBNAVIGATIONINFO_CONTRACTID, true); 2778 //byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_WEBNAVIGATIONINFO_CONTRACTID, true);
2754 rc = serviceManager.GetServiceByContractID (aContractID, nsIWebNavigationInfo.NS_IWEBNAVIGATIONINFO_IID, result); 2779 nsIWebNavigationInfo info;
2780 rc = serviceManager.GetServiceByContractID (XPCOM.NS_WEBNAVIGATIONINFO_CONTRACTID, &nsIWebNavigationInfo.IID, cast(void**)&info);
2755 if (rc is 0) { 2781 if (rc is 0) {
2756 byte[] bytes = MozillaDelegate.wcsToMbcs (null, contentType, true); 2782 //byte[] bytes = MozillaDelegate.wcsToMbcs (null, contentType, true);
2757 int /*long*/ typePtr = XPCOM.nsEmbedCString_new (bytes, bytes.length); 2783 scope auto typePtr = nsEmbedCString(contentType);
2758 nsIWebNavigationInfo info = new nsIWebNavigationInfo (result[0]); 2784 //nsIWebNavigationInfo info = new nsIWebNavigationInfo (result[0]);
2759 result[0] = 0; 2785 //result[0] = 0;
2760 int[] isSupportedResult = new int[1]; /* PRUint32 */ 2786 PRUint32 isSupportedResult; /* PRUint32 */
2761 rc = info.IsTypeSupported (typePtr, 0, isSupportedResult); 2787 rc = info.IsTypeSupported (cast(nsACString*)typePtr, null, &isSupportedResult);
2762 if (rc !is XPCOM.NS_OK) error (rc); 2788 if (rc !is XPCOM.NS_OK) error (rc);
2763 info.Release (); 2789 info.Release ();
2764 XPCOM.nsEmbedCString_delete (typePtr); 2790 //XPCOM.nsEmbedCString_delete (typePtr);
2765 preferred = isSupportedResult[0] !is 0; 2791 preferred = isSupportedResult !is 0;
2766 } else { 2792 } else {
2767 /* nsIWebNavigationInfo is not available, so do the type lookup */ 2793 /* nsIWebNavigationInfo is not available, so do the type lookup */
2768 result[0] = 0; 2794 //result[0] = 0;
2769 rc = serviceManager.GetService (XPCOM.NS_CATEGORYMANAGER_CID, nsICategoryManager.NS_ICATEGORYMANAGER_IID, result); 2795 nsICategoryManager categoryManager;
2796 rc = serviceManager.GetService (XPCOM.NS_CATEGORYMANAGER_CID, &nsICategoryManager.IID, &categoryManager);
2770 if (rc !is XPCOM.NS_OK) error (rc); 2797 if (rc !is XPCOM.NS_OK) error (rc);
2771 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 2798 if (categoryManager is null) error (XPCOM.NS_NOINTERFACE);
2772 2799
2773 nsICategoryManager categoryManager = new nsICategoryManager (result[0]); 2800 //nsICategoryManager categoryManager = new nsICategoryManager (result[0]);
2774 result[0] = 0; 2801 //result[0] = 0;
2775 byte[] categoryBytes = MozillaDelegate.wcsToMbcs (null, "Gecko-Content-Viewers", true); //$NON-NLS-1$ 2802 char* categoryBytes = "Gecko-Content-Viewers"; //$NON-NLS-1$
2776 rc = categoryManager.GetCategoryEntry (categoryBytes, typeBytes, result); 2803 char* result;
2804 rc = categoryManager.GetCategoryEntry (categoryBytes, aContentType, &result);
2777 categoryManager.Release (); 2805 categoryManager.Release ();
2778 /* if no viewer for the content type is registered then rc is XPCOM.NS_ERROR_NOT_AVAILABLE */ 2806 /* if no viewer for the content type is registered then rc is XPCOM.NS_ERROR_NOT_AVAILABLE */
2779 preferred = rc is XPCOM.NS_OK; 2807 preferred = rc is XPCOM.NS_OK;
2780 } 2808 }
2781 serviceManager.Release (); 2809 serviceManager.Release ();
2782 } 2810 }
2783 } 2811 }
2784 2812
2785 XPCOM.memmove(retval, new int[] {preferred ? 1 : 0}, 4); /* PRBool */ 2813 *retval = preferred ? 1 : 0; /* PRBool */
2786 if (preferred) { 2814 if (preferred) {
2787 XPCOM.memmove (aDesiredContentType, new int /*long*/[] {0}, C.PTR_SIZEOF); 2815 *aDesiredContentType = null;
2788 } 2816 }
2789 return XPCOM.NS_OK; 2817 return XPCOM.NS_OK;
2790 } 2818 }
2791 2819
2792 int CanHandleContent (int /*long*/ aContentType, int aIsContentPreferred, int /*long*/ aDesiredContentType, int /*long*/ retval) { 2820 nsresult CanHandleContent (char* aContentType, PRBool aIsContentPreferred, char** aDesiredContentType, PRBool* retval) {
2793 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; 2821 return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
2794 } 2822 }
2795 2823
2796 int GetLoadCookie (int /*long*/ aLoadCookie) { 2824 nsresult GetLoadCookie (nsISupports* aLoadCookie) {
2797 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; 2825 return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
2798 } 2826 }
2799 2827
2800 int SetLoadCookie (int /*long*/ aLoadCookie) { 2828 nsresult SetLoadCookie (nsISupports aLoadCookie) {
2801 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; 2829 return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
2802 } 2830 }
2803 2831
2804 int GetParentContentListener (int /*long*/ aParentContentListener) { 2832 nsresult GetParentContentListener (nsIURIContentListener* aParentContentListener) {
2805 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; 2833 return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
2806 } 2834 }
2807 2835
2808 int SetParentContentListener (int /*long*/ aParentContentListener) { 2836 nsresult SetParentContentListener (nsIURIContentListener aParentContentListener) {
2809 return XPCOM.NS_ERROR_NOT_IMPLEMENTED; 2837 return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
2810 } 2838 }
2811 2839
2812 /* nsITooltipListener */ 2840 /* nsITooltipListener */
2813 2841
2814 int OnShowTooltip (int aXCoords, int aYCoords, int /*long*/ aTipText) { 2842 nsresult OnShowTooltip (PRInt32 aXCoords, PRInt32 aYCoords, PRUnichar* aTipText) {
2815 if (awaitingNavigate) return XPCOM.NS_OK; 2843 if (awaitingNavigate) return XPCOM.NS_OK;
2816 2844
2817 int length = XPCOM.strlen_PRUnichar (aTipText); 2845 //int length = XPCOM.strlen_PRUnichar (aTipText);
2818 char[] dest = new char[length]; 2846 //char[] dest = new char[length];
2819 XPCOM.memmove (dest, aTipText, length * 2); 2847 //XPCOM.memmove (dest, aTipText, length * 2);
2820 String text = new String (dest); 2848 String text = aTipText.fromString16z.toString;
2821 if (tip !is null && !tip.isDisposed ()) tip.dispose (); 2849 if (tip !is null && !tip.isDisposed ()) tip.dispose ();
2822 Display display = browser.getDisplay (); 2850 Display display = browser.getDisplay ();
2823 Shell parent = browser.getShell (); 2851 Shell parent = browser.getShell ();
2824 tip = new Shell (parent, DWT.ON_TOP); 2852 tip = new Shell (parent, DWT.ON_TOP);
2825 tip.setLayout (new FillLayout()); 2853 tip.setLayout (new FillLayout());
2841 tip.pack (); 2869 tip.pack ();
2842 tip.setVisible (true); 2870 tip.setVisible (true);
2843 return XPCOM.NS_OK; 2871 return XPCOM.NS_OK;
2844 } 2872 }
2845 2873
2846 int OnHideTooltip () { 2874 nsresult OnHideTooltip () {
2847 if (tip !is null && !tip.isDisposed ()) tip.dispose (); 2875 if (tip !is null && !tip.isDisposed ()) tip.dispose ();
2848 tip = null; 2876 tip = null;
2849 return XPCOM.NS_OK; 2877 return XPCOM.NS_OK;
2850 } 2878 }
2851 2879
2852 /* nsIDOMEventListener */ 2880 /* nsIDOMEventListener */
2853 2881
2854 int HandleEvent (int /*long*/ event) { 2882 nsresult HandleEvent (nsIDOMEvent event) {
2855 nsIDOMEvent domEvent = new nsIDOMEvent (event); 2883 //nsIDOMEvent domEvent = new nsIDOMEvent (event);
2856 2884
2857 int /*long*/ type = XPCOM.nsEmbedString_new (); 2885 scope auto type = new nsEmbedString;
2858 int rc = domEvent.GetType (type); 2886 int rc = event.GetType (cast(nsAString*)type);
2859 if (rc !is XPCOM.NS_OK) error (rc); 2887 if (rc !is XPCOM.NS_OK) error (rc);
2860 int length = XPCOM.nsEmbedString_Length (type); 2888 //int length = XPCOM.nsEmbedString_Length (type);
2861 int /*long*/ buffer = XPCOM.nsEmbedString_get (type); 2889 //int /*long*/ buffer = XPCOM.nsEmbedString_get (type);
2862 char[] chars = new char[length]; 2890 //char[] chars = new char[length];
2863 XPCOM.memmove (chars, buffer, length * 2); 2891 //XPCOM.memmove (chars, buffer, length * 2);
2864 String typeString = new String (chars); 2892 String typeString = type.toString;
2865 XPCOM.nsEmbedString_delete (type); 2893 //XPCOM.nsEmbedString_delete (type);
2866 2894
2867 if (XPCOM.DOMEVENT_UNLOAD.equals (typeString)) { 2895 if (XPCOM.DOMEVENT_UNLOAD.equals (typeString)) {
2868 int /*long*/[] result = new int /*long*/[1]; 2896 //int /*long*/[] result = new int /*long*/[1];
2869 rc = domEvent.GetCurrentTarget (result); 2897 nsIDOMEventTarget target;
2898 rc = event.GetCurrentTarget (&target);
2870 if (rc !is XPCOM.NS_OK) error (rc); 2899 if (rc !is XPCOM.NS_OK) error (rc);
2871 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 2900 if (target is null) error (XPCOM.NS_NOINTERFACE);
2872 2901
2873 nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]); 2902 //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
2874 unhookDOMListeners (target); 2903 unhookDOMListeners (target);
2875 target.Release (); 2904 target.Release ();
2876 return XPCOM.NS_OK; 2905 return XPCOM.NS_OK;
2877 } 2906 }
2878 2907
2880 mozDelegate.handleFocus (); 2909 mozDelegate.handleFocus ();
2881 return XPCOM.NS_OK; 2910 return XPCOM.NS_OK;
2882 } 2911 }
2883 2912
2884 if (XPCOM.DOMEVENT_KEYDOWN.equals (typeString)) { 2913 if (XPCOM.DOMEVENT_KEYDOWN.equals (typeString)) {
2885 int /*long*/[] result = new int /*long*/[1]; 2914 //int /*long*/[] result = new int /*long*/[1];
2886 rc = domEvent.QueryInterface (nsIDOMKeyEvent.NS_IDOMKEYEVENT_IID, result); 2915 nsIDOMKeyEvent domKeyEvent;
2916 rc = event.QueryInterface (&nsIDOMKeyEvent.IID, cast(void**)&domKeyEvent);
2887 if (rc !is XPCOM.NS_OK) error (rc); 2917 if (rc !is XPCOM.NS_OK) error (rc);
2888 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 2918 if (domKeyevent is null) error (XPCOM.NS_NOINTERFACE);
2889 nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]); 2919 //nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]);
2890 result[0] = 0; 2920 //result[0] = 0;
2891 2921
2892 int[] aKeyCode = new int[1]; /* PRUint32 */ 2922 PRUint32 aKeyCode; /* PRUint32 */
2893 rc = domKeyEvent.GetKeyCode (aKeyCode); 2923 rc = domKeyEvent.GetKeyCode (&aKeyCode);
2894 if (rc !is XPCOM.NS_OK) error (rc); 2924 if (rc !is XPCOM.NS_OK) error (rc);
2895 int keyCode = translateKey (aKeyCode[0]); 2925 int keyCode = super.translateKey (aKeyCode);
2896 2926
2897 /* 2927 /*
2898 * if keyCode is lastKeyCode then either a repeating key like Shift 2928 * if keyCode is lastKeyCode then either a repeating key like Shift
2899 * is being held or a key for which key events are not sent has been 2929 * is being held or a key for which key events are not sent has been
2900 * pressed. In both of these cases a KeyDown should not be sent. 2930 * pressed. In both of these cases a KeyDown should not be sent.
2908 case DWT.CAPS_LOCK: 2938 case DWT.CAPS_LOCK:
2909 case DWT.NUM_LOCK: 2939 case DWT.NUM_LOCK:
2910 case DWT.SCROLL_LOCK: 2940 case DWT.SCROLL_LOCK:
2911 case DWT.COMMAND: { 2941 case DWT.COMMAND: {
2912 /* keypress events will not be received for these keys, so send KeyDowns for them now */ 2942 /* keypress events will not be received for these keys, so send KeyDowns for them now */
2913 int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */ 2943 PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */
2914 rc = domKeyEvent.GetAltKey (aAltKey); 2944 rc = domKeyEvent.GetAltKey (&aAltKey);
2915 if (rc !is XPCOM.NS_OK) error (rc); 2945 if (rc !is XPCOM.NS_OK) error (rc);
2916 rc = domKeyEvent.GetCtrlKey (aCtrlKey); 2946 rc = domKeyEvent.GetCtrlKey (&aCtrlKey);
2917 if (rc !is XPCOM.NS_OK) error (rc); 2947 if (rc !is XPCOM.NS_OK) error (rc);
2918 rc = domKeyEvent.GetShiftKey (aShiftKey); 2948 rc = domKeyEvent.GetShiftKey (&aShiftKey);
2919 if (rc !is XPCOM.NS_OK) error (rc); 2949 if (rc !is XPCOM.NS_OK) error (rc);
2920 rc = domKeyEvent.GetMetaKey (aMetaKey); 2950 rc = domKeyEvent.GetMetaKey (&aMetaKey);
2921 if (rc !is XPCOM.NS_OK) error (rc); 2951 if (rc !is XPCOM.NS_OK) error (rc);
2922 2952
2923 Event keyEvent = new Event (); 2953 Event keyEvent = new Event ();
2924 keyEvent.widget = browser; 2954 keyEvent.widget = browser;
2925 keyEvent.type = DWT.KeyDown; 2955 keyEvent.type = DWT.KeyDown;
2926 keyEvent.keyCode = keyCode; 2956 keyEvent.keyCode = keyCode;
2927 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); 2957 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);
2928 keyEvent.stateMask &= ~keyCode; /* remove current keydown if it's a state key */ 2958 keyEvent.stateMask &= ~keyCode; /* remove current keydown if it's a state key */
2929 browser.notifyListeners (keyEvent.type, keyEvent); 2959 browser.notifyListeners (keyEvent.type, keyEvent);
2930 if (!keyEvent.doit) { 2960 if (!keyEvent.doit) {
2931 domEvent.PreventDefault (); 2961 event.PreventDefault ();
2932 } 2962 }
2933 break; 2963 break;
2934 } 2964 }
2935 default: { 2965 default: {
2936 /* 2966 /*
2937 * If the keydown has Meta (but not Meta+Ctrl) as a modifier then send a KeyDown event for it here 2967 * If the keydown has Meta (but not Meta+Ctrl) as a modifier then send a KeyDown event for it here
2938 * because a corresponding keypress event will not be received for it from the DOM. If the keydown 2968 * because a corresponding keypress event will not be received for it from the DOM. If the keydown
2939 * does not have Meta as a modifier, or has Meta+Ctrl as a modifier, then then do nothing here 2969 * does not have Meta as a modifier, or has Meta+Ctrl as a modifier, then then do nothing here
2940 * because its KeyDown event will be sent from the keypress listener. 2970 * because its KeyDown event will be sent from the keypress listener.
2941 */ 2971 */
2942 int[] aMetaKey = new int[1]; /* PRBool */ 2972 PRBool aMetaKey; /* PRBool */
2943 rc = domKeyEvent.GetMetaKey (aMetaKey); 2973 rc = domKeyEvent.GetMetaKey (&aMetaKey);
2944 if (rc !is XPCOM.NS_OK) error (rc); 2974 if (rc !is XPCOM.NS_OK) error (rc);
2945 if (aMetaKey[0] !is 0) { 2975 if (aMetaKey !is 0) {
2946 int[] aCtrlKey = new int[1]; /* PRBool */ 2976 PRBool aCtrlKey; /* PRBool */
2947 rc = domKeyEvent.GetCtrlKey (aCtrlKey); 2977 rc = domKeyEvent.GetCtrlKey (&aCtrlKey);
2948 if (rc !is XPCOM.NS_OK) error (rc); 2978 if (rc !is XPCOM.NS_OK) error (rc);
2949 if (aCtrlKey[0] is 0) { 2979 if (aCtrlKey is 0) {
2950 int[] aAltKey = new int[1], aShiftKey = new int[1]; /* PRBool */ 2980 PRBool aAltKey, aShiftKey; /* PRBool */
2951 rc = domKeyEvent.GetAltKey (aAltKey); 2981 rc = domKeyEvent.GetAltKey (&aAltKey);
2952 if (rc !is XPCOM.NS_OK) error (rc); 2982 if (rc !is XPCOM.NS_OK) error (rc);
2953 rc = domKeyEvent.GetShiftKey (aShiftKey); 2983 rc = domKeyEvent.GetShiftKey (&aShiftKey);
2954 if (rc !is XPCOM.NS_OK) error (rc); 2984 if (rc !is XPCOM.NS_OK) error (rc);
2955 2985
2956 Event keyEvent = new Event (); 2986 Event keyEvent = new Event ();
2957 keyEvent.widget = browser; 2987 keyEvent.widget = browser;
2958 keyEvent.type = DWT.KeyDown; 2988 keyEvent.type = DWT.KeyDown;
2959 keyEvent.keyCode = lastKeyCode; 2989 keyEvent.keyCode = lastKeyCode;
2960 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); 2990 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);
2961 browser.notifyListeners (keyEvent.type, keyEvent); 2991 browser.notifyListeners (keyEvent.type, keyEvent);
2962 if (!keyEvent.doit) { 2992 if (!keyEvent.doit) {
2963 domEvent.PreventDefault (); 2993 event.PreventDefault ();
2964 } 2994 }
2965 } 2995 }
2966 } 2996 }
2967 } 2997 }
2968 } 2998 }
2988 case DWT.CAPS_LOCK: 3018 case DWT.CAPS_LOCK:
2989 case DWT.NUM_LOCK: 3019 case DWT.NUM_LOCK:
2990 case DWT.SCROLL_LOCK: return XPCOM.NS_OK; 3020 case DWT.SCROLL_LOCK: return XPCOM.NS_OK;
2991 } 3021 }
2992 3022
2993 int /*long*/[] result = new int /*long*/[1]; 3023 //int /*long*/[] result = new int /*long*/[1];
2994 rc = domEvent.QueryInterface (nsIDOMKeyEvent.NS_IDOMKEYEVENT_IID, result); 3024 nsIDOMKeyEvent domKeyEvent;
3025 rc = event.QueryInterface (&nsIDOMKeyEvent.IID, cast(void**)&domKeyEvent);
2995 if (rc !is XPCOM.NS_OK) error (rc); 3026 if (rc !is XPCOM.NS_OK) error (rc);
2996 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 3027 if (domKeyEvent is null) error (XPCOM.NS_NOINTERFACE);
2997 nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]); 3028 //nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]);
2998 result[0] = 0; 3029 //result[0] = 0;
2999 3030
3000 int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */ 3031 PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */
3001 rc = domKeyEvent.GetAltKey (aAltKey); 3032 rc = domKeyEvent.GetAltKey (&aAltKey);
3002 if (rc !is XPCOM.NS_OK) error (rc); 3033 if (rc !is XPCOM.NS_OK) error (rc);
3003 rc = domKeyEvent.GetCtrlKey (aCtrlKey); 3034 rc = domKeyEvent.GetCtrlKey (&aCtrlKey);
3004 if (rc !is XPCOM.NS_OK) error (rc); 3035 if (rc !is XPCOM.NS_OK) error (rc);
3005 rc = domKeyEvent.GetShiftKey (aShiftKey); 3036 rc = domKeyEvent.GetShiftKey (&aShiftKey);
3006 if (rc !is XPCOM.NS_OK) error (rc); 3037 if (rc !is XPCOM.NS_OK) error (rc);
3007 rc = domKeyEvent.GetMetaKey (aMetaKey); 3038 rc = domKeyEvent.GetMetaKey (&aMetaKey);
3008 if (rc !is XPCOM.NS_OK) error (rc); 3039 if (rc !is XPCOM.NS_OK) error (rc);
3009 domKeyEvent.Release (); 3040 domKeyEvent.Release ();
3010 3041
3011 int[] aCharCode = new int[1]; /* PRUint32 */ 3042 PRUint32 aCharCode; /* PRUint32 */
3012 rc = domKeyEvent.GetCharCode (aCharCode); 3043 rc = domKeyEvent.GetCharCode (&aCharCode);
3013 if (rc !is XPCOM.NS_OK) error (rc); 3044 if (rc !is XPCOM.NS_OK) error (rc);
3014 lastCharCode = aCharCode[0]; 3045 lastCharCode = aCharCode;
3015 if (lastCharCode is 0) { 3046 if (lastCharCode is 0) {
3016 switch (lastKeyCode) { 3047 switch (lastKeyCode) {
3017 case DWT.TAB: lastCharCode = DWT.TAB; break; 3048 case DWT.TAB: lastCharCode = DWT.TAB; break;
3018 case DWT.CR: lastCharCode = DWT.CR; break; 3049 case DWT.CR: lastCharCode = DWT.CR; break;
3019 case DWT.BS: lastCharCode = DWT.BS; break; 3050 case DWT.BS: lastCharCode = DWT.BS; break;
3020 case DWT.ESC: lastCharCode = DWT.ESC; break; 3051 case DWT.ESC: lastCharCode = DWT.ESC; break;
3021 case DWT.DEL: lastCharCode = DWT.DEL; break; 3052 case DWT.DEL: lastCharCode = DWT.DEL; break;
3022 } 3053 }
3023 } 3054 }
3024 if (aCtrlKey[0] !is 0 && (0 <= lastCharCode && lastCharCode <= 0x7F)) { 3055 if (aCtrlKey !is 0 && (0 <= lastCharCode && lastCharCode <= 0x7F)) {
3025 if ('a' <= lastCharCode && lastCharCode <= 'z') lastCharCode -= 'a' - 'A'; 3056 if ('a' <= lastCharCode && lastCharCode <= 'z') lastCharCode -= 'a' - 'A';
3026 if (64 <= lastCharCode && lastCharCode <= 95) lastCharCode -= 64; 3057 if (64 <= lastCharCode && lastCharCode <= 95) lastCharCode -= 64;
3027 } 3058 }
3028 3059
3029 Event keyEvent = new Event (); 3060 Event keyEvent = new Event ();
3030 keyEvent.widget = browser; 3061 keyEvent.widget = browser;
3031 keyEvent.type = DWT.KeyDown; 3062 keyEvent.type = DWT.KeyDown;
3032 keyEvent.keyCode = lastKeyCode; 3063 keyEvent.keyCode = lastKeyCode;
3033 keyEvent.character = (char)lastCharCode; 3064 keyEvent.character = cast(wchar)lastCharCode;
3034 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); 3065 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);
3035 browser.notifyListeners (keyEvent.type, keyEvent); 3066 browser.notifyListeners (keyEvent.type, keyEvent);
3036 if (!keyEvent.doit) { 3067 if (!keyEvent.doit) {
3037 domEvent.PreventDefault (); 3068 event.PreventDefault ();
3038 } 3069 }
3039 return XPCOM.NS_OK; 3070 return XPCOM.NS_OK;
3040 } 3071 }
3041 3072
3042 if (XPCOM.DOMEVENT_KEYUP.equals (typeString)) { 3073 if (XPCOM.DOMEVENT_KEYUP.equals (typeString)) {
3043 int /*long*/[] result = new int /*long*/[1]; 3074 //int /*long*/[] result = new int /*long*/[1];
3044 rc = domEvent.QueryInterface (nsIDOMKeyEvent.NS_IDOMKEYEVENT_IID, result); 3075 nsIDOMKeyEvent domKeyEvent;
3076 rc = event.QueryInterface (&nsIDOMKeyEvent.IID, cast(void**)&domKeyEvent);
3045 if (rc !is XPCOM.NS_OK) error (rc); 3077 if (rc !is XPCOM.NS_OK) error (rc);
3046 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 3078 if (domKeyEvent is null) error (XPCOM.NS_NOINTERFACE);
3047 nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]); 3079 //nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]);
3048 result[0] = 0; 3080 //result[0] = 0;
3049 3081
3050 int[] aKeyCode = new int[1]; /* PRUint32 */ 3082 PRUint32 aKeyCode; /* PRUint32 */
3051 rc = domKeyEvent.GetKeyCode (aKeyCode); 3083 rc = domKeyEvent.GetKeyCode (&aKeyCode);
3052 if (rc !is XPCOM.NS_OK) error (rc); 3084 if (rc !is XPCOM.NS_OK) error (rc);
3053 int keyCode = translateKey (aKeyCode[0]); 3085 int keyCode = super.translateKey (aKeyCode);
3054 if (keyCode is 0) { 3086 if (keyCode is 0) {
3055 /* indicates a key for which key events are not sent */ 3087 /* indicates a key for which key events are not sent */
3056 domKeyEvent.Release (); 3088 domKeyEvent.Release ();
3057 return XPCOM.NS_OK; 3089 return XPCOM.NS_OK;
3058 } 3090 }
3060 /* keyup does not correspond to the last keydown */ 3092 /* keyup does not correspond to the last keydown */
3061 lastKeyCode = keyCode; 3093 lastKeyCode = keyCode;
3062 lastCharCode = 0; 3094 lastCharCode = 0;
3063 } 3095 }
3064 3096
3065 int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */ 3097 PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */
3066 rc = domKeyEvent.GetAltKey (aAltKey); 3098 rc = domKeyEvent.GetAltKey (&aAltKey);
3067 if (rc !is XPCOM.NS_OK) error (rc); 3099 if (rc !is XPCOM.NS_OK) error (rc);
3068 rc = domKeyEvent.GetCtrlKey (aCtrlKey); 3100 rc = domKeyEvent.GetCtrlKey (&aCtrlKey);
3069 if (rc !is XPCOM.NS_OK) error (rc); 3101 if (rc !is XPCOM.NS_OK) error (rc);
3070 rc = domKeyEvent.GetShiftKey (aShiftKey); 3102 rc = domKeyEvent.GetShiftKey (&aShiftKey);
3071 if (rc !is XPCOM.NS_OK) error (rc); 3103 if (rc !is XPCOM.NS_OK) error (rc);
3072 rc = domKeyEvent.GetMetaKey (aMetaKey); 3104 rc = domKeyEvent.GetMetaKey (&aMetaKey);
3073 if (rc !is XPCOM.NS_OK) error (rc); 3105 if (rc !is XPCOM.NS_OK) error (rc);
3074 domKeyEvent.Release (); 3106 domKeyEvent.Release ();
3075 3107
3076 Event keyEvent = new Event (); 3108 Event keyEvent = new Event ();
3077 keyEvent.widget = browser; 3109 keyEvent.widget = browser;
3078 keyEvent.type = DWT.KeyUp; 3110 keyEvent.type = DWT.KeyUp;
3079 keyEvent.keyCode = lastKeyCode; 3111 keyEvent.keyCode = lastKeyCode;
3080 keyEvent.character = (char)lastCharCode; 3112 keyEvent.character = cast(wchar)lastCharCode;
3081 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); 3113 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);
3082 switch (lastKeyCode) { 3114 switch (lastKeyCode) {
3083 case DWT.SHIFT: 3115 case DWT.SHIFT:
3084 case DWT.CONTROL: 3116 case DWT.CONTROL:
3085 case DWT.ALT: 3117 case DWT.ALT:
3086 case DWT.COMMAND: { 3118 case DWT.COMMAND: {
3087 keyEvent.stateMask |= lastKeyCode; 3119 keyEvent.stateMask |= lastKeyCode;
3088 } 3120 }
3089 } 3121 }
3090 browser.notifyListeners (keyEvent.type, keyEvent); 3122 browser.notifyListeners (keyEvent.type, keyEvent);
3091 if (!keyEvent.doit) { 3123 if (!keyEvent.doit) {
3092 domEvent.PreventDefault (); 3124 event.PreventDefault ();
3093 } 3125 }
3094 lastKeyCode = lastCharCode = 0; 3126 lastKeyCode = lastCharCode = 0;
3095 return XPCOM.NS_OK; 3127 return XPCOM.NS_OK;
3096 } 3128 }
3097 3129
3098 /* mouse event */ 3130 /* mouse event */
3099 3131
3100 int /*long*/[] result = new int /*long*/[1]; 3132 //int /*long*/[] result = new int /*long*/[1];
3101 rc = domEvent.QueryInterface (nsIDOMMouseEvent.NS_IDOMMOUSEEVENT_IID, result); 3133 nsIDOMMouseEvent domMouseEvent;
3102 if (rc !is XPCOM.NS_OK) error (rc); 3134 rc = event.QueryInterface (&nsIDOMMouseEvent.IID, cast(void**)&domMouseEvent);
3103 if (result[0] is 0) error (XPCOM.NS_NOINTERFACE); 3135 if (rc !is XPCOM.NS_OK) error (rc);
3104 nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]); 3136 if (domMouseEvent is null) error (XPCOM.NS_NOINTERFACE);
3105 result[0] = 0; 3137 //nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]);
3138 //result[0] = 0;
3106 3139
3107 /* 3140 /*
3108 * MouseOver and MouseOut events are fired any time the mouse enters or exits 3141 * MouseOver and MouseOut events are fired any time the mouse enters or exits
3109 * any element within the Browser. To ensure that DWT events are only 3142 * any element within the Browser. To ensure that DWT events are only
3110 * fired for mouse movements into or out of the Browser, do not fire an 3143 * fired for mouse movements into or out of the Browser, do not fire an
3111 * event if the element being exited (on MouseOver) or entered (on MouseExit) 3144 * event if the element being exited (on MouseOver) or entered (on MouseExit)
3112 * is within the Browser. 3145 * is within the Browser.
3113 */ 3146 */
3114 if (XPCOM.DOMEVENT_MOUSEOVER.equals (typeString) || XPCOM.DOMEVENT_MOUSEOUT.equals (typeString)) { 3147 if (XPCOM.DOMEVENT_MOUSEOVER.equals (typeString) || XPCOM.DOMEVENT_MOUSEOUT.equals (typeString)) {
3115 rc = domMouseEvent.GetRelatedTarget (result); 3148 nsIDOMEventTarget eventTarget;
3149 rc = domMouseEvent.GetRelatedTarget (&eventTarget);
3116 if (rc !is XPCOM.NS_OK) error (rc); 3150 if (rc !is XPCOM.NS_OK) error (rc);
3117 if (result[0] !is 0) { 3151 if (eventTarget !is null) {
3118 domMouseEvent.Release (); 3152 domMouseEvent.Release ();
3119 return XPCOM.NS_OK; 3153 return XPCOM.NS_OK;
3120 } 3154 }
3121 } 3155 }
3122 3156
3123 int[] aClientX = new int[1], aClientY = new int[1], aDetail = new int[1]; /* PRInt32 */ 3157 PRInt32 aClientX, aClientY, aDetail; /* PRInt32 */
3124 rc = domMouseEvent.GetClientX (aClientX); 3158 rc = domMouseEvent.GetClientX (&aClientX);
3125 if (rc !is XPCOM.NS_OK) error (rc); 3159 if (rc !is XPCOM.NS_OK) error (rc);
3126 rc = domMouseEvent.GetClientY (aClientY); 3160 rc = domMouseEvent.GetClientY (&aClientY);
3127 if (rc !is XPCOM.NS_OK) error (rc); 3161 if (rc !is XPCOM.NS_OK) error (rc);
3128 rc = domMouseEvent.GetDetail (aDetail); 3162 rc = domMouseEvent.GetDetail (&aDetail);
3129 if (rc !is XPCOM.NS_OK) error (rc); 3163 if (rc !is XPCOM.NS_OK) error (rc);
3130 short[] aButton = new short[1]; /* PRUint16 */ 3164 PRUint16 aButton; /* PRUint16 */
3131 rc = domMouseEvent.GetButton (aButton); 3165 rc = domMouseEvent.GetButton (&aButton);
3132 if (rc !is XPCOM.NS_OK) error (rc); 3166 if (rc !is XPCOM.NS_OK) error (rc);
3133 int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */ 3167 PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */
3134 rc = domMouseEvent.GetAltKey (aAltKey); 3168 rc = domMouseEvent.GetAltKey (&aAltKey);
3135 if (rc !is XPCOM.NS_OK) error (rc); 3169 if (rc !is XPCOM.NS_OK) error (rc);
3136 rc = domMouseEvent.GetCtrlKey (aCtrlKey); 3170 rc = domMouseEvent.GetCtrlKey (&aCtrlKey);
3137 if (rc !is XPCOM.NS_OK) error (rc); 3171 if (rc !is XPCOM.NS_OK) error (rc);
3138 rc = domMouseEvent.GetShiftKey (aShiftKey); 3172 rc = domMouseEvent.GetShiftKey (&aShiftKey);
3139 if (rc !is XPCOM.NS_OK) error (rc); 3173 if (rc !is XPCOM.NS_OK) error (rc);
3140 rc = domMouseEvent.GetMetaKey (aMetaKey); 3174 rc = domMouseEvent.GetMetaKey (&aMetaKey);
3141 if (rc !is XPCOM.NS_OK) error (rc); 3175 if (rc !is XPCOM.NS_OK) error (rc);
3142 domMouseEvent.Release (); 3176 domMouseEvent.Release ();
3143 3177
3144 Event mouseEvent = new Event (); 3178 Event mouseEvent = new Event ();
3145 mouseEvent.widget = browser; 3179 mouseEvent.widget = browser;
3146 mouseEvent.x = aClientX[0]; mouseEvent.y = aClientY[0]; 3180 mouseEvent.x = aClientX; mouseEvent.y = aClientY;
3147 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); 3181 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);
3148 3182
3149 if (XPCOM.DOMEVENT_MOUSEDOWN.equals (typeString)) { 3183 if (XPCOM.DOMEVENT_MOUSEDOWN.equals (typeString)) {
3150 mozDelegate.handleMouseDown (); 3184 mozDelegate.handleMouseDown ();
3151 mouseEvent.type = DWT.MouseDown; 3185 mouseEvent.type = DWT.MouseDown;
3152 mouseEvent.button = aButton[0] + 1; 3186 mouseEvent.button = aButton + 1;
3153 mouseEvent.count = aDetail[0]; 3187 mouseEvent.count = aDetail;
3154 } else if (XPCOM.DOMEVENT_MOUSEUP.equals (typeString)) { 3188 } else if (XPCOM.DOMEVENT_MOUSEUP.equals (typeString)) {
3155 /* 3189 /*
3156 * Bug on OSX. For some reason multiple mouseup events come from the DOM 3190 * Bug on OSX. For some reason multiple mouseup events come from the DOM
3157 * when button 3 is released on OSX. The first of these events has a count 3191 * when button 3 is released on OSX. The first of these events has a count
3158 * detail and the others do not. The workaround is to not fire received 3192 * detail and the others do not. The workaround is to not fire received
3159 * button 3 mouseup events that do not have a count since mouse events 3193 * button 3 mouseup events that do not have a count since mouse events
3160 * without a click count are not valid. 3194 * without a click count are not valid.
3161 */ 3195 */
3162 int button = aButton[0] + 1; 3196 int button = aButton + 1;
3163 int count = aDetail[0]; 3197 int count = aDetail;
3164 if (count is 0 && button is 3) return XPCOM.NS_OK; 3198 if (count is 0 && button is 3) return XPCOM.NS_OK;
3165 mouseEvent.type = DWT.MouseUp; 3199 mouseEvent.type = DWT.MouseUp;
3166 mouseEvent.button = button; 3200 mouseEvent.button = button;
3167 mouseEvent.count = count; 3201 mouseEvent.count = count;
3168 } else if (XPCOM.DOMEVENT_MOUSEMOVE.equals (typeString)) { 3202 } else if (XPCOM.DOMEVENT_MOUSEMOVE.equals (typeString)) {
3169 mouseEvent.type = DWT.MouseMove; 3203 mouseEvent.type = DWT.MouseMove;
3170 } else if (XPCOM.DOMEVENT_MOUSEWHEEL.equals (typeString)) { 3204 } else if (XPCOM.DOMEVENT_MOUSEWHEEL.equals (typeString)) {
3171 mouseEvent.type = DWT.MouseWheel; 3205 mouseEvent.type = DWT.MouseWheel;
3172 mouseEvent.count = -aDetail[0]; 3206 mouseEvent.count = -aDetail;
3173 } else if (XPCOM.DOMEVENT_MOUSEOVER.equals (typeString)) { 3207 } else if (XPCOM.DOMEVENT_MOUSEOVER.equals (typeString)) {
3174 mouseEvent.type = DWT.MouseEnter; 3208 mouseEvent.type = DWT.MouseEnter;
3175 } else if (XPCOM.DOMEVENT_MOUSEOUT.equals (typeString)) { 3209 } else if (XPCOM.DOMEVENT_MOUSEOUT.equals (typeString)) {
3176 mouseEvent.type = DWT.MouseExit; 3210 mouseEvent.type = DWT.MouseExit;
3177 } else if (XPCOM.DOMEVENT_MOUSEDRAG.equals (typeString)) { 3211 } else if (XPCOM.DOMEVENT_MOUSEDRAG.equals (typeString)) {
3178 mouseEvent.type = DWT.DragDetect; 3212 mouseEvent.type = DWT.DragDetect;
3179 mouseEvent.button = aButton[0] + 1; 3213 mouseEvent.button = aButton + 1;
3180 switch (mouseEvent.button) { 3214 switch (mouseEvent.button) {
3181 case 1: mouseEvent.stateMask |= DWT.BUTTON1; break; 3215 case 1: mouseEvent.stateMask |= DWT.BUTTON1; break;
3182 case 2: mouseEvent.stateMask |= DWT.BUTTON2; break; 3216 case 2: mouseEvent.stateMask |= DWT.BUTTON2; break;
3183 case 3: mouseEvent.stateMask |= DWT.BUTTON3; break; 3217 case 3: mouseEvent.stateMask |= DWT.BUTTON3; break;
3184 case 4: mouseEvent.stateMask |= DWT.BUTTON4; break; 3218 case 4: mouseEvent.stateMask |= DWT.BUTTON4; break;
3185 case 5: mouseEvent.stateMask |= DWT.BUTTON5; break; 3219 case 5: mouseEvent.stateMask |= DWT.BUTTON5; break;
3186 } 3220 }
3187 } 3221 }
3188 3222
3189 browser.notifyListeners (mouseEvent.type, mouseEvent); 3223 browser.notifyListeners (mouseEvent.type, mouseEvent);
3190 if (aDetail[0] is 2 && XPCOM.DOMEVENT_MOUSEDOWN.equals (typeString)) { 3224 if (aDetail is 2 && XPCOM.DOMEVENT_MOUSEDOWN.equals (typeString)) {
3191 mouseEvent = new Event (); 3225 mouseEvent = new Event ();
3192 mouseEvent.widget = browser; 3226 mouseEvent.widget = browser;
3193 mouseEvent.x = aClientX[0]; mouseEvent.y = aClientY[0]; 3227 mouseEvent.x = aClientX; mouseEvent.y = aClientY;
3194 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); 3228 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);
3195 mouseEvent.type = DWT.MouseDoubleClick; 3229 mouseEvent.type = DWT.MouseDoubleClick;
3196 mouseEvent.button = aButton[0] + 1; 3230 mouseEvent.button = aButton + 1;
3197 mouseEvent.count = aDetail[0]; 3231 mouseEvent.count = aDetail;
3198 browser.notifyListeners (mouseEvent.type, mouseEvent); 3232 browser.notifyListeners (mouseEvent.type, mouseEvent);
3199 } 3233 }
3200 return XPCOM.NS_OK; 3234 return XPCOM.NS_OK;
3201 } 3235 }
3202 } 3236 }