From 86f8b578412bf0f905aa9df05f10bf794a72dc9b Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 30 Jun 2016 15:16:28 -0700 Subject: [PATCH 1/5] Highlight controls based on activeFocus, not focus --- interface/resources/qml/controls-uit/SpinBox.qml | 12 ++++++------ interface/resources/qml/controls-uit/TextField.qml | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/interface/resources/qml/controls-uit/SpinBox.qml b/interface/resources/qml/controls-uit/SpinBox.qml index 5d78cfc5a8..a1237d4bc7 100755 --- a/interface/resources/qml/controls-uit/SpinBox.qml +++ b/interface/resources/qml/controls-uit/SpinBox.qml @@ -36,15 +36,15 @@ SpinBox { id: spinStyle background: Rectangle { color: isLightColorScheme - ? (spinBox.focus ? hifi.colors.white : hifi.colors.lightGray) - : (spinBox.focus ? hifi.colors.black : hifi.colors.baseGrayShadow) + ? (spinBox.activeFocus ? hifi.colors.white : hifi.colors.lightGray) + : (spinBox.activeFocus ? hifi.colors.black : hifi.colors.baseGrayShadow) border.color: spinBoxLabelInside.visible ? spinBoxLabelInside.color : hifi.colors.primaryHighlight - border.width: spinBox.focus ? spinBoxLabelInside.visible ? 2 : 1 : 0 + border.width: spinBox.activeFocus ? spinBoxLabelInside.visible ? 2 : 1 : 0 } textColor: isLightColorScheme - ? (spinBox.focus ? hifi.colors.black : hifi.colors.lightGray) - : (spinBox.focus ? hifi.colors.white : hifi.colors.lightGrayText) + ? (spinBox.activeFocus ? hifi.colors.black : hifi.colors.lightGray) + : (spinBox.activeFocus ? hifi.colors.white : hifi.colors.lightGrayText) selectedTextColor: hifi.colors.black selectionColor: hifi.colors.primaryHighlight @@ -96,7 +96,7 @@ SpinBox { anchors.fill: parent propagateComposedEvents: true onWheel: { - if(spinBox.focus) + if(spinBox.activeFocus) wheel.accepted = false else wheel.accepted = true diff --git a/interface/resources/qml/controls-uit/TextField.qml b/interface/resources/qml/controls-uit/TextField.qml index 79027cdc3b..65fab00700 100644 --- a/interface/resources/qml/controls-uit/TextField.qml +++ b/interface/resources/qml/controls-uit/TextField.qml @@ -36,14 +36,14 @@ TextField { style: TextFieldStyle { textColor: isLightColorScheme - ? (textField.focus ? hifi.colors.black : hifi.colors.lightGray) - : (textField.focus ? hifi.colors.white : hifi.colors.lightGrayText) + ? (textField.activeFocus ? hifi.colors.black : hifi.colors.lightGray) + : (textField.activeFocus ? hifi.colors.white : hifi.colors.lightGrayText) background: Rectangle { color: isLightColorScheme - ? (textField.focus ? hifi.colors.white : hifi.colors.textFieldLightBackground) - : (textField.focus ? hifi.colors.black : hifi.colors.baseGrayShadow) + ? (textField.activeFocus ? hifi.colors.white : hifi.colors.textFieldLightBackground) + : (textField.activeFocus ? hifi.colors.black : hifi.colors.baseGrayShadow) border.color: hifi.colors.primaryHighlight - border.width: textField.focus ? 1 : 0 + border.width: textField.activeFocus ? 1 : 0 radius: isSearchField ? textField.height / 2 : 0 HiFiGlyphs { From ce54f1b1d12dda0ff2b9ea14fff0d6f9d2a01311 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 30 Jun 2016 15:18:14 -0700 Subject: [PATCH 2/5] Improve desktop 'unfocus' functionality --- interface/resources/qml/desktop/Desktop.qml | 26 ++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/interface/resources/qml/desktop/Desktop.qml b/interface/resources/qml/desktop/Desktop.qml index 27fa9692b9..59d5b435ba 100644 --- a/interface/resources/qml/desktop/Desktop.qml +++ b/interface/resources/qml/desktop/Desktop.qml @@ -30,6 +30,7 @@ FocusScope { if (!repositionLocked) { d.handleSizeChanged(); } + } onHeightChanged: d.handleSizeChanged(); @@ -66,7 +67,6 @@ FocusScope { if (desktop.repositionLocked) { return; } - var oldRecommendedRect = recommendedRect; var newRecommendedRectJS = (typeof Controller === "undefined") ? Qt.rect(0,0,0,0) : Controller.getRecommendedOverlayRect(); var newRecommendedRect = Qt.rect(newRecommendedRectJS.x, newRecommendedRectJS.y, @@ -311,8 +311,8 @@ FocusScope { onPinnedChanged: { if (pinned) { - nullFocus.focus = true; - nullFocus.forceActiveFocus(); + desktop.focus = true; + desktop.forceActiveFocus(); // recalculate our non-pinned children hiddenChildren = d.findMatchingChildren(desktop, function(child){ @@ -486,17 +486,31 @@ FocusScope { } function unfocusWindows() { + // First find the active focus item, and unfocus it, all the way + // up the parent chain to the window + var currentFocus = offscreenWindow.activeFocusItem; + var targetWindow = d.getDesktopWindow(currentFocus); + while (currentFocus) { + if (currentFocus === targetWindow) { + break; + } + currentFocus.focus = false; + currentFocus = currentFocus.parent; + } + + // Unfocus all windows var windows = d.getTopLevelWindows(); for (var i = 0; i < windows.length; ++i) { windows[i].focus = false; } + + // For the desktop to have active focus desktop.focus = true; + desktop.forceActiveFocus(); } FocusHack { id: focusHack; } - FocusScope { id: nullFocus; } - Rectangle { id: focusDebugger; objectName: "focusDebugger" @@ -510,5 +524,5 @@ FocusScope { enabled: DebugQML onTriggered: focusDebugger.visible = !focusDebugger.visible } - + } From 167cb72a0ef03aadef3ba528f15202ee09ed4b14 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 30 Jun 2016 15:18:59 -0700 Subject: [PATCH 3/5] Don't auto-focus the filter field in running scripts --- interface/resources/qml/hifi/dialogs/RunningScripts.qml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/RunningScripts.qml b/interface/resources/qml/hifi/dialogs/RunningScripts.qml index 5457caccf1..3f05a140ae 100644 --- a/interface/resources/qml/hifi/dialogs/RunningScripts.qml +++ b/interface/resources/qml/hifi/dialogs/RunningScripts.qml @@ -53,11 +53,6 @@ ScrollingWindow { updateRunningScripts(); } - function setDefaultFocus() { - // Work around FocusScope of scrollable window. - filterEdit.forceActiveFocus(); - } - function updateRunningScripts() { var runningScripts = ScriptDiscoveryService.getRunning(); runningScriptsModel.clear() @@ -276,7 +271,6 @@ ScrollingWindow { isSearchField: true anchors.left: parent.left anchors.right: parent.right - focus: true colorScheme: hifi.colorSchemes.dark placeholderText: "Filter" onTextChanged: scriptsModel.filterRegExp = new RegExp("^.*" + text + ".*$", "i") From 14784a60888b4584d31db40d9c794ae9f653ee21 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 30 Jun 2016 15:22:13 -0700 Subject: [PATCH 4/5] Remove default focus on text fields --- scripts/developer/tests/playaPerformanceTest.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/developer/tests/playaPerformanceTest.qml b/scripts/developer/tests/playaPerformanceTest.qml index cd8171a0f6..028cfc9e1a 100644 --- a/scripts/developer/tests/playaPerformanceTest.qml +++ b/scripts/developer/tests/playaPerformanceTest.qml @@ -125,7 +125,6 @@ Rectangle { TextField { id: addressLine - focus: true anchors { left: parent.left; right: parent.right; top: row.bottom; margins: 16; From 88d28120b683160a65a291884f09704cc6894593 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 1 Jul 2016 15:48:58 -0700 Subject: [PATCH 5/5] Adding missed file --- plugins/openvr/src/OpenVrHelpers.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/openvr/src/OpenVrHelpers.cpp b/plugins/openvr/src/OpenVrHelpers.cpp index 399712d920..c93a2178b5 100644 --- a/plugins/openvr/src/OpenVrHelpers.cpp +++ b/plugins/openvr/src/OpenVrHelpers.cpp @@ -268,6 +268,7 @@ void handleOpenVrEvents() { case vr::VREvent_KeyboardClosed: _keyboardFocusObject = nullptr; _keyboardShown = false; + DependencyManager::get()->unfocusWindows(); break; default: