... that become apparent after switching qtestlib to use enhanced mouse
event (a37785ec76). With the old code path,
where QGuiApplication was deducing event type it would deduce mouse release
event even when there wasn't one. The new code path doesn't do that, which
revealed an obscure problem when mixing QTest::mouse* APIs (where QWindow
overload goes through QWindowSystemInterface API and QWidget overload goes
through QApplication::notify() and sets mouse_buttons from there). What
happened in this specific test case "./tst_qtreeview selection statusTip" was:
// tst_QTreeView::selection sets mouse_buttons = Qt::LeftButton from QApplication::notify
QTest::mousePress(widget, Qt::LeftButton, ..)
// tst_QTreeView::statusTip
QTest::mouseMove(window, )
The old code path sees that position and state has changed, creates a fake
mouse event, which gets deduced as mouse release even if there wasn't one.
And by luck this happened to set mouse_buttons=Qt::NoButton. So when we use
mouse_buttons later to create QMouseEvent everything works as expected. With
the enhanced mouse we don't clear the pressed button from mouse_buttons (set
in tst_QTreeView::selection) as this is done only from press/release events,
then pass it to QMouseEvent and later because of that QApplicationPrivate::
pickMouseReceiver() returns nullptr.
The fix here is to use e->buttons when constructing QMouseEvent, instead of
relying on mouse_buttons which gets changed from various places and has other
issues that can not be solved without invalidating the current documentation
of QGuiApplication::mouseButtons() (e.g QTBUG-33161). Tests and any Qt code
in general should avoid using the fragile QGuiApplication::mouseButtons() API.
This patch does not affect the old code path (it continues working as before)
and fixes the issue described above for the enhanced mouse API. The enhanced
mouse API actually is better in a way that it does not get affected by button
state from test functions that run earlier, as opposed to the old code path
where every subsequent test function uses mouse_buttons in whatever state it
was left by the test functions that run earlier.
Not relying on mouse_buttons when creating QMouseEvent helped also to discover
other logic error. This caused an in incorrect button state for a mouse move
event that is generated for a release event that simultaneously changes a mouse
position.
Task-number: QTBUG-64043
Change-Id: I6ad8e49d8437ab0858180c2d0d45694f3b3c2d60
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
We can use the D-Bus / systemd machine-id file (which is a UUID without
the dashes) on systems with D-Bus. On Windows, there's a value in the
registry that is filled when Windows is installed, like on Linux. For
BSD systems, the kernel has a UUID we can use too, so extract that.
Task-number: QTBUG-63425
Change-Id: I27eaacb532114dd188c4ffff13d32f2e3c1d74bb
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Remove long unused preload defines, make sign of alpha more consistent
and use the RGB64 define structure more.
This is preparing for trying to unify the declarations in case we need
a third form with floating points for HDR.
Change-Id: I47fc283aff1fe31a1eaba17e0413bc1e722f6a06
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
ultrix and reliant have not seen a release since 1995. dgux not since
2001. bsdi not since 2003. irix not since 2006. osf not since 2010.
dynix... unclear, but no later than 2002. symbian needs no mention.
All considered obsolete, all gone.
sco and unixware are effectively obsolete. Remove them until someone
expresses a real need.
Change-Id: Ia3d9d370016adce9213ae5ad0ef965ef8de2a3ff
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
We don't actually need it in that case, but as the code that uses it is
disabled by a constant expression we cannot disable the variable itself
by a macro. The static_cast makes sure the compiler does not complain
about implicitly casting a 64bit value to a 32bit one.
thread/qsemaphore.cpp:156:59: error: large integer implicitly truncated to unsigned type [-Werror=overflow]
Task-number: QTBUG-64261
Change-Id: I96f53e28b290e57033737b4f994f8af5b5666587
Reviewed-by: Liang Qi <liang.qi@qt.io>
All accessible interfaces are stored in a cache, we never pass ownership
to callers.
Change-Id: I99f0e27baf111e4ca820c8f31875c0c55b4d6edb
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
This patch removes mouse_buttons related code from qwidgetwindow.cpp
as it does not belong there for the following reasons:
- The commit (ed2a2dc6da) that added it in
Qt5 says that the logic was copied from qapplication_x11.cpp (filename
in Qt4 repository). Other qapplication_*.cpp platform implementations
did not have this kind of logic; thus having it in cross platform location
qwidgetwindow.cpp does not make sense.
- According to the documentation, QApplicationPrivate::mouse_buttons:
"Returns the current state of the buttons on the mouse. The current state
is updated synchronously as the event queue is emptied".
So the only place where changing this variable makes sense is in
QGuiApplicationPrivate::processMouseEvent, which is *when the event
queue is emptied*.
There are other places in source code where this variable is changed,
but all of those are hacks and should be cleaned out eventually:
// a hack due to insufficient QWindowSystemInterface API
plugins/platforms/windows/qwindowsdrag.cpp
// a hack to support code that bypasses QWSI API when sending mouse events
// via qApp->notify().
widgets/kernel/qapplication.cpp
- AFACT, the released button bit will be already unset by the time mouse
release event reaches QWidgetWindow::handleMouseEvent.
Change-Id: Ifb2b3b443ffff0274545e5d3c631cf1e77160502
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Currently a context menu will only open when right-clicking on a text edit that
has input focus. This means that you cannot e.g bring up the context menu
to copy text for a text edit that doesn't accept input focus (but you are
still allowed to select text with the mouse, which feels a bit contradictory).
This is different from how QLineEdit works, and also different compared to how
native applications work, at least after testing on macOS and Ubuntu.
This patch will change this behavior, so that the context menu always open on both
QPlainTextEdit and QTextEdit, even when they don't accept focus.
Task-number: QTBUG-63868
Change-Id: Ibc4cbcc900077546828690ddc958820677211a5a
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Use ranged-for loops instead of a normal for-loop with iterators.
Change-Id: I13ba2001b7eb0fff1a0d9474f615a81d02af62f0
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Also replace the long template names with auto.
Change-Id: Idfaf4493266cf251e85cbf23bcd6bfe74b713cf0
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Found by clazy (clazy-strict-iterators). QMap::find returns
'iterator' and this is what we need, since we need to modify
the value referenced by this iterator. But QMap::insert only
accepts 'const_iterator' and clazy warns about mixed const/non-const
iterators (though actually QHstsCache does not have the original
problem this check it trying to find). Since we do not share
cache and do not want to try detaching on non-const access, we
can use std::map which conveniently has 'insert' taking 'iterator'
as its first parameter. As a bonus this will also fix another
warning from clazy-range-loop check (when iterating over such
a non-const map).
Change-Id: Id82991cefce33723d177ed04058d15295e9b71d7
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
They are not needed actually, found by clazy-non-pod-global-static
check.
Change-Id: Ice70f5065ffe8a39e2478eacff0ed1826806c8a6
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Found by clazy-non-pod-global-static check. Indeed, it can
be a pod, no need in non-trivial ctors.
Change-Id: I5f17e322a64f6c8d53b2acd8ea045d8beb1a72f9
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Found by clazy-range-loop check.
Change-Id: I45fd03af60c8d15e1288cc8abd81d8532b9a6c45
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
They are not updated after switching tabs. Thus they can be enabled even
when no entry is selected: select an entry on the current tab and then
switch to an empty tab.
Emit AddressWidget::selectionChanged() signal after changing the current tab
to update these actions.
Change-Id: I00da15ed6c3d3839210ae3ffbe1436e234695522
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
"global/qrandom.cpp", line 155: error #2000-D: attribute "destructor" is not implemented and will be ignored
Task-number: QTBUG-63948
Change-Id: Icaa86fc7b54d4b368c0efffd14efa35381d4e797
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
By judiciously positioning of the bits, we can optimize for the case of
threads trying to acquire a single token, which is what QSemaphore
should be mostly used for, as it matches the POSIX Semaphore API
(sem_wait, sem_timedwait and sem_trywait). If there are only waiters
waiting for a single token, we know that adding n tokens means n threads
can wake up.
This optimizes for multi-token waiters too. For example, if we have 50
single-token waiters and 50 multi-token waiters, a sem.release(5) will
wake up 55 threads instead of 100.
Change-Id: I209fcd5dbc2b4e5381cffffd14de5550c75d2600
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The QTextCharFormat documentation said that the used style is based on
QStyle::SH_SpellCheckUnderlineStyle style hint, however in fact the
implementation (drawTextItemDecoration in qpainter.cpp) uses
themeHint(QPlatformTheme::SpellCheckUnderlineStyle) instead since Qt 5
(see commit 1f9ae50457).
Make the documentation match that behavior, and update QPlatformTheme
to use the correct default value.
Also, switch Cocoa theme to use DotLine, as that is what native macOS
applications use.
Change-Id: I2a6bb3da6c7b0686dca87ed2c251b6abc006123c
Task-number: QTBUG-50499
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
The previous version was good, just not optimal. Because the input was
an unsigned 64-bit number, compilers needed to generate extra code to
deal with HW instructions that only convert 64-bit signed input. And
that was useless because a double uniformly distributed from 0 to 1 can
only have 53 bits of randomness.
The previous implementation did exactly what the Microsoft libstdc++ and
libc++ implementations do. In my opinion, those implementations have an
imperfect distribution, which is corrected in this commit. In those, all
random input bigger than 0x20000000000000 has a different frequency
compared to input below that mark. For example, both 0x20000000000000
and 0x20000000000001 produce the same result (4.8828125e-4).
What's more, for the libc++ and MSVC implementations, input between
0xfffffffffffff001 and 0xffffffffffffffff results in 1.0 (probability 1
in 2⁵³), even though the Standard is very clear that the result should
be strictly less than 1. GCC 7's libstdc++ doesn't have this issue,
whereas the versions before would enter an infinite loop.
Change-Id: Ib17dde1a1dbb49a7bba8fffd14eced3c375dd2ec
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Let's make it happen even later: at the time of QtCore's unloading from
memory. This prevents issues with something using QRandomGenerator after
the global static destructor would have run.
Change-Id: Icaa86fc7b54d4b368c0efffd14eed56bbbb51cb6
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Mouse position is converted from native pixels later, so we must
provide native pixels for "QWindowSystemInterface::handleEnterEvent".
Amends 7091be1b79
Task-number: QTBUG-63865
Change-Id: I813c171f2fc1d321af702ac30eb5f2e4232e97c4
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Not properly initializing all members of the extended parameter struct
will cause an "invalid handle specified" exception on use.
Task-number: QTBUG-63883
Change-Id: Ic3a58df864c9e29ccbadc04bd71c18c8ef34374c
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
Both QNSMenu and QSystemTrayIconQMenu aren't referenced anywhere
else, including within qcocoasystemtrayicon.mm, since the QPA
backend was added.
Change-Id: I632c1b230226b2d08afce7f0f0019e9f7c030ba5
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
QBasicMutex and QMutex are the same in bootstrap mode.
Change-Id: Icaa86fc7b54d4b368c0efffd14eed63343ddb51b
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This helps to debug style issues.
Change-Id: If2c236d6666512bf1658d951f9b304ce4d129357
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
A QVariant can only be converted to a QByteArray if it has user type
QMetaType::QByteArray or QMetaType::QString. The way it stood, we
always tried to convert the mime data to a QByteArray, and
then put the result into a QVariant. This would fail if the mime
data contained e.g a QPixmap.
This patch will inspect what kind of data the QMimeData contains, and
convert it to a QVariant using the expected API.
Backport of 6d3c483
Task-number: QTBUG-57428
Task-number: QTBUG-63660
Change-Id: I09b4a94aef7b52773e1a79c468ead71b36dfbfc5
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
The path wouldn't match if the cookie's path was root ('/') and the
URLs path was empty.
Change-Id: I6dcd10f1fdf4f48f14e50f1b169cbdfda7005849
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Recent drivers no longer contain wintab32.dll, point out a version
that still has it.
Change-Id: I4125a0af3c11ab739f8006b91f58899aeed54458
Reviewed-by: Andre de la Rocha <andre.rocha@qt.io>
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
We need to ensure that simultaneous touch and tablet input is possible.
Change-Id: I0c0d06e382b6b89e11ed06c1e4ad0db63b3b7c82
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Before this patch a very accurate drop position below
or above an index was needed. Therefore it was not that
easy to do.
This patch increases the above/below area to be about
18% of the item (still leaving the most space for the item).
An average user will likely be 2-3x faster with dropping
below or above (while not losing much when dropping on items).
[ChangeLog][QtWidgets][ItemViews] Made it easier to
drop above and below items.
Change-Id: I47f0f80c76878c17ebf3f93d0a0cc82755971c2a
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>