diff options
| author | Paul Webster | 2014-05-16 19:20:27 +0000 |
|---|---|---|
| committer | Paul Webster | 2014-05-21 18:18:26 +0000 |
| commit | 488f221b82f7f1298a1a6aea62416785f464ffe7 (patch) | |
| tree | f6e1009a3b4e31e5b0366c7e8a64700d6fba7080 | |
| parent | d09eb7036e58a3e889764dad669cbf2af5ebde8c (diff) | |
| download | eclipse.platform.ui-488f221b82f7f1298a1a6aea62416785f464ffe7.tar.gz eclipse.platform.ui-488f221b82f7f1298a1a6aea62416785f464ffe7.tar.xz eclipse.platform.ui-488f221b82f7f1298a1a6aea62416785f464ffe7.zip | |
Bug 433979 - Prevent to hide view and window toolbar
Save the fact that quick access was hidden in the window tags, so it can
be re-applied on startup
Change-Id: Ide04f6b5a587534d7f8f5a1e73404e9f57c8e6c1
2 files changed, 76 insertions, 4 deletions
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolControlRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolControlRenderer.java index 9495189e314..c2dc23971bf 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolControlRenderer.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolControlRenderer.java @@ -49,6 +49,15 @@ import org.osgi.service.event.Event; */ public class ToolControlRenderer extends SWTPartRenderer { + /** + * Will be published or removed in 4.5. + */ + private static final String HIDEABLE = "HIDEABLE"; //$NON-NLS-1$ + /** + * Will be published or removed in 4.5. + */ + private static final String SHOW_RESTORE_MENU = "SHOW_RESTORE_MENU"; //$NON-NLS-1$ + @Inject private MApplication application; /** @@ -128,9 +137,8 @@ public class ToolControlRenderer extends SWTPartRenderer { CSSRenderingUtils cssUtils = parentContext.get(CSSRenderingUtils.class); newCtrl = cssUtils.frameMeIfPossible(newCtrl, null, vertical, true); - boolean hideable = toolControl.getTags().contains("HIDEABLE"); //$NON-NLS-1$ - boolean showRestoreMenu = toolControl.getTags().contains( - "SHOW_RESTORE_MENU"); //$NON-NLS-1$ + boolean hideable = isHideable(toolControl); + boolean showRestoreMenu = isRestoreMenuShowable(toolControl); if (showRestoreMenu || hideable) { createToolControlMenu(toolControl, newCtrl, hideable); } @@ -138,6 +146,14 @@ public class ToolControlRenderer extends SWTPartRenderer { return newCtrl; } + private boolean isRestoreMenuShowable(MToolControl toolControl) { + return toolControl.getTags().contains(SHOW_RESTORE_MENU); + } + + private boolean isHideable(MToolControl toolControl) { + return toolControl.getTags().contains(HIDEABLE); + } + @Inject @Optional private void subscribeTopicTagsChanged( @@ -148,12 +164,25 @@ public class ToolControlRenderer extends SWTPartRenderer { if (!(changedObj instanceof MToolControl)) return; - final MUIElement changedElement = (MUIElement) changedObj; + final MToolControl changedElement = (MToolControl) changedObj; if (UIEvents.isADD(event)) { if (UIEvents.contains(event, UIEvents.EventTags.NEW_VALUE, IPresentationEngine.HIDDEN_EXPLICITLY)) { changedElement.setVisible(false); + } else { + boolean hideable = UIEvents.contains(event, + UIEvents.EventTags.NEW_VALUE, HIDEABLE); + if (UIEvents.contains(event, UIEvents.EventTags.NEW_VALUE, + SHOW_RESTORE_MENU) || hideable) { + Object obj = changedElement.getWidget(); + if (obj instanceof Control) { + if (((Control) obj).getMenu() == null) { + createToolControlMenu(changedElement, + (Control) obj, hideable); + } + } + } } } else if (UIEvents.isREMOVE(event)) { if (UIEvents.contains(event, UIEvents.EventTags.OLD_VALUE, diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java index 62ab5b5f2d4..8fa9d42916a 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java @@ -52,6 +52,7 @@ import org.eclipse.e4.core.di.InjectionException; import org.eclipse.e4.core.di.annotations.Optional; import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.e4.core.services.log.Logger; +import org.eclipse.e4.ui.di.UIEventTopic; import org.eclipse.e4.ui.internal.workbench.E4Workbench; import org.eclipse.e4.ui.internal.workbench.OpaqueElementUtil; import org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler; @@ -918,11 +919,53 @@ public class WorkbenchWindow implements IWorkbenchWindow { quickAccessElementId, model); if (quickAccessElement != null) { moveControl(quickAccessElement.getParent(), quickAccessElement); + + // target the quick access field specifically + if (QUICK_ACCESS_ID.equals(quickAccessElement.getElementId())) { + if (model.getTags().contains(QUICK_ACCESS_HIDDEN)) { + if (!quickAccessElement.getTags().contains( + IPresentationEngine.HIDDEN_EXPLICITLY)) { + quickAccessElement.getTags().add(IPresentationEngine.HIDDEN_EXPLICITLY); + } + } + } } } } + private static final String QUICK_ACCESS_ID = "SearchField"; //$NON-NLS-1$ + private static final String QUICK_ACCESS_HIDDEN = "QUICK_ACCESS_HIDDEN"; //$NON-NLS-1$ + + @Inject + private void hideQuickAccess( + @Optional @UIEventTopic(UIEvents.ApplicationElement.TOPIC_TAGS) Event event) { + if (event == null) { + return; + } + Object origin = event.getProperty(UIEvents.EventTags.ELEMENT); + if (!(origin instanceof MToolControl)) { + return; + } + MToolControl control = (MToolControl) origin; + if (!QUICK_ACCESS_ID.equals(control.getElementId())) { + return; + } + if (UIEvents.isADD(event)) { + if (UIEvents.contains(event, UIEvents.EventTags.NEW_VALUE, + IPresentationEngine.HIDDEN_EXPLICITLY)) { + if (!model.getTags().contains(QUICK_ACCESS_HIDDEN)) { + model.getTags().add(QUICK_ACCESS_HIDDEN); + } + } + } else if (UIEvents.isREMOVE(event)) { + if (UIEvents.contains(event, UIEvents.EventTags.OLD_VALUE, + IPresentationEngine.HIDDEN_EXPLICITLY)) { + model.getTags().remove(QUICK_ACCESS_HIDDEN); + } + } + } + /** * Moves the given element from its current position to the position * mentioned in one of its tags. |
