The phase changes to ScrollEnd as soon as the user's fingers
are lifted from the trackpad; then the OS can optionally continue
sending scroll events to simulate deceleration, which are translated
into more QWheelEvents with phase ScrollUpdate. With this patch,
the phase of the final event after the momentum phase will be
ScrollEnd to indicate that the scrolling is completely finished.
[ChangeLog][QtGui][QWheelEvent] on OSX, trackpad wheel event phase
transitions occur in the order ScrollBegin, ScrollUpdate, ...,
ScrollEnd, ScrollUpdate, ..., ScrollEnd, where the second batch of
updates represent momentum events (inertial scrolling).
Change-Id: I7404ed6fbbeaff6b1fa63e226fe1800494986b7b
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
In case CreateFontIndirect() call fails, always fallback to a better
stock font provided by Windows (apparently, it is DEFAULT_GUI_FONT).
Change-Id: Ib78fe0d21ba4fccbba1152b81ed87c010e1220e0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
Hand-tuned in an attempt to get something that matches the normal arrow
cursor.
Task-number: QTBUG-44385
Change-Id: Iea2ee309fccb78706f47003fb11b14156fa01a50
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.
Outdated header.LGPL removed (use header.LGPL21 instead)
Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing
combination. New header.LGPL-COMM taken in the use file which were
using old header.LGPL3 (src/plugins/platforms/android/extract.cpp)
Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license
combination
Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe
Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
When Qt runs in process with low integrity level,
and place child QWindow to HWND from less restricted process,
ChildWindowFromPointEx could fail with ERROR_ACCESS_DENIED
and QWindowsScreen::windowAt will return 0 despite mouse is on window.
Task-number: QTBUG-44332
Change-Id: I07e1594b90cbde8a9496f8d53ef247a7c69d8715
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Don't crash; restore windows when all screens are removed and re-added.
xcb: on configure notify, check for screen change: it may be that a
window belonging to a screen which was removed has now gotten mapped
to the new screen. On screen change, send a synthetic expose event,
because the real expose events already happened.
Task-number: QTBUG-38326
Task-number: QTBUG-32973
Task-number: QTBUG-42985
Change-Id: If334f55c248468ad3c95e7066bb14eca377d2050
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
If the window contains a widget that accepts text input, a Meta+...
shortcut will be interpreted as if no modifier was pressed. This fix
enables the usage of Meta+... shortcuts for the XCB platform plugin.
Change-Id: I80034b7e6bbbf18471c86fc77320d5038f5740be
Task-number: QTBUG-43572
Reviewed-by: Aleix Pol Gonzalez <aleixpol@kde.org>
Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
Reviewed-by: David Edmundson <davidedmundson@kde.org>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
It _is_ the actual format after create(). This is true at least
since modularizing the GLX and EGL integration. See resolveFormat()
in the integration plugins.
This is important to clarify since other platform plugins usually
return the input (requested) format as-is. We must therefore be
careful with misleading notes as the situation is complicated enough
already.
Change-Id: I8e394680fa8fe3c80941a2a08fa873f831d6403c
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Otherwise there is a race condition: when the tray implementation
gets around to embedding the window, if it was already shown,
it will be unmapped, embedded, and then remapped. Some tray
implementations will resize the tray icon to 1 pixel wide in
that case. We also never want to show a window that was intended
for the tray in any other location, so it's better that it remain
invisible until we are sure it is embedded.
Task-number: QTBUG-31762
Task-number: QTBUG-35658
Task-number: QTBUG-32811
Change-Id: Id324b0bfded0f8258ff1686a223cb2c069827d42
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Getting a build error on Raspbian due to the lack of libdbus-1. Configure
chooses dbus-1 at runtime so there should be no reason to force -ldbus-1
in xcb.
Change-Id: I3f35e0069b3abae59d575c5e3d8f4f24f7d935d2
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
Destroy the GLX or EGL backend. This also requires fixing an uninitalized
member in the native interfaace handler.
Besides fixing the leak this will also do eglTerminate on exit, which is
very beneficial for proper resource cleanup and avoids "Display is destroyed
with resources" warnings on Mesa with debugging enabled.
Change-Id: Ibd62d6964e86ac1319abed1f06b478327c348a0e
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
QXcbConnection::touchDeviceForId attempts to retrieve an existing
XInput2TouchDeviceData from m_touchDevices via QHash::operator[]. If
m_touchDevices does not contain the specified XInput2TouchDeviceData,
QHash::operator[] adds a default constructed value (i.e. a null pointer) for
the specified id. This null pointer is not removed from m_touchDevices if
the condition "nrDevices <= 0" is true below. This causes a null pointer
dereference later on in QXcbConnection::finalizeXInput2.
Change-Id: Icd3352417047c4b35d56db2d9f51e3fa1d859e9d
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Remove the QXcbClipboard::m_screen member variable and make it use
connection()->primaryScreen() instead. The clipboard is created in the
QXcbConnection constructor, and QXcbClipboard::m_screen was set to the primary
screen at the time of construction. If the primary screen later gets
disconnected, m_screen ends up pointing to a non-existing screen.
Change-Id: I2d23106673d0ba013056d4dbb7078acdf6f9bc7c
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Applications which construct a window with one screen configuration and show
the window later on after a screen configuration change crash because the
QXcbWindow::m_screen still pointed to the screen present at the time of window
construction. In QXcbWindow::handleConfigureNotifyEvent the m_screen should get
updated with the new screen, but I didn't see that method called in the
scenario outlined. Looking at the other platform backends, I however see that
they take the screen directly from the QPlatformWindow instead of storing the
instance, hence this patch which makes QXcbWindow do the same.
Change-Id: I13759a5939315c3aac36ec6e2c25bd0a6d7b1c35
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
1. Qt::FramelessWindowHint imlplies NSBorderlessWindowMask, but should
_not_ exclude NSResizableWindowMask - we still have API (showMaximized)
to resize this window. Without NSResizableWindowMask showMaximized
(calling NSWindow's '-zoom' under the hood) has no effect.
2. -performMiniaturize does not work with a borderless window, since such
a window does not have a minimize button - use miniaturize for such
window instead.
Change-Id: I691182ad7c1d230e670bfb70ef758483acbf0792
Task-number: QTBUG-44195
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
Handling context losses is unavoidable with ANGLE. Introduce
some level of support for desktop GL too by making it possible
to opt in via a new flag.
Support is added for Windows (WGL, opengl32) only for now.
In case of Windows with ANGLE setting the flag is not necessary,
context losses will be reported regardless.
Change-Id: Ic354c1382e876566538c52a4381f7ff328b7477e
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
findEventTargetWindow() will return 0 if m_window is
a top-level window with Qt::WindowTransparentForInput
set.
Change-Id: I413dabf2a8993b0522653c4e586bb304b642f3ed
Task-number: QTBUG-44013
Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com>
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
We still have a bunch of Q_WS_ ifdefs in our code, which are easy to
mistake for Q_OS_ ifdefs when quickly scanning the code. By renaming
the ifdefs we make it clear that the code in question is dead.
In incremental follow-ups, we can then selectively either remove, or
port, the pieces that are dead code.
Change-Id: Ib5ef3e9e0662d321f179f3e25122cacafff0f41f
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
NSWindow setStyleMask can call viewDidMoveToWindow,
while setting the mask, view can have window == nil and we call 'obscure'
on this view's platform window/QWindow == 'unmapping' it.
As a result, it can happen that a child view (for example, QGLWidget's view)
never gets mapped back. This patch tries to limit this special
obscure/expose logic by the exact views it was introduced for
(c7bd85e97d, QTBUG-19840).
Change-Id: I4cc7a6b1bd3e34741ad50c2e0d2a2add242b28e4
Task-number: QTBUG-41701
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
In MenuBar.qml, it's possible for __isNative to be set
after visible on a child QQuickMenu. In that case, the qcocoamenu.mm
will have set submenu to nil, only to be overridden in insertNativeMenu
when __isNative is set.
Change-Id: Id3c6bca03f937528d05b166cbd6a6d1011db43e8
Task-number: QTBUG-44168
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
Assign geometry in setGeometryDp() only when minimized as otherwise the
variable will be set by the handling of the resize event triggered by
setGeometry_sys()handleGeometryChange(). As it is, it suppresses
the emission of screen change signals for programmatic move operations
since the move is not detected.
Change-Id: I5cd32bb16fd41dd720c16ddf84b88df642677af7
Task-number: QTBUG-44070
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
According to GetStockObject() function docs at MSDN:
> It is not necessary (but it is not harmful) to delete
> stock objects by calling DeleteObject.
Change-Id: I755dc84c8b86ba2806e97ae41b3025aa3e633ae7
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
We may receive viewWillLayoutSubviews calls for the view controller even
if QIOSScreen has released the UIWindow that retains the view controller.
Change-Id: I0cc7c50dbb5ee00224aec46d070b04efe069e85a
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Now that we can rely on screen() returning 0 when the QScreen is not
available we can return early from updateProperties(). We still compute
the member variables as they may be accessed directly for the still
alive QPlatformScreen.
Change-Id: Ia7d0d29a6b50a9c932b565dc53b23d66331c275e
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Change-Id: I6acac4c926fcf5459364133b6cc58baff0519074
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
We were only doing this for the size, which caused problems when moving
a window from one screen to another where the two screens had different
device pixel ratios.
Change-Id: If56df34677417369639ee8e4df05820fddd9198d
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Add missing includes and reorder includes to avoid X defines breakage
Change-Id: Iaf95ae2488df3d3301436262ed79f7091b4be0a9
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
In d7ca800a87 another parameter was
introduced to unify ShortcutOverride. The call to it in qnsview.mm
accidentally passed false as last parameter which would go to count
instead of tryShortcutOverride. The patch wasn't released yet, so this
regression doesn't need a change log entry.
Thanks to Felipe Seoane for spotting this!
Change-Id: Ide2211806caf742d649e0d5dadcc47fd032d2cdf
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
We would return true when opening assets in read/write mode despite
the fact that the files are not writable. The logic now matches
that of the qrc file engine.
This also adds a unit test for Android-specific issues.
[ChangeLog][Android][Important Behavior Changes] Opening assets with
QIODevice::ReadWrite now returns false to correctly indicate that the
files are not writable.
Change-Id: I019cc27861fc9b000dc13c5e0a38c0fc09a08671
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Reviewed-by: BogDan Vatra <bogdan@kde.org>
Immediately try to initialize a context obtained by
eglGetPlatformDisplayEXT() and clear display in case it fails,
falling back to eglGetDisplay().
Change-Id: Ia6c1c6da4daff6651153c854eda4fb8749bdc526
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
An external screen should always stay in the native orientation of the
screen, and not be affected by rotations of the device. If the user
requires the external content to follow the device rotation, this
can be done explicitly by listening to orientation changes of the
main screen, or using QSensors.
Change-Id: I3a98655d11915f0db107930e7d97a24417656bc9
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Allows the QPlatformScreen to verify that the QScreen is alive before
sending events to QPA for the given screen (which will assert if the
screen is being destroyed).
Change-Id: Ie77674fead3e0a4d4f6fedbf1f7f3c98364c7485
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
We delay showing the UIWindow until the first QWindow is created and
mapped to the screen. This allows external screens to stay in mirror
mode until a QWindow has been explicitly created on that screen. We
also remove the screen-association when the last QWindow on that
screen has been removed, which will return the external screen to
mirror mode.
Change-Id: Iccecb297281d0c4f397f69f2494debff051ade01
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Instead of keeping a separate property for the auto-rotation. Allows us
to override shouldAutorotate later on to make the decision even more
fine grained.
Change-Id: I9a3cd6c1316f2a5485a94ef8d9b633df87f46f5f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
The call to QPlatformWindow::setVisible() will trigger flushing
of the window system events. Depending on the events, this could
lead to the window being hidden. Since platformScreen()->addWindow()
and removeWindow() was done *after* this flush, you could get the
remove for a window before it had been added, whereas the logic
in these functions were written under the assumption that there
is exactly one remove per add, and that add always precedes the
remove.
This has only been seen when running the QCompleter test so far.
This patch reorders the statements to make sure the events are flushed
after the window stack has been updated. In addition, it adds asserts
for the assumptions in the addWindow/removeWindow code to catch bugs
there earlier.
Change-Id: Ic67b03afbf7acbcb78be86bffa4c26360dc5832f
Task-number: QTBUG-43836
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
This reverts commit 8456adf0ee.
The change introduces a massive slowdown of the application
startup caused by the inner enumeration.
Task-number: QTBUG-43774
Task-number: QTBUG-40828
Change-Id: I694938eab93ea409d97537b55e8a025bb7a0e393
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
At startup or when a new UIWindow has been created but not associated
with a UIScreen yet, its geometry will be invalid, and cause the wrong
geometry for its corresponding QScreen when we use it to map geometry.
Instead we explicitly use the status bar orientation to map to the
correct geometry.
Change-Id: If37b3ab2ad5db65e20a7e3af5c3854b3e3ddff0d
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
We set the parent of the window as part of constructing it, which will
cause a layout of the QIOSDesktopManagerView's subviews, but in this
case we don't need to re-set the window state as that's taken care of
later on in the QIOSWindow constructor.
Change-Id: Ic197c9a50394908c8aa2155abdc97bc322937a85
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Change-Id: I78c47c6ccdb53045f3fa412b1489e08691d3e195
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Auxiliary screens are always in their primaryOrientation.
Change-Id: I078151ccbdb8a78eb095a05672f7804ab608ff24
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>