[SailfishDevel] RegExpValidator - different behaviour between Emulator and Jolla device

Thomas Amler armadillo at penguinfriends.org
Wed Jan 21 14:02:07 UTC 2015


I have a problem concerning the RegExpValidator of a TextField. This is 
the code:

             TextField {
                 id: cameraManufacturer
                 width: parent.width
                 label: qsTr("Manufacturer")
                 placeholderText: label
                 text: editCameraManufacturer
                 validator: RegExpValidator { regExp: /^.{3,60}$/ }
                 EnterKey.enabled: errorHighlight === false ? true : 
                 EnterKey.iconSource: "image://theme/icon-m-enter-next"
                 EnterKey.onClicked: cameraModel.focus = true

                 onErrorHighlightChanged: checkContent()

                 onTextChanged: console.log(errorHighlight + "#" + 

The validator works as expected on the Emulator. It reacts on every text 
change in the field and changes the errorHighlight Status to false if 
the regExp matches and vice versa. Also the field gets marked red if 
errorHighlight is true and so on.

But if I'm using the same code on my Jolla the Validator only changes 
the errorHighlight value if I change the focus to another TextField. If 
I change back to the first TextField and change some characters, I 
suddenly get an errorHighlight = true although the RegExp should match 
the text.

As you can see I also integrated some console debugging. This makes the 
problem even more strange. On the Emulator everything works fine. 
errorHighlight is "true" until the third character is entered and is 
logged as "false" when I enter the fourth character. Corresponding 
behaviour can be seen with the acceptableInput property. It is false 
until I enter the third character and with the third logging event it is 
logged as true. So both are logged as true with log line three, but this 
might be related to the onTextChanged Event, which should be ok I think.
This is the output on the Emulator:
[D] onTextChanged:122 - true#false
[D] onTextChanged:122 - true#false
[D] onTextChanged:122 - true#true
[D] onTextChanged:122 - false#true

On my Jolla errorHighlight is ALWAYS "true" and accaptableInput is 
ALWAYS "false". Output (timestamp and other useless garbage has been 
wiped) for Jolla:
[D] onTextChanged:122 - true#false
[D] onTextChanged:122 - true#false
[D] onTextChanged:122 - true#false
[D] onTextChanged:122 - true#false

Now comes the really weird thing on the Jolla... Directly after 
switching focus (not pressing any key, only tapping on the next 
TextField) to another TextField I get this:
[D] onTextChanged:122 - true#true
[D] onTextChanged:122 - false#true
This doesn't happen in the Emulator!!!

WTF is going on?!

I'm really confused about this different behaviour and I couldn't find a 
way to workaround this. I also have other TextFields using a 
DoubleValidator which works quite fine.

If anyone knows what I'm doing wrong... Any help is appreciated! :-)

More information about the Devel mailing list