дзеркало
https://github.com/l0ng-ai/openidea.git
синхронізовано 2026-11-09 03:05:40 +02:00
Workspaces open several local project folders in one IDE session (File › New / Open / Manage Workspace…, or Attach when opening a project, which creates a workspace automatically for a plain project window). Member folders are the Project view roots and take part in indexing, Find in Files, Git, language servers, run configurations and builds; agent tasks choose which member they work in. Window › Merge All Project Windows groups project windows into one window with project tabs (switch, reorder, close, move to a new window), restored on reopen. Closes #241 Closes #198 Closes #286
63 рядки
2.6 KiB
TypeScript
63 рядки
2.6 KiB
TypeScript
/**
|
|
* Desktop shell integration: native menu bridge, multi-window, window title,
|
|
* close / quit guards, About, Keymap Reference, logs, update check and i18n wiring.
|
|
*/
|
|
import { registerOverlay, registerStatusItem } from "@/workbench/contributions";
|
|
import { AboutOverlay } from "./AboutDialog";
|
|
import { appActions, updateActions } from "./appActions";
|
|
import { checkForUpdatesOnStartup } from "./updates";
|
|
import { installCloseGuard } from "./closeGuard";
|
|
import { InvalidateCachesOverlay, registerInvalidateCachesActions } from "./InvalidateCaches";
|
|
import { buildInfo } from "./host";
|
|
import { KeymapReferenceOverlay } from "./KeymapReference";
|
|
import { LightEditStatus } from "./LightEditStatus";
|
|
import { installLocaleSync, registerLocalizedActions } from "./locale";
|
|
import { installMenuBridge } from "./menuBridge";
|
|
import { NewProjectOverlay } from "./NewProject";
|
|
import { projectActions, registerPowerSaveBanner } from "./projectActions";
|
|
import { installWindowTitle } from "./title";
|
|
import { installLaunchHandling, installLightEditAutoClose, windowActions } from "./windows";
|
|
import { WorkspaceDialogHost } from "./WorkspaceDialog";
|
|
import { installWindowGroups } from "@/platform/windowGroups";
|
|
|
|
/** The UI locale of a secondary (Settings) window. */
|
|
export const activateLocale = installLocaleSync;
|
|
|
|
export function activate(): () => void {
|
|
const disposers = [
|
|
installLocaleSync(),
|
|
registerLocalizedActions(() => [...appActions(), ...windowActions()]),
|
|
registerOverlay({ id: "app.about", component: AboutOverlay }),
|
|
registerOverlay({ id: "app.keymapReference", component: KeymapReferenceOverlay }),
|
|
registerOverlay({ id: "app.invalidateCaches", component: InvalidateCachesOverlay }),
|
|
registerOverlay({ id: "app.newProject", component: NewProjectOverlay }),
|
|
registerStatusItem({
|
|
id: "app.lightEdit",
|
|
align: "left",
|
|
priority: 20,
|
|
component: LightEditStatus,
|
|
lightEdit: true,
|
|
}),
|
|
registerLocalizedActions(projectActions),
|
|
registerPowerSaveBanner(),
|
|
registerInvalidateCachesActions(),
|
|
installMenuBridge(),
|
|
installWindowTitle(),
|
|
installCloseGuard(),
|
|
installLaunchHandling(),
|
|
installWindowGroups(),
|
|
registerOverlay({ id: "app.workspace", component: WorkspaceDialogHost }),
|
|
installLightEditAutoClose(),
|
|
];
|
|
let disposed = false;
|
|
void buildInfo().then((b) => {
|
|
if (!b?.updates || disposed) return;
|
|
disposers.push(registerLocalizedActions(updateActions));
|
|
void checkForUpdatesOnStartup();
|
|
});
|
|
return () => {
|
|
disposed = true;
|
|
disposers.reverse().forEach((d) => d());
|
|
};
|
|
}
|