From cc9c9ec443aa563e0051e2feb61591ffbde0f0b2 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 20 Aug 2019 14:52:19 -0700 Subject: [PATCH] Fixup signal handling causing app errors; add keyboard navigation to emoji window --- .../emojiApp/ui/qml/SimplifiedEmoji.qml | 46 ++++++++++++++----- .../simplifiedEmote/simplifiedEmote.js | 9 ++-- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/scripts/simplifiedUI/simplifiedEmote/emojiApp/ui/qml/SimplifiedEmoji.qml b/scripts/simplifiedUI/simplifiedEmote/emojiApp/ui/qml/SimplifiedEmoji.qml index 1d17e618d2..e48d0280e4 100644 --- a/scripts/simplifiedUI/simplifiedEmote/emojiApp/ui/qml/SimplifiedEmoji.qml +++ b/scripts/simplifiedUI/simplifiedEmote/emojiApp/ui/qml/SimplifiedEmoji.qml @@ -132,6 +132,18 @@ Rectangle { } } + + function selectEmoji(code) { + sendToScript({ + "source": "SimplifiedEmoji.qml", + "method": "selectedEmoji", + "code": code + }); + root.isSelected = true; + root.currentCode = code; + } + + Rectangle { id: emojiIconListContainer anchors.top: emojiIndicatorContainer.bottom @@ -167,19 +179,25 @@ Rectangle { root.currentCode = model.code.utf; } onClicked: { - sendToScript({ - "source": "SimplifiedEmoji.qml", - "method": "selectedEmoji", - "code": code.utf - }); - root.isSelected = true; - root.currentCode = model.code.utf; + root.selectEmoji(model.code.utf); } } } cacheBuffer: 400 focus: true - highlight: Rectangle { color: Qt.rgba(1, 1, 1, 0.4); radius: 0 } + highlight: Rectangle { + color: Qt.rgba(1, 1, 1, 0.4) + radius: 2 + } + + KeyNavigation.backtab: emojiSearchTextField + KeyNavigation.tab: emojiSearchTextField + + Keys.onPressed: { + if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) { + root.selectEmoji(grid.model.get(grid.currentIndex).code.utf); + } + } } SimplifiedControls.VerticalScrollBar { @@ -216,10 +234,16 @@ Rectangle { } onAccepted: { root.filterEmoji(emojiSearchTextField.text); + waitForMoreInputTimer.stop(); + if (filteredModel.count === 1) { + root.selectEmoji(filteredModel.get(0).code.utf); + } else { + grid.forceActiveFocus(); + } } - onFocusChanged: { - emojiSearchTextField.autoScroll = focus; - } + + KeyNavigation.backtab: grid + KeyNavigation.tab: grid } Timer { diff --git a/scripts/simplifiedUI/simplifiedEmote/simplifiedEmote.js b/scripts/simplifiedUI/simplifiedEmote/simplifiedEmote.js index dde22fc662..1a79a36f1b 100644 --- a/scripts/simplifiedUI/simplifiedEmote/simplifiedEmote.js +++ b/scripts/simplifiedUI/simplifiedEmote/simplifiedEmote.js @@ -266,6 +266,7 @@ function endReactionWrapper(reaction) { case ("point"): if (mouseMoveEventsConnected) { Controller.mouseMoveEvent.disconnect(mouseMoveEvent); + mouseMoveEventsConnected = false; } intersectedEntityOrAvatarID = null; deleteOldReticles(); @@ -554,13 +555,10 @@ function selectedEmoji(code) { function onEmojiAppClosed() { - if (emojiAppWindow) { + if (emojiAppWindow && emojiAppWindowSignalsConnected) { emojiAppWindow.fromQml.disconnect(onMessageFromEmojiApp); emojiAppWindow.closed.disconnect(onEmojiAppClosed); } - if (mouseMoveEventsConnected) { - Controller.mouseMoveEvent.disconnect(mouseMoveEvent); - } emojiAppWindow = false; } @@ -607,6 +605,7 @@ var EMOJI_APP_WINDOW_FLAGS = 0x00000001 | // Qt::Window var emojiAppWindow = false; var POPOUT_SAFE_MARGIN_X = 30; var POPOUT_SAFE_MARGIN_Y = 30; +var emojiAppWindowSignalsConnected = false; function toggleEmojiApp() { if (emojiAppWindow) { emojiAppWindow.close(); @@ -633,6 +632,8 @@ function toggleEmojiApp() { emojiAppWindow.fromQml.connect(onMessageFromEmojiApp); emojiAppWindow.closed.connect(onEmojiAppClosed); + emojiAppWindowSignalsConnected = true; + // The actual emoji module needs this qml window object so it can send messages // to update the Selected emoji UI emojiAPI.registerAvimojiQMLWindow(emojiAppWindow);