Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-75862

FocusReason is broken in Controls 2

    XMLWordPrintable

Details

    • Linux/X11, Windows
    • 61ee61d8c977ecf876ce1d364cff634467b562a9 (qt/qtdeclarative/dev) fae2460e925fd7baab85cf567dd9c6093647f4b9 (qt/qtdeclarative/6.2)

    Description

      Controls keep the intital focusReason. Tested with ComboBox and SpinBox.

      • Run the example, tab once through all items. ComboBox and SpinBox should have the focusReason: Qt.TabFocusReason.
      • Back tab through all items, only the TextInput will change to Qt.BacktabFocusReason, other items keep the Qt.TabFocusReason.
      • Click on all the items, ComboBox and SpinBox keep their previous focusReasonTextInput changes to Qt.OtherFocusReason instead of Qt.MouseFocusReason.
      • Restart the example, use the mouse to click on all items.
      • Tab through all items, ComboBox and SpinBox keep their intital focusReason.

      Note: Clicking on the drop down indicator of the ComboBox will change the focusReason.

      import QtQuick 2.12
      import QtQuick.Window 2.12
      import QtQuick.Controls 2.12
      
      Window {
          visible: true
          width: 640
          height: 480
          title: "Focus Reason Demo"
      
          Grid {
              columns: 2
              anchors.top: parent.top
              anchors.topMargin: 10
              anchors.horizontalCenter: parent.horizontalCenter
              spacing: 10
      
              Text {
                  text: "Component"
                  font.pixelSize: 16
              }
      
              Text {
                  text: "Focus Reason"
                  font.pixelSize: 16
              }
      
              ComboBox {
                  editable: true
                  model: ["Banana", "Apple", "Coconut", "Kiwi", "Mango #5", "Pomelo"]
                  onEditTextChanged: console.log("onEditTextChanged: " + editText)
                  onAccepted: console.log("onAccepted.\neditText: " + editText +"\ncurrentText: " + currentText + "\ncurrentIndex: " + currentIndex + "\n")
      
                  onVisualFocusChanged: {
                      console.log("ComboBox\n\tonVisualFocusChanged: " + visualFocus)
                  }
      
                  onActiveFocusChanged: {
                      console.log("ComboBox\n\tonActiveFocusChanged: " + activeFocus +
                                  "\n\tfocusReason: " + enumToString(focusReason))
                      comboBoxReason.text = enumToString(focusReason)
                  }
      
                  contentItem.onActiveFocusChanged: {
                      console.log("ComboBoxTextInput\n\tonActiveFocusChanged: " + activeFocus +
                                  "\n\tfocusReason: " + enumToString(focusReason))
                      comboBoxInputReason.text = enumToString(focusReason)
                  }
              }
      
              Grid {
                  columns: 2
                  Text {
                      text: "ComboBox: "
                  }
                  Text {
                      id: comboBoxReason
                      text: "None"
                  }
                  Text {
                      text: "Input: "
                  }
                  Text {
                      id: comboBoxInputReason
                      text: "None"
                  }
              }
      
              SpinBox {
                  from: 0
                  to: 100
                  value: 20
                  editable: true
                  activeFocusOnTab: true
      
                  onVisualFocusChanged: {
                      console.log("SpinBox\n\tonVisualFocusChanged: " + visualFocus)
                  }
      
                  onActiveFocusChanged: {
                      console.log("SpinBox\n\tonActiveFocusChanged: " + activeFocus +
                                  "\n\tfocusReason: " + enumToString(focusReason))
                      spinBoxReason.text = enumToString(focusReason)
                  }
      
                  contentItem.onActiveFocusChanged: {
                      console.log("SpinBoxTextInput\n\tonActiveFocusChanged: " + activeFocus +
                                  "\n\tfocusReason: " + enumToString(focusReason))
                      spinBoxInputReason.text = enumToString(focusReason)
                  }
              }
      
              Grid {
                  columns: 2
                  Text {
                      text: "SpinBox: "
                  }
                  Text {
                      id: spinBoxReason
                      text: "None"
                  }
                  Text {
                      text: "Input: "
                  }
                  Text {
                      id: spinBoxInputReason
                      text: "None"
                  }
              }
      
              TextField {
                  text: "test123"
                  onActiveFocusChanged: {
                      console.log("TextInput\n\tonActiveFocusChanged: " + activeFocus +
                                  "\n\tfocusReason: " + enumToString(focusReason))
                      textFieldReason.text = enumToString(focusReason)
                  }
              }
      
              Text {
                  id: textFieldReason
                  text: "None"
              }
          }
      
          function enumToString(r)
          {
              switch (r) {
                case Qt.MouseFocusReason:
                  return "Qt.MouseFocusReason";
                case Qt.TabFocusReason:
                  return "Qt.TabFocusReason";
                case Qt.BacktabFocusReason:
                  return "Qt.BacktabFocusReason";
                case Qt.ActiveWindowFocusReason:
                  return "Qt.ActiveWindowFocusReason";
                case Qt.PopupFocusReason:
                  return "Qt.PopupFocusReason";
                case Qt.ShortcutFocusReason:
                  return "Qt.ShortcutFocusReason";
                case Qt.MenuBarFocusReason:
                  return "Qt.MenuBarFocusReason";
                case Qt.OtherFocusReason:
                  return "Qt.OtherFocusReason";
                default:
                  return "UNKNOWN";
              }
          }
      }
      

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              vhilshei Volker Hilsheimer
              henning Henning Gründl
              Votes:
              1 Vote for this issue
              Watchers:
              10 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: