Skip to content

Commit 9188649

Browse files
authored
Dropdown / Select Box should follow window.menuStyle (microsoft#250627)
Dropdown / Select Box should follow `window.menuSytle`
1 parent 2347ccb commit 9188649

File tree

7 files changed

+34
-17
lines changed

7 files changed

+34
-17
lines changed

src/vs/platform/actions/browser/menuEntryActionViewItem.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { assertType } from '../../../base/common/types.js';
2121
import { localize } from '../../../nls.js';
2222
import { IAccessibilityService } from '../../accessibility/common/accessibility.js';
2323
import { ICommandAction, isICommandActionToggleInfo } from '../../action/common/action.js';
24+
import { IConfigurationService } from '../../configuration/common/configuration.js';
2425
import { IContextKeyService } from '../../contextkey/common/contextkey.js';
2526
import { IContextMenuService, IContextViewService } from '../../contextview/browser/contextView.js';
2627
import { IInstantiationService } from '../../instantiation/common/instantiation.js';
@@ -31,6 +32,7 @@ import { defaultSelectBoxStyles } from '../../theme/browser/defaultStyles.js';
3132
import { asCssVariable, selectBorder } from '../../theme/common/colorRegistry.js';
3233
import { isDark } from '../../theme/common/theme.js';
3334
import { IThemeService } from '../../theme/common/themeService.js';
35+
import { hasNativeContextMenu } from '../../window/common/window.js';
3436
import { IMenuService, MenuItemAction, SubmenuItemAction } from '../common/actions.js';
3537
import './menuEntryActionViewItem.css';
3638

@@ -574,12 +576,13 @@ class SubmenuEntrySelectActionViewItem extends SelectActionViewItem {
574576

575577
constructor(
576578
action: SubmenuItemAction,
577-
@IContextViewService contextViewService: IContextViewService
579+
@IContextViewService contextViewService: IContextViewService,
580+
@IConfigurationService configurationService: IConfigurationService,
578581
) {
579582
super(null, action, action.actions.map(a => ({
580583
text: a.id === Separator.ID ? '\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500' : a.label,
581584
isDisabled: !a.enabled,
582-
})), 0, contextViewService, defaultSelectBoxStyles, { ariaLabel: action.tooltip, optionsAsChildren: true });
585+
})), 0, contextViewService, defaultSelectBoxStyles, { ariaLabel: action.tooltip, optionsAsChildren: true, useCustomDrawn: !hasNativeContextMenu(configurationService) });
583586
this.select(Math.max(0, action.actions.findIndex(a => a.checked)));
584587
}
585588

src/vs/workbench/contrib/debug/browser/breakpointWidget.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import { ILabelService } from '../../../../platform/label/common/label.js';
4242
import { defaultButtonStyles, defaultSelectBoxStyles } from '../../../../platform/theme/browser/defaultStyles.js';
4343
import { editorForeground } from '../../../../platform/theme/common/colorRegistry.js';
4444
import { IColorTheme, IThemeService } from '../../../../platform/theme/common/themeService.js';
45+
import { hasNativeContextMenu } from '../../../../platform/window/common/window.js';
4546
import { getSimpleCodeEditorWidgetOptions, getSimpleEditorOptions } from '../../codeEditor/browser/simpleEditorOptions.js';
4647
import { BREAKPOINT_EDITOR_CONTRIBUTION_ID, CONTEXT_BREAKPOINT_WIDGET_VISIBLE, CONTEXT_IN_BREAKPOINT_WIDGET, BreakpointWidgetContext as Context, DEBUG_SCHEME, IBreakpoint, IBreakpointEditorContribution, IBreakpointUpdateData, IDebugService } from '../common/debug.js';
4748
import './media/breakpointWidget.css';
@@ -210,7 +211,7 @@ export class BreakpointWidget extends ZoneWidget implements IPrivateBreakpointWi
210211
{ text: nls.localize('hitCount', "Hit Count") },
211212
{ text: nls.localize('logMessage', "Log Message") },
212213
{ text: nls.localize('triggeredBy', "Wait for Breakpoint") },
213-
] satisfies ISelectOptionItem[], this.context, this.contextViewService, defaultSelectBoxStyles, { ariaLabel: nls.localize('breakpointType', 'Breakpoint Type') }));
214+
] satisfies ISelectOptionItem[], this.context, this.contextViewService, defaultSelectBoxStyles, { ariaLabel: nls.localize('breakpointType', 'Breakpoint Type'), useCustomDrawn: !hasNativeContextMenu(this._configurationService) }));
214215
this.selectContainer = $('.breakpoint-select-container');
215216
selectBox.render(dom.append(container, this.selectContainer));
216217
selectBox.onDidSelect(e => {
@@ -252,6 +253,7 @@ export class BreakpointWidget extends ZoneWidget implements IPrivateBreakpointWi
252253
modes.findIndex(m => m.mode === this.breakpoint?.mode) + 1,
253254
this.contextViewService,
254255
defaultSelectBoxStyles,
256+
{ useCustomDrawn: !hasNativeContextMenu(this._configurationService) }
255257
);
256258
this.store.add(sb);
257259
this.store.add(sb.onDidSelect(e => {
@@ -288,7 +290,7 @@ export class BreakpointWidget extends ZoneWidget implements IPrivateBreakpointWi
288290
});
289291
}
290292

291-
const selectBreakpointBox = this.selectBreakpointBox = new SelectBox(breakpointOptions, index + 1, this.contextViewService, defaultSelectBoxStyles, { ariaLabel: nls.localize('selectBreakpoint', 'Select breakpoint') });
293+
const selectBreakpointBox = this.selectBreakpointBox = new SelectBox(breakpointOptions, index + 1, this.contextViewService, defaultSelectBoxStyles, { ariaLabel: nls.localize('selectBreakpoint', 'Select breakpoint'), useCustomDrawn: !hasNativeContextMenu(this._configurationService) });
292294
selectBreakpointBox.onDidSelect(e => {
293295
if (e.index === 0) {
294296
this.triggeredByBreakpointInput = undefined;

src/vs/workbench/contrib/debug/browser/debugActionViewItems.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { IHoverService } from '../../../../platform/hover/browser/hover.js';
2727
import { AccessibilityVerbositySettingId } from '../../accessibility/browser/accessibilityConfiguration.js';
2828
import { AccessibilityCommandId } from '../../accessibility/common/accessibilityCommands.js';
2929
import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';
30+
import { hasNativeContextMenu } from '../../../../platform/window/common/window.js';
3031

3132
const $ = dom.$;
3233

@@ -57,7 +58,7 @@ export class StartDebugActionViewItem extends BaseActionViewItem {
5758
) {
5859
super(context, action, options);
5960
this.toDispose = [];
60-
this.selectBox = new SelectBox([], -1, contextViewService, defaultSelectBoxStyles, { ariaLabel: nls.localize('debugLaunchConfigurations', 'Debug Launch Configurations') });
61+
this.selectBox = new SelectBox([], -1, contextViewService, defaultSelectBoxStyles, { ariaLabel: nls.localize('debugLaunchConfigurations', 'Debug Launch Configurations'), useCustomDrawn: !hasNativeContextMenu(this.configurationService) });
6162
this.selectBox.setFocusable(false);
6263
this.toDispose.push(this.selectBox);
6364

@@ -291,7 +292,7 @@ export class FocusSessionActionViewItem extends SelectActionViewItem<IDebugSessi
291292
@IContextViewService contextViewService: IContextViewService,
292293
@IConfigurationService private readonly configurationService: IConfigurationService
293294
) {
294-
super(null, action, [], -1, contextViewService, defaultSelectBoxStyles, { ariaLabel: nls.localize('debugSession', 'Debug Session') });
295+
super(null, action, [], -1, contextViewService, defaultSelectBoxStyles, { ariaLabel: nls.localize('debugSession', 'Debug Session'), useCustomDrawn: !hasNativeContextMenu(configurationService) });
295296

296297
this._register(this.debugService.getViewModel().onDidFocusSession(() => {
297298
const session = this.getSelectedSession();

src/vs/workbench/contrib/preferences/browser/settingsTree.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import { IThemeService } from '../../../../platform/theme/common/themeService.js
5757
import { IUserDataProfilesService } from '../../../../platform/userDataProfile/common/userDataProfile.js';
5858
import { getIgnoredSettings } from '../../../../platform/userDataSync/common/settingsMerge.js';
5959
import { IUserDataSyncEnablementService, getDefaultIgnoredSettings } from '../../../../platform/userDataSync/common/userDataSync.js';
60+
import { hasNativeContextMenu } from '../../../../platform/window/common/window.js';
6061
import { APPLICATION_SCOPES, APPLY_ALL_PROFILES_SETTING, IWorkbenchConfigurationService } from '../../../services/configuration/common/configuration.js';
6162
import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js';
6263
import { IExtensionService } from '../../../services/extensions/common/extensions.js';
@@ -1816,7 +1817,7 @@ class SettingEnumRenderer extends AbstractSettingRenderer implements ITreeRender
18161817
});
18171818

18181819
const selectBox = new SelectBox([], 0, this._contextViewService, styles, {
1819-
useCustomDrawn: !(isIOS && BrowserFeatures.pointerEvents)
1820+
useCustomDrawn: !hasNativeContextMenu(this._configService) || !(isIOS && BrowserFeatures.pointerEvents)
18201821
});
18211822

18221823
common.toDispose.add(selectBox);

src/vs/workbench/contrib/preferences/browser/settingsWidgets.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ import { isIOS } from '../../../../base/common/platform.js';
2323
import { ThemeIcon } from '../../../../base/common/themables.js';
2424
import { isDefined, isUndefinedOrNull } from '../../../../base/common/types.js';
2525
import { localize } from '../../../../nls.js';
26+
import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
2627
import { IContextViewService } from '../../../../platform/contextview/browser/contextView.js';
2728
import { IHoverService } from '../../../../platform/hover/browser/hover.js';
2829
import { defaultButtonStyles, getInputBoxStyle, getSelectBoxStyles } from '../../../../platform/theme/browser/defaultStyles.js';
2930
import { IThemeService } from '../../../../platform/theme/common/themeService.js';
31+
import { hasNativeContextMenu } from '../../../../platform/window/common/window.js';
3032
import { SettingValueType } from '../../../services/preferences/common/preferences.js';
3133
import { settingsSelectBackground, settingsSelectBorder, settingsSelectForeground, settingsSelectListBorder, settingsTextInputBackground, settingsTextInputBorder, settingsTextInputForeground } from '../common/settingsEditorColorRegistry.js';
3234
import './media/settingsWidgets.css';
@@ -171,7 +173,8 @@ export abstract class AbstractListSettingWidget<TDataItem extends object> extend
171173
constructor(
172174
private container: HTMLElement,
173175
@IThemeService protected readonly themeService: IThemeService,
174-
@IContextViewService protected readonly contextViewService: IContextViewService
176+
@IContextViewService protected readonly contextViewService: IContextViewService,
177+
@IConfigurationService protected readonly configurationService: IConfigurationService,
175178
) {
176179
super();
177180

@@ -263,7 +266,7 @@ export abstract class AbstractListSettingWidget<TDataItem extends object> extend
263266

264267

265268
const selectBox = new SelectBox(selectBoxOptions, selected, this.contextViewService, styles, {
266-
useCustomDrawn: !(isIOS && BrowserFeatures.pointerEvents)
269+
useCustomDrawn: !hasNativeContextMenu(this.configurationService) || !(isIOS && BrowserFeatures.pointerEvents)
267270
});
268271
return selectBox;
269272
}
@@ -460,9 +463,10 @@ export class ListSettingWidget<TListDataItem extends IListDataItem> extends Abst
460463
container: HTMLElement,
461464
@IThemeService themeService: IThemeService,
462465
@IContextViewService contextViewService: IContextViewService,
463-
@IHoverService protected readonly hoverService: IHoverService
466+
@IHoverService protected readonly hoverService: IHoverService,
467+
@IConfigurationService configurationService: IConfigurationService,
464468
) {
465-
super(container, themeService, contextViewService);
469+
super(container, themeService, contextViewService, configurationService);
466470
}
467471

468472
protected getEmptyItem(): TListDataItem {
@@ -923,8 +927,9 @@ export class ObjectSettingDropdownWidget extends AbstractListSettingWidget<IObje
923927
@IThemeService themeService: IThemeService,
924928
@IContextViewService contextViewService: IContextViewService,
925929
@IHoverService private readonly hoverService: IHoverService,
930+
@IConfigurationService configurationService: IConfigurationService,
926931
) {
927-
super(container, themeService, contextViewService);
932+
super(container, themeService, contextViewService, configurationService);
928933
}
929934

930935
override setValue(listData: IObjectDataItem[], options?: IObjectSetValueOptions): void {
@@ -1320,8 +1325,9 @@ export class ObjectSettingCheckboxWidget extends AbstractListSettingWidget<IBool
13201325
@IThemeService themeService: IThemeService,
13211326
@IContextViewService contextViewService: IContextViewService,
13221327
@IHoverService private readonly hoverService: IHoverService,
1328+
@IConfigurationService configurationService: IConfigurationService,
13231329
) {
1324-
super(container, themeService, contextViewService);
1330+
super(container, themeService, contextViewService, configurationService);
13251331
}
13261332

13271333
override setValue(listData: IBoolObjectDataItem[], options?: IBoolObjectSetValueOptions): void {

src/vs/workbench/contrib/scm/browser/quickDiffWidget.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import { Color } from '../../../../base/common/color.js';
5050
import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js';
5151
import { getOuterEditor } from '../../../../editor/browser/widget/codeEditor/embeddedCodeEditorWidget.js';
5252
import { quickDiffDecorationCount } from './quickDiffDecorator.js';
53+
import { hasNativeContextMenu } from '../../../../platform/window/common/window.js';
5354

5455
export const isQuickDiffVisible = new RawContextKey<boolean>('dirtyDiffVisible', false);
5556

@@ -63,15 +64,16 @@ export class QuickDiffPickerViewItem extends SelectActionViewItem<IQuickDiffSele
6364
constructor(
6465
action: IAction,
6566
@IContextViewService contextViewService: IContextViewService,
66-
@IThemeService themeService: IThemeService
67+
@IThemeService themeService: IThemeService,
68+
@IConfigurationService configurationService: IConfigurationService,
6769
) {
6870
const styles = { ...defaultSelectBoxStyles };
6971
const theme = themeService.getColorTheme();
7072
const editorBackgroundColor = theme.getColor(editorBackground);
7173
const peekTitleColor = theme.getColor(peekViewTitleBackground);
7274
const opaqueTitleColor = peekTitleColor?.makeOpaque(editorBackgroundColor!) ?? editorBackgroundColor!;
7375
styles.selectBackground = opaqueTitleColor.lighten(.6).toString();
74-
super(null, action, [], 0, contextViewService, styles, { ariaLabel: nls.localize('remotes', 'Switch quick diff base') });
76+
super(null, action, [], 0, contextViewService, styles, { ariaLabel: nls.localize('remotes', 'Switch quick diff base'), useCustomDrawn: !hasNativeContextMenu(configurationService) });
7577
}
7678

7779
public setSelection(quickDiffs: QuickDiff[], providerId: string) {

src/vs/workbench/contrib/terminal/browser/terminalView.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import { IAccessibilityService } from '../../../../platform/accessibility/common
5151
import { InstanceContext, TerminalContextActionRunner } from './terminalContextMenu.js';
5252
import { MicrotaskDelay } from '../../../../base/common/symbols.js';
5353
import { IStorageService } from '../../../../platform/storage/common/storage.js';
54+
import { hasNativeContextMenu } from '../../../../platform/window/common/window.js';
5455

5556
export class TerminalViewPane extends ViewPane {
5657
private _parentDomElement: HTMLElement | undefined;
@@ -361,9 +362,10 @@ class SwitchTerminalActionViewItem extends SelectActionViewItem {
361362
@ITerminalService private readonly _terminalService: ITerminalService,
362363
@ITerminalGroupService private readonly _terminalGroupService: ITerminalGroupService,
363364
@IContextViewService contextViewService: IContextViewService,
364-
@ITerminalProfileService terminalProfileService: ITerminalProfileService
365+
@ITerminalProfileService terminalProfileService: ITerminalProfileService,
366+
@IConfigurationService configurationService: IConfigurationService,
365367
) {
366-
super(null, action, getTerminalSelectOpenItems(_terminalService, _terminalGroupService), _terminalGroupService.activeGroupIndex, contextViewService, defaultSelectBoxStyles, { ariaLabel: nls.localize('terminals', 'Open Terminals.'), optionsAsChildren: true });
368+
super(null, action, getTerminalSelectOpenItems(_terminalService, _terminalGroupService), _terminalGroupService.activeGroupIndex, contextViewService, defaultSelectBoxStyles, { ariaLabel: nls.localize('terminals', 'Open Terminals.'), optionsAsChildren: true, useCustomDrawn: !hasNativeContextMenu(configurationService) });
367369
this._register(_terminalService.onDidChangeInstances(() => this._updateItems(), this));
368370
this._register(_terminalService.onDidChangeActiveGroup(() => this._updateItems(), this));
369371
this._register(_terminalService.onDidChangeActiveInstance(() => this._updateItems(), this));

0 commit comments

Comments
 (0)