Mercurial > projects > dwt-linux
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 } |