Fixup signal handling causing app errors; add keyboard navigation to emoji window

This commit is contained in:
Zach Fox 2019-08-20 14:52:19 -07:00
parent 8b79dc3020
commit cc9c9ec443
2 changed files with 40 additions and 15 deletions

View file

@ -132,6 +132,18 @@ Rectangle {
} }
} }
function selectEmoji(code) {
sendToScript({
"source": "SimplifiedEmoji.qml",
"method": "selectedEmoji",
"code": code
});
root.isSelected = true;
root.currentCode = code;
}
Rectangle { Rectangle {
id: emojiIconListContainer id: emojiIconListContainer
anchors.top: emojiIndicatorContainer.bottom anchors.top: emojiIndicatorContainer.bottom
@ -167,19 +179,25 @@ Rectangle {
root.currentCode = model.code.utf; root.currentCode = model.code.utf;
} }
onClicked: { onClicked: {
sendToScript({ root.selectEmoji(model.code.utf);
"source": "SimplifiedEmoji.qml",
"method": "selectedEmoji",
"code": code.utf
});
root.isSelected = true;
root.currentCode = model.code.utf;
} }
} }
} }
cacheBuffer: 400 cacheBuffer: 400
focus: true 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 { SimplifiedControls.VerticalScrollBar {
@ -216,10 +234,16 @@ Rectangle {
} }
onAccepted: { onAccepted: {
root.filterEmoji(emojiSearchTextField.text); 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 { Timer {

View file

@ -266,6 +266,7 @@ function endReactionWrapper(reaction) {
case ("point"): case ("point"):
if (mouseMoveEventsConnected) { if (mouseMoveEventsConnected) {
Controller.mouseMoveEvent.disconnect(mouseMoveEvent); Controller.mouseMoveEvent.disconnect(mouseMoveEvent);
mouseMoveEventsConnected = false;
} }
intersectedEntityOrAvatarID = null; intersectedEntityOrAvatarID = null;
deleteOldReticles(); deleteOldReticles();
@ -554,13 +555,10 @@ function selectedEmoji(code) {
function onEmojiAppClosed() { function onEmojiAppClosed() {
if (emojiAppWindow) { if (emojiAppWindow && emojiAppWindowSignalsConnected) {
emojiAppWindow.fromQml.disconnect(onMessageFromEmojiApp); emojiAppWindow.fromQml.disconnect(onMessageFromEmojiApp);
emojiAppWindow.closed.disconnect(onEmojiAppClosed); emojiAppWindow.closed.disconnect(onEmojiAppClosed);
} }
if (mouseMoveEventsConnected) {
Controller.mouseMoveEvent.disconnect(mouseMoveEvent);
}
emojiAppWindow = false; emojiAppWindow = false;
} }
@ -607,6 +605,7 @@ var EMOJI_APP_WINDOW_FLAGS = 0x00000001 | // Qt::Window
var emojiAppWindow = false; var emojiAppWindow = false;
var POPOUT_SAFE_MARGIN_X = 30; var POPOUT_SAFE_MARGIN_X = 30;
var POPOUT_SAFE_MARGIN_Y = 30; var POPOUT_SAFE_MARGIN_Y = 30;
var emojiAppWindowSignalsConnected = false;
function toggleEmojiApp() { function toggleEmojiApp() {
if (emojiAppWindow) { if (emojiAppWindow) {
emojiAppWindow.close(); emojiAppWindow.close();
@ -633,6 +632,8 @@ function toggleEmojiApp() {
emojiAppWindow.fromQml.connect(onMessageFromEmojiApp); emojiAppWindow.fromQml.connect(onMessageFromEmojiApp);
emojiAppWindow.closed.connect(onEmojiAppClosed); emojiAppWindow.closed.connect(onEmojiAppClosed);
emojiAppWindowSignalsConnected = true;
// The actual emoji module needs this qml window object so it can send messages // The actual emoji module needs this qml window object so it can send messages
// to update the Selected emoji UI // to update the Selected emoji UI
emojiAPI.registerAvimojiQMLWindow(emojiAppWindow); emojiAPI.registerAvimojiQMLWindow(emojiAppWindow);