mirror of
https://github.com/smartfrigde/armcord.git
synced 2024-08-14 23:56:58 +00:00
feat: rewrite minimize to tray
This commit is contained in:
parent
a50f4ca297
commit
ac1d090ead
4 changed files with 30 additions and 33 deletions
5
src/common/forceQuit.ts
Normal file
5
src/common/forceQuit.ts
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
export let forceQuit = false;
|
||||||
|
|
||||||
|
export function setForceQuit(e: boolean): void {
|
||||||
|
forceQuit = e;
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
import {BrowserWindow, Menu, app} from "electron";
|
import {BrowserWindow, Menu, app} from "electron";
|
||||||
import {mainWindows} from "./window.js";
|
import {mainWindows} from "./window.js";
|
||||||
import {createSettingsWindow} from "../settings/main.js";
|
import {createSettingsWindow} from "../settings/main.js";
|
||||||
|
import {setForceQuit} from "../common/forceQuit.js";
|
||||||
|
|
||||||
export function setMenu(): void {
|
export function setMenu(): void {
|
||||||
const template: Electron.MenuItemConstructorOptions[] = [
|
const template: Electron.MenuItemConstructorOptions[] = [
|
||||||
|
@ -48,6 +49,7 @@ export function setMenu(): void {
|
||||||
label: "Quit",
|
label: "Quit",
|
||||||
accelerator: "CmdOrCtrl+Q",
|
accelerator: "CmdOrCtrl+Q",
|
||||||
click() {
|
click() {
|
||||||
|
setForceQuit(true);
|
||||||
app.quit();
|
app.quit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,13 +12,14 @@ import * as fs from "fs";
|
||||||
import contextMenu from "electron-context-menu";
|
import contextMenu from "electron-context-menu";
|
||||||
import os from "os";
|
import os from "os";
|
||||||
import RPCServer from "arrpc";
|
import RPCServer from "arrpc";
|
||||||
import {isQuitting, tray} from "../tray.js";
|
import {tray} from "../tray.js";
|
||||||
import {iconPath, init} from "../main.js";
|
import {iconPath, init} from "../main.js";
|
||||||
import {getConfig, setConfig, firstRun} from "../common/config.js";
|
import {getConfig, setConfig, firstRun} from "../common/config.js";
|
||||||
import {getWindowState, setWindowState} from "../common/windowState.js";
|
import {getWindowState, setWindowState} from "../common/windowState.js";
|
||||||
|
import {forceQuit, setForceQuit} from "../common/forceQuit.js";
|
||||||
export let mainWindows: BrowserWindow[] = [];
|
export let mainWindows: BrowserWindow[] = [];
|
||||||
export let inviteWindow: BrowserWindow;
|
export let inviteWindow: BrowserWindow;
|
||||||
export let forceQuit = false;
|
|
||||||
let osType = os.type();
|
let osType = os.type();
|
||||||
contextMenu({
|
contextMenu({
|
||||||
showSaveImageAs: true,
|
showSaveImageAs: true,
|
||||||
|
@ -238,39 +239,28 @@ function doAfterDefiningTheWindow(passedWindow: BrowserWindow): void {
|
||||||
});
|
});
|
||||||
setMenu();
|
setMenu();
|
||||||
passedWindow.on("close", (e) => {
|
passedWindow.on("close", (e) => {
|
||||||
if (process.platform === "darwin" && forceQuit) {
|
if (mainWindows.length > 1) {
|
||||||
passedWindow.close();
|
|
||||||
} else if (mainWindows.length > 1) {
|
|
||||||
mainWindows = mainWindows.filter((mainWindow) => mainWindow.id != passedWindow.id);
|
mainWindows = mainWindows.filter((mainWindow) => mainWindow.id != passedWindow.id);
|
||||||
passedWindow.destroy();
|
passedWindow.destroy();
|
||||||
} else {
|
}
|
||||||
const [width, height] = passedWindow.getSize();
|
if (getConfig("minimizeToTray") && !forceQuit) {
|
||||||
setWindowState({
|
e.preventDefault();
|
||||||
width,
|
passedWindow.hide();
|
||||||
height,
|
} else if (!getConfig("minimizeToTray")) {
|
||||||
isMaximized: passedWindow.isMaximized(),
|
app.quit();
|
||||||
x: passedWindow.getPosition()[0],
|
|
||||||
y: passedWindow.getPosition()[1]
|
|
||||||
});
|
|
||||||
if (getConfig("minimizeToTray") && !isQuitting) {
|
|
||||||
e.preventDefault();
|
|
||||||
passedWindow.hide();
|
|
||||||
} else if (!getConfig("minimizeToTray")) {
|
|
||||||
e.preventDefault();
|
|
||||||
app.quit();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (process.platform === "darwin") {
|
app.on("before-quit", () => {
|
||||||
app.on("before-quit", function (event) {
|
const [width, height] = passedWindow.getSize();
|
||||||
if (!forceQuit) {
|
setWindowState({
|
||||||
event.preventDefault();
|
width,
|
||||||
forceQuit = true;
|
height,
|
||||||
app.quit();
|
isMaximized: passedWindow.isMaximized(),
|
||||||
}
|
x: passedWindow.getPosition()[0],
|
||||||
|
y: passedWindow.getPosition()[1]
|
||||||
});
|
});
|
||||||
}
|
setForceQuit(true);
|
||||||
|
});
|
||||||
// REVIEW - Awaiting javascript execution is silly
|
// REVIEW - Awaiting javascript execution is silly
|
||||||
passedWindow.on("focus", () => {
|
passedWindow.on("focus", () => {
|
||||||
void passedWindow.webContents.executeJavaScript(`document.body.removeAttribute("unFocused");`);
|
void passedWindow.webContents.executeJavaScript(`document.body.removeAttribute("unFocused");`);
|
||||||
|
|
|
@ -5,8 +5,9 @@ import path from "path";
|
||||||
import {createSettingsWindow} from "./settings/main.js";
|
import {createSettingsWindow} from "./settings/main.js";
|
||||||
import {getConfig, getConfigLocation, setConfig} from "./common/config.js";
|
import {getConfig, getConfigLocation, setConfig} from "./common/config.js";
|
||||||
import {getDisplayVersion} from "./common/version.js";
|
import {getDisplayVersion} from "./common/version.js";
|
||||||
|
import {setForceQuit} from "./common/forceQuit.js";
|
||||||
export let tray: Tray;
|
export let tray: Tray;
|
||||||
export let isQuitting = false;
|
|
||||||
let trayIcon = "ac_plug_colored";
|
let trayIcon = "ac_plug_colored";
|
||||||
void app.whenReady().then(async () => {
|
void app.whenReady().then(async () => {
|
||||||
// REVIEW - app will hang at startup if line above is awaited.
|
// REVIEW - app will hang at startup if line above is awaited.
|
||||||
|
@ -86,8 +87,7 @@ void app.whenReady().then(async () => {
|
||||||
{
|
{
|
||||||
label: `Quit ${clientName}`,
|
label: `Quit ${clientName}`,
|
||||||
click() {
|
click() {
|
||||||
//NOTE - It would be better to unify isQuitting with forceQuit in window.ts that's used on macOS
|
setForceQuit(true);
|
||||||
isQuitting = true;
|
|
||||||
app.quit();
|
app.quit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue