Skip to content

Commit 5c2481f

Browse files
committed
新增:分离窗口快捷键
1 parent 75a5cd8 commit 5c2481f

7 files changed

Lines changed: 78 additions & 20 deletions

File tree

electron/mapi/manager/config/config.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {ManagerHotkey} from "../hotkey";
1313
import {MemoryCacheUtil} from "../../../lib/util";
1414
import {ManagerPlugin} from "../plugin";
1515
import {ManagerSystem} from "../system";
16-
import {isWin} from "../../../lib/env";
16+
import {isLinux, isMac, isWin} from "../../../lib/env";
1717

1818
const defaultConfig: ConfigRecord = {
1919
mainTrigger: {
@@ -24,10 +24,18 @@ const defaultConfig: ConfigRecord = {
2424
shiftKey: false,
2525
times: 1,
2626
},
27+
detachWindowTrigger: {
28+
key: 'D',
29+
altKey: false,
30+
ctrlKey: !isMac,
31+
metaKey: isMac,
32+
shiftKey: false,
33+
times: 1,
34+
},
2735
fastPanelTrigger: {
2836
type: 'Ctrl',
2937
times: 1,
30-
}
38+
},
3139
// fastPanelTriggerButton: {
3240
// button: HotkeyMouseButtonEnum.RIGHT,
3341
// type: 'longPress',
@@ -86,17 +94,17 @@ export const ManagerConfig = {
8694
...config
8795
}
8896
await KVDBMain.putForce(CommonConfig.dbSystem, doc)
89-
let changed = false
97+
let hotkeyChanged = false
9098
if (this.configOld) {
91-
if (!changed && JSON.stringify(this.configOld.mainTrigger) !== JSON.stringify(config.mainTrigger)) {
92-
changed = true
93-
}
94-
if (!changed && JSON.stringify(this.configOld.fastPanelTrigger) !== JSON.stringify(config.fastPanelTrigger)) {
95-
changed = true
99+
for (const k of ['mainTrigger', 'fastPanelTrigger']) {
100+
if (JSON.stringify(this.configOld[k]) !== JSON.stringify(config[k])) {
101+
hotkeyChanged = true
102+
break
103+
}
96104
}
97105
}
98106
MemoryCacheUtil.forget('Config')
99-
if (changed) {
107+
if (hotkeyChanged) {
100108
ManagerHotkey.configInit().then()
101109
}
102110
},

electron/mapi/manager/hotkey/index.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -252,16 +252,18 @@ export const ManagerHotkey = {
252252
this.keyConfigs = []
253253

254254
const config = await ManagerConfig.get()
255-
if (config.mainTrigger) {
256-
this.keyConfigs.push({
257-
name: 'mainTrigger',
258-
keycode: keyToKeyCode(config.mainTrigger.key),
259-
altKey: config.mainTrigger.altKey,
260-
ctrlKey: config.mainTrigger.ctrlKey,
261-
metaKey: config.mainTrigger.metaKey,
262-
shiftKey: config.mainTrigger.shiftKey,
263-
times: config.mainTrigger.times,
264-
})
255+
for (const k of ['mainTrigger']) {
256+
if (config[k]) {
257+
this.keyConfigs.push({
258+
name: k,
259+
keycode: keyToKeyCode(config[k].key),
260+
altKey: config[k].altKey,
261+
ctrlKey: config[k].ctrlKey,
262+
metaKey: config[k].metaKey,
263+
shiftKey: config[k].shiftKey,
264+
times: config[k].times,
265+
})
266+
}
265267
}
266268
this.keySimpleConfigs = []
267269
if (config.fastPanelTrigger) {

electron/mapi/manager/window/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ export const ManagerWindow = {
322322
state: pluginState,
323323
param: pluginParam
324324
})
325+
AppRuntime.mainWindow.focus()
325326
resolve(undefined)
326327
})
327328
})

src/App.vue

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,14 @@ window.__page.onPluginInit((data: {
4747
alwaysOnTop: boolean
4848
}
4949
}) => {
50-
// console.log('main.onPluginInit', data)
50+
console.log('main.onPluginInit', data)
5151
manager.setActivePlugin(data.plugin)
5252
manager.setSubInput({
5353
placeholder: '',
5454
isFocus: false,
5555
})
5656
manager.setSubInputValue('')
57+
mainSearch.value?.focus()
5758
})
5859
window.__page.onPluginAlreadyOpened(() => {
5960
// console.log('main.onPluginAlreadyOpened')
@@ -97,7 +98,38 @@ window.__page.onSetSubInputValue((value: string) => {
9798
manager.setSubInputValue(value);
9899
})
99100
101+
let detachHotKey: any = null
102+
let detachHotkeyExpire = 0
103+
let detachHotkeyTimes = 0
100104
window.addEventListener('keydown', (e) => {
105+
if (!detachHotKey) {
106+
detachHotKey = manager.configGet('detachWindowTrigger', null)
107+
}
108+
// console.log('keydown', detachHotKey.value, detachHotkeyExpire)
109+
// {"key":"D","altKey":false,"ctrlKey":false,"metaKey":true,"shiftKey":false,"times":1}
110+
if (detachHotKey && detachHotKey.value) {
111+
// console.log('detachHotkeyExpire', detachHotKey.value.key, detachHotkeyExpire)
112+
if (
113+
detachHotKey.value.key === e.key.toUpperCase()
114+
&& detachHotKey.value.altKey === e.altKey
115+
&& detachHotKey.value.ctrlKey === e.ctrlKey
116+
&& detachHotKey.value.metaKey === e.metaKey
117+
&& detachHotKey.value.shiftKey === e.shiftKey
118+
) {
119+
if (!detachHotkeyExpire || Date.now() > detachHotkeyExpire) {
120+
detachHotkeyExpire = Date.now() + 500
121+
detachHotkeyTimes = 1
122+
} else {
123+
detachHotkeyTimes++
124+
}
125+
if (detachHotkeyTimes >= detachHotKey.value.times) {
126+
detachHotkeyExpire = 0
127+
detachHotkeyTimes = 0
128+
manager.detachPlugin()
129+
return
130+
}
131+
}
132+
}
101133
if (!manager.activePlugin) {
102134
mainSearch.value?.onKeyDown(e)
103135
}

src/pages/Main/MainSearch.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@ const onShow = () => {
164164
mainInput.value.focus();
165165
};
166166
167+
const focus = () => {
168+
mainInput.value.focus();
169+
};
170+
167171
const onKeyDown = (e: KeyboardEvent) => {
168172
// ignore input event for fire twice
169173
if (!!(e.target && ((e.target as any).tagName === 'INPUT'))) {
@@ -196,6 +200,7 @@ const onFocus = () => {
196200
defineExpose({
197201
onShow,
198202
onKeyDown,
203+
focus,
199204
});
200205
201206
</script>

src/pages/System/SystemSetting.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,15 @@ const onManagerConfigChange = async (key: string, value: any) => {
107107
@change="onManagerConfigChange('autoLaunchEnable',$event)"/>
108108
</div>
109109
</div>
110+
<div class="flex items-center mb-6">
111+
<div class="flex-grow">
112+
分离窗口快捷键
113+
</div>
114+
<div>
115+
<HotkeyInput :value="manager.configGet('detachWindowTrigger',null)"
116+
@change="manager.onConfigChange('detachWindowTrigger',$event)"/>
117+
</div>
118+
</div>
110119
</div>
111120
</div>
112121
</div>

src/types/Manager.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {HotkeyKeyItem, HotkeyKeySimpleItem,} from "../../electron/mapi/keys/type
22

33
export type ConfigRecord = {
44
mainTrigger: HotkeyKeyItem,
5+
detachWindowTrigger: HotkeyKeyItem,
56
fastPanelTrigger: HotkeyKeySimpleItem,
67
}
78

0 commit comments

Comments
 (0)