39 lines
998 B
TypeScript
39 lines
998 B
TypeScript
export interface MainWindowFocusState {
|
|
pendingSecondInstanceFocus: boolean;
|
|
}
|
|
|
|
export type SecondInstanceFocusRequest = 'focus-now' | 'defer';
|
|
export type MainWindowReadyAction = 'show' | 'focus';
|
|
|
|
export function createMainWindowFocusState(): MainWindowFocusState {
|
|
return {
|
|
pendingSecondInstanceFocus: false,
|
|
};
|
|
}
|
|
|
|
export function requestSecondInstanceFocus(
|
|
state: MainWindowFocusState,
|
|
hasFocusableMainWindow: boolean,
|
|
): SecondInstanceFocusRequest {
|
|
if (hasFocusableMainWindow) {
|
|
state.pendingSecondInstanceFocus = false;
|
|
return 'focus-now';
|
|
}
|
|
|
|
state.pendingSecondInstanceFocus = true;
|
|
return 'defer';
|
|
}
|
|
|
|
export function consumeMainWindowReady(state: MainWindowFocusState): MainWindowReadyAction {
|
|
if (state.pendingSecondInstanceFocus) {
|
|
state.pendingSecondInstanceFocus = false;
|
|
return 'focus';
|
|
}
|
|
|
|
return 'show';
|
|
}
|
|
|
|
export function clearPendingSecondInstanceFocus(state: MainWindowFocusState): void {
|
|
state.pendingSecondInstanceFocus = false;
|
|
}
|