On 14/01/2014 08:26, Oliver Wolff wrote:
Hi,
I am trying to fix
https://bugreports.qt-project.org/browse/QTBUG-35632 and while
doing so I noticed that this use case is broken on Linux, Windows and
Mac. Running
the code from my last comment I get different results depending on the
platform. When
it is run on Linux or Windows I get:
Event: true false false
Application: false false false
while Mac gives:
Event: false false false
Application: false false false
At least on Windows and Linux (xcb) there seems to be logic involved
which removes
the modifier if the key pressed was a modifier key itself (so if
Qt::Key_Control is pressed
Qt::ControlModifier is removed from the modifiers). This is done in
qwindowskeymapper
line 863ff on Windows. I could not find the place where it is done in
xcb but checking the
code from the bug gives the same result as on Windows. The event's
modifiers are then
assigned to QGuiApplication's modifier_buttons (which is used for
QApplication::keyboardModifiers() from the bugreport), which is why
that shows wrong results.
QEvent::modifiers (qevent.cpp line 1026ff) readds the modifier so that
this gives correct results
at least on Linux and Windows.
My question is which would be the "right way" to fix this behaviour.
My initial idea was to remove
the logic that removes the modifier from Windows and XCB and adapt
QEvent::modifiers accordingly
so that the modifiers are not removed and added in various places.
Unfortunately I do not know, which
behaviour/use case would be broken by that as auto test coverage seems
to be not existent in that area
(which I would like to change as well, but...). Another option would
be to add the logic that readds the
modifier (the one from QEvent::modifers) to QGuiApplicationPrivate,
but that would be another place
that "plays around with the modifiers". Also this logic would have to
be put in use in several places there
(processKeyEvent, processMouseEvent, processTabletEvent, etc).
Of course it does not have to be added to several places, as only key
events can remove modifiers depending
on the key pressed. But the question about the best way to fix it still
stands :)
Does anyone have an idea, why modifiers are removed/added in various
places and which use case might
be broken when I touch something there? Thiscode seems to be fragile,
as changes seem to cause regressions
as we have seen over the last few patches to the windows
implementation. Any preferred way of fixing this?
Cheers,
Olli
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development