Avoid window creation/init if 2nd instance (#297)

* fix first instance not showing when opening 2nd

* Avoid window creation/init if 2nd instance

* fix white flash on startup, add en-us transparent entry for future use

* fix white flash for settings window too

Co-authored-by: octopushugger <octopushugger@github.com>
This commit is contained in:
Octopus Hugger 2022-12-13 10:45:21 -08:00 committed by GitHub
parent 8a9a62aa57
commit 63db76cd7e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 77 additions and 73 deletions

View file

@ -19,65 +19,71 @@ export var settings: any;
export var customTitlebar: boolean;
export var clientName: "ArmCord";
// Your data now belongs to CCP
let settingsFile = fs.readFileSync(getConfigLocation(), "utf-8");
crashReporter.start({uploadToServer: false, extra: {settingsFile}});
if (process.platform == "linux") {
if (process.env.$XDG_SESSION_TYPE == "wayland") {
console.log("Wayland specific patches applied.");
app.commandLine.appendSwitch("ozone-platform=wayland");
if (process.env.$XDG_CURRENT_DESKTOP == "GNOME") {
app.commandLine.appendSwitch("enable-features=UseOzonePlatform,WaylandWindowDecorations");
if (!app.requestSingleInstanceLock()) {
// kill if 2nd instance
app.quit();
} else {
// Your data now belongs to CCP
let settingsFile = fs.readFileSync(getConfigLocation(), "utf-8");
crashReporter.start({uploadToServer: false, extra: {settingsFile}});
if (process.platform == "linux") {
if (process.env.$XDG_SESSION_TYPE == "wayland") {
console.log("Wayland specific patches applied.");
app.commandLine.appendSwitch("ozone-platform=wayland");
if (process.env.$XDG_CURRENT_DESKTOP == "GNOME") {
app.commandLine.appendSwitch("enable-features=UseOzonePlatform,WaylandWindowDecorations");
} else {
app.commandLine.appendSwitch("enable-features=UseOzonePlatform");
}
}
}
checkForDataFolder();
checkIfConfigExists();
injectElectronFlags();
app.whenReady().then(async () => {
if ((await getConfig("customIcon")) !== undefined ?? null) {
iconPath = await getConfig("customIcon");
} else {
app.commandLine.appendSwitch("enable-features=UseOzonePlatform");
iconPath = path.join(__dirname, "../", "/assets/ac_icon_transparent.png");
}
}
}
checkForDataFolder();
checkIfConfigExists();
injectElectronFlags();
app.whenReady().then(async () => {
if ((await getConfig("customIcon")) !== undefined ?? null) {
iconPath = await getConfig("customIcon");
} else {
iconPath = path.join(__dirname, "../", "/assets/ac_icon_transparent.png");
}
async function init() {
switch (await getConfig("windowStyle")) {
case "default":
createCustomWindow();
customTitlebar = true;
break;
case "native":
createNativeWindow();
break;
case "transparent":
createTransparentWindow();
break;
case "basic":
createNativeWindow();
break;
default:
createCustomWindow();
customTitlebar = true;
break;
}
}
await init();
await installModLoader();
session.fromPartition("some-partition").setPermissionRequestHandler((webContents, permission, callback) => {
if (permission === "notifications") {
// Approves the permissions request
callback(true);
}
if (permission === "media") {
// Approves the permissions request
callback(true);
async function init() {
switch (await getConfig("windowStyle")) {
case "default":
createCustomWindow();
customTitlebar = true;
break;
case "native":
createNativeWindow();
break;
case "transparent":
createTransparentWindow();
break;
case "basic":
createNativeWindow();
break;
default:
createCustomWindow();
customTitlebar = true;
break;
}
}
await init();
await installModLoader();
session.fromPartition("some-partition").setPermissionRequestHandler((webContents, permission, callback) => {
if (permission === "notifications") {
// Approves the permissions request
callback(true);
}
if (permission === "media") {
// Approves the permissions request
callback(true);
}
});
app.on("activate", async function () {
if (BrowserWindow.getAllWindows().length === 0) await init();
});
});
app.on("activate", async function () {
if (BrowserWindow.getAllWindows().length === 0) await init();
});
});
}

View file

@ -38,6 +38,7 @@ export function createSettingsWindow() {
title: `ArmCord Settings | Version: ${getDisplayVersion()}`,
darkTheme: true,
frame: true,
backgroundColor: "#2f3136",
autoHideMenuBar: true,
webPreferences: {
sandbox: false,

View file

@ -78,23 +78,17 @@ async function doAfterDefiningTheWindow() {
}
mainWindow.webContents.userAgent = `Mozilla/5.0 (X11; ${osType} ${os.arch()}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36`; //fake useragent for screenshare to work
}
const gotTheLock = app.requestSingleInstanceLock();
app.on("second-instance", (event, commandLine, workingDirectory, additionalData) => {
// Print out data received from the second instance.
console.log(additionalData);
if (!gotTheLock) {
app.quit();
} else {
app.on("second-instance", (event, commandLine, workingDirectory, additionalData) => {
// Print out data received from the second instance.
console.log(additionalData);
// Someone tried to run a second instance, we should focus our window.
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.show();
mainWindow.focus();
}
});
}
// Someone tried to run a second instance, we should focus our window.
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.show();
mainWindow.focus();
}
});
mainWindow.webContents.setWindowOpenHandler(({url}) => {
// Allow about:blank (used by Vencord QuickCss popup)
if (url === "about:blank") return {action: "allow"};
@ -273,6 +267,7 @@ export function createCustomWindow() {
darkTheme: true,
icon: iconPath,
frame: false,
backgroundColor: "#202225",
autoHideMenuBar: true,
webPreferences: {
sandbox: false,
@ -291,6 +286,7 @@ export function createNativeWindow() {
icon: iconPath,
show: false,
frame: true,
backgroundColor: "#202225",
autoHideMenuBar: true,
webPreferences: {
sandbox: false,