OpenAsar/core/src/app/discord_native/renderer/window.js

95 lines
2.5 KiB
JavaScript

"use strict";
const electron = require('electron');
const {
WINDOW_BLUR,
WINDOW_CLOSE,
WINDOW_FOCUS,
WINDOW_MAXIMIZE,
WINDOW_MINIMIZE,
WINDOW_RESTORE,
WINDOW_FLASH_FRAME,
WINDOW_TOGGLE_FULLSCREEN,
WINDOW_SET_BACKGROUND_THROTTLING,
WINDOW_SET_PROGRESS_BAR,
WINDOW_IS_ALWAYS_ON_TOP,
WINDOW_SET_ALWAYS_ON_TOP,
WINDOW_DEVTOOLS_OPENED,
WINDOW_DEVTOOLS_CLOSED
} = require('../common/constants').IPCEvents;
let devtoolsOpenedCallback = () => {};
let devtoolsClosedCallback = () => {};
electron.ipcRenderer.on(WINDOW_DEVTOOLS_OPENED, async _ => {
if (devtoolsOpenedCallback != null) {
devtoolsOpenedCallback();
}
});
electron.ipcRenderer.on(WINDOW_DEVTOOLS_CLOSED, async _ => {
if (devtoolsClosedCallback != null) {
devtoolsClosedCallback();
}
});
async function flashFrame(flag) {
electron.ipcRenderer.invoke(WINDOW_FLASH_FRAME, flag);
}
async function minimize(key) {
electron.ipcRenderer.invoke(WINDOW_MINIMIZE, key);
}
async function restore(key) {
electron.ipcRenderer.invoke(WINDOW_RESTORE, key);
}
async function maximize(key) {
electron.ipcRenderer.invoke(WINDOW_MAXIMIZE, key);
}
async function focus(_hack, key) {
electron.ipcRenderer.invoke(WINDOW_FOCUS, key);
}
async function setAlwaysOnTop(key, enabled) {
return electron.ipcRenderer.invoke(WINDOW_SET_ALWAYS_ON_TOP, key, enabled);
}
async function isAlwaysOnTop(key) {
return electron.ipcRenderer.invoke(WINDOW_IS_ALWAYS_ON_TOP, key);
}
async function blur(key) {
electron.ipcRenderer.invoke(WINDOW_BLUR, key);
}
async function setProgressBar(progress, key) {
electron.ipcRenderer.invoke(WINDOW_SET_PROGRESS_BAR, key, progress);
}
async function fullscreen(key) {
electron.ipcRenderer.invoke(WINDOW_TOGGLE_FULLSCREEN, key);
}
async function close(key) {
electron.ipcRenderer.invoke(WINDOW_CLOSE, key);
}
async function setZoomFactor(factor) {
if (!electron.webFrame.setZoomFactor) return;
electron.webFrame.setZoomFactor(factor / 100);
}
async function setBackgroundThrottling(enabled) {
electron.ipcRenderer.invoke(WINDOW_SET_BACKGROUND_THROTTLING, enabled);
}
async function setDevtoolsCallbacks(onOpened, onClosed) {
devtoolsOpenedCallback = onOpened;
devtoolsClosedCallback = onClosed;
}
// To synchronize web vs desktop release features
const USE_OSX_NATIVE_TRAFFIC_LIGHTS = true;
module.exports = {
flashFrame,
minimize,
restore,
maximize,
focus,
blur,
fullscreen,
close,
setAlwaysOnTop,
isAlwaysOnTop,
setZoomFactor,
setBackgroundThrottling,
setProgressBar,
setDevtoolsCallbacks,
USE_OSX_NATIVE_TRAFFIC_LIGHTS
};