mirror of
https://github.com/Microsoft/vscode
synced 2024-09-19 10:40:41 +00:00
aux window - limit reload window action to main window (#197145)
This commit is contained in:
parent
8fe00d1e00
commit
c5bf435ff9
|
@ -1367,13 +1367,18 @@ export function finalHandler<T extends Event>(fn: (event: T) => any): (event: T)
|
|||
};
|
||||
}
|
||||
|
||||
export function domContentLoaded(): Promise<unknown> {
|
||||
return new Promise<unknown>(resolve => {
|
||||
const readyState = document.readyState;
|
||||
if (readyState === 'complete' || (document && document.body !== null)) {
|
||||
export function domContentLoaded(targetWindow: Window): Promise<void> {
|
||||
return new Promise<void>(resolve => {
|
||||
const readyState = targetWindow.document.readyState;
|
||||
if (readyState === 'complete' || (targetWindow.document && targetWindow.document.body !== null)) {
|
||||
resolve(undefined);
|
||||
} else {
|
||||
window.addEventListener('DOMContentLoaded', resolve, false);
|
||||
const listener = () => {
|
||||
targetWindow.window.removeEventListener('DOMContentLoaded', listener, false);
|
||||
resolve();
|
||||
};
|
||||
|
||||
targetWindow.window.addEventListener('DOMContentLoaded', listener, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ import { IWindowOpenable } from 'vs/platform/window/common/window';
|
|||
import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
|
||||
import { MenuRegistry, MenuId, Action2, registerAction2, IAction2Options } from 'vs/platform/actions/common/actions';
|
||||
import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
||||
import { IsFullscreenContext } from 'vs/workbench/common/contextkeys';
|
||||
import { IsAuxiliaryWindowFocusedContext, IsFullscreenContext } from 'vs/workbench/common/contextkeys';
|
||||
import { IsMacNativeContext, IsDevelopmentContext, IsWebContext, IsIOSContext } from 'vs/platform/contextkey/common/contextkeys';
|
||||
import { Categories } from 'vs/platform/action/common/actionCommonCategories';
|
||||
import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
|
||||
|
@ -34,7 +34,7 @@ import { CommandsRegistry } from 'vs/platform/commands/common/commands';
|
|||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { isFolderBackupInfo, isWorkspaceBackupInfo } from 'vs/platform/backup/common/backup';
|
||||
import { getActiveElement } from 'vs/base/browser/dom';
|
||||
import { getActiveElement, getActiveWindow } from 'vs/base/browser/dom';
|
||||
|
||||
export const inRecentFilesPickerContextKey = 'inRecentFilesPicker';
|
||||
|
||||
|
@ -322,6 +322,7 @@ export class ReloadWindowAction extends Action2 {
|
|||
id: ReloadWindowAction.ID,
|
||||
title: { value: localize('reloadWindow', "Reload Window"), original: 'Reload Window' },
|
||||
category: Categories.Developer,
|
||||
precondition: IsAuxiliaryWindowFocusedContext.toNegated(),
|
||||
f1: true,
|
||||
keybinding: {
|
||||
weight: KeybindingWeight.WorkbenchContrib + 50,
|
||||
|
@ -331,10 +332,12 @@ export class ReloadWindowAction extends Action2 {
|
|||
});
|
||||
}
|
||||
|
||||
override run(accessor: ServicesAccessor): Promise<void> {
|
||||
override async run(accessor: ServicesAccessor): Promise<void> {
|
||||
const hostService = accessor.get(IHostService);
|
||||
|
||||
return hostService.reload();
|
||||
if (getActiveWindow() === window) {
|
||||
return hostService.reload(); // only supported for main window
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ import { Event } from 'vs/base/common/event';
|
|||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from 'vs/platform/contextkey/common/contextkeys';
|
||||
import { SplitEditorsVertically, InEditorZenModeContext, ActiveEditorCanRevertContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, ActiveEditorContext, EditorsVisibleContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorGroupEmptyContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsCenteredLayoutContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorReadonlyContext, EditorAreaVisibleContext, ActiveEditorAvailableEditorIdsContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, ActiveEditorCanToggleReadonlyContext, applyAvailableEditorIds, TitleBarVisibleContext, TitleBarStyleContext, MultipleEditorGroupsContext } from 'vs/workbench/common/contextkeys';
|
||||
import { SplitEditorsVertically, InEditorZenModeContext, ActiveEditorCanRevertContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, ActiveEditorContext, EditorsVisibleContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorGroupEmptyContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsCenteredLayoutContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorReadonlyContext, EditorAreaVisibleContext, ActiveEditorAvailableEditorIdsContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, ActiveEditorCanToggleReadonlyContext, applyAvailableEditorIds, TitleBarVisibleContext, TitleBarStyleContext, MultipleEditorGroupsContext, IsAuxiliaryWindowFocusedContext } from 'vs/workbench/common/contextkeys';
|
||||
import { TEXT_DIFF_EDITOR_ID, EditorInputCapabilities, SIDE_BY_SIDE_EDITOR_ID, EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor';
|
||||
import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow } from 'vs/base/browser/dom';
|
||||
import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
|
||||
|
@ -66,6 +66,7 @@ export class WorkbenchContextKeysHandler extends Disposable {
|
|||
|
||||
private inZenModeContext: IContextKey<boolean>;
|
||||
private isFullscreenContext: IContextKey<boolean>;
|
||||
private isAuxiliaryWindowFocusedContext: IContextKey<boolean>;
|
||||
private isCenteredLayoutContext: IContextKey<boolean>;
|
||||
private sideBarVisibleContext: IContextKey<boolean>;
|
||||
private editorAreaVisibleContext: IContextKey<boolean>;
|
||||
|
@ -182,8 +183,9 @@ export class WorkbenchContextKeysHandler extends Disposable {
|
|||
this.splitEditorsVerticallyContext = SplitEditorsVertically.bindTo(this.contextKeyService);
|
||||
this.updateSplitEditorsVerticallyContext();
|
||||
|
||||
// Fullscreen
|
||||
// Window
|
||||
this.isFullscreenContext = IsFullscreenContext.bindTo(this.contextKeyService);
|
||||
this.isAuxiliaryWindowFocusedContext = IsAuxiliaryWindowFocusedContext.bindTo(this.contextKeyService);
|
||||
|
||||
// Zen Mode
|
||||
this.inZenModeContext = InEditorZenModeContext.bindTo(this.contextKeyService);
|
||||
|
@ -253,6 +255,7 @@ export class WorkbenchContextKeysHandler extends Disposable {
|
|||
}));
|
||||
|
||||
this._register(this.layoutService.onDidChangeZenMode(enabled => this.inZenModeContext.set(enabled)));
|
||||
this._register(this.layoutService.onDidChangeActiveContainer(() => this.isAuxiliaryWindowFocusedContext.set(this.layoutService.activeContainer !== this.layoutService.container)));
|
||||
this._register(this.layoutService.onDidChangeFullscreen(fullscreen => this.isFullscreenContext.set(fullscreen)));
|
||||
this._register(this.layoutService.onDidChangeCenteredLayout(centered => this.isCenteredLayoutContext.set(centered)));
|
||||
this._register(this.layoutService.onDidChangePanelPosition(position => this.panelPositionContext.set(position)));
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { mark } from 'vs/base/common/performance';
|
||||
import { domContentLoaded, detectFullscreen, getCookieValue } from 'vs/base/browser/dom';
|
||||
import { domContentLoaded, detectFullscreen, getCookieValue, getWindow } from 'vs/base/browser/dom';
|
||||
import { assertIsDefined } from 'vs/base/common/types';
|
||||
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
|
||||
import { ILogService, ConsoleLogger, getLogLevel, ILoggerService, ILogger } from 'vs/platform/log/common/log';
|
||||
|
@ -119,7 +119,7 @@ export class BrowserMain extends Disposable {
|
|||
async open(): Promise<IWorkbench> {
|
||||
|
||||
// Init services and wait for DOM to be ready in parallel
|
||||
const [services] = await Promise.all([this.initServices(), domContentLoaded()]);
|
||||
const [services] = await Promise.all([this.initServices(), domContentLoaded(getWindow(this.domElement))]);
|
||||
|
||||
// Create Workbench
|
||||
const workbench = new Workbench(this.domElement, undefined, services.serviceCollection, services.logService);
|
||||
|
|
|
@ -34,6 +34,7 @@ export const VirtualWorkspaceContext = new RawContextKey<string>('virtualWorkspa
|
|||
export const TemporaryWorkspaceContext = new RawContextKey<boolean>('temporaryWorkspace', false, localize('temporaryWorkspace', "The scheme of the current workspace is from a temporary file system."));
|
||||
|
||||
export const IsFullscreenContext = new RawContextKey<boolean>('isFullscreen', false, localize('isFullscreen', "Whether the window is in fullscreen mode"));
|
||||
export const IsAuxiliaryWindowFocusedContext = new RawContextKey<boolean>('isAuxiliaryWindowFocusedContext', false, localize('isAuxiliaryWindowFocusedContext', "Whether an auxiliary window is focused"));
|
||||
|
||||
export const HasWebFileSystemAccess = new RawContextKey<boolean>('hasWebFileSystemAccess', false, true); // Support for FileSystemAccess web APIs (https://wicg.github.io/file-system-access)
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ export class DesktopMain extends Disposable {
|
|||
async open(): Promise<void> {
|
||||
|
||||
// Init services and wait for DOM to be ready in parallel
|
||||
const [services] = await Promise.all([this.initServices(), domContentLoaded()]);
|
||||
const [services] = await Promise.all([this.initServices(), domContentLoaded(window)]);
|
||||
|
||||
// Apply zoom level early once we have a configuration service
|
||||
// and before the workbench is created to prevent flickering.
|
||||
|
|
|
@ -201,8 +201,8 @@ export class BrowserHostService extends Disposable implements IHostService {
|
|||
return true;
|
||||
}
|
||||
|
||||
async focus(window: Window): Promise<void> {
|
||||
window.focus();
|
||||
async focus(targetWindow: Window): Promise<void> {
|
||||
targetWindow.focus();
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
@ -505,7 +505,7 @@ export class BrowserHostService extends Disposable implements IHostService {
|
|||
}
|
||||
}
|
||||
|
||||
async moveTop(window: Window): Promise<void> {
|
||||
async moveTop(targetWindow: Window): Promise<void> {
|
||||
// There seems to be no API to bring a window to front in browsers
|
||||
}
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ export interface IHostService {
|
|||
* focused application which may not be VSCode. It may not be supported
|
||||
* in all environments.
|
||||
*/
|
||||
focus(window: Window, options?: { force: boolean }): Promise<void>;
|
||||
focus(targetWindow: Window, options?: { force: boolean }): Promise<void>;
|
||||
|
||||
//#endregion
|
||||
|
||||
|
@ -72,7 +72,7 @@ export interface IHostService {
|
|||
/**
|
||||
* Bring a window to the front and restore it if needed.
|
||||
*/
|
||||
moveTop(window: Window): Promise<void>;
|
||||
moveTop(targetWindow: Window): Promise<void>;
|
||||
|
||||
//#endregion
|
||||
|
||||
|
@ -84,12 +84,12 @@ export interface IHostService {
|
|||
restart(): Promise<void>;
|
||||
|
||||
/**
|
||||
* Reload the currently active window.
|
||||
* Reload the currently active main window.
|
||||
*/
|
||||
reload(options?: { disableExtensions?: boolean }): Promise<void>;
|
||||
|
||||
/**
|
||||
* Attempt to close the active window.
|
||||
* Attempt to close the active main window.
|
||||
*/
|
||||
close(): Promise<void>;
|
||||
|
||||
|
|
|
@ -141,12 +141,12 @@ class WorkbenchHostService extends Disposable implements IHostService {
|
|||
return this.nativeHostService.toggleFullScreen();
|
||||
}
|
||||
|
||||
async moveTop(window: Window): Promise<void> {
|
||||
async moveTop(targetWindow: Window): Promise<void> {
|
||||
if (getWindowsCount() <= 1) {
|
||||
return; // does not apply when only one window is opened
|
||||
}
|
||||
|
||||
return this.nativeHostService.moveWindowTop(isAuxiliaryWindow(window) ? { targetWindowId: window.vscodeWindowId } : undefined);
|
||||
return this.nativeHostService.moveWindowTop(isAuxiliaryWindow(targetWindow) ? { targetWindowId: targetWindow.vscodeWindowId } : undefined);
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
@ -154,10 +154,10 @@ class WorkbenchHostService extends Disposable implements IHostService {
|
|||
|
||||
//#region Lifecycle
|
||||
|
||||
focus(window: Window, options?: { force: boolean }): Promise<void> {
|
||||
focus(targetWindow: Window, options?: { force: boolean }): Promise<void> {
|
||||
return this.nativeHostService.focusWindow({
|
||||
force: options?.force,
|
||||
targetWindowId: isAuxiliaryWindow(window) ? window.vscodeWindowId : this.nativeHostService.windowId
|
||||
targetWindowId: isAuxiliaryWindow(targetWindow) ? targetWindow.vscodeWindowId : this.nativeHostService.windowId
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue