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 {
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 {

View file

@ -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);