mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-14 13:25:12 +00:00
feat(electron): more desktop app related shortcuts (#9724)
fix AF-2126, AF-2124 - Add CMD+M for minimize the app. - Enhance how CMD+W works. Close the following in order, stop if any one is closed: - peek view - split view - tab - otherwise, hide the app
This commit is contained in:
@@ -14,6 +14,7 @@ export { WorkbenchRoot } from './view/workbench-root';
|
||||
import { type Framework } from '@toeverything/infra';
|
||||
|
||||
import { DesktopApiService } from '../desktop-api';
|
||||
import { PeekViewService } from '../peek-view';
|
||||
import { GlobalStateService } from '../storage';
|
||||
import { WorkspaceScope } from '../workspace';
|
||||
import { SidebarTab } from './entities/sidebar-tab';
|
||||
@@ -64,5 +65,9 @@ export function configureDesktopWorkbenchModule(services: Framework) {
|
||||
.impl(WorkbenchNewTabHandler, DesktopWorkbenchNewTabHandler, [
|
||||
DesktopApiService,
|
||||
])
|
||||
.service(DesktopStateSynchronizer, [WorkbenchService, DesktopApiService]);
|
||||
.service(DesktopStateSynchronizer, [
|
||||
WorkbenchService,
|
||||
DesktopApiService,
|
||||
PeekViewService,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { LiveData, Service } from '@toeverything/infra';
|
||||
|
||||
import type { DesktopApiService } from '../../desktop-api';
|
||||
import type { PeekViewService } from '../../peek-view';
|
||||
import type { WorkbenchService } from '../../workbench';
|
||||
|
||||
/**
|
||||
@@ -9,7 +10,8 @@ import type { WorkbenchService } from '../../workbench';
|
||||
export class DesktopStateSynchronizer extends Service {
|
||||
constructor(
|
||||
private readonly workbenchService: WorkbenchService,
|
||||
private readonly electronApi: DesktopApiService
|
||||
private readonly electronApi: DesktopApiService,
|
||||
private readonly peekViewService: PeekViewService
|
||||
) {
|
||||
super();
|
||||
this.startSync();
|
||||
@@ -52,6 +54,30 @@ export class DesktopStateSynchronizer extends Service {
|
||||
}
|
||||
});
|
||||
|
||||
this.electronApi.events.ui.onCloseView(() => {
|
||||
(async () => {
|
||||
if (await this.electronApi.handler.ui.isActiveTab()) {
|
||||
// close current view. stop if any one is successful
|
||||
// 1. peek view
|
||||
// 2. split view
|
||||
// 3. tab
|
||||
// 4. otherwise, hide the window
|
||||
if (this.peekViewService.peekView.show$.value?.value) {
|
||||
this.peekViewService.peekView.close();
|
||||
} else if (workbench.views$.value.length > 1) {
|
||||
workbench.close(workbench.activeView$.value);
|
||||
} else {
|
||||
const tabs = await this.electronApi.handler.ui.getTabsStatus();
|
||||
if (tabs.length > 1) {
|
||||
await this.electronApi.handler.ui.closeTab();
|
||||
} else {
|
||||
await this.electronApi.handler.ui.handleHideApp();
|
||||
}
|
||||
}
|
||||
}
|
||||
})().catch(console.error);
|
||||
});
|
||||
|
||||
this.electronApi.events.ui.onToggleRightSidebar(tabId => {
|
||||
if (tabId === appInfo?.viewId) {
|
||||
workbench.sidebarOpen$.next(!workbench.sidebarOpen$.value);
|
||||
|
||||
Reference in New Issue
Block a user