Bug 202382 [Forms] Behaviour of Section with fixed style changed between Eclipse 3.0 and 3.1 (and later)
Build ID: M20060118-1600 Steps To Reproduce: 1. Create a section and assign a shortcut: final Section addressSection = toolkit.createSection(this, SWT.NONE); addressSection.setText("&Adresse"); 2. Add a text field to the section final Composite nameComposite = toolkit.createComposite(addressComposite, SWT.NONE); toolkit.createLabel(nameComposite, "Name", SWT.NONE); final Text nameText = toolkit.createText(nameComposite, null, SWT.NONE); 3. Run this in a Eclipse 3.0 dialog. Pressing the shortcut key ALT-A moves the focus to the text input file nameText. 4. Run this in a Eclipse 3.1 dialog. Pressing the shortcut key ALT-A hides the section! More information: In the ExpandableComposite which is the base class of Section, there is always a TraverseListener added to the object. This TraverseListener always toggles the state of the section, even if isFixedStyle() returns true. To restore the old behaviour, simply call programmaticToggleState() only if isFixedSytle() returns false.
bundles/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ExpandableComposite.java
tsize = toggleCache.computeSize(SWT.DEFAULT, SWT.DEFAULT);
			int twidth = clientArea.width - marginWidth - marginWidth
					- thmargin - thmargin;
			if (tsize.x > 0)
				twidth -= tsize.x + IGAP;
			if (textClient != null) {
				tcsize = textClientCache.computeSize(SWT.DEFAULT, SWT.DEFAULT);
			}
			Point size = NULL_SIZE;
			if (textLabel != null) {
				if (tcsize.x > 0 && FormUtil.isWrapControl(textClient)) {
					size = textLabelCache.computeSize(SWT.DEFAULT, SWT.DEFAULT);
					if (twidth < size.x + IGAP + tcsize.x) {
						twidth -= IGAP;
						if (textLabel instanceof Label)
							size = FormUtil.computeWrapSize(new GC(textLabel), ((Label)textLabel).getText(), Math.round(twidth*(size.x/(float)(size.x+tcsize.x))));
						else
							size = textLabelCache.computeSize(Math.round(twidth*(size.x/(float)(size.x+tcsize.x))), SWT.DEFAULT);
						tcsize = textClientCache.computeSize(twidth-size.x, SWT.DEFAULT);
					}
				}
				else {
					if (tcsize.x > 0)
						twidth -= tcsize.x + IGAP;
					size = textLabelCache.computeSize(twidth, SWT.DEFAULT);
				}
			}
			if (textLabel instanceof Label) {
				Point defSize = textLabelCache.computeSize(SWT.DEFAULT,
						SWT.DEFAULT);