<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <title>Google Web Toolkit Release Notes</title>
      
      <style>
         body {
            background-color: white;
            color: black;
            font-family: Arial, sans-serif;
            font-size: small;
            margin: 20px;
         }

         li {
            margin-bottom: 0.5em;
         }

         li div {
            margin-top: 0.2em;
         }

         code {
            font-size: medium;
         }
      </style></head>

   <body>
      <h1>Google Web Toolkit Release Notes</h1>
      <ul>
        <li><a href="#Release_Notes_Current">@GWT_VERSION@</a></li>
        <li><a href="#Release_Notes_2_0_0">2.0.0</a></li>        
        <li><a href="#Release_Notes_2_0_0_rc2">2.0.0-rc2</a></li>
        <li><a href="#Release_Notes_2_0_0_rc1">2.0.0-rc1</a></li>
        <li><a href="#Release_Notes_1_7_1">1.7.1</a></li>
        <li><a href="#Release_Notes_1_7_0">1.7.0</a></li>
        <li><a href="#Release_Notes_1_6_4">1.6.4</a></li>
        <li><a href="#Release_Notes_1_6_3">1.6.3</a></li>
        <li><a href="#Release_Notes_1_6_2">1.6.2</a></li>
        <li><a href="#Release_Notes_1_5_3">1.5.3</a></li>
        <li><a href="#Release_Notes_1_5_2">1.5.2</a></li>
        <li><a href="#Release_Notes_1_5_1">1.5.1 (RC2)</a></li>
        <li><a href="#Release_Notes_1_5_0">1.5.0 (RC)</a></li>
        <li><a href="#Release_Notes_1_4_60">1.4.60</a></li>
        <li><a href="#Release_Notes_1_4_59">1.4.59 (RC2)</a></li>
        <li><a href="#Release_Notes_1_4_10">1.4.10 (RC)</a></li>
        <li><a href="#Release_Notes_1_3_3">1.3.3</a></li>
        <li><a href="#Release_Notes_1_3_1">1.3.1 (RC)</a></li>
        <li><a href="#Release_Notes_1_2_22">1.2.22</a></li>
        <li><a href="#Release_Notes_1_2_11">1.2.21 (RC)</a></li>
        <li><a href="#Release_Notes_1_1_10">1.1.10</a></li>
        <li><a href="#Release_Notes_1_1_0">1.1.0 (RC)</a></li>
        <li><a href="#Release_Notes_1_0_21">1.0.21</a></li>
      </ul>

      <hr/>
      <a name="Release_Notes_Current"></a>
      <h2>Release Notes for @GWT_VERSION@</h2>
      <p>
      This release contains fixes for bugs found in the 2.0.0 release.
      </p>
      <h3>Potentially breaking changes and fixes</h3>
      <ul>
        <li>
        Fixed a bug in how code generators collect method arguments from generated source, which impacted the Messages interfaces generated for UiBinder template files.
        In GWT 2.0, such argument names were incorrectly changed to ARGn. Most GWT applications will be unaffected, but external systems relying on these names will need to be updated.
        </li>
        <li>The development mode server will, by default, only bind to localhost which will break cross-machine debugging.  You can get the old behavior by specifying 
        <code>-bindAddress 0.0.0.0</code>.  Please see issue (#<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4322">4322</a>) for more details.</li>
        <li>The CurrencyList/CurrencyData APIs are now public - if you were relying upon these classes in their non-public location, you should only need to update your 
        imports.</li>
      </ul>
      
      <h3>Noteworthy Fixed Issues</h3>
      <ul>
        <li>UiBinder Image class with resource attribute, removes styles on that image (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4415">#4415</a>)</li>
      	<li>Widgets lose focus if its placed on FocusPanel (Opera, Safari) (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1471">#1471</a>)</li>
      	<li>Standard.css missing new layout styles (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4429">#4429</a>)</li>
      	<li>Remove method in SplitLayoutPanel is broken (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4217">#4217</a>)</li>
        <li>Splitter constructor hard codes the background color of the splitter to white (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4335">#4335</a>)</li>
        <li>Image should provide method to set alternative text (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4335">#4335</a>)</li>
        <li>CssResource cannot parse unescaped '-', '_' in class selectors and unknown at-rules (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3946">#3946</a>)</li>
        <li>Focusable implementation breaks ScrollPanels in Safari (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1313">#1313</a>)</li>
        <li>RequestBuilder restricted to GET and POST (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3388">#3388</a>)</li>
        <li>HTMLTable.Cell.getElement() calls getCellFormatter().getElement() with row and column swapped RequestBuilder restricted to GET and POST (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3757">#3757</a>)</li>
        <li>MenuBar steals focus when hovered (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3884">#3884</a>)</li>
        <li>TabLayoutPanel tabs don't line up properly on IE (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4447">#4447</a>)</li>
      </ul>
      <p>
        See the GWT issue tracker for
        <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status:Fixed,FixedNotReleased%20milestone:2_0_1&num=1000">
        the complete list of bug fixes and enhancements</a> in this release.
      </p>		      
      <hr/>
      <a name="Release_Notes_2_0_0"></a>
      <h2>Release Notes for 2.0.0</h2>
      <p>
        This release includes some minor bug fixes found in the release candidate.  See the release notes
        for <a href="#Release_Notes_2_0_0_rc1">2.0.0-rc1</a> and <a href="#Release_Notes_2_0_0_rc2">2.0.0-rc2</a>
        for the full list of features and bugs fixes included in the GWT 2.0.0 release.
      </p>
      
      <hr/>
      <a name="Release_Notes_2_0_0_rc2"></a>
      <h2>Release Notes for 2.0.0-rc2</h2>
      <h3>New Features</h3> 
      <ul>
        <li>
          GWT 2.0 introduces a number of new panels, which together form a stable basis for fast and predictable
          application-level layout. The official doc is still in progress, but for an overview please see
          <a href="http://code.google.com/p/google-web-toolkit/wiki/LayoutDesign">Layout Design</a> on the wiki.
          The new set of panels includes
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/RootLayoutPanel.html">RootLayoutPanel</a>,
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/LayoutPanel.html">LayoutPanel</a>,
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/DockLayoutPanel.html">DockLayoutPanel</a>,
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/SplitLayoutPanel.html">SplitLayoutPanel</a>,
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/StackLayoutPanel.html">StackLayoutPanel</a>, and
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/TabLayoutPanel.html">TabLayoutPanel</a>.
        </li>
        <li>
            UiBinder now directly supports <code>LayoutPanel</code>. For example:<pre style="margin-left: 2em;">
&lt;g:LayoutPanel&gt;
  &lt;g:layer left='1em' width='20px'&gt;&lt;g:Label&gt;left-width&lt;/g:Label&gt;&lt;/g:Layer&gt;
  &lt;g:layer right='1em' width='20px'&gt;&lt;g:Label&gt;right-width&lt;/g:Label&gt;&lt;/g:Layer&gt;
  &lt;g:layer&gt;&lt;g:Label&gt;nada&lt;/g:Label&gt;&lt;/g:Layer&gt;
&lt;/g:LayoutPanel&gt;</pre>
        </li>
        <li>
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/Window.Navigator.html">Window.Navigator</a>
          now provides access to the native browser's navigator object.
        </li>
      </ul> 

      <h3>Breaking changes and known issues/bugs/problems</h3> 
      <ul>
        <li>
          Windows users who have previously installed the <i>Google Web Toolkit Developer Plugin for IE</i> will have
          to uninstall the old version. Use the following steps:
          <ol>
            <li>From the Windows "Start" Menu, open "Control Panel"</li>
            <li>Select "Add/Remove Programs"</li>
            <li>Select "Google Web Toolkit Developer Plugin for IE" then click "Uninstall"</li>
            <li>
              Run Internet Explorer and browse to
              <a href="http://gwt.google.com/samples/MissingPlugin">http://gwt.google.com/samples/MissingPlugin</a>
              to install the new  version of the plugin
            </li>
          </ol>
        </li>
        <li>
          Running a <code>GWTTestCase</code> as compiled script was previously done using <code>-Dgwt.args="-web"</code>.
          The <code>-web</code> argument is now deprecated in favor of <code>-prod</code>, consistent with the
          terminology change from <i>web mode</i> to <i>production mode</i>.
        </li>
        <li>
          The <code>-portHosted</code> command line argument for <code>DevMode</code> and <code>GWTTestCase</code>
          has changed to <code>-codeServerPort</code> to be consistent with the new term <i>code server</i>.
        </li>
        <li>
          The <code>junitCreator</code> command line utility has been removed.  Instead, the <code>webAppCreator</code>
          utility takes new argument: <code>-junit <i>&lt;path-to-junit-jar&gt;</i></code>, which incorporates the
          functionality previously in junitCreator and generates <code>ant test</code> targets.
        </li>
        <li>
          When running development mode on on Chrome, any JavaScript objects that pass into Java code will
          be assigned a new property <code>__gwt_ObjectId</code>.  This could break native code that looks
          iterates through the properties of such an object.  To work around this issue, see this
          <a href="http://code.google.com/p/google-web-toolkit/source/diff?old=4807&r=7063&format=side&path=/trunk/user/src/com/google/gwt/json/client/JSONObject.java">example</a>
          of our changes to <code>JSONObject</code> (scroll to the bottom). 
        </li>
        <li>
          Compile reports (formerly SOYC reports) are now generated with the <code>-compileReport</code> command
          line flag to <code>Compiler</code>.  The generated reports are now written to the private <i>extra</i>
          directory. If no <code>-extra</code> argument is specified, this directory defaults to <code>extras/</code>.
          This eliminates an unlikely security risk of accidentally deploying compile reports to a publicly accessible location. 
        </li>
      </ul>
      <h3>Fixed Issues</h3>
      <ul>
        <li>
          In UiBinder <code>&lt;ui:style&gt;</code> blocks, css class names may contain dashes.
        </li>
        <li>
          Non-Java method safe characters in inline <ui:style> class names doesn't work
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4052">#4052</a>)
        </li>
        <li>
          @external does not work reliably for inline styles in <ui:style>
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4053">#4053</a>)
        </li>
        <li>
          Various false alarm warnings about invalid JSNI references have been fixed.
        </li>
        <li>
          Various Swing UI improvements.
        </li>
        <li>
          RPC calls leaking memory for IE
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4133">#4133</a>)
        </li>
        <li>
          deRPC raise an Error 500 instead of propagating the correct RuntimeException in ProdMode
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4237">#4237</a>)
        </li>
      </ul>

      <hr/>
      <a name="Release_Notes_2_0_0_rc1"></a>
      <h2>Release Notes for 2.0.0-rc1</h2>
      <p>
        This release contains big changes to improve developer productivity, make cross-browser development easier, and produce faster web applications. 
      </p>
      
      <h3>Things that are changing with GWT 2.0 that might otherwise be confusing without explanation</h3> 
      <ul>
        <li>
          Terminology changes: We're going to start using the term "development mode" rather than the old term "hosted mode." 
          The term "hosted mode" was sometimes confusing to people, so we'll be using the more descriptive term "development mode" from now on. 
          For similar reasons, we'll be using the term "production mode" rather than "web mode" when referring to compiled script.
        </li>
        <li>
          Changes to the distribution: Note that there's only one download, and it's no longer platform-specific. 
          You download the same zip file for every development platform. 
          This is made possible by the new plugin approach used to implement development mode (see below). 
          The distribution file does not include the browser plugins themselves; those are downloaded separately the first time you use development mode in a browser that doesn't have the plugin installed. 
        </li>
      </ul>
      
      <h3>Major New Features</h3> 
      <ul>
        <li>
          In-Browser Development Mode: Prior to 2.0, GWT hosted mode provided a special-purpose "hosted browser" to debug your GWT code. 
          In 2.0, the web page being debugged is viewed within a regular-old browser. 
          Development mode is supported through the use of a native-code plugin called the <i>Google Web Toolkit Developer Plugin</i> for many popular browsers. 
          In other words, you can use development mode directly from Safari, Firefox, Internet Explorer, and Chrome. 
        </li>
        <li>
          Code Splitting: Developer-guided code splitting with <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/core/client/GWT.html#runAsync(com.google.gwt.core.client.RunAsyncCallback)">GWT.runAsync()</a> allows you to chunk your GWT code into multiple fragments for faster startup. 
          Imagine having to download a whole movie before being able to watch it. 
          Well, that's what you have to do with most Ajax apps these days -- download the whole thing before using it. 
          With code splitting, you can arrange to load just the minimum script needed to get the application running and the user interacting, while the rest of the app is downloaded as needed. 
        </li>
        <li>
          Declarative User Interface: GWT's <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/uibinder/client/UiBinder.html">UiBinder</a> now allows you to create  user interfaces mostly declaratively. 
          Previously, widgets had to be created and assembled programmatically, requiring lots of code. 
          Now, you can use XML to declare your UI, making the code more readable, easier to maintain, and faster to develop. 
          The Mail sample has been updated to show a practical example of using UiBinder.
        </li> 
        <li>
          Bundling of resources via <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/resources/client/ClientBundle.html">ClientBundle</a>.
          GWT introduced <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/ImageBundle.html">ImageBundle</a> in 1.4 to provide automatic spriting of images. 
          ClientBundle generalizes this technique, bringing the power of combining and optimizing resources into one download to things like text files, CSS, and XML. 
          This means fewer network round trips, which in turn can decrease application latency -- especially on mobile applications. 
        </li>
        <li>
          Using HtmlUnit for running test cases based on <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/junit/client/GWTTestCase.html">GWTTestCase</a>: 
          Prior to 2.0, <code>GWTTestCase</code> relied on SWT and native code versions of actual browsers to run unit tests.
          As a result, running unit tests required starting an actual browser.          
          As of 2.0, <code>GWTTestCase</code> no longer uses SWT or native code. 
          Instead, it uses <i>HtmlUnit</i> as the built-in browser. 
          Because HtmlUnit is written entirely in the Java language, there is no longer any native code involved in typical test-driven development.
          Debugging GWT Tests in development mode can be done entirely in a Java debugger.
        </li>
      </ul> 
    
      <h3>Breaking changes and known issues/bugs/problems</h3> 
      <ul>
        <li>
          Prior to 2.0, GWT tools such as the compiler were provide in a platform-specific jar (that is, with names like <code>gwt-dev-windows.jar</code>).
          As of 2.0, GWT tools are no longer platform specific and they reside in generically-named <code>gwt-dev.jar</code>.
          You are quite likely to have to update build scripts to remove the platform-specific suffix, but that's the extent of it. 
        </li>
        <li>
          The development mode entry point has changed a few times since GWT 1.0.
          It was originally called <code>GWTShell</code>, and in GWT 1.6 a replacement entry point called <code>HostedMode</code> was introduced.
          As of GWT 2.0, to reflect the new "development mode" terminology, the new entry point for development mode is <code>com.google.gwt.dev.DevMode</code>.
          Sorry to keep changing that on ya, but the good news is that the prior entry point still works. 
          But, to really stay current, we recommend you switch to the new <code>DevMode</code> entry point.
        </li>
        <li>
          Also due to the "development mode" terminology change, the name of the ant build target produced by <code>webAppCreator</code> has changed from <code>hosted</code> to <code>devmode</code>.
          In other words, to start development mode from the command-line, type <code>ant devmode</code>.
        </li>
        <li>
          HtmlUnit does not attempt to emulate authentic browser layout. 
          Consequently, tests that are sensitive to browser layout are very likely to fail.
          However, since <code>GWTTestCase</code> supports other methods of running tests, such as Selenium, that do support accurate layout testing, it can still make sense to keep layout-sensitive tests in the same test case as non-layout-sensitive tests.  
          If you want such tests to be ignored by HtmlUnit, simply annotate the test methods with <code>@DoNotRunWith({Platform.Htmlunit})</code>. 
        </li>
        <li>
          Versions of Google Plugin for Eclipse prior to 1.2 will only allow you to add GWT release directories that include a file with a name like <code>gwt-dev-windows.jar</code>. 
          You can fool it by sym linking or copying gwt-dev.jar to the appropriate name. 
        </li>
        <li>
          The way arguments are passed to the GWT testing infrastructure has been revamped. 
          There is now a consistent syntax to support arbitrary "run styles", including user-written, with no changes to GWT itself.
          For example, <code>-selenium FF3</code> has become <code>-runStyle selenium:FF3</code>. 
          This change likely does not affect typical test invocation scripts, but if you do use <code>-Dgwt.args</code> to pass arguments to <code>GWTTestCase</code>, be aware that you may need to make some changes.
        </li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_7_1"></a>
      <h2>Release Notes for 1.7.1</h2>
      <p>
        This release adds support for Mac OS X version 10.6 (Snow Leopard) by allowing hosted mode to run with a 1.6 JRE in 32-bit
        mode (using the -d32 flag).
      </p>
      <h3>Fixed Issues</h3>
      <ul>
        <li>
          Allow hosted mode using a 1.6 JRE with the -d32 flag
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3843">#3843</a>, 
          <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3998">#3998</a>)
        </li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_7_0"></a>
      <h2>Release Notes for 1.7.0</h2>
      <p>
        This release adds explicit support for Internet Explorer 8, Firefox 3.5, and Safari 4 as well as a few high-priority bug fixes.
        In all other respects, it is very similar to GWT 1.6.
        Note, however, that this release is version 1.7.0 rather than version 1.6.5 to signify a potentially breaking change for libraries 
        that use deferred binding to specialize code based on user agent (see the next section for technical details).
      </p>
      <h3>Potentially breaking changes and fixes</h3>
      <ul>
        <li>
          This release includes explicit support for IE8, which has some significant behavioral changes from prior versions of IE.
          These changes are great enough that the new value <code>ie8</code> has been added for the <code>user.agent</code> deferred binding client property.
          If you have deferred binding rules (i.e. <code>&lt;replace-with&gt;</code> or <code>&lt;generate-with&gt;</code>) or property providers 
          that are sensitive to <code>user.agent</code>, you may need to update them to account for the <code>ie8</code> value. 
          For more information, see the <a href="http://code.google.com/p/google-web-toolkit/wiki/IE8Support">technical notes</a>.
        </li>
      </ul>

      <h3>Fixed Issues</h3>
      <ul>
        <li>
          Updated GWT libraries to support IE8 
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3558">#3558</a>, 
          <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3329">#3329</a>)
        </li>
        <li>Native exception in Node.is() (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3644">#3644</a>)</li>
        <li>
          Incorrect firing of two click events from CheckBox and a related issue 
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3508">#3508</a>,  
          <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3679">#3679</a>)
        </li>
        <li>Compiler java.lang.StackOverflowError if you don't use -Xss to set a stack size (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3510">#3510</a>)</li>
        <li>Mouse wheel in FF3 (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=2902">#2902</a>)</li>
        <li>GWT outputs expressions too long for WebKit (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3455">#3455</a>)</li>
        <li>java.sql.Date.valueOf error (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3731">#3731</a>)</li>
        <li>Added a workaround for Firefox 3.5 regression (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=497780">bugzilla #497780</a>)</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_6_4"></a>
      <h2>Release Notes for 1.6.4</h2>
      <h3>Fixed Issues</h3>
      <ul>
        <li>The classpath in the scripts created by junitCreator was updated to refer to <code>/war/WEB-INF/classes</code> rather than <code>/bin</code>.</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_6_3"></a>
      <h2>Release Notes for 1.6.3 (RC2)</h2>
      <h3>Fixed Issues</h3>
      <ul>
        <li>Various <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3496">servlet classpath issues</a> introduced in 1.6.2 are resolved.</li>
        <li>JSP compilation should work out of the box in hosted mode.</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_6_2"></a>
      <h2>Release Notes for 1.6.2 (RC)</h2>
      <p>
         Please see <a href="http://code.google.com/webtoolkit/doc/1.6/ReleaseNotes_1_6.html">What's new in GWT 1.6?</a> (online)
      </p>

      <hr/>
      <a name="Release_Notes_1_5_3"></a>
      <h2>Release Notes for 1.5.3</h2>
      <h3>Fixed Issues</h3>
      <ul>
        <li>RPC requests no longer fail on the embedded Android web browser</li>
        <li>Leaf <code>TreeItems</code> now line up with their non-leaf siblings</li>
        <li>Removing the last child node from a <code>TreeItem</code> no longer creates extra margins on the left</li>
        <li><code>HTTPRequest</code> no longer uses POST instead of GET on some IE installs because of incorrect XHR selection</li>
        <li>Compiler now uses a more reliable check to prevent methods with local variables from being inlined</li>
        <li><code>getAbsoluteTop()/Left()</code> can no longer return non-integral values</li>
        <li><code>Time.valueOf()</code> no longer fails to parse <code>"08:00:00"</code> or incorrectly accepts <code>"0xC:0xB:0xA"</code>.</li>
      </ul>
      <p>
        See the GWT issue tracker for
        <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%2CFixedNotReleased%20milestone%3A1_5_3&num=1000">
        the complete list of bug fixes and enhancements</a> in this release.
      </p>

      <hr/>
      <a name="Release_Notes_1_5_2"></a>
      <h2>Release Notes for 1.5.2</h2>
      <h3>Potentially breaking changes and fixes</h3>
      <ul>
        <li><code>History.onHistoryChanged()</code> has been added back (it was missing from 1.5 RC2) but is now deprecated.  Application startup should be handled by calling the new <code>History.fireCurrentHistoryState()</code>.</li>
        <li>Fields marked <code>final</code> in serializable types will now generate a warning; the fact that they were not being serialized was a source of confusion.  Mark such fields both <code>final</code> and <code>transient</code> to avoid the warning.</li>
        <li>Instance methods on overlay types cannot be accessed from JSNI.  (This used to work in hosted mode, but failed at runtime in web mode.)</li>
        <li>The hosted mode server no longer serves <code>hosted.html</code> from a module's public path; instead the file is read directly from the classpath.  This file is tightly coupled with the hosted mode implementation and was not meant to be user overridable.</li>
      </ul>
      <h3>General Enhancements</h3>
      <ul>
        <li><code>Collections.unmodifiableSortedSet()</code> and <code>Collections.unmodifiableSortedMap()</code> are now implemented.</li>
        <li>The new <code>Accessibility</code> class enables widget authors to add ARIA support to their widgets.  Many GWT widgets come with ARIA support by default.</li>
        <li>Improved exception stack traces in hosted mode when JSNI stack frames are present.</li>
      </ul>
      <h3>Fixed Issues</h3>
      <ul>
        <li>Fixed the relationship between the coordinates returned by <code>Element.getAbsoluteLeft/Top()</code> and <code>Event.getClientX/Y()</code>.  <code>Document.getBodyOffsetLeft/Top()</code> can be used to account for the difference between these two coordinate systems.</li>
        <li><b>Ctrl-Z</b> should correctly perform an undo operation in RichTextArea on IE.</li>
      </ul>
      <p>
        See the GWT issue tracker for
        <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%2CFixedNotReleased%20milestone%3A1_5_Final&num=1000">
        the complete list of bug fixes and enhancements</a> in this release.
      </p>

      <hr/>
      <a name="Release_Notes_1_5_1"></a>
      <h2>Release Notes for 1.5.1 (RC2)</h2>
      <h3>Support for Standards Mode</h3>
      <p>
      GWT 1.5 adds significantly more support for standards mode applications, but some widgets (especially those with table based layouts) may not behave as expected.  The low level standards mode bugs (such as with <code>getAbsoluteLeft/Top()</code>) have been addressed, but some of the constructs that our widgets rely on do not work in standards mode.  For example, you cannot set the height and width of a widget relative to its parent if its parent is a table cell, and <code>StackPanel</code> takes up much more vertical space than it should in Internet Explorer.  All of our samples have been reverted back to quirks mode, and the <code>applicationCreator</code> defaults to quirks mode when creating a new GWT app.
      </p>
      <p>
      You can still use standards mode for your GWT app, but please be aware that you may notice some layout issues.  If you are switching an app from quirks mode to standards mode, your CSS styles might be applied differently, which could also affect your application.  We will continue to address standards mode support in future GWT releases.
      </p>
      <h3>Potentially breaking changes and fixes</h3>
      <ul>
        <li><code>DOM.eventGetClientX/Y()</code> now takes into account the margin and border of the body element</li>
        <li>In hosted mode, all <code>DOM.eventGetXXX()</code> methods now assert that the requested attribute is reliable across all supported browsers.  This means that attempting to retrieve an attribute for an event that does not support that attribute will now throw an assertion error instead of returning a coerced value.  Most notably, the click event throws an assertion error if you attempt to get the mouse button that was clicked.</li>
        <li>The return value of <code>DOM.eventGetXXX()</code> methods are now coerced to 0 instead of -1 in web mode.  In hosted mode, an assertion error will be thrown if the attribute is not defined for the given event, as described in the previous bullet.</li>
        <li>Opera specific code has been upgraded to work with Opera 9.5, but may not work with older versions of Opera as we only support the most recent release.  Specifically, some widgets may not be able to receive focus.</li>
        <li>Calls to <code>History.newItem()</code> now trigger an <code>onHistoryChanged()</code> event synchronously instead of asynchronously</li>
      </ul>
      <h3>General Enhancements</h3>
      <ul>
        <li>Added support for the <code>contextmenu</code> event, which allows users to detect and override the browser's default context menu</li>
        <li>Improved performance of <code>NumberFormat</code></li>
        <li>Added support for altering the number of decimals in a currency in <code>NumberFormat</code></li>
        <li>Improved performance of Animations</li>
        <li>Improved the appearance of the default GWT style themes</li>
        <li>Improved the Showcase sample with more robust examples and more language translations</li>
        <li><code>FormPanel</code> can now wrap an existing form and still submit it to a hidden iframe</li>
      </ul>
      <h3>Fixed Issues</h3>
      <ul>
        <li><code>DOM.getAbsoluteLeft/Top()</code> and <code>DOM.eventGetClientX/Y()</code> no longer log an exception to the console in Firefox 3</li>
        <li>Fixed a memory leak in Internet Explorer</li>
        <li><code>DOM.getAbsoluteLeft/Top()</code> now takes into account the margin and border of the target element in Safari 3</li>
        <li>Fixed some bugs associated with history support</li>
      </ul>
      <p>
        See the GWT issue tracker for
        <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_5_RC2%20type%3Adefect&num=1000">
        the complete list of bug fixes and enhancements</a> in this release.
      </p>

      <hr/>
      <a name="Release_Notes_1_5_0"></a>
      <h2>Release Notes for 1.5.0 (RC)</h2>
      <p>
      This release candidate is, in a word, huge. Rather than including all the details here, please see <a href="http://code.google.com/docreader/#p(google-web-toolkit-doc-1-5)t(Whatsnewin15)">What's New in GWT 1.5?</a> for full details. The main thing you'll want to know is that GWT 1.5 supports the Java 5 language features (generics, enumerated types, annotations, etc.). But check out the full notes, because there's a lot of great stuff!
      </p>

      <hr/>
      <a name="Release_Notes_1_4_60"></a>
      <h2>Release Notes for 1.4.60</h2>
      <p>
      This release has only a couple of minor changes from <a href="#Release_Notes_1_4_59">1.4.59</a>.
      </p>
      <ul>
        <li>Fixed a bug in the benchmarking that prevented source code from showing up in reports.</li>
        <li>Fixed a bug in the hosted mode servlet context emulation where getResource() would fail to
        find a file in a module's public path.</li>
        <li>Compiler output files of the form <code><i>module</i>.cache.html</code> used to contain html
        intended as a helpful note to a developer.  This message has now been removed because screen
        readers and some browsers would display this content to end users.</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_4_59"></a>
      <h2>Release Notes for 1.4.59 (RC2)</h2>
      <p>
      This release includes numerous bugfixes and a few important changes.  If you are upgrading from GWT 1.3.3, you
      are strongly encouraged to read the <a href="#Release_Notes_1_4_10">release notes for 1.4.10</a> first.
      </p>

      <h3>New Features</h3>
      <ul>
        <li><a href="doc/html/com.google.gwt.user.client.DOM.html#eventGetCurrentEvent()">DOM.eventGetCurrentEvent()</a> now provides
        global access to the current Event object. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1309">#1309</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.PopupPanel.html#setPopupPositionAndShow(com.google.gwt.user.client.ui.PopupPanel.PositionCallback)">PopupPanel.setPopupPositionAndShow(PopupCallback callback)</a>
        now provides now provides a simpler and bulletproof way to control the layout of popups. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1120">#1120</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1243">#1243</a>)</li>
        <li>The <a href="doc/html/com.google.gwt.user.client.ui.SuggestionHandler.html">SuggestionHandler</a> interface
        can be used to respond to the user selecting a suggstion in the 
        <a href="doc/html/com.google.gwt.user.client.ui.SuggestBox.html">SuggestBox</a>. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1086">#1086</a>)</li>
        <li><a
          href="doc/html/java.util.Collection.html">Collection.toArray(Object[])</a>
        is now implemented. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=695">#695</a>)</li>
        <li>If you have it installed, <a href="http://gears.google.com/">Google Gears</a> is now accessible in hosted mode
        (Windows only). (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1252">#1252</a>)</li>
      </ul>

      <h3>General Changes</h3>
      <ul>
        <li>Startup is now faster and more reliable. In particular,
        <a href="doc/html/com.google.gwt.core.client.EntryPoint.html#onModuleLoad()">onModuleLoad()</a> is now called as soon
        as the DOM is ready, which will generally be before the page's body.onload() event is fired. This allows your application
        to startup before certain resources (such as images) are fully loaded.</li>
        <li>Linux hosted mode should be less crashy. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1105">#1105</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1281">#1281</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1358">#1358</a>)</li>
        <li>An important discussion of HTTP headers, caching, and HTTPS has been added to the 
        <a
          href="doc/html/com.google.gwt.user.client.ui.ImageBundle.html">ImageBundle</a>
        documentation. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1172">#1172</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.PopupPanel.html#center()">PopupPanel.center()</a> now causes
        the popup to be shown as well as centered. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1120">#1120</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.RichTextArea.html">RichTextArea</a> underwent number of
        bugfixes and should be stable now. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1130">#1130</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1214">#1214</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1276">#1276</a>)</li>
        <li>New <a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html">RPC</a> warnings
          <ul>
            <li>Warn if a non-checked exception is used in the throws clause of a RemoteService method.</li>
            <li>Warn if no concrete, serializable subclasses can be found for a given type declared in a
            RemoteService interface.</li>
          </ul>
        </li>
        <li><a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html">RPC</a> now generates a serialization
        policy file during compilation.  The serialization policy file contains a whitelist of allowed types which may be
        serialized.  Its name is a strong hash name followed by <code>.gwt.rpc</code>.  This file must be deployed to your web
        server as a public resource, accessible from a 
        <a href="doc/html/com.google.gwt.user.server.rpc.RemoteServiceServlet.html">RemoteServiceServlet</a>
        via <code>ServletContext.getResource()</code>.  If
        it is not deployed properly, RPC will run in 1.3.3 compatibility mode and refuse to serialize types implementing
        <a href="doc/html/java.io.Serializable.html">Serializable</a>. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1297">#1297</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.Panel.html#adopt(com.google.gwt.user.client.ui.Widget,%20com.google.gwt.user.client.Element)">Panel.adopt(Widget, Element)</a>
        and
        <a href="doc/html/com.google.gwt.user.client.ui.Panel.html#disown(com.google.gwt.user.client.ui.Widget)">Panel.disown(Widget)</a>
        have been deprecated.  If you have subclassed Panel, please carefully review the new documentation for
        <a href="doc/html/com.google.gwt.user.client.ui.Panel.html#add(com.google.gwt.user.client.ui.Widget)">Panel.add(Widget)</a>
        and
        <a href="doc/html/com.google.gwt.user.client.ui.Panel.html#remove(com.google.gwt.user.client.ui.Widget)">Panel.remove(Widget)</a>
        for details on the correct way to add and remove Widgets from Panels.
        (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1121">#1121</a>)</li>
        <li>The benchmark viewer application is now faster, prettier, and a bit
        more user friendly.</li>
      </ul>

      <h3>Retractions from 1.4.10</h3>
      <ul>
        <li>Breaking changes to the semantics of
        <a href="doc/html/com.google.gwt.user.client.ui.UIObject.html#setStyleName(java.lang.String)">UIObject.setStyleName()</a>
        have been backed out.  All changes relative to 1.3.3 should now be
        backwards-compatible. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1079">#1079</a>)</li>
        <li>The linux distribution of 1.4.10 bundled Mozilla 1.7.13 instead of version 1.7.12, which is bundled in previous
        releases.  This change caused problems on some systems, so it's been
        reverted back to Mozilla 1.7.12 again. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1105">#1105</a>)</li>
        <li>Numerous RPC warnings were added in 1.4.10.  One of these warnings would be issued when a class containing
        native methods was found to be serializable.  This warning now only applies to automatically serialized types;
        types with custom serializers will no longer trigger this warning. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1161">#1161</a>)</li>
        <li>A change to RPC in 1.4.10 would cause an error to be issued if a serializable type had any subtypes that were
        not serializable.  This change caused code that worked in 1.3.3 to fail in 1.4.10.  In this release, the error has
        been downgraded to a warning. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1163">#1163</a>)</li>
        <li>A potentially breaking change to event bubbling in 1.4.10 has been
        backed out in favor of the 1.3.3 behavior. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1159">#1159</a>)</li>
      </ul>

      <h3>Fixed Issues</h3>
      <p>
      See the GWT issue tracker for
      <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_4_RC2%20type%3Adefect&num=1000">the
      complete list of bug fixes</a> in this release.</p>

      <hr/>
      <a name="Release_Notes_1_4_10"></a>
      <h2>Release Notes for 1.4.10 (RC)</h2>
      <p>
      This is the Release Candidate for GWT 1.4, the first GWT release developed with major participation
      from GWT open source contributors.  It's been a long time coming, but we hope it's been worth the wait.
      In addition to tons of new features, optimizations, and performance enhancements, we've fixed more than
      150 bugs.  There are some important behavioral and potentially breaking API changes; if you read nothing
      else, please read these following sections!
      </p>

      <h3>Behavioral Changes</h3>
      <p>Important changes in the behavior of existing GWT features.</p>
      <h4>Critical Changes to RPC</h4>
      In previous versions, the RPC subsystem was too lenient and failed to warn at compile time about potential (though unusual)
      edge cases that could in theory cause problems at runtime.  Beginning with version 1.4, the RPC subsystem emits additional warnings and errors to help 
      you identify error-prone constructs.  While this new behavior may seem annoying at first, rest assured that fixing your code to avoid RPC warnings will result in a smaller, faster, and more reliable app.
      <ul>
        <li><b>Bad code that happened to work before might not now</b><br/>
        Previously, if you declared one particular component type via @gwt.typeArgs at compile time, you could
        often get away with passing a different type at runtime.  For example, placing a Date in an
        ArrayList of String might work.  This type of code is less likely to work now and will likely become more
        strict in the future.  Bottom line: don't do this. Make sure collections only contain the declared item type (or subtypes thereof).
        </li>
        <li><b><a href="doc/html/java.io.Serializable.html">Serializable</a> equivalent to
        <a href="doc/html/com.google.gwt.user.client.rpc.IsSerializable.html">IsSerializable</a></b><br/>
        Although GWT's RPC mechanism doesn't purport to honor the semantics of Java serialization, by popular demand, Serializable and
        IsSerializable are now equivalent for the purposes of RPC.  This should improve server-side
        interoperability and remove much of the need for DTOs.
        </li>
        <li><b>Warn about missing gwt.typeArgs</b><br/>
        Every Collection or Map type should have an associated
        <a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.SerializableTypes.html">gwt.typeArgs
        javadoc annotation</a>.  In the past, a missing @gwt.typeArgs would generally have no noticeable effect,
        because a bug in the RPC system would generate code for all available serializable types, even if they
        weren't used in your service interface.  Now that this bug has been fixed, you can achieve <b>significant</b>
        reduction in the size of your compiled output by fixing these warnings.
        </li>
        <li><b>Warn about serializable subclasses that violate the serialization restrictions</b><br/>
        An RPC warning is emitted for classes that are assignable to IsSerializable or Serializable but that lack a default
        constructor or contain fields which cannot be serialized. 
        It is important to resolve these warnings to avoid rare but confusing situations in which exceptions would be thrown at runtime.
        </li>
        <li><b>Warn about non-transient, final instance fields</b><br/>
        RPC has never actually serialized <code>final</code> instance fields, but now it explicitly warns about the existence of such fields unless they are also <code>transient</code>.  
        Thus, the warning can be addressed by making <code>final</code> instance fields <code>transient</code> as well, or it can be suppressed via a module property.
        </li>
        <li><b>Warn about local and non-static nested types that implement IsSerializable or Serializable</b><br/>
        RPC has never serialized these kinds of classes and will now generate a warning.
        </li>
        <li><b>Warn about native methods in serializable classes</b><br/>
        Attempting to serialize classes that contain <code>native</code> methods will cause UnsatisfiedLinkErrors if such methods are called in server-side code.
        </li>
      </ul>
      <h4>Module Script Tags</h4>
      <ul>
        <li>In previous versions of GWT, including external JavaScript files via a module &lt;script&gt; tag required a nested JavaScript expression &mdash; called a <i>script-ready function</i> &mdash; that would
        determine when the script had been successfully loaded.  Script load order is now handled automatically and
        these expressions are ignored.  A warning will be issued in hosted mode.  For reference, see
        <a href="doc/html/com.google.gwt.doc.DeveloperGuide.Fundamentals.Modules.AutomaticResourceInjection.html">here</a>.
        </li>
      </ul>
      <h4>Additional Hosted Mode Checks Related to JSNI</h4>
      <ul>
        <li>Previously, when passing values from JavaScript into Java, hosted mode would silently coerce
        a JavaScript value of an incorrect type into the declared Java type.  Unfortunately, this would
        allow code to work in hosted mode that could fail in unexpected ways in web mode.  Hosted mode
        will now throw a HostedModeException if you try to pass an incompatible type.  See
        <a href="doc/html/com.google.gwt.doc.DeveloperGuide.JavaScriptNativeInterface.Marshaling.html">here</a>
        for more details.
        </li>
      </ul>

      <h3>Breaking API Changes</h3>
      This release also includes API changes that may require minor tweaks to existing code.  Any such changes
      that affect you should only take a few minutes to rectify.

      <h4><a href="doc/html/com.google.gwt.core.client.JavaScriptObject.html">JavaScriptObject</a></h4>
      <ul>
        <li>Although subclassing JavaScriptObject is not supported, some people do so anyway at their own risk :) 
        Please note that the existing (int) constructor has been removed in favor of a protected no-arg constructor.  Read the source code for
        <a href="doc/html/com.google.gwt.user.client.Element.html">Element</a> for an example of how JavaScriptObject must
        be subclassed now (that is, if subclassing were supported...which, of course, it isn't).
        </li>
      </ul>
      <h4><a href="doc/html/com.google.gwt.user.client.DeferredCommand.html">DeferredCommand</a></h4>
      <ul>
        <li>The add() method is deprecated in favor of addCommand() in order to support the new
        <a href="doc/html/com.google.gwt.user.client.IncrementalCommand.html">IncrementalCommand</a> interface.  Had we
        simply added a new method overload, existing code that passed in a null literal would have failed to compile.</li>
        <li>The new addPause() method should be used instead of add(null).</li>
      </ul>
      <h4><a href="doc/html/com.google.gwt.user.client.ui.UIObject.html">UIObject</a></h4>
      <ul>
        <li>The intended use and behavior of style names has been formalized in UIObject (and therefore in all widgets). All style
        names are now classified as "primary", "secondary", and "dependent" styles, the meanings of which are detailed in the UIObject
        documentation. The relevant method signatures remain unchanged (get/setStyleName(), add/removeStyleName()), and most
        widgets should be unaffected. One potentially breaking change, however, is that an exception is thrown if an attempt is made to remove the primary style name of a widget using removeStyleName().
        See the UIObject documentation for a full explanation.</li>
      </ul>

      <h3>New Features</h3>
      Here are a few of the coolest new features and enhancements in GWT 1.4.
      <ul>
        <li><b>Size and Speed Optimizations</b><ul>
           <li>New <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=610">size</a>
           <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=599">improvements</a> in the GWT compiler
           produce JavaScript that is 10-20% smaller; just recompile your app with 1.4.</li>
           <li>An enhanced startup sequence reduces the size of your module's startup script by 80%. More importantly, the
           new startup sequence removes an HTTP round-trip, making startup latency about 33% faster.</li>
           <li>The above optimizations combined with <a href="#ImageBundle">ImageBundle</a>, make it possible for GWT-based applications
           to load surprisingly quickly. To see for yourself, check out startup time of the
           <a href="samples/Mail/www/com.google.gwt.sample.mail.Mail/Mail.html">Mail</a> sample.</li>
        </ul></li>
        <li><b>Deployment Enhancements</b><ul>
           <li>GWT RPC is no longer tied to exclusively to servlets. New
           <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=389">modularized RPC</a> server code makes
           it easy to connect GWT RPC to your choice of Java back-ends.</li>
           <li>Adding GWT modules to an HTML page has been simplified. Instead of adding a &lt;meta name='gwt:module'&gt; and
           &lt;script src='gwt.js'&gt;, you just add a single script element for your module.</li>
           <li>Cross-site script inclusion is now supported. The compiler produces a "-xs" (meaning "cross-site") version of
           your module's startup script that can be included without being restricted by the same-origin policy. WARNING:
           including scripts from other sites that you don't fully trust is a
           <a href="http://groups.google.com/group/Google-Web-Toolkit/web/security-for-gwt-applications">big security risk</a>.</li>
        </ul></li>
        <li><b>Widget and Library Enhancements</b><ul>
           <li><a href="doc/html/com.google.gwt.user.client.ui.RichTextArea.html">RichTextArea</a> allows "drop in"
           functionality for rich text editing.</li>
           <li><a href="doc/html/com.google.gwt.user.client.ui.SuggestBox.html">SuggestBox</a> makes it easy to add
           auto-complete functionality.</li>
           <li>Splitters! <a href="doc/html/com.google.gwt.user.client.ui.HorizontalSplitPanel.html">HorizontalSplitPanel</a>
           and <a href="doc/html/com.google.gwt.user.client.ui.VerticalSplitPanel.html">VerticalSplitPanel</a> enable you to
           resize portions of the user interface.</li>
           <li><a href="doc/html/com.google.gwt.user.client.ui.PushButton.html">PushButton</a> and
           <a href="doc/html/com.google.gwt.user.client.ui.ToggleButton.html">ToggleButton</a> are easy-to-customize button
           widgets that can enhance the look-and-feel of your UI.</li>
           <li><a href="doc/html/com.google.gwt.user.client.ui.DisclosurePanel.html">DisclosurePanel</a> is a simple,
           nice-looking panel that lets users easily hide and show portions of your application UI.</li>
           <li><a href="doc/html/com.google.gwt.i18n.client.DateTimeFormat.html">DateTimeFormat</a> and
           <a href="doc/html/com.google.gwt.i18n.client.NumberFormat.html">NumberFormat</a> make it easy to format and parse
           dates, times, and numbers for users all over the world.</li>
           <li><a href="doc/html/com.google.gwt.user.client.IncrementalCommand.html">IncrementalCommand</a> helps you
           implement long-running tasks in your client code without triggering "slow script" warnings.</li>
           <li>A new <a href="http://docs.google.com/View?docid=d9s6nb7_1d723ft">benchmarking subsystem</a> integrates with
           JUnit to let you record and compare the speed of code snippets across multiple browsers and multiple parameter
           ranges. Benchmarking is a powerful way to identify bottlenecks and compare performance of alternative implementations.</li>
           <li>The oft-requested <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=21">java.io.Serializable</a> is
           now included in the JRE emulation library and is synonymous with IsSerializable for the purpose of GWT RPC.</li>
           <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=844">Mouse wheel events</a> are now available
           on a variety of widgets.</li>
        </ul></li>
        <a name="ImageBundle"></a>
        <li><b><a href="doc/html/com.google.gwt.user.client.ui.ImageBundle.html">ImageBundle</a></b><ul>
           <li>ImageBundle is the single biggest have-to-see-it-to-believe-it feature in this release. Image bundles make it trivially
           easy to combine dozens of images into a single "image strip", collapsing what would have been dozens of HTTP requests into
           one: a single, permanently-cacheable image file.</li>
           <li>Image bundles manage everything for you automatically, from computing clipping rectangles to making transparent PNGs
           work in IE6. You can even choose to get the clipped image as an Image widget or as pure HTML for inclusion in a larger HTML
           template.</li>
           <li>In addition to enabling a blazing-fast startup, image bundles help make the UI look better during startup, too. Typical
           AJAX apps exhibit "bouncy relayout" as individual images are loaded one-at-a-time. Fixing this problem has historically
           required laboriously pre-initializing the width and height of each individual image ahead of time. Image bundles do the
           same thing automatically. The dimensions of each clipped image are computed at compile time while the bundled
           image file is being created. Voila! The result is a fast, non-ugly user startup experience that requires no extra work on
           the part of the GWT developer to keep up-to-date.</li>
           <li>See the <a href="doc/html/com.google.gwt.doc.DeveloperGuide.UserInterface.ImageBundles.html">doc section</a> for more
           details.</li>
        </ul></li>
      </ul>
      
      <p>
      See the GWT issue tracker for
      <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_4_RC%20type%3Aenhancement&num=1000">the
      complete list of enhancements</a> in this release.</p>
 
      <h3>Fixed Issues</h3>
      <p>
      See the GWT issue tracker for
      <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_4_RC%20type%3Adefect&num=1000">the
      complete list of bug fixes</a> in this release.</p>

      <hr/>
      <a name="Release_Notes_1_3_3"></a>
      <h2>Release Notes for 1.3.3</h2>
      <p>
      This version has only minor functional changes from 1.3.1, listed below.
      </p>

      <h3>Fixed Issues</h3>
      <ul>
        <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=319">Issue #319 - Calling native super method in implementation class results in infinite loop in web mode</a></li>
        <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=496">Issue #496 - gwt.js in gwt-user.jar lacks Apache 2.0 license header</a></li>
        <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=497">Issue #497 - Unexpected internal compiler error - Analyzing permutation #1</a></li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_3_1"></a>
      <h2>Release Notes for 1.3.1 (RC)</h2>
      <p>
      This is the Release Candidate for GWT 1.3, the first completely open source version of GWT. 
      This version has no new functionality, but we did make a lot of changes to get the source code and build scripts into presentable shape to prepare for ongoing open source development.
      Although the changes were relatively harmless -- formatting, sorting, more documentation, and a new build system -- there's always a small chance of problems, so we plan to call this a Release Candidate until we've convinced ourselves it's reliable.
      </p>

      <h3>Useful Links</h3>
      <ul>
        <li><b><a href="http://code.google.com/webtoolkit/makinggwtbetter.html">Making GWT Better</a></b>
        <br>This is our new GWT open source charter that describes how we plan to operate the project and how you can access the GWT source, compile it yourself, and contribute.</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/list">The GWT Issue Tracker</a></b>
        <br>Please report any bugs in 1.3 RC that weren't in 1.2.22 in the GWT issue tracker. These would be likely related to the new build, and we want to know ASAP so we can fix them.</li>
        <li><b><a href="http://google-web-toolkit.googlecode.com/svn/">The GWT Subversion Repository</a></b>
        <br>Visit the online repository to browse the GWT source without a Subversion client.</li>
      </ul>
      
      <hr/>
      <a name="Release_Notes_1_2_22"></a>
      <h2>Release Notes for 1.2.22</h2>
      <p>
      This is the official GWT 1.2 release, the follow up to the <a href="#Release_Notes_1_2_11">GWT 1.2 Release Candidate</a>.
      It includes all of the enhancements and bug fixes from GWT 1.2 RC as well as a few additional bug fixes that were reported against GWT 1.2 RC.</p>
      
      <h3>About OS X Hosted Mode Support</h3>
      GWT's hosted mode support is available only on OS X 1.4 (Tiger) or later.

      <h3>Useful Links</h3>
      <ul>
        
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_2_Final">Changes included in GWT 1.2 since the RC</a></b>
        <br>Also see the GWT Blog for a discussion of the <a href="http://googlewebtoolkit.blogspot.com/2006/11/wrapping-up-gwt-12-soon.html">noteworthy issues related to 1.2 RC</a></li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_2_RC">New features and bug fixes in GWT 1.2 RC</a></b></li>
      </ul>
      
      <h3>Breaking API Changes</h3>
      There are no breaking changes to pre-1.2 APIs, but one method has been renamed in a class that was new in 1.2 RC.
      
      <h4>com.google.gwt.http.client.RequestBuilder</h4>
      The method <code>addHeader()</code> was renamed to <code>setHeader()</code> to more clearly reflect its intent. 
      You will only be affected by this change if you are using the new HTTP functionality available as of build 1.2.11.

      <hr/>
      <a name="Release_Notes_1_2_11"></a>
      <h2>Release Notes for 1.2.11 (RC)</h2>
      <p>
      This is the Release Candidate for GWT 1.2. 
      Between this build and the subsequent GWT 1.2 official release, changes are limited to issues unique to GWT 1.2 RC.
      
      <p>
      See the GWT issue tracker for <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_2_RC">the complete list of enhancements and bug fixes</a> in this release.</p>
      
      <h3>New Features</h3>
      <ul>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=91">Full support for OS X development</a></b>
        <br>Develop with GWT on OS X as easily as on Linux and Windows</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=93">Much faster hosted mode</a></b>
        <br>Hosted mode startup time has improved significantly, but, even better, refreshes are now lightning fast &mdash; even when your source changes</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=52">New HTTP request module</a></b>
        <br>The HTTP functionality that GWT users have been asking for (custom headers, status code, timeouts, and more), all wrapped up in an API that's easier to use than the JavaScript XMLHttpRequest object</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=10">Widgets in TreeItems</a></b>
        <br>Tree items can now contain arbitrary widgets...finally, you can easily create trees with checkboxes :-)</li>
      </ul>
      </p>
      
      <hr/>
      <a name="Release_Notes_1_1_10"></a>
      <h2>Release Notes for 1.1.10</h2>
      <p/>
      <h3>Fixed Issues</h3>
      <ul>
        <li>Normalized behavior of GWT.getModuleBaseURL() with respect to hosted mode, web mode, RPC, and automatic resource injection
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/6c2b23e90008b6b9">post #1</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/1bb47f2cff671ef0">post #2</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3408c38464c57d4a">post #3</a>]
        </li>
        <li>Clarified message in Grid class related to row/column out of bounds error
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/e5e130cba766d126">post</a>]
        </li>
        <li>i18nCreator fixed to work with Java 5.0
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3b6452a068ebec63">post</a>]
        </li>
        <li>I18NSync (and therefore -i18n scripts) changed to replace dots with underscores when generating method names
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/6a4e05beb094a5a2">post</a>]
        </li>
        <li>Additional character escaping in JSON strings
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/5f437d12ba83fff0">post</a>]
        </li>
        <li>Fixed bug calling toString() on nested JSON objects
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/ee81aa5411dece71">post</a>]
        </li>
        <li>Fixed bug that caused the default font size of text in a FocusPanel to be zero
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/2f5abf147c5550c4">post</a>]
        </li>
        <li>Fixed TabPanel.insert() with asHTML argument
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/8f427dbe76ce2c49/">post</a>]
        </li>
        <li>Popups and DialogBoxes no longer underlap lists and combos in IE6
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/6815ec29d2c404e2">post</a>]
        </li>
        <li>DialogBoxes can no longer be dragged beoynd the upper left corner of the browser window
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/28390f32c42f7940">post</a>]
        </li>
        <li>Buttons inside of FormPanels no longer automatically submit on Firefox; this is still a problem some versions of Safari and Opera
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/72bea3a6d4feeaeb">post</a>]
        </li>
        <li>TabPanel now sets the height of the internal DeckPanel to 100% to ensure all available space is used
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/4cd09f04bc515696">post</a>]
        </li>
        <li>Fixed bug in Mozilla that was causing DialogBox.onKeyPressPreview() to see key as 0
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/8147b4b219a8fbc7">post</a>]
        </li>
        <li>DockPanel no longer lays out with a DeferredCommand; this makes it possible to correctly measure the size of PopupPanel
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/7bbb89e4c97ae1e6">post</a>]
        </li>
        <li>SimplePanel is no longer abstract
        </li>
        <li>Double click now fires correctly on IE6
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/2d16242dc7fb830f">post</a>]
        </li>
        <li>Fixed RPC bug that caused deserialization errors or infinite loops with self-referential object graphs
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/2a8658e93e2a8de3">post</a>]
        </li>
        <li>Fixed RPC bug that caused deserialization to fail on character arrays containing null characters
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/f60f5d5552a3d26b">post</a>]
        </li>
        <li>Serializable classes whose superclass is serialized by a custom field serializer are now correctly deserialized on the server
        </li>
        <li>Fixed bug related to FocusPanel that sometimes manifested during RPC async responses
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/edd16ede4f891db8">post</a>]
        </li>
        <li>Fixed bug in JUnit assertEquals() for floating point values (delta was not honored correctly)
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/b0e06cc253915b86">post</a>]
        </li>
        <li>Fixed internal compiler errors related to nested local subclasses, empty for loop expressions, and no-op unary plus operator.
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/d8ecf70acc4e5b0e">post #1</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/4da8dcbab9479a80">post #2</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/a9f17bf30d0116b">post #3</a>]
        </li>
        <li>Fixed infinite loop in Integer.toHexString()
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3f9c3f4df08fb523">post</a>]
        </li>
        <li>Compiler now handling filesystem symbolic links in project structure
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/1597c73888d1acd9">post</a>]
        </li>
        <li>Fixed rare JVM crash in Windows hosted mode related to JSNI function pointers
        </li>
      </ul>
      
      <hr/>
      <a name="Release_Notes_1_1_0"></a>
      <h2>Release Notes for 1.1.0 (RC)</h2>
      <p/>
      <h3>New Features</h3>
      <ul>
        <li><b><a href="doc/html/com.google.gwt.user.client.ui.FileUpload.html">FileUpload widget</a></b><br>The much-requested file upload widget
        </li><li><b><a href="doc/html/com.google.gwt.user.client.ui.FormPanel.html">FormPanel widget</a></b><br>Easily submit traditional HTML forms from GWT apps
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html">RPC optimizations</a></b><br>Client and server performance improvements and a more compact wire format
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.Fundamentals.Modules.AutomaticResourceInjection.html">Automatic Resource Injection</a></b><br>Modules can contain references to external JavaScript and CSS files, causing them to be automatically loaded when the module itself is loaded
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.Internationalization.html">Internationalization</a></b><br>Easily localize strings and formatted messages
        </li><li><b><a href="doc/html/com.google.gwt.xml.client.html">XML classes</a></b><br>An XML library based on the W3C DOM
        </li><li><b><a href="doc/html/com.google.gwt.json.client.html">JSON classes</a></b><br>JSON has moved into <code>gwt-user.jar</code>, and it's much faster than the sample that shipped with 1.0.21
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.JUnitIntegration.html">JUnit enhancements</a></b><br>Unit tests are much, much faster than in 1.0.21, easier to configure, and you can now test asynchronous things like RPCs and timers
        </li><li><b><a href="doc/javadoc/index.html">Javadoc</a></b><br>Now included for your convenience, with sample code fragments
        </li><li><b><code>gwt-servlet.jar</code></b><br>Although you should continue to build against <code>gwt-user.jar</code> as always, 
        you only need to deploy <code>gwt-servlet.jar</code> with your webapps; it contains the subset of <code>gwt-user.jar</code> you'll need to support RPC
      </li></ul>
         There are also a significant number of bug fixes from all the great feedback we've gotten from the developer forum. 
         Please see the <a href="#Release_Notes">additional release notes</a> for detailed information about other important changes in
         Google Web Toolkit since the previous release, including a few breaking API changes that we don't want to catch you off guard.
      </p>
      
      <h3>Fixed Issues</h3>
      <ul>
        <li><a href="http://code.google.com/webtoolkit/issues/4794724.html">Issue #4794724 - Servlet container problems due to gwt-user.jar including javax.servlet classes</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/1676686.html">Issue #1676686 - Hosted mode problems in Windows 2000</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/6606675.html">Issue #6606675 - ListBox and Image widgets are missing CSS style names</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/5922226.html">Issue #5922226 - Casts from interface types to concrete class types can fail</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/4137736.html">Issue #4137736 - Referencing an outer local from a field initializer causes NullPointerException</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/2518888.html">Issue #2518888 - Problem with "return" statements in constructors</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/9984353.html">Issue #9984353 - Hosted Mode server throws IllegalArgumentException when system is set to non-english locale</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/3733199.html">Issue #3733199 - Shrinking Grid via resizeRows() leads to inconsistent state</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/7659250.html">Issue #7659250 - Hosted mode on default Fedora Core 5 complains of missing libstdc++.so.5</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/6531240.html">Issue #6531240 - Empty if, while, do, and for statements cause Compiler Error</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/4927592.html">Issue #4927592 - Multiple initializations in for loop initializer causes internal compiler error.</a></li>
      </ul>

      <p>See the <a href="#Appendix">appendix of fixed issues</a> for the nitty-gritty list of things that we have fixed in this release, including smaller issues.</p>

      <h3>Behavioral Changes</h3>
      <p>Important changes in the behavior of existing GWT features.</p>
      <h4>Module Source and Public Paths</h4>
      <ul>
        <li>In previous versions of GWT, source and public path inclusions were based on physical
        directory structure; only files physically located with the module would be included. Going
        forward, source and public path inclusions are based on logical package structure. Once a package
        has been included, any files in that package become visible no matter where they are physically
        located.
        </li>
      </ul>
      <h4>JUnit Modules</h4>
      <ul>
        <li>GWT test modules (that is, modules intended to run GWTTestCase-derived JUnit test cases) no longer
        need to inherit the <code>com.google.gwt.junit.JUnit</code> module. Additionally, it is no longer an
        error to declare entry points within a test module (they will be ignored when running under JUnit).
        Most test cases can now simply use the existing application module, which should simplify test case
        configuration.
        </li>
      </ul>

      <h3>Breaking API Changes</h3>
      Based on user feedback, we've made a few API changes in this release that may require minor tweaks to your existing code when you upgrade.
      Any such changes that affect you should only take a few minutes to rectify.

      <h4>com.google.gwt.user.client.ui.HasWidgets</h4>
      <ul>
        <li>We've moved add(), remove(), and clear() into this interface, so that any widget that can contain other widgets will be bound to this contract.</li>
        <li>The add() method no longer returns a boolean.  If a panel either cannot add a child widget without extra arguments, or cannot accept further widgets, it will throw an exception.  This is in keeping with the fact that this is usually the result of an error in the code.</li>
        <li>Its iterator is now required to support the remove() method.</li>
      </ul>
      <h4>com.google.gwt.user.client.ui.Composite</h4>
      <ul>
        <li>Composites must now call initWidget() in their constructors, rather than setWidget().  This is more indicative of its actual purpose, and also serves to clear up any confusion with SimplePanel's setWidget() method.  Composite.setWidget() is now deprecated.</li>
      </ul>
      <h4>com.google.gwt.user.client.ui.SimplePanel and subclasses</h4>
      <ul>
        <li>
        We have added setWidget() to SimplePanel, which has more appropriate semantics for a panel that can contain only one child.  
        The add() method is still present through the HasWidgets interface, but will fail if a widget is already present.  
        This change is most likely to affect you if you use DialogBox or PopupPanel. To fix it, simply change your call to add() to setWidget() instead. 
        </li>
      </ul>
      <h4>com.google.gwt.user.client.Cookies</h4>
      <ul>
        <li>Cookies.getCookie() is now static, as it should have been from the beginning.  There is no need to instantiate this class now.</li>
        <li>You can now set cookies as well!</li>
      </ul>

      <a name="Appendix"></a>
      <h3>Appendix: Complete List of Fixed Issues</h3>

      <p>
        The list of issues below is a short synopsis of all of the major and minor issues fixed in this release.  
        See the <a href="http://code.google.com/webtoolkit/issues/">online GWT issues database</a> for the important common issues.</p>
      <ul>
        <li>String.matches(regex) should exist and doesn't</li>
        <li>Need a way to set individual List items selected/unselected (applies to multi-select listboxes)</li>
        <li>DOM needs setBooleanAttribute, getBooleanAttribute.</li>
        <li>HTMLTable.CellFormatter needs getStyleName() to match setStyleName().</li>
        <li>FlexTable's internal widget map does not correctly adjust for the user inserting rows and cells.<br></li>
        <li>Window.getTitle/setTitle should be static</li>
        <li># characters in filenames cause compilation to fail.</li>
        <li>DynaTable has incorrect HTML</li>
        <li>Change Timer API to use int not long</li>
        <li>In hosted mode JSNI, marshall Java longs as VT_R8 </li>
        <li>Popups are not always positioned properly on Safari.</li>
        <li>SWT source inclusion is wrong.</li>
        <li>Safari crashes on exit under some circumstances.</li>
        <li>TreeLogger throws away exception info in console mode.</li>
        <li>Window needs a private ctor</li>
        <li>Phone home version checking should actually compare ordering of version number</li>
        <li>Hosted Mode server throws IllegalArgumentException when system is set to non-english locale</li>
        <li>Trees have an unsightly 16-pixel left margin.</li>
        <li>SimplePanel.remove() broken.</li>
        <li>ScrollPanel doesn't implement SourcesScrollEvents.</li>
        <li>Make junit-web output to www dir</li>
        <li>Add "hidden" feature to ArgHandler system.</li>
        <li>JUnitShell could hang forever.</li>
        <li>1.5 VM fails to run junit because StackTraceElement 0-arg constructor disappeared.</li>
        <li>Panel and ComplexPanel still have methods from old version of HasWidgets.</li>
        <li>Nested tables can fire events from the wrong one.</li>
        <li>Make sure JSNI refs to functions can be passed around and used as real function pointers.</li>
        <li>AbsolutePanel doesn't position its children consistently.</li>
        <li>JSONParser does not handle generic JSONValues in the encoded json string correctly; always assumes its a JSONObject</li>
        <li>Remove -notHeadless from GWTShell (only applies to GWTUnitTestShell)</li>
        <li>Number of results returned from split() differs in Java/JavaScript (see description)</li>
        <li>Helper scripts don't work for base package.</li>
        <li>Grid fails to update row count when removing.</li>
        <li>JSONString, toString does not enclose its characters in double quotes</li>
        <li>Selection issue when removing widgets from TabPanel.</li>
        <li>JSONParser always assumes root type is JSONObject</li>
        <li>ClassSourceFileComposer should not handle Class objects.</li>
        <li>Modules cannot supercede files from inherited modules</li>
        <li>Simple &amp; ComplexPanel shouldn't implement getChildCount(), getChild(), etc.</li>
        <li>Negative byte values passed into JavaScript become positive</li>
        <li>The rpc servlet needs a thread-local HttpServletResponse to match the thread-local request.</li>
        <li>Appending char to a String behaves incorrectly.</li>
        <li>Remove STL dependency from gwt-ll</li>
        <li>Using xhtml doctype causes popups to be misplaced on Mozilla browsers.</li>
        <li>JsniInjector fails to match lines when there are Javadoc comments.</li>
        <li>Add whitelist bypass for hosted browser</li>
        <li>PopupPanel example is wrong.</li>
        <li>UIObject needs a title property.</li>
        <li>JSNI methods in local classes don't work in hosted mode.</li>
        <li>HashMap throws a JavaScript error under some circumstances.</li>
        <li>Source and Public module tags should be logical instead of physical.</li>
        <li>Document that module source and public tags are now logical rather than physical.<br></li>
        <li>Default .launch file fails to use project's full classpath.</li>
        <li>RemoteServiceServlet sends back HTTP 200 OK but no content under WebSphere.</li>
        <li>Widget.onLoad() is called too early sometimes.</li>
        <li>Is it really a good idea to have add(Widget) on Panel?</li>
        <li>Web-mode JUnit that reports via RPC</li>
        <li>Tree fires onTreeItemStateChanged twice.</li>
        <li>Make JSON APIs part of gwt-user.jar</li>
        <li>Async JUnit</li>
        <li>String.equalsIgnoreCase(null) throws exception in web mode</li>
        <li>Using a class literal for a pruned typed causes ICE</li>
        <li>Make all built-in implementations of HasWidgets.iterator() support remove().</li>
        <li>JSON is slow in Web mode</li>
        <li>StringBuffer uses string concatenation, and is n-squared as a result</li>
        <li>Identical Strings can compare false in web mode.</li>
        <li>Tweaks to the property provider environment to support locale and improve code uniformity b/w hosted and web mode<br></li>
        <li>Server-side serialization is unusably slow for large data sets</li>
        <li>Client side serialization is unusably slow for large datasets</li>
        <li>Format source for JUnitTestCaseStubGeneratorm, ServerSerializationStream</li>
        <li>MethodDispatch not working correctly on IE.</li>
        <li>JavaScriptObject rescuing is incomplete.</li>
        <li>Reduce RPC wire size by not quoting non-strings.</li>
        <li>Cyclic object graphs can be corrupted during deserialization on the server</li>
        <li>Test methods that throw checked exceptions cause the generated code to fail to compile</li>
        <li>Allow RemoteServiceResponse compression to be controlled by subclasses</li>
        <li>Startup timing bug makes RootPanel.get(id) throw an NPE</li>
        <li>Change whitelist/blacklist settings to be command-line switches rather than system properties</li>
        <li>KeyCode is always 0 for keypress events on Mozilla.</li>
        <li>Add Panel.remove(int) convenience method.</li>
        <li>File Upload Widget</li>
        <li>PopupPanel needs to deal better with being empty.</li>
        <li>CheckBox.setEnabled() has reversed sense.</li>
        <li>History tokens have problems with URL encoding.</li>
        <li>Loosen restriction on when DockPanel.CENTER child may be added.</li>
        <li>AbsolutePanel needs getWidgetLeft() and getWidgetTop().</li>
        <li>Decision: how should FlowPanel behave?</li>
        <li>Samples with composites need to call initWidget() instead of the deprecated setWidget().</li>
        <li>RootPanel.get(String) should not be clearing the div's contents.</li>
        <li>ListBox, Image, and Hyperlink are missing style names, despite doc</li>
        <li>Hyperlink.removeClickListener is broken.</li>
        <li>Don't allow tabs to word-wrap internally on TabPanel</li>
        <li>Turkish locale problem with the RPC generated code - probably affects others too</li>
        <li>StackPanel.add() totally screwy.</li>
        <li>Referencing a field that could cause static initialization fails to cause a side effect.</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_0_21"></a>
      <h2>Release Notes for 1.0.21</h2>
      <p/>
      <h3>Fixed Issues</h3>
      <ul>
         <li><a href='http://code.google.com/webtoolkit/issues/5823700.html'>Issue #5823700 - GWT hosted mode does not work when IE 7 is installed</a>
         <li><a href='http://code.google.com/webtoolkit/issues/8840603.html'>Issue #8840603 - GWT applications do not run in IE 7</a>
         <li><a href='http://code.google.com/webtoolkit/issues/3844117.html'>Issue #3844117 - Cannot reference a final local variable from a deep inner class</a>
         <li><a href='http://code.google.com/webtoolkit/issues/9157420.html'>Issue #9157420 - Compiler reports errors for non-ASCII characters (UTF-8 not supported)</a>
         <li><a href='http://code.google.com/webtoolkit/issues/1524429.html'>Issue #1524429 - RPC exception due to empty strings</a>
         <li><a href='http://code.google.com/webtoolkit/issues/6000056.html'>Issue #6000056 - ArrayStoreException initializing multi-dimensional arrays</a>
         <li><a href='http://code.google.com/webtoolkit/issues/3490506.html'>Issue #3490506 - Tree widget remove() bug</a>
         <li><a href='http://code.google.com/webtoolkit/issues/8201889.html'>Issue #8201889 - Generated RPC proxy code fails to pull in String intrinsically</a>
         <li><a href='http://code.google.com/webtoolkit/issues/1600857.html'>Issue #1600857 - TabPanel getWidgetIndex() recursion</a>
         <li><a href='http://code.google.com/webtoolkit/issues/2705290.html'>Issue #2705290 - TabPanel widget does not remove tabs properly</a>
         <li><a href='http://code.google.com/webtoolkit/issues/9377889.html'>Issue #9377889 - TabBar method insertTab() not honoring 'asHTML' parameter</a>
         <li><a href='http://code.google.com/webtoolkit/issues/4387606.html'>Issue #4387606 - FlexTable and Grid issues</a>
      </ul>
   </body></html>
