optimize: 快捷键设置保存后立即生效;关闭策略提示窗优化。

pull/366/head
王良 2024-09-26 10:35:37 +08:00
parent f32cabd40f
commit 4179fb111c
3 changed files with 70 additions and 53 deletions

View File

@ -228,8 +228,8 @@ function createWindow (startHideWindow) {
const config = DevSidecar.api.config.get() const config = DevSidecar.api.config.get()
const closeStrategy = config.app.closeStrategy const closeStrategy = config.app.closeStrategy
if (closeStrategy === 0) { if (closeStrategy === 0) {
// 提醒 // 弹窗提示,选择关闭策略
win.webContents.send('close.showTip') win.webContents.send('close.showTip', closeStrategy)
} else if (closeStrategy === 1) { } else if (closeStrategy === 1) {
// 直接退出 // 直接退出
quit() quit()
@ -269,7 +269,7 @@ function createWindow (startHideWindow) {
} }
win.webContents.executeJavaScript('config') win.webContents.executeJavaScript('config')
.then((value) => { .then((value) => {
console.info('window.config:', value) console.info('window.config:', value, ', key:', input.key)
if (!value || (value.disableBeforeInputEvent !== true && value.disableBeforeInputEvent !== 'true')) { if (!value || (value.disableBeforeInputEvent !== true && value.disableBeforeInputEvent !== 'true')) {
shortcut(event, input) shortcut(event, input)
} }
@ -278,6 +278,14 @@ function createWindow (startHideWindow) {
shortcut(event, input) shortcut(event, input)
}) })
}) })
// 监听渲染进程发送过来的消息
win.webContents.on('ipc-message', (event, channel, message) => {
console.info(arguments)
if (channel === 'change-showHideShortcut') {
registerShowHideShortcut(message)
}
})
} }
async function beforeQuit () { async function beforeQuit () {
@ -292,6 +300,37 @@ async function quit () {
app.quit() app.quit()
} }
function registerShowHideShortcut (showHideShortcut) {
globalShortcut.unregisterAll()
if (showHideShortcut && showHideShortcut !== '无' && showHideShortcut.length > 1) {
try {
const registerSuccess = globalShortcut.register(DevSidecar.api.config.get().app.showHideShortcut, () => {
if (winIsHidden || !win.isFocused()) {
if (!win.isFocused()) {
win.focus()
}
if (winIsHidden) {
showWin()
}
} else {
// linux快捷键不关闭窗口
if (!isLinux()) {
hideWin()
}
}
})
if (registerSuccess) {
log.info('注册快捷键成功:', DevSidecar.api.config.get().app.showHideShortcut)
} else {
log.error('注册快捷键失败:', DevSidecar.api.config.get().app.showHideShortcut)
}
} catch (e) {
log.error('注册快捷键异常:', DevSidecar.api.config.get().app.showHideShortcut, ', error:', e)
}
}
}
function initApp () { function initApp () {
if (isMac) { if (isMac) {
app.whenReady().then(() => { app.whenReady().then(() => {
@ -301,36 +340,10 @@ function initApp () {
// 全局监听快捷键,用于 显示/隐藏 窗口 // 全局监听快捷键,用于 显示/隐藏 窗口
app.whenReady().then(async () => { app.whenReady().then(async () => {
const showHideShortcut = DevSidecar.api.config.get().app.showHideShortcut registerShowHideShortcut(DevSidecar.api.config.get().app.showHideShortcut)
if (showHideShortcut && showHideShortcut !== '无' && showHideShortcut.length > 1) {
try {
const registerSuccess = globalShortcut.register(DevSidecar.api.config.get().app.showHideShortcut, () => {
if (winIsHidden || !win.isFocused()) {
if (!win.isFocused()) {
win.focus()
}
if (winIsHidden) {
showWin()
}
} else {
// linux快捷键不关闭窗口
if (!isLinux()) {
hideWin()
}
}
})
if (registerSuccess) {
log.info('注册快捷键成功:', DevSidecar.api.config.get().app.showHideShortcut)
} else {
log.error('注册快捷键失败:', DevSidecar.api.config.get().app.showHideShortcut)
}
} catch (e) {
log.error('注册快捷键异常:', DevSidecar.api.config.get().app.showHideShortcut, ', error:', e)
}
}
}) })
} }
// -------------执行开始--------------- // -------------执行开始---------------
app.disableHardwareAcceleration() // 禁用gpu app.disableHardwareAcceleration() // 禁用gpu

View File

@ -1,44 +1,39 @@
let closeType = 1
let doSave = false
function install (app, api) { function install (app, api) {
api.ipc.on('close.showTip', (event, message) => { api.ipc.on('close.showTip', (event, message) => {
console.error('error', event, message) console.info('ipc channel: "close.showTip", event:', event, ', message:', message)
const result = {
closeType: 1,
save: false
}
function onRadioChange (event) { function onRadioChange (event) {
result.closeType = event.target.value closeType = event.target.value
} }
function onCheckChange (event) { function onCheckChange (event) {
result.save = event.target.checked doSave = event.target.checked
} }
app.$confirm({ app.$confirm({
title: '关闭策略', title: '关闭策略',
content: h => <div> content: h => <div>
<div style={'margin-top:10px'}> <div style={'margin-top:10px'}>
<a-radio-group vOn:change={onRadioChange}> <a-radio-group vOn:change={onRadioChange} defaultValue={closeType}>
<a-radio value={1}> <a-radio value={1}>直接关闭</a-radio>
直接关闭 <a-radio value={2}>最小化到系统托盘</a-radio>
</a-radio>
<a-radio value={2}>
最小化到系统托盘
</a-radio>
</a-radio-group> </a-radio-group>
</div> </div>
<div style={'margin-top:10px'}> <div style={'margin-top:10px'}>
<a-checkbox vOn:change={onCheckChange} > <a-checkbox vOn:change={onCheckChange} defaultChecked={doSave}>
记住本次选择不再提示 记住本次选择不再提示
< /a-checkbox> < /a-checkbox>
</div> </div>
</div>, </div>,
async onOk () { async onOk () {
console.log('OK') console.log('OK. closeType=', closeType)
if (result.save) { if (doSave) {
await api.config.update({ app: { closeStrategy: result.closeType } }) await api.config.update({ app: { closeStrategy: closeType } })
} }
api.ipc.send('close', { key: 'selected', value: result.closeType }) api.ipc.send('close', { key: 'selected', value: closeType })
}, },
onCancel () { onCancel () {
console.log('Cancel') console.log('Cancel. closeType=', closeType)
} }
}) })
}) })

View File

@ -92,8 +92,7 @@
<a-form-item label="打开窗口快捷键" :label-col="labelCol" :wrapper-col="wrapperCol"> <a-form-item label="打开窗口快捷键" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-input v-model="config.app.showHideShortcut" @change="shortcutChange" @keydown="shortcutKeyDown" @keyup="shortcutKeyUp"></a-input> <a-input v-model="config.app.showHideShortcut" @change="shortcutChange" @keydown="shortcutKeyDown" @keyup="shortcutKeyUp"></a-input>
<div class="form-help"> <div class="form-help">
部分快捷键已被占用F5=刷新页面F12=开发者工具DevTools<br/> 部分快捷键已被占用F5=刷新页面F12=开发者工具DevTools
当前版本修改快捷键后需重启 ds 才会生效
</div> </div>
</a-form-item> </a-form-item>
<a-form-item label="启动时打开窗口" :label-col="labelCol" :wrapper-col="wrapperCol"> <a-form-item label="启动时打开窗口" :label-col="labelCol" :wrapper-col="wrapperCol">
@ -154,6 +153,8 @@
<script> <script>
import Plugin from '../mixins/plugin' import Plugin from '../mixins/plugin'
import { ipcRenderer } from 'electron'
export default { export default {
name: 'Setting', name: 'Setting',
mixins: [Plugin], mixins: [Plugin],
@ -325,6 +326,11 @@ export default {
this.config.app.showHideShortcut = shortcut this.config.app.showHideShortcut = shortcut
}, },
async applyBefore () {
if (!this.config.app.showHideShortcut) {
this.config.app.showHideShortcut = '无'
}
},
async applyAfter () { async applyAfter () {
let reloadLazy = 10 let reloadLazy = 10
@ -339,6 +345,9 @@ export default {
if (this.config.app.theme !== this.themeBackup) { if (this.config.app.theme !== this.themeBackup) {
setTimeout(() => window.location.reload(), reloadLazy) setTimeout(() => window.location.reload(), reloadLazy)
} }
//
ipcRenderer.send('change-showHideShortcut', this.config.app.showHideShortcut)
}, },
async openExternal (url) { async openExternal (url) {
await this.$api.ipc.openExternal(url) await this.$api.ipc.openExternal(url)