Feature: users can set start mode now, mini window position will be remembered

This commit is contained in:
萌萌哒赫萝
2023-04-06 15:57:36 +08:00
parent e0e26bd9ad
commit 76c0cfbcb3
11 changed files with 179 additions and 26 deletions

View File

@@ -6,7 +6,8 @@ import {
dialog,
clipboard,
systemPreferences,
Notification
Notification,
screen
} from 'electron'
import uploader from 'apis/app/uploader'
import db, { GalleryDB } from '~/main/apis/core/datastore'
@@ -15,7 +16,6 @@ import { IWindowList } from '#/types/enum'
import pasteTemplate from '~/main/utils/pasteTemplate'
import pkg from 'root/package.json'
import { ensureFilePath, handleCopyUrl } from '~/main/utils/common'
// import { T } from '#/i18n'
import { T } from '~/main/i18n'
import { isMacOSVersionGreaterThanOrEqualTo } from '~/main/utils/getMacOSVersion'
import { buildPicBedListMenu } from '~/main/events/remotes/menu'
@@ -80,7 +80,7 @@ export function createMenu () {
export function createContextMenu () {
if (process.platform === 'darwin' || process.platform === 'win32') {
const submenu = buildPicBedListMenu()
contextMenu = Menu.buildFromTemplate([
const template = [
{
label: T('ABOUT'),
click () {
@@ -120,7 +120,39 @@ export function createContextMenu () {
role: 'quit',
label: T('QUIT')
}
])
] as any
if (process.platform === 'win32') {
template.splice(2, 0,
{
label: T('OPEN_MINI_WINDOW'),
click () {
const miniWindow = windowManager.get(IWindowList.MINI_WINDOW)!
if (db.get('settings.miniWindowOntop')) {
miniWindow.setAlwaysOnTop(true)
}
const { width, height } = screen.getPrimaryDisplay().workAreaSize
const lastPosition = db.get('settings.miniWindowPosition')
if (lastPosition) {
miniWindow.setPosition(lastPosition[0], lastPosition[1])
} else {
miniWindow.setPosition(width - 100, height - 100)
}
miniWindow.on('close', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.on('move', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.show()
miniWindow.focus()
}
}
)
}
contextMenu = Menu.buildFromTemplate(template)
} else if (process.platform === 'linux') {
// TODO 图床选择功能
// 由于在Linux难以像在Mac和Windows上那样在点击时构造ContextMenu
@@ -141,6 +173,33 @@ export function createContextMenu () {
}
}
},
{
label: T('OPEN_MINI_WINDOW'),
click () {
const miniWindow = windowManager.get(IWindowList.MINI_WINDOW)!
if (db.get('settings.miniWindowOntop')) {
miniWindow.setAlwaysOnTop(true)
}
const { width, height } = screen.getPrimaryDisplay().workAreaSize
const lastPosition = db.get('settings.miniWindowPosition')
if (lastPosition) {
miniWindow.setPosition(lastPosition[0], lastPosition[1])
} else {
miniWindow.setPosition(width - 100, height - 100)
}
miniWindow.on('close', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.on('move', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.show()
miniWindow.focus()
}
},
{
label: T('ABOUT'),
click () {

View File

@@ -4,7 +4,8 @@ import {
shell,
Notification,
IpcMainEvent,
BrowserWindow
BrowserWindow,
screen
} from 'electron'
import windowManager from 'apis/app/window/windowManager'
import { IWindowList } from '#/types/enum'
@@ -170,7 +171,21 @@ export default {
if (db.get('settings.miniWindowOntop')) {
miniWindow.setAlwaysOnTop(true)
}
const { width, height } = screen.getPrimaryDisplay().workAreaSize
const lastPosition = db.get('settings.miniWindowPosition')
if (lastPosition) {
miniWindow.setPosition(lastPosition[0], lastPosition[1])
} else {
miniWindow.setPosition(width - 100, height - 100)
}
miniWindow.on('close', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.on('move', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.show()
miniWindow.focus()
settingWindow.hide()

View File

@@ -49,12 +49,6 @@ const buildMiniPageMenu = () => {
BrowserWindow.getFocusedWindow()!.hide()
}
},
{
label: T('PRIVACY_AGREEMENT'),
click () {
privacyManager.show(false)
}
},
{
label: T('RELOAD_APP'),
click () {

View File

@@ -5,7 +5,8 @@ import {
protocol,
Notification,
Menu,
dialog
dialog,
screen
} from 'electron'
import {
createProtocol
@@ -174,6 +175,34 @@ class LifeCycle {
}
await remoteNoticeHandler.init()
remoteNoticeHandler.triggerHook(IRemoteNoticeTriggerHook.APP_START)
if (db.get('settings.startMode') === 'mini') {
windowManager.create(IWindowList.MINI_WINDOW)
const miniWindow = windowManager.get(IWindowList.MINI_WINDOW)!
if (db.get('settings.miniWindowOntop')) {
miniWindow.setAlwaysOnTop(true)
}
const { width, height } = screen.getPrimaryDisplay().workAreaSize
const lastPosition = db.get('settings.miniWindowPosition')
if (lastPosition) {
miniWindow.setPosition(lastPosition[0], lastPosition[1])
} else {
miniWindow.setPosition(width - 100, height - 100)
}
miniWindow.on('close', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.on('move', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.show()
miniWindow.focus()
} else if (db.get('settings.startMode') === 'main') {
const settingWindow = windowManager.get(IWindowList.SETTING_WINDOW)!
settingWindow.show()
settingWindow.focus()
}
}
app.whenReady().then(readyFunction)
}