/******************************************************************************* * Copyright (c) 2018 Red Hat and others. All rights reserved. * The contents of this file are made available under the terms * of the GNU Lesser General Public License (LGPL) Version 2.1 that * accompanies this distribution (lgpl-v21.txt). The LGPL is also * available at http://www.gnu.org/licenses/lgpl.html. If the version * of the LGPL at http://www.gnu.org is different to the version of * the LGPL accompanying this distribution and there is any conflict * between the two license versions, the terms of the LGPL accompanying * this distribution shall govern. * * Contributors: * Red Hat - initial API and implementation *******************************************************************************/ package org.eclipse.swt.tests.manual; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; /** * Description: Console View tab is not highlighted when selected. * Steps to reproduce: *
    *
  1. Open the Console View.
  2. *
  3. Open a view with a CTabFolder in the same part stack as the Console View.
  4. *
  5. Select a tab in the new view.
  6. *
  7. Select the Console View.
  8. *
* Expected results: Console View tab is highlighted, indicating a selection. * Actual results: Console View tab is not highlighted. */ public class Bug528251_CTabFolder_nested_highlighting { private static final String[] REPRODUCTION_STEPS = { "1. select \"Another View\" tab", "2. select \"nested tab\"", "3. select \"Console View\" tab", "4. \"Console View\" tab must be highlighted", }; private final Display display; private final Shell shell; private final CTabFolder partStackTabs; private final CTabItem anotherViewTab; public Bug528251_CTabFolder_nested_highlighting() { display = new Display(); shell = new Shell(display); shell.setSize(550, 200); shell.setLayout(new FillLayout()); shell.setLocation(center(display, shell)); shell.setText("Bug 528251"); partStackTabs = new CTabFolder(shell, SWT.NONE); // Console View CTabItem consoleViewTab = new CTabItem(partStackTabs, SWT.NONE); consoleViewTab.setText("Console View"); // some other view with a CTabFolder SashForm anotherView = new SashForm(partStackTabs, SWT.NONE); anotherViewTab = new CTabItem(partStackTabs, SWT.NONE); anotherViewTab.setText("Another View"); anotherViewTab.setControl(anotherView); CTabFolder anotherViewNestedTabs = new CTabFolder(anotherView, SWT.NONE); CTabItem anotherViewNestedTab = new CTabItem(anotherViewNestedTabs, SWT.NONE); anotherViewNestedTab.setText("nested tab"); // what to do to see the problem StyledText text = new StyledText(shell, SWT.NONE); text.setText(String.join(System.lineSeparator(), REPRODUCTION_STEPS)); text.setEditable(false); } void showCase() { shell.open(); waitForClose(); } private void waitForClose() { while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } private static Point center(Display display, Shell shell) { Rectangle displayBounds = display.getPrimaryMonitor().getBounds(); Point shellBounds = shell.getSize(); Point center = new Point( displayBounds.x + (displayBounds.width - shellBounds.x) / 2, displayBounds.y + (displayBounds.height - shellBounds.y) / 2); return center; } public static void main(String[] args) { Bug528251_CTabFolder_nested_highlighting bug = new Bug528251_CTabFolder_nested_highlighting(); bug.showCase(); } }