<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<?xml-stylesheet type="text/xml" href="../../nbbuild/javadoctools/apichanges.xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<!--

INFO FOR PEOPLE ADDING CHANGES:

Check the DTD (apichanges.dtd) for details on the syntax. You do not
need to regenerate the HTML, as this is part of Javadoc generation; just
change the XML. Rough syntax of a change (several parts optional):

<change>
    <api name="compiler"/>
    <summary>Some brief description here, can use <b>XHTML</b></summary>
    <version major="1" minor="99"/>
    <date day="13" month="6" year="2001"/>
    <author login="jrhacker"/>
    <compatibility addition="yes"/>
    <description>
        The main description of the change here.
        Again can use full <b>XHTML</b> as needed.
    </description>
    <class package="org.openide.compiler" name="DoWhatIWantCompiler"/>
    <issue number="14309"/>
</change>

Also permitted elements: <package>, <branch>. <version> is API spec
version, recommended for all new changes. <compatibility> should say
if things were added/modified/deprecated/etc. and give all information
related to upgrading old code. List affected top-level classes and
link to issue numbers if applicable. See the DTD for more details.

Changes need not be in any particular order, they are sorted in various
ways by the stylesheet anyway.

Dates are assumed to mean "on the trunk". If you *also* make the same
change on a stabilization branch, use the <branch> tag to indicate this
and explain why the change was made on a branch in the <description>.

Please only change this file on the trunk! Rather: you can change it
on branches if you want, but these changes will be ignored; only the
trunk version of this file is important.

Deprecations do not count as incompatible, assuming that code using the
deprecated calls continues to see their documented behavior. But do
specify deprecation="yes" in <compatibility>.

This file is not a replacement for Javadoc: it is intended to list changes,
not describe the complete current behavior, for which ordinary documentation
is the proper place.

-->

<apichanges>

  <!-- First, a list of API names you may use: -->
  <apidefs>
    <!-- Probably should not be used much: -->
    <apidef name="winsys">Window System Implementation</apidef>
  </apidefs>

<!-- ACTUAL CHANGES BEGIN HERE: -->

  <changes>

    <change id="sort-editor-tabs" >
        <api name="winsys"/>
        <summary>Add preference for sorting editor tabs</summary>
        <version major="2" minor="87"/>
        <date day="14" month="11" year="2018"/>
        <author login="junichi11"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            A new preference option for the windowing system was added: 
            <code>EDITOR_SORT_TABS</code>. The option allows the user to
            let the window system sort the opened tabs according to the opened
            files. The default value is <code>None</code>, which is the netbeans
            default behaviour. Other supported values are:
            <code>FileName</code>, <code>FileNameWithParent</code> and
            <code>FullFilePath</code>.
        </description>
        <issue number="NETBEANS-1622"/>
    </change>

    <change id="help-button-at-left-side" >
        <api name="winsys"/>
        <summary>Allow to move the Help button to the left side</summary>
        <version major="2" minor="48"/>
        <date day="24" month="4" year="2012"/>
        <author login="jhorvath"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            A new branding token <code>HelpButtonAtTheLeftSide</code> in 
            <code>org.netbeans.core.windows.services</code> package allows 
            to change position of the Help button. When the property value 
            is <code>true</code> the help button is placed at the left side 
            of the dialog.
        </description>
        <issue number="211640"/>
    </change>  
    
    <change id="reload-save-actions" >
        <api name="winsys"/>
        <summary>Actions to load or save state of windowsystem</summary>
        <version major="2" minor="27"/>
        <date day="25" month="2" year="2011"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            Now there is a way to control via 
            <a href="@TOP@/architecture-summary.html#layer-org.netbeans.core.windows.actions.ReloadWindowsAction">reload</a> 
            and
            <a href="@TOP@/architecture-summary.html#layer-org.netbeans.core.windows.actions.SaveWindowsAction">save</a> 
            actions when the state of windowsystem is saved or reload.
        </description>
        <issue number="195820"/>
    </change>

  </changes>

  <!-- Now the surrounding HTML text and document structure: -->

  <htmlcontents>
<!--

                            NO NO NO NO NO!

         ==============>    DO NOT EDIT ME!  <======================

          AUTOMATICALLY GENERATED FROM APICHANGES.XML, DO NOT EDIT

                SEE openide/loaders/api/apichanges.xml

-->
    <head>
      <title>Change History for the Window System Implementation</title>
      <link rel="stylesheet" href="prose.css" type="text/css"/>
    </head>
    <body>

<p class="overviewlink"><a href="overview-summary.html">Overview</a></p>

<h1>Introduction</h1>

<p>This document lists changes made to the <a href="@TOP@">Window System
Implementation</a>. Please ask on the <code>dev@openide.netbeans.org</code> mailing list
if you have any questions about the details of a
change, or are wondering how to convert existing code to be compatible.</p>

<!-- The actual lists of changes, as summaries and details: -->

      <hr/><standard-changelists module-code-name="org.netbeans.core.windows"/>

      <hr/><p>@FOOTER@</p>

    </body>
  </htmlcontents>

</apichanges>
