修复在新建歌单输入框、歌单内歌曲搜索输入框会意外触发设置的全局快捷键的问题(#879)

pull/930/merge
lyswhut 2022-06-12 14:39:58 +08:00
parent 0704a4ad12
commit 9d08f91079
9 changed files with 25 additions and 21 deletions

View File

@ -12,6 +12,7 @@
- 修复若配置了`http_proxy`环境变量时,会意外使用此代理配置的问题
- 修复多选后切换列表后不会清空多选内容的问题
- 修复设置快捷键时的处理逻辑问题
- 修复在新建歌单输入框、歌单内歌曲搜索输入框会意外触发设置的全局快捷键的问题(#879
### 文档

View File

@ -8,7 +8,7 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" viewBox="0 0 42 42" space="preserve">
<use xlink:href="#icon-addTo"></use>
</svg>
<input class="key-bind" :class="$style.newListInput" :value="newListName" type="text" :placeholder="$t('lists__new_list_input')" @keyup.enter="handleSaveList($event)" @blur="handleSaveList($event)"/>
<input :class="$style.newListInput" :value="newListName" type="text" :placeholder="$t('lists__new_list_input')" @keyup.enter="handleSaveList($event)" @blur="handleSaveList($event)"/>
</base-btn>
<span :class="$style.btn" :key="i" v-for="i in spaceNum"></span>
</div>

View File

@ -8,7 +8,7 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" viewBox="0 0 42 42" space="preserve">
<use xlink:href="#icon-addTo"></use>
</svg>
<input class="key-bind" :class="$style.newListInput" :value="newListName" type="text" :placeholder="$t('lists__new_list_input')" @keyup.enter="handleSaveList($event)" @blur="handleSaveList($event)"/>
<input :class="$style.newListInput" :value="newListName" type="text" :placeholder="$t('lists__new_list_input')" @keyup.enter="handleSaveList($event)" @blur="handleSaveList($event)"/>
</base-btn>
<span :class="$style.btn" :key="i" v-for="i in spaceNum"></span>
</div>

View File

@ -12,8 +12,9 @@ import {
useRefGetter,
} from '@renderer/utils/vueTools'
const handle_key_esc_down = ({ event }) => {
if (event.repeat) return
const handle_key_down = ({ event, type, key }) => {
// console.log(key)
if (key != 'escape' || !event || event.repeat || type == 'up' || window.isEditingHotKey) return
if (event.target.tagName != 'INPUT' || event.target.classList.contains('ignore-esc')) {
if (isFullscreen.value) {
event.lx_handled = true
@ -113,7 +114,7 @@ export default ({
})
window.eventHub.emit(eventBaseName.bindKey)
window.eventHub.on('key_escape_down', handle_key_esc_down)
window.eventHub.on(eventBaseName.key_down, handle_key_down)
window.eventHub.on('key_mod+f12_down', handle_open_devtools)
window.eventHub.on('key_f11_down', handle_fullscreen)
window.eventHub.on(eventBaseName.fullscreenToggle, handle_fullscreen)
@ -128,7 +129,7 @@ export default ({
}
onBeforeUnmount(() => {
window.eventHub.off('key_escape_down', handle_key_esc_down)
window.eventHub.off(eventBaseName.key_down, handle_key_down)
window.eventHub.off('key_mod+f12_down', handle_open_devtools)
window.eventHub.off('key_f11_down', handle_fullscreen)
window.eventHub.off(eventBaseName.fullscreenToggle, handle_fullscreen)

View File

@ -20,14 +20,15 @@ rendererInvoke(NAMES.mainWindow.get_hot_key).then(({ local, global }) => {
})
eventHub.on(baseName.bindKey, () => {
keyBind.bindKey((key, eventKey, type, event, keys) => {
keyBind.bindKey((key, eventKey, type, event, keys, isEditing) => {
// console.log(`key_${key}_${type}`)
eventHub.emit(baseName.key_down, { event, keys, key, type })
// console.log(event, key)
// console.log(key, eventKey, type, event, keys)
if (window.isEditingHotKey) return
if (appHotKeyConfig.local.enable && appHotKeyConfig.local.keys[key]) {
event?.preventDefault()
if (window.isEditingHotKey || (isEditing && type == 'down') || event?.lx_handled) return
if (event && appHotKeyConfig.local.enable && appHotKeyConfig.local.keys[key] && (key != 'escape' || !event.target.classList.contains('ignore-esc'))) {
// console.log(key, eventKey, type, keys, isEditing)
event.preventDefault()
if (type == 'up') return
// 软件内快捷键的最小化触发时
@ -40,6 +41,7 @@ eventHub.on(baseName.bindKey, () => {
eventHub.emit(appHotKeyConfig.local.keys[key].action)
return
}
// console.log(`key_${key}_${type}`)
eventHub.emit(`key_${key}_${type}`, { event, keys, key, eventKey, type })
if (key != eventKey) eventHub.emit(`key_${eventKey}_${type}`, { event, keys, key, eventKey, type })
})

View File

@ -2,7 +2,7 @@ import { isMac } from '../../common/utils'
const downKeys = new Set()
const handleEvent = (type, event, keys) => {
const handleEvent = (type, event, keys, isEditing) => {
let eventKey = event.key
if (isMac) {
let index = keys.indexOf('meta')
@ -23,7 +23,7 @@ const handleEvent = (type, event, keys) => {
downKeys.delete(key)
break
}
handleSendEvent(key, eventKey, type, event, keys)
handleSendEvent(key, eventKey, type, event, keys, isEditing)
}
// 修饰键处理
@ -54,7 +54,7 @@ const assertStopCallback = element => {
}
const handleKeyDown = event => {
if (assertStopCallback(event.target)) return
// if (assertStopCallback(event.target)) return
// event.preventDefault()
let keys = eventModifiers(event)
switch (event.key) {
@ -70,11 +70,11 @@ const handleKeyDown = event => {
keys.push((event.code.includes('Numpad') ? event.code.replace(/^Numpad(\w{1,3})\w*$/i, 'num$1') : event.key).toLowerCase())
break
}
handleEvent('down', event, keys)
handleEvent('down', event, keys, assertStopCallback(event.target))
}
const handleKeyUp = event => {
if (assertStopCallback(event.target)) return
// if (assertStopCallback(event.target)) return
event.preventDefault()
let keys = eventModifiers(event)
switch (event.key) {
@ -88,7 +88,7 @@ const handleKeyUp = event => {
keys.push((event.code.includes('Numpad') ? event.code.replace(/^Numpad(\w{1,3})\w*$/i, 'num$1') : event.key).toLowerCase())
break
}
handleEvent('up', event, keys)
handleEvent('up', event, keys, assertStopCallback(event.target))
}
let handleSendEvent

View File

@ -30,12 +30,12 @@
@contextmenu="handleListsItemRigthClick($event, index)" :aria-label="item.name" v-for="(item, index) in userLists" :key="item.id" :aria-selected="defaultList.id == listId"
>
<span :class="$style.listsLabel" @click="handleListToggle(item.id, index + 2)">{{item.name}}</span>
<input class="key-bind" :class="$style.listsInput" @contextmenu.stop type="text"
<input :class="$style.listsInput" @contextmenu.stop type="text"
@keyup.enter="handleListsSave(index, $event)" @blur="handleListsSave(index, $event)" :value="item.name" :placeholder="item.name"/>
</li>
<transition enter-active-class="animated-fast slideInLeft" leave-active-class="animated-fast fadeOut" @after-leave="handleListsNewAfterLeave" @after-enter="$refs.dom_listsNewInput.focus()">
<li :class="[$style.listsItem, $style.listsNew, listsData.isNewLeave ? $style.newLeave : null]" v-if="listsData.isShowNewList">
<input class="key-bind" :class="$style.listsInput" @contextmenu.stop ref="dom_listsNewInput" type="text" @keyup.enter="handleListsCreate"
<input :class="$style.listsInput" @contextmenu.stop ref="dom_listsNewInput" type="text" @keyup.enter="handleListsCreate"
@blur="handleListsCreate" :placeholder="$t('lists__new_list_input')"/>
</li>
</transition>

View File

@ -4,7 +4,7 @@ teleport(to="#view")
transition(enter-active-class="animated-fast zoomIn" leave-active-class="animated zoomOut" @after-leave="handleAnimated")
div(:class="$style.search" v-show="visible")
div(:class="$style.form")
input.key-bind.ignore-esc(:placeholder="placeholder" v-model.trim="text" ref="dom_input"
input.ignore-esc(:placeholder="placeholder" v-model.trim="text" ref="dom_input"
@input="handleDelaySearch"
@keyup.enter="handleTemplistClick(selectIndex)"
@keyup.arrow-down.prevent="handleKeyDown"

View File

@ -7,7 +7,7 @@ dd
div(:class="$style.hotKeyContainer" :style="{ opacity: current_hot_key.local.enable ? 1 : .6 }")
div(:class="$style.hotKeyItem" v-for="item in allHotKeys.local")
h4(:class="$style.hotKeyItemTitle") {{$t('setting__hot_key_' + item.name)}}
base-input.key-bind(:class="$style.hotKeyItemInput" readonly @keyup.prevent :placeholder="$t('setting__hot_key_unset_input')"
base-input(:class="$style.hotKeyItemInput" readonly @keyup.prevent :placeholder="$t('setting__hot_key_unset_input')"
:value="hotKeyConfig.local[item.name] && formatHotKeyName(hotKeyConfig.local[item.name].key)"
@focus="handleHotKeyFocus($event, item, 'local')"
@blur="handleHotKeyBlur($event, item, 'local')")
@ -18,7 +18,7 @@ dd
div(:class="$style.hotKeyContainer" :style="{ opacity: current_hot_key.global.enable ? 1 : .6 }")
div(:class="$style.hotKeyItem" v-for="item in allHotKeys.global")
h4(:class="$style.hotKeyItemTitle") {{$t('setting__hot_key_' + item.name)}}
base-input.key-bind(:class="[$style.hotKeyItemInput, hotKeyConfig.global[item.name] && hotKeyStatus[hotKeyConfig.global[item.name].key] && hotKeyStatus[hotKeyConfig.global[item.name].key].status === false ? $style.hotKeyFailed : null]"
base-input(:class="[$style.hotKeyItemInput, hotKeyConfig.global[item.name] && hotKeyStatus[hotKeyConfig.global[item.name].key] && hotKeyStatus[hotKeyConfig.global[item.name].key].status === false ? $style.hotKeyFailed : null]"
:value="hotKeyConfig.global[item.name] && formatHotKeyName(hotKeyConfig.global[item.name].key)" @input.prevent readonly :placeholder="$t('setting__hot_key_unset_input')"
@focus="handleHotKeyFocus($event, item, 'global')"
@blur="handleHotKeyBlur($event, item, 'global')")