提交 43298ba5 编写于 作者: B Benjamin Pasero

macOS: custom titlebar double-click not consistent (fixes #27382)

上级 e4080aa0
......@@ -823,6 +823,33 @@ export class VSCodeWindow {
};
}
public onWindowTitleDoubleClick(): void {
// Respect system settings on mac with regards to title click on windows title
if (platform.isMacintosh) {
const action = systemPreferences.getUserDefault('AppleActionOnDoubleClick', 'string');
switch (action) {
case 'Minimize':
this.win.minimize();
break;
case 'None':
break;
case 'Maximize':
default:
this.win.maximize();
}
}
// Linux/Windows: just toggle maximize/minimized state
else {
if (this.win.isMaximized()) {
this.win.unmaximize();
} else {
this.win.maximize();
}
}
}
public sendWhenReady(channel: string, ...args: any[]): void {
this.ready().then(() => {
this.send(channel, ...args);
......
......@@ -37,6 +37,7 @@ export interface IWindowsService {
isMaximized(windowId: number): TPromise<boolean>;
maximizeWindow(windowId: number): TPromise<void>;
unmaximizeWindow(windowId: number): TPromise<void>;
onWindowTitleDoubleClick(windowId: number): TPromise<void>;
setDocumentEdited(windowId: number, flag: boolean): TPromise<void>;
quit(): TPromise<void>;
relaunch(options: { addArgs?: string[], removeArgs?: string[] }): TPromise<void>;
......@@ -89,6 +90,7 @@ export interface IWindowService {
isMaximized(): TPromise<boolean>;
maximizeWindow(): TPromise<void>;
unmaximizeWindow(): TPromise<void>;
onWindowTitleDoubleClick(): TPromise<void>;
}
export type MenuBarVisibility = 'default' | 'visible' | 'toggle' | 'hidden';
......
......@@ -31,6 +31,7 @@ export interface IWindowsChannel extends IChannel {
call(command: 'isMaximized', arg: number): TPromise<boolean>;
call(command: 'maximizeWindow', arg: number): TPromise<void>;
call(command: 'unmaximizeWindow', arg: number): TPromise<void>;
call(command: 'onWindowTitleDoubleClick', arg: number): TPromise<void>;
call(command: 'setDocumentEdited', arg: [number, boolean]): TPromise<void>;
call(command: 'quit'): TPromise<void>;
call(command: 'openWindow', arg: [string[], { forceNewWindow?: boolean, forceReuseWindow?: boolean }]): TPromise<void>;
......@@ -81,6 +82,7 @@ export class WindowsChannel implements IWindowsChannel {
case 'isMaximized': return this.service.isMaximized(arg);
case 'maximizeWindow': return this.service.maximizeWindow(arg);
case 'unmaximizeWindow': return this.service.unmaximizeWindow(arg);
case 'onWindowTitleDoubleClick': return this.service.onWindowTitleDoubleClick(arg);
case 'setDocumentEdited': return this.service.setDocumentEdited(arg[0], arg[1]);
case 'openWindow': return this.service.openWindow(arg[0], arg[1]);
case 'openNewWindow': return this.service.openNewWindow();
......@@ -185,6 +187,10 @@ export class WindowsChannelClient implements IWindowsService {
return this.channel.call('unmaximizeWindow', windowId);
}
onWindowTitleDoubleClick(windowId: number): TPromise<void> {
return this.channel.call('onWindowTitleDoubleClick', windowId);
}
setDocumentEdited(windowId: number, flag: boolean): TPromise<void> {
return this.channel.call('setDocumentEdited', [windowId, flag]);
}
......
......@@ -90,6 +90,10 @@ export class WindowService implements IWindowService {
return this.windowsService.unmaximizeWindow(this.windowId);
}
onWindowTitleDoubleClick(): TPromise<void> {
return this.windowsService.onWindowTitleDoubleClick(this.windowId);
}
setDocumentEdited(flag: boolean): TPromise<void> {
return this.windowsService.setDocumentEdited(this.windowId, flag);
}
......
......@@ -209,6 +209,16 @@ export class WindowsService implements IWindowsService, IDisposable {
return TPromise.as(null);
}
onWindowTitleDoubleClick(windowId: number): TPromise<void> {
const vscodeWindow = this.windowsMainService.getWindowById(windowId);
if (vscodeWindow) {
vscodeWindow.onWindowTitleDoubleClick();
}
return TPromise.as(null);
}
setDocumentEdited(windowId: number, flag: boolean): TPromise<void> {
const vscodeWindow = this.windowsMainService.getWindowById(windowId);
......
......@@ -241,13 +241,7 @@ export class TitlebarPart extends Part implements ITitleService {
}
private onTitleDoubleclick(): void {
this.windowService.isMaximized().then(maximized => {
if (maximized) {
this.windowService.unmaximizeWindow().done(null, errors.onUnexpectedError);
} else {
this.windowService.maximizeWindow().done(null, errors.onUnexpectedError);
}
}, errors.onUnexpectedError);
this.windowService.onWindowTitleDoubleClick().then(null, errors.onUnexpectedError);
}
private onContextMenu(e: MouseEvent): void {
......
......@@ -847,6 +847,10 @@ export class TestWindowService implements IWindowService {
unmaximizeWindow(): TPromise<void> {
return TPromise.as(void 0);
}
onWindowTitleDoubleClick(): TPromise<void> {
return TPromise.as(void 0);
}
}
export class TestLifecycleService implements ILifecycleService {
......@@ -944,6 +948,9 @@ export class TestWindowsService implements IWindowsService {
unmaximizeWindow(windowId: number): TPromise<void> {
return TPromise.as(void 0);
}
onWindowTitleDoubleClick(windowId: number): TPromise<void> {
return TPromise.as(void 0);
}
setDocumentEdited(windowId: number, flag: boolean): TPromise<void> {
return TPromise.as(void 0);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册