QWebEngineView interprets AltGr press as left arrow in WSL2 - qt

Context:
Custom Qt application embedding a QWebEngineView widget used to display an Auth0 page.
Compiled for Fedora against Qt5.15.2, run on Windows in a WSL2 distribution. vcxsrv is used to display the X11 window.
Symptoms:
In the email text field, when I try to type # using the AltGr+à key combination (french keyboard), the cursor jumps 1 character left as soon as I press the AltGr key. Oddly, the # character is properly added. For instance, if I try to type test#, the result is tes#t and the cursor is right after the #.
Each time I press AltGr alone, the cursor jumps left.
In a QLineEdit, no issue typing #
Tests done:
chromium-browser launched in the same WSL2 distribution: works as expected (QtWebEngineView is based on chromium)
Played with the locale settings but no success
Played with the QTWEBENGINE_CHROMIUM_FLAGS env var but no success (list of Chromium flags)
Quite similar issue:
VSCode - Cursor moves left on AltGr. How to fix it?
Any help to understand what is the culprit would be greatly appreciated!

Related

With Qt Creator FakeVim mode, key-combination CTRL+U seem to interfere with "Select the current block"

I'm starting to use QT creator and FakeVim mode. Inside VIM I use CTRL+U (Scroll window Upwards in the buffer) and CTRL+D (Scroll window Downwards in the buffer) the whole time.
Problem: CTRL+D works as expected inside QT creator, but unfortunately the key-combination CTRL+U seem to interfere with some other setting (maybe "Select the current block") and begins marking a lot of text at the same time it's scrolling upwards.
So: CTRL+D = scrolls down, no "block selecting"-stuff going on.
CTRL+U scrolls up and at the same time it begins highlighting (block selection), which is really annoying.
Attempted: Among other things, I tried googling and found: https://doc.qt.io/qtcreator/creator-keyboard-shortcuts.html - and tried both combinations of the value "Enable smart selection changing" - but it ditn't help on my CTRL+U-issue...
Question: Anyone knows how I can make CTRL+U only scroll up, instead of selecting/highlighting a block while it scrolls up?
Just for the record (it seems we're not many qtcreator/fakevim users but hopefully it can help someone else that) I found the solution and will answer myself:
First: Related to the issue is: In the "Options -> FakeVim -> General" dialog, under "Vim Behaviour" disable "Use search dialog" will get rid of (a similar) annoying vim-search "begin highlighting after search"-problem which is triggered when using "/" to search...
For the CTRL+U highlighting issue: The issue is resolved by disabling the option "Pass control keys" in the same option setting dialogue.

Showing a QMessageBox breaks QLineEdit highlighting

I have a C++ Qt 4 application written for Raspberry Pi. I'm experiencing an odd side-effect of showing a QMessageBox and I don't know enough about Qt to debug it.
The pi has a touchscreen, so I launch the application with unclutter to hide the mouse cursor. (Though this doesn't affect my issue... I have tried without unclutter just in case.)
I have sub-classed QLineEdit to override focusInEvent() and focusOutEvent() to select-all when a LineEdit gets focus, and deselect-all when it loses focus.
Before showing any QMessageBoxes, everything works perfectly - tapping on a QLineEdit selects all the text; tapping the next one de-selects the previous QLineEdit, and selects the new QLineEdit.
After showing a QMessageBox, my overridden events stop working, and QLineEdits no longer auto-select and de-select.
If I add:
msgBox.setWindowFlags(msgBox.windowFlags() | Qt::Popup);
before I exec() the QMessageBox, then text highlighting continues working normally, but the cursor is displayed and flickers while the QMessageBox is on the screen.
It seems like there is a side-effect of showing the QMessageBox that affects the calling window and my sub-classed QLineEdit boxes... but not if the QMessageBox has the Popup flag set!
I've tried storing and manually re-loading the flags on the main window, and that does nothing, so it doesn't appear to be flags on the main window.
One more oddity: everything works fine if I run the application remotely over XMing and SSH... it's only when it's run locally on the Pi in plain-old X11 that it freaks out.
Any thoughts on how to debug this? Thank you!
I was able to work around this by doing two things.
First, I updated the flags of the QMessageBox before opening it:
msgBox.setWindowFlags(Qt::Popup);
msgBox.exec();
and second, I hid the cursor in Qt code, rather than relying on Unclutter; this fixed the flickering cursor issue:
QApplication::setOverrideCursor(Qt::BlankCursor);

How to hide mouse cursor in Qt Application?

qApp->setOverrideCursor() method works successfully, if I want to hide mouse cursor, except one condition. If I add a dialog that is modal, and while it is shown, if the cursor is out of dialog's borders, it is shown again. Have you got any idea about the problem?
It does not matter how the solution for hiding mouse cursor is; whether by Qt or at the operating system level. My operating system is Windows 7.
You cannot hide the mouse cursor when it leaves your window (or dialog-window), because it is then handled by the window-manager of your OS. A workaround would be to constrain the mouse to your window/dialog, so it cannot leave. You will either need to look through the MSDN to find the specific windows functions to do it, or do it like in kshegunov's code example on the Qt-forums: https://forum.qt.io/topic/61832/restrict-mouse-cursor-movement/12

Archlinux, startxfce4 working properly in root, but not working properly in other user

I've installed arch linux x64 on my computer. I added other user. Also I added this new user to common groups. When I type startxfce4 by root, xfce4 runs properly and it's possible to use it. But when I type startxfce4 by newly added user xfce4 also runs. But instead default mouse in background I can see black screen, can't see cursor. Panels are visible. After call "turn off" dialog (I can't see cursor, but panels are working and I can see if cursor is on a button of the panel) cursor appearances. If the cursor hovers panels it's ok. But if this cursor is over background I can see big cross cursor like in checking of working xorg-server. When I run su before executing startxfce4 xfce4 also doesn't work correctly. What did I forget during install xorg-server, xfce4 or during adding new user?
Answer is here. In a nutshell the problem was xfwm4 wasn't running, I forgot do that. I typed xfconf-query -c xfce4-session -p /sessions/Failsafe/Client0_Command -t string -sa xfwm4 and it worked.

Custom Touch behavior in Windows 7 with Qt/QML application

I am developing a touch application for Windows 7 with Qt/QML. The end-user-device has Windows 7's native touch behavior, i.e.: When touching the screen, a point appears on the last-touched-point, and when ending the physical touch, Windows puts that point on the now-touched point and runs in the on-clicked-Event.
Compared to the behavior one knows from standard Windows mouse-usage, this leads to a different behavior as soon as it comes to e.g. clicking some button: A mouse user will expect that the button changes color to the pressed-down-color when mouse button goes down, while the color changes to the default color again when the mouse button goes up.
In my application, I want to have a customized way of touch feedback: What is currently being touched should be marked using changed colors of buttons, imitating a "mouse goes down" when the actual physical touch begins and imitating a "mouse goes up" when the actual physical touch ends.
My application will run fullscreen, so an actual possibility would be to change the system's behavior on application start and change it back to default on applications end.
Such a behavior would effectively be the same as the standard behavior on e.g. all Android devices I know.
I searched through all the MouseArea and MultiPointTouchArea elements, trying to find a way to just make the click-reaction behavior different to the standard behavior. However I did not even find a way to capture the begin of the actual touch ... All the things which I want to happen at the begin of the touch actually happen when the touching ends.
Edit:
It does not matter if I use a QML button or a mousearea plus the MouseArea.pressed property: Nothing will be "pressed" before the finger leaves the touch and the onClicked() even is called.
Possibly related:
Adobe AIR: touch screen doesn't trigger mouse down event correctly - but I did not find a way to access the functions like Multitouch.inputMode (which are mentioned in the first reply) from a native Qt application.
How can I achieve the described behavior for my application?
The solution for this issue is to disable "Press and Hold" for the application. This is what can be done in a system-wide setting using ...
Control Panel -> Pen and Touch -> Touch -> Press and Hold -> Settings -> uncheck 'Enable press and hold for right-clicking'
The only solution I found to to this in native code can be found here:
http://msdn.microsoft.com/en-us/library/ms812373.aspx
I checked that this is at least still working for Windows 7. To get it working for QML, I searched for the QWindow* in QQmlApplicationEngine::rootObjects() and used its winId as a HWND. With that HWND, I called the TogglePressAndHold function from the link before app.exec().

Resources