<!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 name="copyright" content="Copyright (c) Eclipse contributors and others 2018, 2019. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
<meta http-equiv="Content-Language" content="en-us"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link rel="STYLESHEET" href="../book.css" type="text/css"/>
<style type="text/css">
body {max-width: 900px;}
table.news col.title {width: 30%;}
/*img {max-width: 520px;}*/
table.news {table-layout: fixed; border-collapse: collapse; width: 100%;}
table.news td {border-top: solid thin black; padding: 10px; overflow: visible;}
table.news tr {vertical-align: top;}
table.news tr td.section {font-size: 20px; font-weight: bold;}
table.news tr td.title {vertical-align: top; font-weight: bold;}
table.news tr td.content {vertical-align: top;}
ul {padding-left: 13px;}
</style>
<title>Eclipse Platform What's New in 4.13</title>
</head>

<body>
<h2>What's New in Eclipse 4.13</h2>
<p>Here are descriptions of some of the changes of interest to plug-in developers
made to the Eclipse Platform and SWT for the 4.13 release of Eclipse.
</p>
<ul>
	<li><a href="#Platform">Platform Changes</a></li>
	<li><a href="#SWT">SWT Changes</a></li>
	<li><a href="#JFace">JFace Changes</a></li>
</ul>

<p>
New features oriented towards end-users of the platform
can be viewed in the 
<a href="../../org.eclipse.platform.doc.user/whatsNew/platform_whatsnew.html">What's New</a>
section of the Workbench User Guide.
</p>

<!-- ****************** START OF N&N TABLE****************** -->
<table class="news">
<colgroup>
  <col class="title" />
  <col />
</colgroup>
<tbody>
  <!-- ******************** Platform ********************** -->
  <tr>
    <td id="Platform" class="section" colspan="2"><h2>Platform Changes</h2></td>
  </tr>
 
  <tr id="generic-editor-icon"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=513034 -->
    <td class="title">Content-type-specific icons in generic editor</td>
    <td class="content">
      An extension was added to the generic editor so that it now can provide icons for content-type. See extension point <b>org.eclipse.ui.genericeditor.icons</b> for more details.
      <p>
        <img src="images/generic-editor-icon.png" alt="" />
      </p>
    </td>
  </tr>
 
  <tr id="multiline-sfe"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=548650 -->
  <td class="title">Multiline Support for StringFieldEditor</td>
  <td class="content">
    The implementation of <code>StringFieldEditor</code> now provides the option to use a multi-line Text widget, suitable
    for editing larger String values in a preference page.
  </td>
  </tr>

  <tr id="request-specific-quickaccess"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=548058 -->
  <td class="title">API to compute Quick Access proposals according to user input</td>
  <td class="content">
    An extension interface <b><code>org.eclipse.ui.quickaccess.IQuickAccessComputerExtension</code></b> to use as extension to
    <code>org.eclipse.ui.quickaccess.IQuickAccessComputer</code> when using extension point <code>org.eclipse.ui.quickaccess/computer</code>
    was added. This provides the ability to compute a new extra set of proposals whenever filter change.
  </td>
  </tr>

  <tr id="javax-injext">
  <td class="title">Bundle org.eclipse.core.runtime no longer reexports javax.inject</td>
  <td class="content">
    The org.eclipse.core.runtime bundle had <code>javax.inject</code> as an <b>optional</b> dependency, which it
    previously reexported, but not anymore.
    <p>
     Technically, it's not a breaking change as <code>javax.inject</code> was never
     guaranteed to be there thus whether it is reexported or not was not certain. Eclipse Platform can not guarantee the API stability of this package so it makes no 
     sense to make such a promise.
    </p>
    <p>
     Clients have to <code>Import-Package: javax.inject</code> explicitly if they need it.
    </p>
  </td>
  </tr>

  <tr id="non-persisted-ui"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=544871 -->
  <td class="title">E4XMIResource optionally filters Transient UI Elements</td>
  <td class="content">
      When using the E4XMIResource directly, transient UI elements are no longer filtered by default.
      Note that transient UI elements are filtered by default when saved from the application.
      
      <p>To filter transient UI elements, call the save method with the new option
      <code>options.put(E4XMIResource.OPTION_FILTER_PERSIST_STATE, Boolean.TRUE); resource.save(options);</code></p>
  </td>
  </tr>
   <tr id="logging-api"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=550347  -->
  <td class="title">Simplified Platform logging API</td>
  <td class="content">
      Platform provides convenient logging API, <code>Platform.getLog(Class)</code>  which can be used to access the log for the bundle to which the class belongs.
  </td>
  </tr>
  <tr id="monitor-logging"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=482062 -->
  <td class="title">Tracing option for correct progress reporting usage</td>
  <td class="content">
      Earlier releases added support for tracing the correct usage of progress monitors. Unfortunately, this was missed while documenting in previous noteworthy documents.
      
      <p>To enable this tracing, add <code>org.eclipse.equinox.common/progress_monitors=true</code> in your ".options" file and start Eclipse via the -debug flag, or use the tracing option in the launch configuration.
      </p>
        <p>
        <img src="images/progress-monitor.png" alt="" />
      </p>
  </td>
  </tr>
  <!-- ******************** End of Platform ********************** -->

  <!-- *********************** SWT *********************** -->
  <tr>
    <td id="SWT" class="section" colspan="2"><h2>SWT Changes</h2></td>
  </tr>

  <tr id="gdkpixbuf-imageloader"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=545032 -->
    <td class="title">New native implementation of ImageLoader on GTK</td>
    <td class="content">
      The implementation of <code>ImageLoader</code> on GTK now uses the native <code>GdkPixbuf</code> API for image loading and saving.
      <p>
       Key highlights of the new ImageLoader on GTK:
      </p>
      <ul>
       <li>Loading and saving images has native performance, with a significant speedup especially in loading JPEG files</li>
       <li>Better GIF animation support</li>
       <li>Support for more image formats</li>
      </ul>
    </td>
  </tr>

  <tr id="gtk-toolitem-padding"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=395296 -->
    <td class="title">Reduced ToolItem padding on GTK</td>
    <td class="content">
      A fix in <code>ToolItem</code> has greatly reduced the size of some toolbars on GTK.
      <p>
       Previously, all <code>ToolItem</code>s were the same size as the largest of them in a given toolbar. With this fix, items are
      now independently sized, which reduces the total size of toolbars that contain large items.
      </p>
     <p>
      EGit's Rebase Interactive view is a good example of this fix. In the following screenshot, the toolbar shown on top has
      the fix applied, compared to the larger, unpatched toolbar on the bottom.
     </p>
     <p><img src="images/gtk-toolitem-padding.png" alt="ToolItems with reduced padding compared to before"/></p>
    </td>
  </tr>

  <tr id="win32-text-search-cancel"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=293230 -->
    <td class="title">Search/Cancel icons supported in Text widget on Windows</td>
    <td class="content">
      The Text widget on Windows now supports displaying the search and cancel icons for <code>SWT.ICON_SEARCH</code> and <code>SWT.ICON_CANCEL</code> styles respectively.
      With the Windows support added, these style APIs are now supported on all the three platforms and are no longer marked as a <code>HINT</code>.
      <p><img src="images/win32-text-search-cancel.png" alt="Text widget with search and clear buttons"/></p>
    </td>
  </tr>

  <tr id="swt-is-dark-theme"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=549451 -->
    <td class="title">API to query if current OS theme is dark</td>
    <td class="content">
      A new method <code>public static boolean Display.isSystemDarkTheme()</code> is now available to query if the current OS theme has a dark appearance.
      The method returns <code>true</code> if the current OS theme is dark, else it returns <code>false</code>.
    </td>
  </tr>

  <tr id="swt-styled-text-disabled"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=4745 -->
    <td class="title">StyledText now supports a disabled look</td>
    <td class="content">
      The StyledText widget now supports a disabled look on all platforms when <code>StyledText.setEnabled(false)</code> is called.
			<p><img src="images/styled-text-disabled-gtk.png" alt=""/></p>
			<p><img src="images/styled-text-disabled-win.png" alt=""/></p>
			<p><img src="images/styled-text-disabled-mac.png" alt=""/></p>
    </td>
  </tr>
  
  <tr id="swt-disabled-colors"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=548190 -->
    <td class="title">New color constants for disabled widgets</td>
    <td class="content">
      Two new color constants are available in SWT, to match the colors used in disabled widgets. <code>SWT.COLOR_TEXT_DISABLED_BACKGROUND</code> matches the background color of a disabled text widget, and
			<code>SWT.COLOR_WIDGET_DISABLED_FOREGROUND</code> matches the foreground color of a disabled widget.
    </td>
  </tr>
  
  <tr id="swt-snippet-explorer"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=547934 -->
    <td class="title">SWT Snippet Explorer</td>
    <td class="content">
      The <a href="https://www.eclipse.org/swt/snippets/" target="_blank">SWT Snippets</a> project in the <a href="https://git.eclipse.org/c/platform/eclipse.platform.swt.git/" target="_blank">SWT repository</a> now includes a simple application called SnippetExplorer which can list, search and launch single or 
      multiple snippets at once. It also shows the snippets description, source code and a preview image where applicable.
      <p><img src="images/swt-snippet-explorer.png" alt=""/></p>
    </td>
  </tr>
  
  <tr id="swt-gtk-input-methods"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=548628 -->
    <td class="title">Input method switching on GTK</td>
    <td class="content">
      Early versions of GTK3 allowed the input method to be changed at the application level. This
      functionality has been deprecated for quite some time, and has now been removed from SWT.
      <p>To change the input method, please use the global input method settings available in the desktop environment.</p>
    </td>
  </tr>
  
  <!-- *********************** End of SWT *********************** -->

  <!-- *********************** JFace *********************** -->
  <tr>
    <td id="JFace" class="section" colspan="2"><h2>JFace Changes</h2></td>
  </tr>

  <tr id="columnViewEditor-cycleTabTraversal">  <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=549194 -->
    <td class="title">New ColumnViewerEditor tab traversal added</td>
    <td class="content">
      Tabbing to the start or end of a viewer (during an inline edit) is
      now possible by passing
      <b><code>ColumnViewerEditor.TABBING_CYCLE_IN_VIEWER</code></b> as a feature when calling
      <code>TableViewerEditor.create(viewer,
        editorActivationStrategy, feature)</code> or <code>TreeViewerEditor.create(viewer, editorActivationStrategy,
        feature)</code>.
      <p>
        With this new feature flag enabled:
      </p>
      <ul>
        <li>
          Pressing <b>Tab</b> while editing the <b>last item</b> in a
          viewer starts an inline edit on the <b>first item</b>.
        </li>
        <li>
          Pressing <b>Shift+Tab</b> while editing the first item starts an
          inline edit on the last item.
        </li>
      </ul>
    </td>
  </tr>
  <!-- *********************** End of JFace *********************** -->

</tbody>
</table>
<!-- ****************** END OF N&N TABLE ****************** -->

</body>
</html>
