Change-Id: Idb6216a645f7c9791674d16665331a63da46b132
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: James McDonnell <jmcdonnell@blackberry.com>
To support multiple displays in the emulator, it is necessary that an
additional EGLFS device integration be added to query information about
the available screens, and to help associate a window surface with a
screen.
Change-Id: I852c27bd66f5f32a92c4ff876838ac2f6fbde86a
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Fixes MinGW developer build:
qwindowsnativeinterface.cpp: In member function 'virtual void* QWindowsNativeInterface::nativeResourceForWindow(const QByteArray&, QWindow*)':
qwindowsnativeinterface.cpp💯12: error: enumeration value 'OpenVGSurface' not handled in switch [-Werror=switch]
switch (window->surfaceType()) { ^
cc1plus.exe: all warnings being treated as errors
Amends change dafd0955c6.
Change-Id: I43f7148281fcf47613958427e25a784f42920806
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Add a QFbScreen implementation that uses DRM dumb buffers and page
flipping, thus implementing a vsynced, double (triple) buffered plain
software platform plugin. Besides better supporting systems that by
now only do fbdev via (possibly buggy) emulation, this can also be an
enabler for implementing certain types of 2D accelerated compositors
e.g. for Wayland.
Enable with QT_QPA_FB_DRM=1. Right now there is no good way to
autodetect the support for dumb buffers early enough so the default is
always the traditional fbdev path.
Long-term this will also enable proper multi-display support like with
eglfs' DRM backends. Multiple QScreens are not yet reported currently
due to the single-screen limitations of fbconvenience.
The generic DRM code is shared with eglfs, meaning configuration
happens via the JSON file specified in QT_QPA_(EGLFS_)KMS_CONFIG. This
allows changing the screen resolution, disabling outputs, etc.
[ChangeLog][Platform Specific Changes][linuxfb] Added experimental
support for DRM dumb buffers. Enable by setting the environment
variable QT_QPA_FB_DRM to 1.
Task-number: QTBUG-56306
Change-Id: I4bdcf16fff67412183220dffa0c4ea235c5cad3d
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Introduce a glProgramBinary-based disk cache in QOpenGLShaderProgram.
By switching the typical
program->addShaderFromSourceCode(QOpenGLShader::Vertex, ...)
program->addShaderFromSourceCode(QOpenGLShader::Fragment, ...)
invocations to
program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, ...)
program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, ...)
the compilation may be skipped via gl(Get)ProgramBinary and a disk
cache, when supported. Such QOpenGLShaderProgram instances will have
no QOpenGLShader instances attached. Instead, the entire program
binary (which is driver-specific) is loaded as-is.
Support means OpenGL ES 3.0 or the presence of
GL_ARB_get_program_binary, in combination with >= 1 supported binary
formats. Note that some drivers claim program binary support but
expose no formats. This amounts to no support in practice.
When support is not present, calling the new functions is equivalent
to the non-cacheable variants. If the OpenGL driver changes (vendor,
renderer, version strings), recompilation and storage of the new,
potentially incompatible binary program will happen transparently.
The cache can always be disabled by setting
QT_DISABLE_SHADER_DISK_CACHE=1 or the new application attribute
Qt::AA_DisableShaderDiskCache.
Location-wise the primary choice is the shared cache
(GenericCacheLocation). If this is not available or is not writable,
the per-process one (CacheLocation) is used instead.
In addition to the new public APIs in QOpenGLShaderProgram, the main
shader users in QtGui are migrated as well. (OpenGL paint engine,
glyph cache, blitter, eglfs mouse cursor). This means that any
application using QPainter on OpenGL or widgets with eglfs will
benefit from the improved startup times. Qt Quick will follow suit as
well.
[ChangeLog][QtGui][OpenGL] QOpenGLShaderProgram offers a built-in
program binary disk cache for systems with OpenGL ES 3.x or
GL_ARB_get_program_binary. This can lead to significant increases in
performance when it comes to application startup times for
example. Usage is opt-in for direct C++ users of the class, however
Qt's own main users of shaders, including Qt Quick and QPainter's
OpenGL engine, are migrated to use the new, cache-enabled APIs.
Opting out on application level is always possible via
Qt::AA_DisableShaderDiskCache.
Task-number: QTBUG-55496
Change-Id: I556f053d258bfa6887b1d5238c9f6396914c5421
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Last used in 2011, to determine QCocoaWindow::globalGeometry(),
which probably shouldn't have used transientParent in the first
place.
The parent is available through casting QPlatformWindow::parent().
Change-Id: I93fbcb41765944fbe0b79981ccf7d0062bb57719
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
Sending key events in addition causes applications to respond
twice to for example the back / forward extra mouse buttons.
Suppress the keypress by checking on the device. This is in
line with the other platforms, which do not send keypresses
either.
Native event filters will still be able to listen for
WM_APPCOMMAND.
Task-number: QTBUG-48117
Task-number: QTBUG-57198
Change-Id: I219e17244087663f06ab2c5a8cf4b880c3655700
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Looks up the canonical names of enumerated fonts and register them under
their preferred names if present.
Also changes the logic handling registration of english aliases, so it
is always done, even if it might in rare cases cause a double
registration since that is safe.
Task-number: QTBUG-53458
Change-Id: Ia010774b26072192b55697b717cc37442c852881
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
In a case like the SVG iconengine there is no available sizes
implementation. However in that case we don't need to provide different
sizes as we can have SVG scale it for us to the one requested. So it is
assumed that with no available sizes implementation that the icon
engine will take care of this for us.
This ensures that SVG files can be used as icons inside the menu on
macOS.
Task-number: QTBUG-40225
Task-number: QTBUG-55932
Change-Id: If01ca582c4c07834e6de16652924e0b7e118c87c
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Use newly introduced EnableNonClientDpiScaling() function to fix
the decoration having the wrong size in multimonitor setups with
per-monitor DPI awareness.
Task-number: QTBUG-53255
Change-Id: Ic6e2f2a92f790259107d2a0837b96177cf3adb5f
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Flushing all events to ensure that the expose (or other queued events) get
processed right away is dangerous. Instead, pass ExcludeUserInputEvents like
many other platform plugins do. This way queued input events do not get
processed at an unexpected point in time and so do not interfere with modal
dialogs for instance.
Task-number: QTBUG-57229
Change-Id: I9da09e62627d26485fb5a37fc190cb4a4bcb28b6
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Add new file for dynamically loading Window 10 Helpers via combase.dll
and add function qt_windowsIsTabletMode() querying
UIViewSettings::get_UserInteractionMode() for "Touch" mode.
The style hint QPlatformIntegration::ShowIsMaximized will then
reflect the tablet mode setting.
Task-number: QTBUG-56831
Change-Id: Ia361dd172fcf0e54fdfc70863c43527f3ea72fe2
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
Instead of relying on AdjustWindowRectEx() and dirty-handling,
capture the rectangles before and after the processing of
WM_NCCALCSIZE and calculate the frame from that. This allows
for changing window frames by handling WM_NCCALCSIZE and
monitor-dependent window frames when using High DPI scaling.
Task-number: QTBUG-53255
Task-number: QTBUG-40578
Task-number: QTBUG-56591
Change-Id: If8364a5440a6324ea5d470bf5b74e68942285abe
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
This commit re-enables support for OpenVG in Qt, but not in the
same way as in Qt 4.8. The first part is about adding a test
and using the new configure system to enable OpenVG.
There is still support code in Qt for setting up EGL to provide a
surface and context for rendering with the OpenVG API, this commit
enables a path to do so.
Normally to get access to an EGLContext from a QWindow you do so via
QOpenGLContext, but in setups without OpenGL but with EGL and OpenVG
this doesn't make sense (there would be no QOpenGLContext). So the
intended way is to use a QWindow to get an EGLSurface, then create
an EGLContext directly (without going through QPA).
Change-Id: I0f75aadbaa3cd006deb7e6fd12cfbb574870fba4
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
It is possible to have support for EGL without having support for OpenGL
for example with OpenVG. Unfortanately many features of EGLFS require
OpenGL (Cursor, MultiWindow, QEGLPlatformContext, QBackingStore), so the
plugins become pretty useless on their own. This is necessary if you
still want to use Qt as a method to provide an EGL surface to render to
via QWindow. This is the method by which Qt Quick uses OpenVG to render
its content when available.
Change-Id: I34973b21bf1932865950ce6a78b71b3a29360d65
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
When a menu item's enabled state changes after
-[QCocoaMenuDelegate menuWillOpen:] is invoked, i.e.,
during or after QMenu::aboutToShow() is emitted, that
state change may not be taken into account. This is
because the automatic menu validation, upon which Qt
relies, is not made aware of any such change.
By calling -[NSMenu update] when syncing the QPA menu
item, we induce Cocoa to invoke -[QCocoaMenuDelegate
validateMenuItem:] and ensure that previously synced
items, whose state may have changed, will be properly
updated. This, however, has a small side effect, namely
that menu-holding items will also go through the automatic
menu enabling path and may appear disabled since, until
now, they were not properly configured. In order to solve
this, we set the action on those items as well, and make
sure that both of QCocoaMenuDelegate's relevant methods,
validateMenuItem: and itemFired:, properly process
menu-holding items.
Menurama manual test updated accordingly.
Change-Id: I62f955538b8be09b8494ea0ce87fca7910148d38
Task-number: QTBUG-56850
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
That loop could never have worked properly.
Identified by analyze compile switch.
Change-Id: I5e987dc9f5c57d3ffbcf054b7b417b506c02e7e1
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
The generic DRM code, not involving any GBM or EGLDevice stuff, can
now be reused in components outside eglfs, for example linuxfb in
order to get support for DRM dumb buffers.
Task-number: QTBUG-56306
Change-Id: If7dffdb2415489dbc6470782fa76efcaeccf01c7
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Since virtually all the logic is shared between QNSColorPanelDelegate
and QNSFontPanelDelegate, we extract the added buttons and
layouting logic and move it into its own class. This requires
the two afore mentioned Objective C classes to satisfy the
QNSPanelDelegate protocol.
Change-Id: Ie26e758f5db71920896d930a4f3644b51a1ce3fa
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
60985aa42 converted the QT_CONFIG use, not taking into account that the
feature isn't actually known to the configure system - it's coming
directly from the makespec. so revert that hunk (until we have a better
integration between makespecs and configure).
Task-number: QTBUG-57039
Change-Id: Iaf57b5f5339250055f1c378e091da3ab3fcd4292
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Cocoa is known for not sending key up events for key equivalents,
regardless of whether it's an actual recognized key equivalent.
Notice that only Cmd-based shortcuts suffer from this feature.
We decide to force fate and forward the key event to the key
(focus) window. However, non-Qt windows will not (and should not)
get any special treatment, only QWindow-owned NSWindows. Since we
know that Cocoa will not send it to the key window, we can safely
forward it and ensure no duplicated key events.
Change-Id: I0449f7f5195a327eef6d792bd441fc3fd0882db1
Task-number: QTBUG-36839
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Add WINDOWPOS, fix RECT and NCCALCSIZE_PARAMS to be in
the Qt style.
Change-Id: I0a0a960115d704cf704df85597ce0940bd8d7211
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Returning NSNotFound from the NSTextInputClient selectedRange
implementation when there is no selection prevents
dictation from activating (for unknown reasons).
Return an empty {0, 0} range instead. Text input
methods such as Pinyin still work after this change.
[ChangeLog][macOS] Speech to text dictation now works
for Qt text input.
Change-Id: Ibf1729bdd271e8ed5ce3c9d2a0373c8ab3613d8e
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
In XCB environment the QClipboard::changed() was not delivered if the
QClipboard::clear() was issued by other Qt app/process.
If the QClipboard::clear() is used, then the owner in
xcb_xfixes_selection_notify_event_t is XCB_NONE, so we need make the
decission to handle this event by the selection_timestamp and our
m_timestamp[mode].
Task-number: QTBUG-56972
Change-Id: If4c486ac02223eac506465cac7ff1a07bd02a187
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
We have to make sure that GL_GLEXT_RPOTOTYPES is defined when
qplatformbackingstore.h is included. Without the definition
glBlitFramebufferANGLE will not be set and compilation might fail.
Task-number: QTBUG-57083
Change-Id: I4cacaf4c2851913b3437ebd1f0f2956d0f400553
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Do not move on to glGet since the behavior is undefined.
Task-number: QTBUG-48986
Change-Id: Ifd279635ed1b8441f92697965d15ae3ecb59a7e3
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
That relation is incorrect. We can have tslib support without evdev.
Task-number: QTBUG-54998
Change-Id: I2c09bad73210fa4a13000077480c70365d482e2e
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Similar to what we recently did with the Windows font databases.
The goal, again, is to add platform font database support for the
minimal QPA plugin.
Change-Id: Ide5f4ec452c920f169cc31c617cbcf19d8d1764d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
the include path must be absolute, as otherwise the external module pri
will contain a bogus path.
amends 9a088e78.
Task-number: QTBUG-56934
Change-Id: I701f5778d8c1b5586310b08e7763858460455d63
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
...unless the legacy behavior is requested via
QT_QPA_FB_FORCE_FULLSCREEN=0 or the platform plugin overrides
QFbScreen::flags() to return QFbScreen::DontForceFirstWindowToFullScreen.
The long pending asymmetry between eglfs and linuxfb is going to end
because with the increased focus on the integrated Qt Quick Software
backend the expectation for launching apps with -platform linuxfb is
to behave in the normal, eglfs style, embedded manner. Forcing every
app to handle this manually in QML is silly.
Widget applications also benefit since the old non-fullscreen main
window approach is pretty much never what is wanted (considering there
is no desktop and the content in the background is either garbage or
whatever was on the terminal).
However, not every fbconvenience-based platform wants this. For
example, vnc should remain with the old way where window sizes are not
altered. vnc therefore opts out via QFbScreen::flags().
bsdfb follows the linuxfb behavior.
[ChangeLog][Important Behavior Changes] The linuxfb and bsdfb platform
plugins now follow the behavior of eglfs by making the first window
fullscreen. This provides consistency and avoids applications having
to make their windows match the screen size manually. The new behavior
can be disabled by setting the environment variable
QT_QPA_FB_FORCE_FULLSCREEN=0.
Task-number: QTBUG-48658
Task-number: QTBUG-56306
Change-Id: I63d917147ce37205e29cbd0c6f37f35c46d4509c
Reviewed-by: Louai Al-Khanji <louai.al-khanji@qt.io>
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
No need to specify a format with alpha for the screen. Comparing to
Windows, Format_ARGB32_Premultiplied was only set in the constructor,
but never actually during runtime as detection enforces eith RGB32 or
RGB16.
Change-Id: I4c2fabbab0d14ee296f9b7e43b02de8a9836d5bb
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Since the iOS plugin (kernel) is static, the
optional plugin needs to be static as well. Otherwise the linker
will complain about missing symbols (coming from the
optional plugin calling out to functions in kernel).
Task-number: QTBUG-42937
Change-Id: I154de0d383bfae09c75a57395b57414fc5ffcc2d
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
D2D support has been partially added to recent versions of
MinGW, which one day could make compiling the plugin possible.
Change-Id: I53f91c483d3b900698f4424cb6a72f626e32e60b
Reviewed-by: Louai Al-Khanji <louai.al-khanji@qt.io>
The existing cursor logic had a couple of issues:
- It made the faulty assumption that we could not use
the NSWindow invalidateCursorRectsForView API for
child NSViews.
- It used NSWindow invalidateCursorRectsForView and
NSView resetCursorRects. This API has been replaced
by the more general NSTrackingArea API.
- It did not implement falling back to the parent
window cursor if the current window has no cursor
set.
Document that QWindow cursors work the same way as
QWidget cursors in that a QWindow with no set cursor
will fall back to the parent window cursor.
Change the cocoa platform code to use NSTrackingArea
exclusively and implement NSView cursorUpdate which
sets the cursor. Handle immediate change on QWindow::
setCursor() manually.
Add QWindow::effectiveWindowCursor() and
applyEffectiveWindowCursor() which finds the correct
window cursor.
Add a manual test for the child window, child widget,
and QWidget::createWindowChild cases.
Task-number: QTBUG-33479
Task-number: QTBUG-52023
Change-Id: I0370e11bbadb2da95e8632e61be6228ec2cd5e9d
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
A pending interrupt of a QEventLoop may interfere with
native runModal calls, resulting in Cocoa's main event
loop to be stopped unexpectedly.
After commit 9ab60b9c processEvents() no longer resets
the event dispatcher interrupt flag.
Add QCocoaEventDispatcher::clearCurrentThreadCocoa
EventDispatcherInterruptFlag(). Use it to clear the
interrupt state before calling runModal and variants.
Work around the inability to use platform API in
the print support code.
Change-Id: I52f26f99a63cbb46969db42f65b09a3c3119ad15
Task-number: QTBUG-56746
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
The plugin depends on AssetLibrary.framework, which is only
available for iOS.
Change-Id: Ic7b3c4ffb4d26808d2120e46593cb4e191e2c10b
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Fix warnings like:
qwindowsdirect2dpaintengine.cpp:722:107: error: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'HRESULT {aka long int}' [-Werror=format=]
qWarning("%s: Could not convert Direct2D linear gradient brush: %#x", __FUNCTION__, hr);
qwindowsdirect2dintegration.cpp:112:88: error: passing NULL to non-pointer argument 2 of 'WINBOOL GetFileVersionInfoW(LPCWSTR, DWORD, DWORD, LPVOID)' [-Werror=conversion-null]
if (GetFileVersionInfo(filename, NULL, versionInfoSize, info.data())) {
^
Change-Id: Ie03abdb5f4ba47b4803c283b9a4ec10181aae76e
Reviewed-by: Louai Al-Khanji <louai.al-khanji@qt.io>
qiosfileenginefactory.h is now a part of the optional plugin.
Amends d7e49801
Change-Id: Ia1854145f54e4278ab5c0020361915f476d48cc9
Reviewed-by: Liang Qi <liang.qi@qt.io>
It no longer makes sense to allow the screen event thread to be disabled. This
was the case only when there existed a BlackBerry event dispatcher that could
play its role.
Change-Id: I38471dc5cb2a4461da568c89f71e678aef57c43b
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Some of the qminimaleglscreen.h includes are not even necessary.
With the inclusion of egl.h (or qt_egl_p.h in 5.7 and up) isolated
to this header, all we need to ensure is that the sources that include
it place the include at a suitable place.
This is not the only possible solution, there are alternatives (each with
its own caveat), but this is likely the least intrusive.
Task-number: QTBUG-56559
Change-Id: I17db031c8e401d9895a417ba3568ad1e4ba30f72
Reviewed-by: Louai Al-Khanji <louai.al-khanji@qt.io>
When commenting out the warning in createOrOpenKey()
(src\corelib\io\qsettings_win.cpp:157), applications produce warnings:
QSettings: Failed to create subkey "Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes": Access is denied.
indicating that an attempt to open the registry in read/write mode fails.
Add a utility function to read out registry strings in read-only mode to
the font database and use that instead.
Change-Id: I4187344cac7ec2ba27f15b51e237575efc171853
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
We may not be playing nice with Cocoa's internals when
we decide to reparent NSColorPanel's contents to add
QColorDialog's own OK/Cancel buttons. In order to reduce
issues, we should avoid poking at things during the
application's shutdown sequence. Simply releasing the
stolen view should be enough at that point.
A similar pattern exists in QNSFontPanelDelegate.
Change-Id: I678c236e0c57c4d08a1109a479d965f924288c54
Task-number: QTBUG-56448
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
This is needed in order to be able to specify a custom location of
the ANGLE libs, and enables us to perform a LoadLibrary of ANGLE libs
by just having the absolute path to QtANGLE.dll as the argument to
LoadLibrary().
Previously, we had two ANGLE libraries: libEGL and libGLESv2. libEGL hard
linked against libGLESv2. If we wanted to load libEGL from a custom
location, we couldn't load libEGL by calling LoadLibrary with the absolute
path to libEGL, because libEGL had problems finding libGLESv2. One
solution to that could have been to call SetDllDirectory() with the path
to the ANGLE libs before calling LoadLibrary("libEGL.dll"). Since the DLL
directory would point to both ANGLE libs, this would ensure that the libGLESv2
was also found. Unfortunately, this approach is not thread safe
(SetDllDirectory will affect all subsequent LoadLibrary(Ex) from the same
process). Therefore, we chose to merge the two libraries into one to
circumvent the whole problem.
At the same time, this patch also enables loading of two different ANGLE
libraries into the same process at once without renaming them: This was
not possible before because libEGL hard linked to libGLESv2.dll. When
libGLESv2.dll was already loaded, the second instance of libEGL would
simply link against the already loaded version of libGLESv2.dll.
This behavior is documented in the LoadLibraryEx documentation on MSDN:
"If the string specifies a module name without a path and more than one
loaded module has the same base name and extension, the function returns a
handle to the module that was loaded first."
Change-Id: Ic1d886ba802be72ddcf01235bafaedcef662762e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Jan Arve Sæther <jan-arve.saether@theqtcompany.com>
When compiling with EGL native types being the Xlib types (uncommon since
we disable this both for Mesa and NVIDIA embedded, but can happen with other
vendor's headers), the types for EGLDeviceEXT (void*) and EGLNativeDisplayType
(Display, i.e. _XDisplay*) won't match, breaking compilation. At runtime we won't
hit that path, so all we need to ensure is that the code compiles. Do this via a cast.
When the native types are generic, both types are void* so the cast has no
effect.
Change-Id: Ib54f569d4494906f74107f08b47bd6b521d700db
Reviewed-by: Louai Al-Khanji <louai.al-khanji@qt.io>
Introduced in the 5.7 branch by 5f39a0ef8d.
Add also a warning in the GLX backend instead of just dereferencing the
null pointer.
Task-number: QTBUG-55291
Change-Id: I1f2930768b39a04ee443a68d0ac7dc9ecf26cb9c
Reviewed-by: Louai Al-Khanji <louai.al-khanji@qt.io>
Setting the geometry of a window to a position outside of the primary screen,
but within the virtual desktop, would not result in the window being created
on the secondary screen, as macOS does not seem to translate the global screen
position when creating new windows.
We work around this by translating the position ourselves, and using the
overload of [NSWindow initWithContentRect:] that takes the NSScreen to
create the window on.
Due to a bug in the macOS window manger, this fails for windows that are
created within a certain region of rotated screens. This is not an issue
for setting the geometry after creating a window, so we should investigate
making the window-creation code set its geometry via the same code path, after
creating the window (without having the window momentarily show up in the
wrong position).
Change-Id: Iba8eefe65e2c91667856299d90a8606e361ceacb
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
The assumption that the primary screen is the only one whose available
geometry differs from its full geometry no longer holds, so we need to
compute the available geometry for all screens.
Helpers methods for flipping between coordinates have been introduced
in QCocoaScreen, to make flipping possible relative to a specific
screen, and for exposing similar functionality in the future for
QScreen. The corresponding functions in qcocoahelpers.mm should
possibly be deprecated in favor of being explicit about which
screen is doing the mapping.
Change-Id: Iede658fabb4c3e4ef1f1b715db84fb927a661fa9
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
We're mostly using the result of looking up the index anyways.
Change-Id: I2ada58a9e6159a567691568b42fef76a82797eb3
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
This allows creating or extending QPA plugins to provide access to QFont
and related types.
It concerns both GDI and DirectWrite engines, as well as the regular and
the freetype based font databases. The qt.qpa.fonts logging category has
been moved together into the QWindowsFontDatabase related files to avoid
depending on the qwindowscontext.h header file. Finally, QwindowsNativeImage
is following pending a future refactor with similar code in qpixmap_win.cpp
and the Windows XP style.
Change-Id: Iddff2f3d715e3ab7695e6c2052b7596a01fd6fa8
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
inputAssistantItem is not available on tvOS.
Change-Id: Icff684d6299688fbeaf40ffcb32ff9c46371b305
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
QPlatformIntegration::clipboard() is not allowed to return
null. This will lead to a crash as soon as someone tries
to access QClipboard.
Change-Id: I3c1e7cdc5103fe4424f9739a09f599d6c0af40b2
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Or, in some cases, m_view.window.parentWindow directly.
Change-Id: Ibded4d4229a65c861ef25537e00bc70a77009453
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Instead of manually maintaining the m_isNSWindowChild state, a new function
has been introduced, isChildNSWindow(), which evaluates the condition based
on whether or not m_view.window has a parent NSWindow.
To achieve this, the recreateWindow() function was refactored to make it the
sole point of deciding whether or not a reconfigure is needed, instead of
having the logic partily at the call sites. That means the shouldUsePanel()
and isNativeWindowTypeInconsistent() functions are no longer needed.
QNSWindowHelper is only used for QNSWindow and QNSPanel, and m_isNSWindowChild
is only set if the window has a parent (and child NSWindows was explicitly
enabled), so we can use the normal QWindow topLevel logic.
There's more potential for cleanup in recreateWindowIfNeeded(), but that's
for later patches to keep this patch as small as possible.
Verified NSWindowChild use-case with windowchildgeometry manual test.
Change-Id: I34e8ca0cc2f8a1c399cc72691d66e09fab843f4d
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
The class is not a virtual base class.
Change-Id: If6a86487317d8e79e9618b4f6a46793aa95ea9ea
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Louai Al-Khanji <louai.al-khanji@qt.io>
The function was only used from a single code path, and moving the logic
there makes it easier to refactor the code in followup commits.
Change-Id: I9a7c3aeb95df8f3f507fed83d463e16fa4908374
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
The notification is only posted for NSViews with attached surfaces,
meaning NSOpenGLContext, so there's no need to guard the subscription
within [QNSView setQCocoaGLContext:].
Change-Id: I8179e58c84925a756315b711d15fa9c356adaecf
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
There's no need to set postsFrameChangedNotifications = YES, it's
already the default.
Change-Id: I8c50dc119ba3779cdc6b3114d39c64f3cb236172
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
The logic for handling NSWindow events was split partly between QNSView
observing notifications, and QNSWindowDelegate implementing direct delegate
callbacks. The logic of how to handle the events was then split further
by sometimes handling the event in the delegate callback or notification
handler, and sometimes forwarding the event to QCocoaWindow.
We now handle most events via notifications, and propagate these directly
to QCocoaWindow, so that all the logic is in one place. This improves the
situation for foreign windows, since we're not relying on having a QNSView,
or being able to inject our QNSWindowDelegate.
To keep code duplication to a minimum and risking missing a notification
in the forwarding logic, the logic is based on QMetatType and QMetaMethod
tags, so that the notifications are declared in the header file, along
with the handler function.
Change-Id: I2fb6372010048a8a1f6e4426b988a3f6f5abdbab
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Closing a window results in sending an expose event to obscure the window,
which gets delivered after the corresponding QPlatformWindow has been
destroyed.
If the client application (wrongly) tries to render as a result of this
expose event, using the existing QBackingStore, it will potentially
result in a resize of the backing store, for example if the global
device pixel ratio is different from what the window had when it
still had a QPlatformWindow.
The resize in turn requires the format() of the window, but since we
no longer have a QPlatformWindow we can't base the format on that.
Change-Id: Ied6a3a745f20087c2287ad86e1c66808467b6183
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Use C++ 11 member initialization in value-type structs.
Task-number: QTBUG-51673
Change-Id: I2e609337cfc057d1de23b3de62b9ed43a4ecec9c
Reviewed-by: Louai Al-Khanji <louai.al-khanji@qt.io>
replace explicit pkg-config uses with the results of configure tests,
for consistency.
Change-Id: I3587db6085798ea7a49f8871fc6838eb687a6391
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Starting from iOS 10, apps that tries to access photos on the device
need to specify the reason for this up front by adding the key
'NSPhotoLibraryUsageDescription' into Info.plist. If the key is
missing, the app will be rejected from AppStore.
This causes problems for the iOS plugin as it stands since parts of it
already tries to access photos, e.g to show an image picker dialog
if a file dialog is set to open QStandardPaths::PicturesLocation.
This means that currently, all apps written with Qt will be rejected
from AppStore unless the developer adds this key, whether he tries
to access photos or not.
To solve this, we choose to split the plugin into two parts, one
that contains the core functionality, and one that contains
optional support. The latter will need to be enabled explicit
by the developer in the pro file, or in this case, indirectly
by adding the right key to the Info.plist.
This patch refactors the code in the plugin that gives access
to photos into a separate optional plugin called 'nsphotolibrarysupport'.
Change-Id: Ic4351eb0bbfffdf840fd88cd00bb29a25907798f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
QVector was used as just RAII for local array. It's inefficient usage
of CoW type. So use QVarLengthArray instead.
Change-Id: I494ecc49af9049569a65e258581137bad3ce7dc7
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Then we need to check if the current active (or focused)
window has any menubar associated. In case there isn't,
and the menubar has no window associated, then we should
update immediately.
The previous condition is still valid.
Change-Id: I4532ccc87354d91c76b53f5433dc3944b9e29584
Task-number: QTBUG-56275
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
The first screen in the screens array is referred to
as the _primary_ screen in Apple documentation.
The main screen is the screen with the currently active
window.
Change-Id: I900a53e6bfb06ed9e42fba1e11d3a583777e9a1d
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
The conditional statement checks/allows only right/left mouse buttons
in handleMouseDraggedEvent and generates a lot of useless/misleading
warnings in case we press (for example) a middle mouse button (when
we're also moving mouse cursor, intentionally or not).
Task-number: QTBUG-54160
Task-number: QTBUG-42846
Change-Id: I5c54b6204cb90036c7d98724537f1c985b40d9cc
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
error #68: integer conversion resulted in a change of sign
Change-Id: I33dc971f005a4848bb8ffffd1475ee53d394acf6
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
The parent window is available through QPlatformWindow::parent().
Change-Id: I2436c001ec18f5abba99db3061acb0edcd8035a2
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
isXIEvent() is used iff XCB_USE_XINPUT2 is defined.
So move declaration of the function in XCB_USE_XINPUT2 define scope.
Change-Id: I6f045cd07d572ee7425ee6edc5ac73dcf0afdb37
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The m_integration member of DeviceIntegration, a naked pointer, was
checked for nullptr in the DeviceIntegration ctor, but never set to
nullptr.
Fix by init'ing it to nullptr in the ctor-init-list.
Coverity-Id: 172056
Change-Id: Ia1dc9b67b9d16a991bba82338eedb19de68f91d8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
If there is no file path set then it should not be possible to see a
menu or to drag from a proxy icon in the titlebar.
Task-number: QTBUG-56082
Change-Id: Ib8305bcab5717bc8cb7ddabbb079f152debbdded
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
With the client message _NET_ACTIVE_WINDOW, not all window managers
will pass focus from a child window to its root window, Detect this
child-to-root case, and use xcb_set_input_focus() instead.
Task-number: QTBUG-39362
Change-Id: Ib32193018e3b725b323f87d7306c9ae9493d78a7
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Prefer QStringRef methods to avoid allocations.
Use startsWith/endsWith rather than comparing substrings;
and avoid substrings where references suffice.
Use new QStringList::join(QL1S).
Change-Id: I46c44aca96578633370006d613eb0ac13f7cfc03
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
At certain sizes and scales, GDI will clip away the bottom line
of pixels when rendering the MingLiU fonts. Since DirectWrite
renders it correctly, we force the use of DirectWrite in this case.
This also requires supporting classic GDI rendering in the DirectWrite
engine, to make sure the rendering still looks correct.
Note that this does not cover the corner case where the font is loaded
directly from data with QRawFont.
[ChangeLog][QtGui][Windows] Fixed rendering error when using the
MingLiU fonts at certain combinations of pixel size and scale.
Task-number: QTBUG-49346
Change-Id: Ie026c0d5932717858c4536dae077013eb6a1eafc
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Do not set WindowsContextHelpButtonHint directly in Windows QPA plugin,
but instead rely on logic in QWidgetPrivate::adjustFlags for widgets.
If WindowsContextHelpButtonHint is set, a '?' button is shown in the
windows decoration. If pressed, an EnterWhatsThisMode event is generated
that is consumed in QApplication that then calls into the QWhatsThis
singleton, which changes the mouse cursor, and informs the top-level
QWidgets about the state change etc.
For QGuiApplications though the event is not generated, which makes the
button useless by default. In addition, QWhatsThis only works with top
level QWidgets, not e.g. QQuickWindows. So for apps using QApplication
and QtQuick.Controls this means that the "What's this mode" is never
exited.
Given that the paradigm is somewhat outdated on the desktop it is unlikely
that Qt Quick Controls will implement support for What's this. Anyhow,
QWidgetPrivate::adjustFlags sets the hint for Qt::Dialogs, too,
so there's no need to set it the Windows QPA plugin.
[ChangeLog][Windows] 'What's this' button is now shown by default
only for QWidget dialogs.
Task-number: QTBUG-56239
Change-Id: I1ea3e92ade723b5865c8f2e19674413433658942
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
When the application quits, the iOS plugin can be told
to delete after qApp has been set to null. So we
need to add a check for this, to avoid error messages.
Change-Id: I687e0b26e0c54fdd5a8539fe0f31b2e756ea92d8
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
so far, we have been delaying the linking, because we didn't want to
make the monolithic platformsupport module pull in spurious
dependencies. however, now that the module was split, there is no need
to play such games any more.
a nice effect of this is that the hideous qpa/*unixfontdatabase.prf
files disappear, and finally freetype_dependency.pri also becomes
trivial and is thus inlined.
Change-Id: I255376d592625542310a31222eb6ac965943df99
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
public uses of external libraries are automatically transitive now, so
we can remove some parts which were only meant to pull in transitive
dependencies manually.
this is particularly good for includes() of parts of QtPlatformSupport,
which actually redundantly pulled in the library's sources.
this required making the freetype and fontconfig dependencies public,
which is ok, as in the end, they are used only by platform plugins, so
there is no point in making them private, as plugins are not linked
against anyway (except statically, but there public vs. private doesn't
apply anyway).
Change-Id: Ia2a32f50dc0f8472285675a0903e6ecd142a03b2
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
for that, qt_help_lib.prf gains the ability to write "external module
pri" files that contain suitable information for QMAKE_USE.
these files have a bunch of limitations:
- they are not installed, because a) they are not relocatable and b) the
helper libs' headers are not installed, either
- it won't work with qmake -r, which is ok, as qt5 does not build with
qmake -r anyway
- deps are not transitive, neither at build nor at use time
the freetype, harfbuzz-ng, pcre, and png helper libs have been adjusted
accordingly, and their uses replaced with QMAKE_USE instances. this also
allowed inlining the now trivial {harfbuzz,pcrc,png}_dependency.pri
files. freetype_dependency.pri remains due to its funkiness.
Change-Id: I16890eecb122e34ec49f3d3e68380d1ea71a198a
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Avoid unnecessary EGL and eglfs-specific includes in order to
have a clearer view of the dependencies.
Change-Id: Ifbd7dc4bd64024cc1ee48cd9f2607d1b5cdda1a2
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
When the new configure system was introduced, it accidentally
disabled automatic extraction of style assets on Android.
This patch puts it back in.
Note that the style extraction is not specific to Qt Widgets,
but rather Qt Gui, like other QPA options.
Task-number: QTBUG-56328
Change-Id: Ica33c3562c6dd6483050075f5c8ed5d28cd621a4
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
By using the SynchronousDelivery specialization instead of flushing all
window system events, we remove the risk of flushing an event that was
added without our knowledge.
For example, QGuiApplicationPrivate::processMouseEvent() used to prepend
a mouse move event to the QPA queue, which is why we had a check for
QWidgetWindow when flushing geometry changes. processMouseEvent no longer
sends the move event via the QPA queue, so that's no longer an issue,
but if it were to be reintroduced, we wouldn't need to check for
QWidgetWindow, as we're not flushing all events anymore.
Change-Id: Ib346ea9501cd88ddda6c2137981d3eb0922192a0
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
In 5.8 cr got changed to QRect from QRectF. This is incorrect without
adjusting the calculations based on it since QRect and QRectF's right()
and bottom() differs by 1.
Switch back to QRectF.
Task-number: QTBUG-56478
Change-Id: I5bde4ee59ca9bbf62f65493c66f42707032bfc80
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
The workaround doesn't seem to be needed anymore, and wasn't applied
uniformly anyways. If it turns out AppKit still needs this workaround
we should add CONFIG += no_keywords to cocoa.pro, instead of trying to
wrap every single include of AppKit in a undef slots dance.
Change-Id: Ia1b15137c03abcc92f0dd246796622772e99ca68
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
The two should never be out of sync, but by having them as separate members
we risk that they do. By going though m_platformWindow for QWindow access,
it's also more clear in the callsites that we're dealing with a QWindow
instead of a NSWindow, as referenced though self.window. Finally, removing
the member slims down memory use of a QNSView, however small.
Change-Id: Iec96cebf813fae82d3af339331781419f234c28b
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Also bump minimum required Qt version for Android: Ministro updates.
Conflicts:
src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java
src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java
src/plugins/platforms/android/androidjnimain.cpp
Change-Id: I966f249bebf92da37bfdeb995ad21b027eb03301
Offscreen windows should not be handle by the platform plugin.
Task-number: QTBUG-50973
Change-Id: I719a24b9bbcaad460d78fdc4095e86d615357cd2
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
When shmget() failed, we didn't set m_shm_info.shmid (not even to the
-1 failure id) but did pass it (i.e. uninitialized noise) to shmat(),
among other related functions. Guard against this; handle failure
gracefully.
Task-number: QTBUG-56419
Change-Id: Ie823c36c2ede03af6cb5d94ce7b4b5cd543c1008
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
Reviewed-by: Błażej Szczygieł <spaz16@wp.pl>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Joni Poikelin <joni.poikelin@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
For example, VMWare's vmgfx exposes a Virtual connector. Recognize this
properly instead of falling back to UNKNOWN.
Change-Id: Iee4f980ca0dfbbf3433fea1515fab27392250093
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Fix error:
qwindowsdirect2dbitmap.cpp(84): error C2220: warning treated as error - no 'object' file generated
qwindowsdirect2dbitmap.cpp(84): warning C4838: conversion from 'int' to 'UINT32' requires a narrowing conversion
Change-Id: I191f3300cd22715001eebc113b672ceac49c825d
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
...because we cannot support it in a robust way. Querying the version
via pkg-config only works when xi2 is picked up via pkg-config. Also,
having a version at build time does not mean we'll have the same at
runtime.
Modern distros (e.g. Ubuntu 15.04 and newer) will have libXi 1.7.4 or
newer.
Task-number: QTBUG-56017
Change-Id: Ia4a3b0dc47f2b92bcc953f462c95602a8ea2efd6
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The member was mirroring m_view in all cases except for foreign windows.
Instead of a member we now check window()->type() != Qt::ForeignWindow,
which is more explicit, especially for people not normally working on
the macOS platform.
To call methods that are only implemented for our QNSView subclass,
a new qnsview_cast() function has been introduced.
Change-Id: I0a2cfe1a5e4502250c17e1c3ebdce19e9ee5e572
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
This reverts commit 26961e32f3.
This patch was apparently a bit ill-considered and while fixed
one problem introduced others.
Task-number: QTBUG-50865
Change-Id: I2e3569d16c8fc47b4a492d4aed6e747d7ff93a55
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Qt::Key_Print is the PrintScreen key-mapping. Instead use
Qt::Key_Printer which is also what VK_PRINT is mapped to.
Change-Id: I60a0181ed118253b6681ae0e5847812f73d63119
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Instead of forcing a static build, configure now respects the
-shared flag and defaults to that.
[ChangeLog][Important Behavior Changes] Qt for iOS now respects the
-shared configure flag, and now defaults to this configuration as with
all other platforms.
Task-number: QTBUG-42937
Change-Id: I9e7b2de8f7f8ba031c2610ff5ac0858e357424bd
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
As on other mobile platforms, fusion should be preferred as the default
theme instead of the desktop windows one. The styleHints from
QPlatformIntegration are adapted on top of fusion then.
Task-number: QTBUG-40667
Change-Id: I60836b4a199b29e63c400c2ed9bbbab7d3add902
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Slims down QCFString and leaves only one implementation of converting
back and forth between CF/NS strings and QStrings.
Change-Id: I068568ffa25e6f4f6d6c99dcf47078b7a8e70e10
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
This leaves a clearer separation between the foreign-window and non-foreign
window use-cases, where a single QCococaWindow can only be in one mode,
which is determined in the constructor and doesn't change after that.
There are no source or binary compatibility guarantees for the QPA classes,
meaning the helper function in QPlatformNativeInterface can be removed.
Change-Id: I3232aedca1d98c49a8f54e16750832187f9dc69a
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
The contentView is the root view of a NSWindow, but our m_contentView is
just the corresponding NSView of a QWindow, and doesn't always match the
contentView property of the NSWindow.
This is part of a multi part cleanup to the Cocoa platform plugin in
preparation for improved foreign-window support.
Change-Id: Ifaffb12f35544ec05e4a83964b346b47fa4b0576
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
the gl_integrations_plugin_base.pri included by this file already does
it.
Change-Id: I172401a431081da903b82e97829c2517ef6204df
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
amends 26a05fc09 (which in turn was a cleanup of 38abd6537).
Change-Id: I6159a3cfe468db048faf1c396143dd3869f7e72b
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
there is no point in testing !win32 explicitly any more, as configure
will take this into account already.
Change-Id: Idfca46feece6451509b405a4afc2b7205667c5bb
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
it's now possible to declare references which don't cause linking (or
cause only linking).
make use of this in the xcb-static library.
Change-Id: Ic429e0a1200b3a333738ea8d8e576ff64b6cac21
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Since QCocoaEventDispatcher::processEvents() resets the interrupt
state, this may prevent a higher level event loop from returning.
For example, calling QMenu::exec() and, as a result of an action
being triggered, the application calls QCoreApplication::processEvents()
after QMenu::hideEvent(). In this case, the menu event loop can be
stuck until we run another event loop.
Task-number: QTBUG-53947
Change-Id: If7efe1c3c07f7222c695195cbb4f41715e49b02e
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
Reviewed-by: Wayne Arnold <wayne.arnold@autodesk.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Fixes the mapping of the rare multimedia Print key, adds the real
mapping of the Print Screen key.
Also adds a mapping for few other short-cut keys that were added in 5.6
Change-Id: I931bf1eed062536e1be2aa6aa6f19d773bb5ec55
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
Re-apply change 6e850af09d,
the code for which has gone missing.
This prevents sending tablet events as both mouse
and tablet events, which confuses the double-click
detection code in QGuiApplication::processMouseEvent()
when tablet->mouse event synthesis is enabled.
Task-number: QTBUG-54399
Task-number: QTBUG-51617
Task-number: QTBUG-47007
Change-Id: I6183906d4ce2b8cdc617d34e22a9dcf999eef51d
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
QXcbClipboard failed to delete the various QMimeData instances
it owns.
For m_xClipboard, where the two QXcbClipboardMime instances are
never the same, fix the leak by using a scoped instead of a
naked pointer.
For m_clientClipboard, where the two QMimeData could be identical
objects, keep the naked pointers, but delete the objects manually
in the QXcbClipboard destructor, paying attention to the case
where they're the same object.
Change-Id: I5ce0e3e8fcec068aeb344ca806cdf2667378e946
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
As already done by the iOS, Mir, and Haiku platform plugins.
Change-Id: I449f396dbf234e27206625b178c7d20e3f5b956f
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
(Backport of 5.7/8586ccc).
The original patch was implemented to handle crashes after e78ca787ae.
But the former was pushed to 5.7, and the latter to 5.6. So we need to
backport it, otherwise the same crashes will still happen in 5.6
(e.g when transferring focus from a text edit to a (picker) menu).
Change-Id: I13037735dc316bceadb571e67f38a310c8a1bfae
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
On iPad, a shortcuts bar with extra controls are shown
on top of the keyboard with opertions like cut and copy.
This is unwanted when using the keyboard to show menus.
This patch will add extra private information to IM
platform data when using menus, so that we hide the
shorcuts menu when showing the custom input panel.
Task-number: QTBUG-49893
Change-Id: Iaa8e1ff18acebec8be69699b3fd9470c69ab34d7
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
If the mouse event is synthesized from a touchscreen, since we're
using XI2 we've already delivered the actual touch event by the time
an XI_Motion event occurs. It's bogus to treat the XI_Motion event
as a mouse press merely because XIMaskIsSet pretends that the mouse
button is pressed. If the QPA motion event says that the button
is pressed, then QGuiApplicationPrivate::processMouseEvent() will
synthesize an extra mouse button event for the press, and another
for the release.
Task-number: QTBUG-56156
Change-Id: I937edfd8cc9aab5b21370036c4b42dc0c0a74b50
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
QXcbCursor had a "cache" of cursor handles. Unfortunately, as QXcbCursor has its
lifetime tied to the screen, this cache grew unbounded whenever the cursor was
set: this could be witnessed worst when repeatedly setting the current cursor to
a different pixmap each time.
We fix this by keeping the cursor cache only for the "regular" shaped cursors
that are often shared between windows, working on the assumption that custom
cursors are generally specific only to a given window. This makes the lifetime
of the bitmap cursors much more clear: they are tied to that window, and when
the window is destroyed (or changes cursor), so too is the bitmap cursor
destroyed (if set).
Reported-by: Will Thompson <wjt@endlessm.com>
Change-Id: Ia558d858ff49e89cd5220344567203eb0267a133
Reviewed-by: Uli Schlachter <psychon@znc.in>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
We want the coordinates for a mouse event to be the
position at the time of event generation, not the
current position.
This is a followup to 39be577c which fixed this for
some cases. This commit replaces all usages of
[NSEvent mouseLocation] with code that gets the location
from the event.
Change-Id: I691a46a61ce65e2b33335453b5b22de01f76d767
Task-id: QTBUG-54399
Task-id: QTBUG-37926
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
To make NVidia EGLStreams work on the desktop, we need to use eglGetPlatformDisplayEXT
instead of eglGetDisplay. Therefore, let's try that first if we have the extension.
Change-Id: Id420fb46d5bc5345faa5cbb066584b0859d50417
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
When color fonts are loaded from data, the font returned will
be a DirectWrite engine even the hinting preference does not
require it. This would cause a crash as we unconditionally cast
the pointer to QWindowsFontEngine*.
Using GDI and the unique family name hack to load the font from
data works fine, but we need to make sure we reference count
the font resource in this case, so we have to implement the
setUniqueFamilyName() logic in the DirectWrite engine as well
for this specific case.
[ChangeLog][Windows] Fixed crash when loading color fonts from
data.
Task-number: QTBUG-55595
Change-Id: I05443e8a396105da68ac4872b48339130b86c7f6
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Implement QWindowsMsaaAccessible::put_accValue so automated UI tests
which utilize Accessibility API (at least WinLDTP
https://github.com/ldtp/cobra) can set values of QSliders,
QSpinBoxes, etc...
Task-number: QTBUG-55546
Change-Id: I0f3f21000fbf1468c35e322eff3f7224da746a0c
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Reviewed-by: Jan Arve Sæther <jan-arve.saether@theqtcompany.com>
The default should be false, meaning the application will prefer to
use a native menubar if the platform supports it. The application
author can set it to true if he wants to always use a Qt-rendered
menubar instead; or, he can call QMenuBar::setNativeMenuBar().
Qt and its plugins should not override the author's wishes.
Instead, if the platform plugin cannot create a native menubar
for whatever reason, createPlatformMenuBar() will return null,
and QMenuBar will fall back to using a Qt menubar instead.
The application can check the result via QMenuBar::isNativeMenuBar().
QMdiArea when maximized inside a QMainWindow with an empty title
does not replace the main window's title if we are using native menus.
This behavior turned out to be the same on Unity as it is on macOS,
so the autotest needed adjustment to expect that behavior whenever
the menubar is native, not only on certain platforms.
tst_QMenuBar::allowActiveAndDisabled() tests a standalone QMenuBar.
In f92f78094 it was disabled on macOS, but on Ubuntu it passes as
long as we force it to be a non-native menubar, so it should pass
that way on macOS too. Removed unused variable RESET to fix warning.
Task-number: QTBUG-54793
Change-Id: I716e40da709f96331cbbf25213bd7bc153e4dbe2
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
The stretch, once it is passed to the font engine, is assumed to
be the horizontal scale needed to match the requested stretch
for the given font. When loading from data in QRawFont, there
is no way to specify this stretch; the scale should always be 1.
The effect of this was that when DirectWrite was backing a font
loaded through QRawFont directly from data, then the glyph images
would be scaled to 0xHEIGHT before they were returned, thus
they would be empty.
This was a regression caused by
ec7fee968f.
Task-number: QTBUG-56091
Change-Id: I38e76e0e8f6809262474922946752b2ad0d6209b
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
drawRect is a general “repaint now” function, which
we should handle also for OpenGL content. Make that
clearer by moving the implementation details of drawing
the raster backing store using CoreGraphics to a
separate function.
Behavior change: Call invalidateWindowShadowIfNeeded
also for the OpenGL case.
Change-Id: I158ebef548e063f826db2dc708c14ab1d784b095
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Fixed double delete of QBsdFbScreen in destructor, first it was
deleted in destroyScreen, then as a smart pointer. Take ownership of
pointer before passing it to destroyScreen to avoid second delete.
Change-Id: I252fcd1f31a32b463ecefce5b7139c4b3c857d33
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
To avoid build system warnings about including _p headers.
There is no real reason to have this as a .h header anymore, now that
it is in the device integration private module.
Change-Id: I16526419356284e66861f95d1d0553abf0711218
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Move platform integration, context and offscreensurface to under 'api'.
This allows accessing these from out-of-tree eglfs backends as well.
For instance, the upcoming eglfs_emu backend for the Qt Simulator may need
access to QEglFSIntegration.
Clean up the project files and remove out-of-date comments (the private
module QtEglFSDeviceIntegration is not really header-less since 5.7).
Change-Id: If96dd5780a6bd33a1cf29164364df9bf921c4d01
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Just setting virtualDesktopLayout and virtualIndex are not
always enough. To create more complex shapes (e.g. a T-shaped
cluster) the top-left position has to be specified explicitly.
Enable this via an optional virtualPos property.
This also involves improving evdevtouch's mapping functionality.
Instead of fragile indices, rely on the screen name instead.
Change-Id: I138840779032ad9da674bfef7763adfdfc74ccd4
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
When resolving the filenames of fonts, we would first match against
the font face name, meaning that an italic font, for instance would
always be matched to the file of the regular font in the same face.
To fix this, we look up the full name in the file name cache first,
before the face name.
Also, since the font names in the registry are the English names,
but the names we get when enumerating the fonts on the system can
be localized on non-English locales, we need to translate the
full name of the font before we give up on matching it against the
registry. Since this can be a heavy operation, we add a cut-off
which skips resolving the English name when the style is one of
the most common "Italic" or "Bold" since we know these to be
English.
[ChangeLog][QtGui][Windows] Fix selecting non-regular fonts when
using the Freetype engine.
Task-number: QTBUG-47485
Change-Id: If897abb93dc93263902b1c62bc3f66c4d06721c2
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Qt4->Qt5 regression:
QWindowsMouseHandler::keyStateToMouseButtons() cannot be used instead
of the old Qt4 function toQtMouseButtons() because Alt key and mouse
Xbutton have the same code on the Windows.
Task-number: QTBUG-55885
Change-Id: Ibad35cfe83145d03fd05f397c0afba9c86817a0c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
5971b88e is not needed in new configure.
This merge also reverts "fix QMAKE_DEFAULT_*DIRS resolution with
apple SDK", 2c9d15d7, because it breaks iOS build with new
configure system.
Conflicts:
mkspecs/features/default_pre.prf
mkspecs/features/mac/toolchain.prf
mkspecs/features/toolchain.prf
src/dbus/qdbusconnection.cpp
src/plugins/sqldrivers/mysql/qsql_mysql.cpp
src/sql/drivers/mysql/qsql_mysql.cpp
src/widgets/widgets/qmenubar.cpp
src/widgets/widgets/qmenubar_p.h
tools/configure/configureapp.cpp
tools/configure/environment.cpp
tools/configure/environment.h
Change-Id: I995533dd334211ebd25912db05b639d6f908aaec
Occurrences which should simply be removed entirely (due to always being
true or always being false as a result of the current OS support matrix)
have been left untouched for now.
Change-Id: I86d5a084cb84bc28fefc5191d40924de1439b3de
Reviewed-by: Liang Qi <liang.qi@qt.io>
Change-Id: I682fabe8891e0325e6545b4499a59af4ad584c41
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
It should be possible to show a menu by calling showPopup, even if
visible is set to false. After all, it's only logical that visibility
is false before showing it. And whether or not the menu is
enabled should not matter as well.
Change-Id: I9a2b453c8c6e88c47812c652d99e4b4a9c7524a7
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
The synthesized properties were defined as (read only)
methods in the UIViewController API in iOS9, and we
extended them into readwrite properties in our own
sub class to enable some local bookkeeping in addition
to normal overriding.
But in iOS10, Apple has changed the methods into being
readonly properties instead. The difference then is
that automatic property synthesizing
will ignore our local readwrite declarations, and use
the declarations in the super class instead. And this
will lead to a runtime crash on iOS10 since no
setter methods are generated.
This patch will instead explicit synthesize the affected
properties to ensure that both getters and setters will be
generated.
Change-Id: Iac330e991b8a0fe335e383e1f7d9ff30c0ce1559
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
In the iOS 10 SDK, method signatures has been annotated with
NS_ASSUME_NONNULL macros and 'nullable' keywords. This means
that certain methods should not be called with argumens
that can be null, or in this case, set to 0 explicitly. The
result will be compiler warnings.
This patch will rewrite the explicit call we do to touchesCancelled
so that we send an empty set instead of 0.
Change-Id: I50aa80b91312397d17e0e380815adff87cee852b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
QSurfaceFormat is recreated from scratch, and by not reading back the
swap interval the QCocoaGLContext seemed to be vsynced even if it
actually was not.
Change-Id: I72ddaae9a4c695fe4c74d7b4b70ca9db84bcc084
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
The previous detection of device pixel ratio changes in paintDevice()
is not needed, as QBackingStore::beginPaint() already does this check
and calls resize().
Change-Id: I9ee8410fa3a5404c5ec19d2cba4543a9e3359fe9
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Only windows that are part of the application can be grabbed. This
excludes the system statusbar and other system overlays, as well
as windows of other applications. This is a limitation due to the
security model of iOS.
There exists APIs to grab a snapshot of the complete screen, but
these APIs return a view that can be used as a placeholder e.g.
during view transformations, and doesn't match our API that require
reading of pixels.
Task-number: QTBUG-49944
Change-Id: I8fd5b4c2777be1486f0ff22762d5e9b64c927e70
Reviewed-by: Jake Petroules <jake.petroules@qt.io>