Bug 533124 - Allow multi line text in CTabFolder.

CTabFolderRenderer with flag that take into account carriage return for multi line.
Addition of Snippet371.
Addition of Javadoc on CTabItem.setText.
Addition of same cross platform behavior relating to the drop-down menu for additional tabs.

Change-Id: Ib45891dcc90727830262887745c8ec1ad9be451d
Signed-off-by: ncazottes <nicolas@cazottes.net>
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java
index f2f875a..3c3d6ce 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java
@@ -3674,7 +3674,8 @@
 		CTabItem tab = items[i];
 		if (tab.showing) continue;
 		MenuItem item = new MenuItem(showMenu, SWT.NONE);
-		item.setText(tab.getText());
+		// Bug 533124 In the case where you have multi line tab text, we force the drop-down menu to have single line entries to ensure consistent behavior across platforms.
+		item.setText(tab.getText().replace("\n", " "));
 		item.setImage(tab.getImage());
 		item.setData(id, tab);
 		item.addSelectionListener(new SelectionAdapter() {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java
index 9d9bc6f..9a966a4 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java
@@ -93,7 +93,7 @@
 	static final int ITEM_LEFT_MARGIN = 4;
 	static final int ITEM_RIGHT_MARGIN = 4;
 	static final int INTERNAL_SPACING = 4;
-	static final int FLAGS = SWT.DRAW_TRANSPARENT | SWT.DRAW_MNEMONIC;
+	static final int FLAGS = SWT.DRAW_TRANSPARENT | SWT.DRAW_MNEMONIC | SWT.DRAW_DELIMITER;
 	static final String ELLIPSIS = "..."; //$NON-NLS-1$
 
 	//Part constants
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabItem.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabItem.java
index 20dc1aa..5b30686 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabItem.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabItem.java
@@ -398,6 +398,17 @@
 	showClose = close;
 	parent.updateFolder(CTabFolder.REDRAW_TABS);
 }
+/**
+ * Sets the text to display on the tab.
+ * A carriage return '\n' allows to display multi line text.
+ *
+ * @param string the tab name
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
 @Override
 public void setText (String string) {
 	checkWidget();
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet371.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet371.java
new file mode 100644
index 0000000..c875655
--- /dev/null
+++ b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet371.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.snippets;
+
+/*
+ * CTabFolder example snippet: demonstration of a multi line CTabFolder
+ *
+ * For a list of all SWT example snippets see
+ * http://www.eclipse.org/swt/snippets/
+ *
+ * @since 4.8
+ */
+import org.eclipse.swt.*;
+import org.eclipse.swt.custom.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+public class Snippet371 {
+
+	public static void main(String[] args) {
+		Display display = new Display();
+		Shell shell = new Shell(display);
+		shell.setLayout(new FillLayout());
+		CTabFolder folder = new CTabFolder(shell, SWT.BORDER);
+
+		CTabItem item1 = new CTabItem(folder, SWT.CLOSE);
+		item1.setText("Item on one line");
+		Text text1 = new Text(folder, SWT.MULTI);
+		text1.setText("Content for Item 1");
+		item1.setControl(text1);
+
+		CTabItem item2 = new CTabItem(folder, SWT.CLOSE);
+		item2.setText("Item on \ntwo lines");
+		Text text2 = new Text(folder, SWT.MULTI);
+		text2.setText("Content for Item 2");
+		item2.setControl(text2);
+
+
+		shell.setSize(new Point(300, 200));
+		shell.open();
+		while (!shell.isDisposed()) {
+			if (!display.readAndDispatch())
+				display.sleep();
+		}
+		display.dispose();
+	}
+}
+