mirror of
https://github.com/Eugeny/tabby.git
synced 2025-04-06 16:00:28 +08:00
added --hidden startup option (fixes #488)
This commit is contained in:
parent
64fc36df51
commit
702d29b5b4
@ -1,6 +1,6 @@
|
||||
import { app, ipcMain, Menu, Tray, shell } from 'electron'
|
||||
import { loadConfig } from './config'
|
||||
import { Window } from './window'
|
||||
import { Window, WindowOptions } from './window'
|
||||
|
||||
export class Application {
|
||||
private tray: Tray
|
||||
@ -20,8 +20,8 @@ export class Application {
|
||||
app.commandLine.appendSwitch('disable-http-cache')
|
||||
}
|
||||
|
||||
async newWindow (): Promise<Window> {
|
||||
let window = new Window()
|
||||
async newWindow (options?: WindowOptions): Promise<Window> {
|
||||
let window = new Window(options)
|
||||
this.windows.push(window)
|
||||
window.visible$.subscribe(visible => {
|
||||
if (visible) {
|
||||
|
@ -28,6 +28,10 @@ export function parseArgs (argv, cwd) {
|
||||
describe: 'Show DevTools on start',
|
||||
type: 'boolean'
|
||||
})
|
||||
.option('hidden', {
|
||||
describe: 'Start minimized',
|
||||
type: 'boolean'
|
||||
})
|
||||
.option('version', {
|
||||
alias: 'v',
|
||||
describe: 'Show version and exit',
|
||||
|
@ -59,5 +59,5 @@ app.on('ready', () => {
|
||||
}
|
||||
]))
|
||||
}
|
||||
application.newWindow()
|
||||
application.newWindow({ hidden: argv.hidden })
|
||||
})
|
||||
|
@ -14,6 +14,10 @@ if (process.platform === 'win32') {
|
||||
DwmEnableBlurBehindWindow = require('windows-blurbehind').DwmEnableBlurBehindWindow
|
||||
}
|
||||
|
||||
export interface WindowOptions {
|
||||
hidden?: boolean
|
||||
}
|
||||
|
||||
export class Window {
|
||||
ready: Promise<void>
|
||||
private visible = new Subject<boolean>()
|
||||
@ -23,14 +27,16 @@ export class Window {
|
||||
|
||||
get visible$ (): Observable<boolean> { return this.visible }
|
||||
|
||||
constructor () {
|
||||
constructor (options?: WindowOptions) {
|
||||
let configData = loadConfig()
|
||||
|
||||
options = options || {}
|
||||
|
||||
this.windowConfig = new ElectronConfig({ name: 'window' })
|
||||
this.windowBounds = this.windowConfig.get('windowBoundaries')
|
||||
|
||||
let maximized = this.windowConfig.get('maximized')
|
||||
let options: Electron.BrowserWindowConstructorOptions = {
|
||||
let bwOptions: Electron.BrowserWindowConstructorOptions = {
|
||||
width: 800,
|
||||
height: 600,
|
||||
title: 'Terminus',
|
||||
@ -41,33 +47,36 @@ export class Window {
|
||||
show: false,
|
||||
backgroundColor: '#00000000'
|
||||
}
|
||||
Object.assign(options, this.windowBounds)
|
||||
Object.assign(bwOptions, this.windowBounds)
|
||||
|
||||
if ((configData.appearance || {}).frame === 'native') {
|
||||
options.frame = true
|
||||
bwOptions.frame = true
|
||||
} else {
|
||||
if (process.platform === 'darwin') {
|
||||
options.titleBarStyle = 'hiddenInset'
|
||||
bwOptions.titleBarStyle = 'hiddenInset'
|
||||
}
|
||||
}
|
||||
|
||||
if (process.platform === 'linux') {
|
||||
options.backgroundColor = '#131d27'
|
||||
bwOptions.backgroundColor = '#131d27'
|
||||
}
|
||||
|
||||
this.window = new BrowserWindow(options)
|
||||
this.window = new BrowserWindow(bwOptions)
|
||||
this.window.once('ready-to-show', () => {
|
||||
if (process.platform === 'darwin') {
|
||||
this.window.setVibrancy('dark')
|
||||
} else if (process.platform === 'win32' && (configData.appearance || {}).vibrancy) {
|
||||
this.setVibrancy(true)
|
||||
}
|
||||
if (maximized) {
|
||||
this.window.maximize()
|
||||
} else {
|
||||
this.window.show()
|
||||
|
||||
if (!options.hidden) {
|
||||
if (maximized) {
|
||||
this.window.maximize()
|
||||
} else {
|
||||
this.window.show()
|
||||
}
|
||||
this.window.focus()
|
||||
}
|
||||
this.window.focus()
|
||||
})
|
||||
this.window.loadURL(`file://${app.getAppPath()}/dist/index.html?${this.window.id}`, { extraHeaders: 'pragma: no-cache\n' })
|
||||
|
||||
|
@ -122,7 +122,7 @@ export class AppRootComponent {
|
||||
})
|
||||
|
||||
this.hostApp.secondInstance$.subscribe(() => {
|
||||
this.onGlobalHotkey()
|
||||
this.presentWindow()
|
||||
})
|
||||
this.hotkeys.globalHotkey.subscribe(() => {
|
||||
this.onGlobalHotkey()
|
||||
@ -166,28 +166,35 @@ export class AppRootComponent {
|
||||
|
||||
onGlobalHotkey () {
|
||||
if (this.hostApp.getWindow().isFocused()) {
|
||||
// focused
|
||||
this.electron.loseFocus()
|
||||
this.hostApp.getWindow().blur()
|
||||
if (this.hostApp.platform !== Platform.macOS) {
|
||||
this.hideWindow()
|
||||
} else {
|
||||
this.presentWindow()
|
||||
}
|
||||
}
|
||||
|
||||
presentWindow () {
|
||||
if (!this.hostApp.getWindow().isVisible()) {
|
||||
// unfocused, invisible
|
||||
this.hostApp.getWindow().show()
|
||||
this.hostApp.getWindow().focus()
|
||||
} else {
|
||||
if (this.config.store.appearance.dock === 'off') {
|
||||
// not docked, visible
|
||||
setTimeout(() => {
|
||||
this.hostApp.getWindow().focus()
|
||||
})
|
||||
} else {
|
||||
// docked, visible
|
||||
this.hostApp.getWindow().hide()
|
||||
}
|
||||
} else {
|
||||
if (!this.hostApp.getWindow().isVisible()) {
|
||||
// unfocused, invisible
|
||||
this.hostApp.getWindow().show()
|
||||
this.hostApp.getWindow().focus()
|
||||
} else {
|
||||
if (this.config.store.appearance.dock === 'off') {
|
||||
// not docked, visible
|
||||
setTimeout(() => {
|
||||
this.hostApp.getWindow().focus()
|
||||
})
|
||||
} else {
|
||||
// docked, visible
|
||||
this.hostApp.getWindow().hide()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hideWindow () {
|
||||
this.electron.loseFocus()
|
||||
this.hostApp.getWindow().blur()
|
||||
if (this.hostApp.platform !== Platform.macOS) {
|
||||
this.hostApp.getWindow().hide()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,8 @@ export class HostAppService {
|
||||
text = shellEscape([text])
|
||||
}
|
||||
this.cliPaste.next(text)
|
||||
} else {
|
||||
this.secondInstance.next()
|
||||
}
|
||||
}))
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user