<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Language" content="en-us" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="default_style.css" type="text/css" title="main" media="screen" />
<title>Eclipse Project Neon (4.6) M3 News</title>
</head>
<body>
<h1>Eclipse Project Neon (4.6) M3 - New and Noteworthy</h1>
<p>Here are some of the more noteworthy things available in the Neon milestone build M3
  which is now available for <a href="http://download.eclipse.org/eclipse/downloads/#4.6_Stable_Build" target="_top">download</a>.
  <br/>
  We also recommend to read the Tips and Tricks, either via <b>Help &gt; Tips and Tricks...</b> or online for
  <a href="http://help.eclipse.org/topic/org.eclipse.platform.doc.user/tips/platform_tips.html">Platform</a>,
  <a href="http://help.eclipse.org/topic/org.eclipse.jdt.doc.user/tips/jdt_tips.html">JDT</a>, and
  <a href="http://help.eclipse.org/topic/org.eclipse.pde.doc.user/tips/pde_tips.htm">PDE</a>.
</p>

<ul>
  <li><a href="#Platform">Platform</a></li>
  <li><a href="#Platform-Dev">Platform Developers</a></li>
  <li><a href="#JDT">JDT</a></li>
  <li><a href="#Equinox">Equinox</a></li>
</ul>

<table class="news">
  <colgroup>
    <col class="title" />
    <col />
  </colgroup>

  <tr>
    <td colspan="2" class="section" id="Platform">Platform</td>
  </tr>
  
  <tr id="hidetoolbars">
    <td class="title">Hide the window toolbars</td>
    <td class="content">
     	You can use the <b>Toggle Visibility of all Toolbars</b> command (via Quick Access: <b>Ctrl+3</b> or <b>Command+3</b>) to hide
     	all currently visible toolbars of the currently window. Selecting the command again, reveals these toolbars again. 
     	This allows the developer to maximize the space 
     	available for editors and views. If you minimize a stack after you selected this command, 
     	the minimized stack will be visible until you trigger the command to hide the toolbars again. This allows
     	you to decide which minimized stacks are currently useful for you.
     	<p>
     		The following is a screenshot of the IDE with a maximized Java editor and several toolbars visible. 
     	</p>
      	<p>
      		<img src="images/ide-with-toolbars.png" alt=""/>
      	</p>
      	<p>
      		The next screenshot shows the same maximized editor but with hidden toolbars.
      	</p>
      	<p>
      		<img src="images/ide-full-screen.png" alt=""/>
      	</p>
    </td>
  </tr>

  <tr id="workspaceselection">
    <td class="title">Changes to the Eclipse workspace launcher</td>
    <td class="content">
      The Eclipse workspace selection dialog wording was adjusted, as new Eclipse users reported that 
      usage of the term workspace was not well explained. The old text also implied that projects 
      need to be stored in the workspace, but that's not necessary. 
      <p>
        The recent directory list was also increased to 10. It used to be 5. You can still adjust this value on
        <b>Preferences &gt; General &gt; Startup and Shutdown &gt; Workspaces</b>.
      </p>
      <p>
        The reworked dialog looks like this:
      </p>
      <p>
        <img src="images/newlauncher.png" alt=""/>
      </p>
    </td>
  </tr>

  <tr id="gtk3-menus">
    <td class="title">Improved menu support on GTK3</td>
    <td class="content">
      The SWT GTK3 port has received an update to its menus as part of the push to update SWT
      to GTK3. Here are some of the notable changes.
      <p>Padding: By default, SWT menus now look similar to those in OS X: Text is not strictly aligned.
         This is due to a new way in which menus are constructed in GTK3 (see <a href="https://wiki.gnome.org/HowDoI/GMenu#Icons">
         https://wiki.gnome.org/HowDoI/GMenu#Icons</a> for more details). In order to align all text entries in a menu, simply launch
         the SWT application with the environment variable <b>SWT_PADDED_MENU_ITEMS=1</b>.</p>
      <p>Checkboxes and images: On GTK2.x, a menu entry was limited to either a checkbox <i>or</i> an image.
         On GTK3, SWT now supports menu entries that contain both an image and a checkbox.</p>
      <p>The image below shows a screenshot of the default GTK3 menu on the left,
         compared to an aligned GTK3 menu on the right.</p>
          <img src="images/gtk3-menu-comparison.png" alt=""/>
    </td>
  </tr>

  <tr id="ant-version-upgrade">
    <td class="title">Ant 1.9.6</td>
    <td class="content">
      Eclipse has adopted Ant version 1.9.6.
    </td>
  </tr>


  <tr>
    <td colspan="2" class="section" id="Platform-Dev">Platform Developers</td>
  </tr>

  <tr id="nomove">
    <td class="title">Support to create immovable Shells</td>
    <td class="content">
      SWT has added a new style constant <code>SWT.NO_MOVE</code> to create a Shell with no move behavior. Using this style will create the
      title trim even if no other trim style is specified. The title trim will not be created when <code>SWT.NO_TRIM</code> is specified.
      Note that this style bit is a hint.
      <p>
      	<img src="images/nomove-shell.png" alt=""/>
      </p>
    </td>
  </tr>

  <tr>
    <td colspan="2" class="section" id="JDT">JDT</td>
  </tr>

  <tr id="if-null-templates">
    <td class="title">ifNotNull/ifNull templates</td>
    <td class="content">
      The Java editor now offers default templates for creating "== null" and "!= null" checks.
      <p>
        <img src="images/if-null-template.png" alt=""/>
      </p>
    </td>
  </tr>

  <tr id="info-severity">
    <td class="title">New problem severity level to indicate information</td>
    <td class="content">
      You can now specify <b>Info</b> as a severity level for the problems detected by the Eclipse Java compiler.
        <p>
          <img src="images/info-severity.png" alt=""/>
        </p>      
      When specified, the information issued by the compiler will be represented as shown here:
        <p>
          <img src="images/info-in-problems-view.png" alt=""/>
        </p>
    </td>
  </tr>


  <tr>
    <td colspan="2" class="section" id="Equinox">Equinox</td>
  </tr>

  <tr id="adapters">
    <td class="title">Adapters.adapt(...) API</td>
    <td class="content">
      <code>org.eclipse.core.runtime.Adapters.adapt(...)</code> provides a new unified way to access every kind of adapter. It checks for
      implemented interfaces, IAdaptable, and adapters registered with the adapter manager.
      It may also activate plug-ins if necessary to provide the requested adapter.
      And it also performs a null check on the source object, so calling code doesn't have to do that. 
<pre><code>// Old way
IResource selectedResource;
if (selection instanceof IAdaptable) {
  selectedResource = ((IAdaptable)selection).getAdapter(IResource.class);
}

// New way
IResource selectedResource = Adapters.adapt(selection, IResource.class);
</code></pre>
    </td>
  </tr>

  <tr id="submonitor.split">
    <td class="title">SubMonitor.split</td>
    <td class="content">
      <code>org.eclipse.core.runtime.SubMonitor.split(...)</code> is an easy, efficient way to check for Job cancellation without any
      boilerplate. It creates a new child progress monitor, checks for cancellation, and 
      throws OperationCanceledException if necessary. Using this instead of SubMonitor.newChild
      or SubProgressMonitor will guarantee that your Jobs respond to cancellation quickly.

<pre><code>
// Old way
void myMethod(IProgressMonitor monitor) {
  SubMonitor subMonitor = SubMonitor.convert(monitor, 2);
  if (subMonitor.isCanceled()) {
    throw new OperationCanceledException();
  }
  childMethod1(subMonitor.newChild(1));
  if (subMonitor.isCanceled()) {
    throw new OperationCanceledException();
  }
  childMethod2(subMonitor.newChild(1));
}

// New way
void myMethod(IProgressMonitor monitor) {
  SubMonitor subMonitor = SubMonitor.convert(monitor, 2);
  childMethod1(subMonitor.split(1));
  childMethod2(subMonitor.split(1));
}
</code></pre>
    </td>
  </tr>

  <tr id="suppress_iscanceled">
    <td class="title">SUPPRESS_ISCANCELED</td>
    <td class="content">
      SubMonitor.SUPPRESS_ISCANCELED allows you to suppress cancellation checks without
      also suppressing progress reporting. This should be used in place of a null progress
      monitor when running a critical section that shouldn't be cancelled.
<pre><code>
// Old way
void myMethod(IProgressMonitor monitor) {
  SubMonitor subMonitor = SubMonitor.convert(monitor, 2);
  uncancellableMethod(null);
  subMonitor.worked(1)
  cancellableMethod(subMonitor.newChild(1));
}

// New way
void myMethod(IProgressMonitor monitor) {
  SubMonitor subMonitor = SubMonitor.convert(monitor, 2);
  uncancellableMethod(subMonitor.newChild(1,
      SubMonitor.SUPPRESS_ISCANCELED | SubMonitor.SUPPRESS_BEGINTASK);
  cancellableMethod(subMonitor.newChild(1));
}</code></pre>
    </td>
    </tr>
  <tr>
    <td colspan="2"/>
  </tr>
</table>

<p>The above features are just the ones that are new since the previous milestone
build. Summaries for earlier Neon milestone builds:</p>
<ul>
  <li><a href="https://www.eclipse.org/eclipse/news/4.6/M2/">News for Eclipse Neon milestone build M2</a></li>
  <li><a href="https://www.eclipse.org/eclipse/news/4.6/M1/">News for Eclipse Neon milestone build M1</a></li>
</ul>

</body>
</html>
