Commit Graph

671 Commits (5bd41b850f65b8054d94b58b787704bb45ede16c)

Author SHA1 Message Date
Frederik Gladhorn 12ba0d2cb3 Merge "Merge remote-tracking branch 'origin/release' into stable" into refs/staging/stable 2014-05-13 14:16:46 +02:00
Tor Arne Vestbø 6e5410e5b5 qpa: merge qrawfont_qpa.cpp
Change-Id: I8552199c8b3e365adefbc2bb096c8153e222cec8
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
2014-05-13 12:18:26 +02:00
Frederik Gladhorn 73bc91c9df Merge remote-tracking branch 'origin/release' into stable
Change-Id: I9300572e2b74f0564b2589cbd0fbdf24850f68df
2014-05-12 14:01:46 +02:00
Tor Arne Vestbø 5a060a5ad3 CoreText: Prevent creation of CGContext for glyphs with empty bounding box
If the alphaMapBoundingBox of a glyph is empty we don't want to create
a CGBitmapContext on it, as that will fail, and any further operations
on the invalid context will result in possibly fatal errors from CG.

This issue can be observed when drawing some glyphs of the Apple Color
Emoji font.

Change-Id: Ia45ba858b5fb6afa91e6d686a9c55e350d4095f3
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
2014-05-12 13:44:59 +02:00
Tor Arne Vestbø a669564597 Allow QFont lookups using localized family names by adding family alias
After fbaa6d3ca6 QFont family names are non-localized on iOS/OS X,
which means applications that try to initialize QFont with a localized
family name (explicitly, or from user input), will fail, and get the
fallback font instead.

We now add font family aliases for the localized family names, so that
font matching will work even for localized family names. Note that
QFontDatabase::families() still returns a non-localized list.

Task-number: QTBUG-38628
Change-Id: Id351befa69916ce162c939733bbfcc774f075120
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-05-12 13:44:51 +02:00
Takumi Asaki 4532669285 EvdevTouch: Added "invertx" and "inverty" parameters
In some cases the event axises reported by evdev are inverted.
This commit adds plugin parameters invertx and inverty to
invert X- and Y-axis.

Change-Id: Idaa63affd8321aa47974788c32d978fc21eb3dec
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-05-12 06:34:32 +02:00
Laszlo Agocs b6de758ec6 Avoid using repeat on widget textures in eglfs
Otherwise widgets will not be shown on some embedded systems.

Task-number: QTBUG-38866
Change-Id: Id16408dc7eb657c052bbe3bdb86e35ab2f062632
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-05-09 17:25:33 +02:00
Laszlo Agocs 0b5c0ad2ef Support adopting an existing EGLContext in eglfs and xcb
Add also a manual test application. For GLX there is an autotest since
that is likely to be run on one of the CIs. For EGL and especially
eglfs this is likely not the case so a manual test is better.

Task-number: QTBUG-37552
Change-Id: Ib09db5d909befb68d16f69abd401a56abe55f28a
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-05-09 13:24:55 +02:00
Laszlo Agocs 3b6d8ba49b Add support for querying "display" from eglfs
Return the native display which, with the x11 hooks, is the X11 Display*.
This gives compatibility with xcb and allows QtWebEngine to run on eglfs
in regular desktop builds without ozone. (this requires eglfs built with the
x11 hooks of course)

Change-Id: I8d25e2835c41a7e78f063a57a7d6c6b5e53a19b4
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-05-09 13:24:45 +02:00
Frederik Gladhorn 1326cd15f7 Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
	mkspecs/qnx-x86-qcc/qplatformdefs.h
	src/corelib/global/qglobal.h
	src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
	src/opengl/qgl.cpp
	src/opengl/qglpixelbuffer.cpp
	src/opengl/qglshaderprogram.cpp
	tests/auto/opengl/qglthreads/tst_qglthreads.cpp

Change-Id: Iaba137884d3526a139000ca26fee02bb27b5cdb5
2014-05-06 16:50:03 +02:00
J-P Nurmi eedd300b0e QKdeTheme: use system-wide kdeglobals as a fallback
Determine KDE prefixes in the following priority order:
- KDEHOME and KDEDIRS environment variables
- ~/.kde(<version>)
- read prefixes from /etc/kde<version>rc
- fallback to /etc/kde<version>

Task-number: QTBUG-36184
Change-Id: I9010ea485f1954b21bda73b02993dbddef67eb1d
Reviewed-by: Dominik Holland <dominik.holland@pelagicore.com>
Reviewed-by: David Faure <david.faure@kdab.com>
2014-05-03 11:35:10 +02:00
Frederik Gladhorn e6286ca289 Merge remote-tracking branch 'origin/release' into stable
Manually fixed up: isES -> isOpenGLES
src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp

Change-Id: I57d2ef26c3d4a7b40ace09f4e8560b7686650ea5
2014-05-03 00:56:41 +02:00
Frederik Gladhorn ccc6efb6e9 Merge remote-tracking branch 'origin/release' into stable
This merge adds the opengl rename.

Change-Id: I84ea0b6abee9780ebb2cf3f64ab9e3fdf2acab3e
2014-05-01 13:08:42 +02:00
Laszlo Agocs 485b7424df Avoid reentering processMouseEvents on embedded
Task-number: QTBUG-38597
Change-Id: I168c9401863bace711d0d8409bf3da30a34185bd
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-04-28 19:49:26 +02:00
Laszlo Agocs f9d323279a Rename new QOpenGLContext APIs
isES() becomes isOpenGLES(). The library type enums are changed
DesktopGL -> LibGL and GLES2 -> LibGLES. This removes the now
unnecessary version number, the confusing "desktop" term and provides
better readability.

The old function/values are kept until the related qtdeclarative
changes are integrated.

Task-number: QTBUG-38564
Change-Id: Ibb0a1209985f1ce4bb9451f9b7b093c2b68a6505
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
2014-04-25 10:07:45 +02:00
Laszlo Agocs f9d7f85079 Fix up EGL config selection comments
After cross-checking with the spec and some embedded devices providing
both 888 and 565 configs, it turns out the behavior and the old legacy
comments are correct. Rephrase and extend the comments a bit to make
it maintainable.

Change-Id: If6043a39ca0129cfd075c997f362891f0c28dc2c
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-04-24 10:37:19 +02:00
Laszlo Agocs af1e32426c Add public and QPA APIs for adapting existing OpenGL contexts
For now only xcb on GLX is supported. Other platforms will follow later.

Add also some missing documentation for the platform OpenGL context factory
functions.

[ChangeLog] QOpenGLContext is now able to adopt existing native contexts.

Task-number: QTBUG-37552
Change-Id: I5dd959f102df178f646b2df5989203b5dc6de376
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-04-24 09:10:29 +02:00
Frederik Gladhorn 98d3e40fb7 Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
	mkspecs/qnx-armv7le-qcc/qplatformdefs.h
	src/printsupport/kernel/qcups.cpp
	src/widgets/styles/qstyle.h
	tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp

Change-Id: Ia41e13051169a6d4a8a1267548e7d47b859bb267
2014-04-11 14:36:55 +02:00
Martin Koller f0dbc6b37e Fix: Initialize all needed member vars
Change-Id: I74b71d93e25e4b3b0c1a5766f2fbc4f71aebecbb
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
2014-04-04 15:47:55 +02:00
Tomasz Olszak 790bc92bc0 Added handling of QT_LINUX_ACCESSIBILITY_ALWAYS_ON variable.
By setting this variable to non empty value we can, bypass
checking ScreenReaderEnabled proprty of org.a11y.Status
dbus interface. Not all accessibility readers set this.
The variable is also useful for debugging.

Change-Id: I6c5a1a51065948248e068dfff4755d6818ed9fb1
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
2014-04-04 08:33:16 +02:00
Iikka Eklund 0ab63b035a Merge remote-tracking branch 'origin/stable' into dev
Change-Id: I2a6eb9dd7724931bc89f28bcc156e77c4e26d069
2014-04-01 11:44:27 +03:00
Mitch Curtis bd822bedfe Merge "Merge remote-tracking branch 'origin/stable' into dev" into refs/staging/dev 2014-03-31 17:45:37 +02:00
Fabian Bumberger 74cade1ee4 Fix application font removal when using FontConfig
This patch fixes an issue when a font that was added with
QFontDatabase::addApplicationFont can not be removed any more.
The reason for that is that QFontconfigDatabase::addApplicationFont
adds the font to the FontConfig application set from where it
cannot be removed any more and is picked up every time the font database
is repopulated (e.g. after a call to QFontDatabase::removeApplicationFont).

This also fixes the QFontDatabase autotest which unfortunately does
not fail on linux, because it tries to add "FreeMono" (which in most
cases is already there as a system font). So this patch removes FreeMono
and adds LED_REAL as test font.

Change-Id: I70fc823075923aa426da1eb3e052affcc416e399
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2014-03-27 14:41:53 +01:00
Marc Mutz c18db50658 QFbScreen: replace a use of an inefficent QList with QVector
A QPair<QRect,int> is larger than a void*, so better use
a vector to hold them.

Change-Id: I8f0e65836008803b7f619a22ab3a0db1bd493471
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
2014-03-26 00:21:15 +01:00
Marc Mutz 9f830c3975 QFbScreen: fix foreach loops to declare QRect loop variables as const-&
Change-Id: Ieb388b8e1db848bac50ce17488fef04958450689
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
2014-03-26 00:21:15 +01:00
Eskil Abrahamsen Blomfeldt 0b87f4f6c9 Android: Fix font merging
Our fallback fonts would contain a minimal list of hardcoded fallback
fonts, which is neither sufficient for displaying all text, nor
portable to different vendors which can supply different font sets.

[ChangeLog][Android] Fixed font merging problem which caused e.g.
missing glyphs for Arabic numerals.

Task-number: QTBUG-37738
Change-Id: Ic971343a1cd5610c79a81f6f6152c637937b5626
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2014-03-25 14:19:27 +01:00
Laszlo Agocs f254474d71 egl: Remove commented code
Fix also the statement about buffer size handling.

Change-Id: I94e93fa4df7fee9b789ecca33d8722fbfc86ccc5
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-03-25 12:51:01 +01:00
Laszlo Agocs e7ad615cca Remove unused ifdef
The QEGL_DEBUG defines have been removed some time ago from
eglfs and eglconvenience, except for this one. It is also
inconvenient due to the OpenGL dependency of it. Quick apps
can anyway get the same information with QSG_INFO=1.

Change-Id: Ie25c5286234a10699652d618d6f4174c6d3238e2
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-03-25 12:50:58 +01:00
Laszlo Agocs dc685cf633 eglfs: Print the chosen config in debug mode
q_printEglConfig has been left unused. Start using it again,
in case QT_QPA_EGLFS_DEBUG is set. This will, similarly to QSG_INFO,
help debugging, especially on embedded devices.

Change-Id: I1448632ed055dd71e98259f042d3cac64620a4ce
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-03-25 12:50:47 +01:00
Andrew Gatt 1d4a1be1af Add: absolute touch screen handling in evdevmouse
Some touch screen drivers present themselves as mice with absolute
coordinates. Setting QT_QPA_EVDEV_MOUSE_PARAMETERS=abs will force
qevdevmousehandler to use absolute coordinates, mapped to the screen
from the hardware maximums. These maximum values are read from the
driver using ioctls.
This feature can be safely used with mice, as the features checks will
fail and qevdevmouse will revert back to using relative coordinates.
This way touch screens and mice can work together.

Change-Id: Ic27bda02aa2199f008bac26db75c1f896696f9f5
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-03-24 20:25:45 +01:00
Frederik Gladhorn 3b5c0bc078 Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
	src/gui/image/qjpeghandler.cpp

Change-Id: I9db3acea7d5c82f5da679c8eaeb29431136665f0
2014-03-24 16:10:15 +01:00
Allan Sandfeld Jensen c2c136306d Apply fontconfig settings to custom fonts
Currently QtWebKits custom fonts does not follow the system settings
on Linux. This is because they are only handled by the basic
fontdatabase.

This patch adds handling of custom fonts to QFontconfigDatabase.

Change-Id: I676fc97840766b58cd937bb8e2c9f166f30c8a6e
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
2014-03-22 12:56:06 +01:00
Allan Sandfeld Jensen 3cf7b31c4a Cleanup and refactor QFontconfigDatabase::fontEngine
Refactors the logic to parse the font configuration from fontconfig, so
that it maybe reused for custom fonts in a later patch.

Also fixes a minor mistake that meant we defaulted to medium hinting,
where we tried to default full hinting.

Change-Id: I1e135b8b1e3faeb213aa370ea59ebde3a671273d
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
2014-03-21 17:52:37 +01:00
Tor Arne Vestbø 2bc7a40048 Teach font database to populate families lazily
Instead of requiring that QPlatformFontDatabase::populateFontDatabase()
populates every single font in the system by calling registerFont(), we
now allow the platform database to call registerFontFamily() instead, and
then keep track of which families we've yet to fully populate in the font
database.

Once a property of a family is requested (such as its writing system,
style, etc), the family is lazily populated by calling back to the
platform database through QPlatformFontDatabase::populateFamily(),
which in turn does the final call to registerFont() as before.

This cuts application startup on OS X and iOS (of which the font population
used to be a major limiting factor) from roughly one second to about 350ms.

Task-number: QTBUG-37165
Change-Id: Ic2fc3447beb818ffe23635a5b7816ed7e70c93a7
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-03-20 19:01:53 +01:00
Kurt Pattyn 3ff15f1e98 QOpenGLContext: Use color depth information from QSurfaceFormat
When a new QOpenGLContext is requested, the color depth
information is now also taken into account on OS X and WGL.

Task-number: QTBUG-37411
Change-Id: I69d04989a20de3ace041b009fbbdc03fa02cfdf8
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
2014-03-19 20:12:08 +01:00
Konstantin Ritt c6b555dac3 Fix bundled HarfBuzz-NG build outside QtGui
On Mac, hb_coretext requires both CTFont and CGFont.
Due to not supporting the 0 tag by CoreText, hb_blob_get_data()
always fails causing the hb_coretext_shaper initialization to fail, too.
Since HarfBuzz-NG is not a part of QtGui module anymore,
there are two possibilities to workaround this: either engineer the
font data by querying tables one-by-one and generating the font
directory table, or pass CTFont and CGFont refs directly to hb_coretext
via the hb_face's user_data. This patch implements the latter.

Change-Id: I7d2e2df00818ea811642cb6a6c3b9c9abd5d7b94
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-19 04:17:01 +01:00
Laszlo Agocs 2861a4d109 Fix no-opengl build with egl
Disable eglfs and similar plugins when opengl is not enabled.
(but egl is present)

GL-dependent parts of eglconvenience need to be skipped too.

Task-number: QTBUG-37457
Change-Id: I44d49495241551bc7b1f565aa0b5ace9f310628e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-03-17 13:31:14 +01:00
Morten Johan Sørvig 8212e0cfad Cocoa: Set "Stereo" OpenGL format option.
Task-number: QTBUG-35548

Change-Id: I60b633ae44b8b4b353a7328eb0922b9301e1460c
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
2014-03-17 09:15:25 +01:00
Zeno Albisser 55eec6829e Expose the EGLNativeDisplay through nativeResourceForIntegration.
This is necessary to allow QtWebEngine to create a separate display
connection through eglGetDisplay to the same display as Qt is
working on.

Change-Id: I3635888bd5e41239ef18b197d24683dcea68f6ee
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-03-13 18:00:04 +01:00
Tor Arne Vestbø fbaa6d3ca6 Don't populate font families using localized family names on OS X/iOS
The font database and QFont should have normalized font family names,
so using CTFontDescriptorCopyLocalizedAttribute is not a good idea.

If the feature of reporting the localized name of a font family or
style is needed in for example the font selection dropdown or dialog,
it should be exposed as an explicit property of the font.

Change-Id: Iaa15ad861043f4c78a38080608b6fe4d99efee18
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-03-13 13:28:16 +01:00
Tor Arne Vestbø b3ac505e21 Fix a few build warnings on iOS due to unused functions
Change-Id: If345a4137986a7d5032a2b48d92c08bc58e02144
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-03-13 13:28:03 +01:00
Tor Arne Vestbø c466f2ed46 Remove need to populate font database on OS X to get fallback families
Populating the whole database takes a while, and it's very easy to trigger
the fallback family code path through eg. matching or getting the default
font family from QFont.

Instead of relying on populate to resolve family name to a PostScript name
(which was required when using CTFontCreateWithName), we instead use the
CTFontDescriptorCreateWithAttributes() function to create a descriptor
based on the family name, and then use CTFontCreateWithFontDescriptor().

The other way around, we use CTFontDescriptorCreateWithNameAndSize, and
then pull out the family name from the descriptor. The need for creating
a CTFont for private fonts (eg '.Apple Symbols Fallback') does not seem
necessary anymore, as tested on 10.7-10.9.

The disadvantage of creating font descriptors instead of re-using the
data computed by population is that we're doing the same work twice,
but the end result is making the font database more lazy, and the 80%
use-case is assumed to be that you're only interested in the fallback
of a small number of fonts, which means you don't want to populate all
of the fonts in the system (taking about 1100ms on the test system).
Looking up the fallback of a single family or style now takes about
15-25ms.

Task-number: QTBUG-37165
Change-Id: I6b904dbe796a3f236919d778d0168fdef9a20e69
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
2014-03-11 03:39:39 +01:00
Laszlo Agocs 4b3d11efc0 Add EGL_KHR_create_context support
[ChangeLog] GLES3 and desktop OpenGL are now fully supported with EGL

Task-number: QTBUG-37332
Change-Id: Ic695db573d90b3a204941d105a370f5c63182b63
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-03-10 21:04:49 +01:00
Laszlo Agocs 08b9e51c47 egl: Choose GLES3 capable configs when needed
Passing OpenGLES and majorVersion 3 in a QSurfaceFormat selects GLES3 in case
it is supported. This works fine already now, but is not safe since the config
choosing logic does not request a GLES3-capable configuration and so it may
end up with a non-GLES3 compatible one.

This is now corrected by passing the EGL_OPENGL_ES3_BIT_KHR bit when
EGL_KHR_create_context is available.

Change-Id: Iacee1e1819b944c0f7c1062666106abddf59272b
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-03-10 21:04:37 +01:00
Laszlo Agocs a4f421d431 egl: Update the OpenGL version in the context's QSurfaceFormat
The GLX and WGL support code does this already. Do it for EGL too since
requesting OpenGLES with majorVersion 3 results in GLES3 (where supported)
and in this case the expected majorVersion in QOpenGLContext::format() is 3.

Change-Id: I73d61d7569e6ebaa91aef57fb1b0051a77a73355
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-03-10 21:04:28 +01:00
Laszlo Agocs 5aaec48000 Remove unused parameter from QEGLPlatformContext constructor
The API is chosen via QSurfaceFormat, the constructor argument is ignored.
Remove this historical artifact.

Change-Id: I4a5c1e12cb297de22f239ad0a6747c1c36168eed
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-03-10 21:04:16 +01:00
Richard Moe Gustavsen 3e89183c67 qmacmime: bugfix unicode::canConvert
The UnicodeText converter is a bit special since it can convert
to both utf8 and utf16 for text/plain. But since flavorFor("text/plain")
can only return one UTI, it returns utf16. And this means that
canConvert will return false if given utf8 as argument.
On iOS this is often the only format available on the pasteboard, which
means that pasting text from another app app will fail.

This patch will ensure that it returns true for both utf8 and
utf16.

Change-Id: I31697f1815c19113393a8ef48f2ead4d7f1078ec
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2014-03-06 20:48:59 +01:00
Richard Moe Gustavsen 15c9fb4013 Cocoa/Platformsupport: move qmacmime from cocoa to platformsupport
Share qmacmime with iOS

Change-Id: Ied1b6ed74f2d63ef34d818554827a6165651b6a1
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2014-03-06 20:48:59 +01:00
Laszlo Agocs b0d7e7b282 Avoid polluting debug output in eglfs and linuxfb
Size hints will not be implemented. Grabs maybe some day but the
warnings should be silenced for now.

Change-Id: I1f4861454d45e668c4d758c7f82940cd1136d0c8
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-03-06 17:22:55 +01:00
Tor Arne Vestbø 3fec94fd07 Prevent repeated and unnecessary font population QCoreTextFontDatabase
The platform font database is populated from QFontDatabase, through the
static initializeDb() function, whenever the font database determines
that the platform database has not been initialized (by checking if the
font database is empty).

There are other clients of QPlatformFontDatabase though, such as QFont,
which uses the platform font database to check for the default family.
The CoreText implementation of determining the default family relies
on data that is computed during font population, and hence does an
internal (self-triggered) populate.

To prevent repeated populates as a result of calling QFont::defaultFamily()
we guard the populate by a similar isEmpty() check as QFontDatabase does,
but to ensure that this check works in the case of an invalidated font
database, we need to propagate the font database invalidation down to
the platform font database.

Change-Id: I8d06c6f6fc5da6353c087335859eaca008c2f6a6
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-03-05 13:55:35 +01:00
Konstantin Ritt 9f1089531d Make QFontEngine::type() non-virtual
Change-Id: I24ece90d6d8f96dad0c41a474a491b4ea96d97c3
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-05 13:46:15 +01:00
Konstantin Ritt e69284db08 Get rid of QFontEngine::name()
It was only used in QFontCache debug output,
and some engines weren't even report a name.

Change-Id: I6cec4b75f105f5a4e1405f50188bebb3a3f04e33
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-05 13:46:09 +01:00
Laszlo Agocs 4b2f35d04c Dynamic GL: remove exporting symbols
Remove the opengl proxy for now. Later it will either be moved into
a separate library or replaced by a QOpenGLFunctions-based approach.

This means that the -opengl dynamic configuration is not usable
for the time being. The rest of the enablers remain in place.

The convenience function QOpenGLFunctions::isES() is now moved to
QOpenGLContext and is changed to check the renderable type. This is
extremely useful since besides supporting dynamic GL it solves also
the problem of GL_ARB_ES2_compatibility (i.e. it triggers the real ES
path when creating an ES-compatible context with a desktop OpenGL
implementation).

Task-number: QTBUG-36483
Task-number: QTBUG-37172
Change-Id: I045be3fc16e9043e1528cf48e6bf0903da4fa7ca
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-03-04 15:59:05 +01:00
Sergio Ahumada 7e872de76e Fix some typos
Change-Id: I7dbe938bff5ac3ab50a0197f94bdb2f6c22fbd16
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
2014-03-03 18:24:29 +01:00
Konstantin Ritt 2b15c9c256 Introduce a generic QFontEngine::canRender() implementation
...which uses the recently introduced glyphIndex() method;
get rid of re-implementations that did almost the same.

Change-Id: I6d32d2cee6a31f57de6aee05ed8d120d4a1f4e9c
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-03 11:11:27 +01:00
Konstantin Ritt af74201edb Introduce QFontEngine::glyphIndex(uint)
...an optimized drop-in replacement for the code like this:
`stringToCMap(&uc, 1, &g, &numGlyphs, QFontEngine::GlyphIndicesOnly)`
(aka "get the glyph index for exactly one Unicode character").

Change-Id: I22babf49f7cf28892d27533a5ac51ad449779f75
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-03 11:11:24 +01:00
Konstantin Ritt 78d115f8f2 Unify QFontEngine*::stringToCMap() behavior
Ensure the params are valid and make QCoreTextFontEngine::stringToCMap()
handle the unsufficient buffer case exactly like the other engines does.

Change-Id: I078af37da917cf2bac709b12aa827ed4128e5f30
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-03 11:11:20 +01:00
Konstantin Ritt 3567d62ed3 Get rid of unused variable
Change-Id: Ie90914c2110d32e573108a355a44dd459097a755
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-03 11:11:15 +01:00
Konstantin Ritt 4c7082162d Unify QFontEngine::getSfntTableData() behavior on all platforms
Being a most significant method in the font API,
getSfntTableData() must behave in exactly the same way on all platforms.
Briefly, it must return true if the table exists in the font,
despite the other params, and always stores the table data length
in 'length' param, thus reporting the amount of bytes actually
needed to store the table data in a buffer.

Change-Id: I7a15465020c1ea818ea46a05ea3b9b7e1cd60d14
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-02 23:26:49 +01:00
Jonathan Liu 66e5f8e9dc eglfs: Improve cursors and hotspots
Improvements
 * Cursor atlas has been recreated using 32x32 cursors which avoids
   artifacts introduced from downscaling of the busy cursor
 * A white outline has been added to the cursors to improve visibility
   on black backgrounds
 * Hot spot positions have been tweaked; in particular,
   Qt::PointingHandCursor now has a correct hot spot at the tip of the
   index finger instead of the center

The assert which checks that the number of hot spots equals the number
of cursors had an off-by-one error as the first cursor is
Qt::ArrowCursor which has an enum value of 0. To determine the number
of cursors, 1 needs to be added to Qt::LastCursor.

Change-Id: I266b6d4cc47d42219854aa5b7e2d8344eb3a920a
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-02-26 12:58:00 +01:00
Eskil Abrahamsen Blomfeldt e1fd82981c Revert "Fix application font removal when using FontConfig"
This reverts commit a4ff400e25.
The patch caused a regression for bold fonts which is currently
blocking the alpha of Qt 5.3, so lets revert it and try
resubmitting a fixed version later to avoid delaying any release.

Task-number: QTBUG-36929
Change-Id: I8d474b09b2270eb2f861853e60605429be08e2d9
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2014-02-25 21:51:07 +01:00
Thiago Macieira 3a3a7f8842 Normalize signal & slot signatures in connection
Profiling showed that Qt Creator spent 2% of its load time normalizing
signals and slots. By pre-normalizing everything, we ensure that there
is no runtime cost. Profiling after this commit and the others in this
series shows that the cost dropped down to zero.

Change-Id: Ifc5a2c2552e245fb9a5f31514e9dd683c5c55327
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2014-02-22 04:38:37 +01:00
Laszlo Agocs 1e413e01e0 eglfs: Fix swapped red and blue with QOpenGLWidget
Change-Id: I0793d0b53c0e7df65fecfe43ef9daaf07413ea77
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-02-21 15:53:14 +01:00
Tor Arne Vestbø d0784ae43b Prevent top/left clipping of anti-aliased glyphs in CoreText font engine
Padding the bounding rect was not enough, as we failed to shift the glyph
accordingly so that it would end up in the center of the bounding rect.

We also didn't take subpixel-positioning into account, which may shift the
position of the glyph too far to the right to be within the image size that
we reserve.

There are still cases where the glyphs seem clipped compared to the same
text rendered with CoreText, but that's because we end up shaping the
text slightly differently, resulting in different subpixel positions
than what CoreText chooses.

Change-Id: Icb88c829f86457b16bdecbc4c24b3f1c23448261
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-02-19 19:36:34 +01:00
Tor Arne Vestbø e380a48af7 Unify alpha map padding in CoreText font engine
Instead of padding the image size manually, we rely on alphaMapBoundingBox
to give use the right glyph metrics.

For clarity, a few function arguments were renamed in the affected code.

Change-Id: I84c31e613a1048ea839a390af70342e5388ed0cb
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-02-19 19:36:29 +01:00
Tor Arne Vestbø 4de3c5db23 Unify glyph format between QFontEngine and QFontEngineGlyphCache
Instead of the glyph cache having its own cache type that always mapped
one to one to a font engine glyph format, causing confusion and needless
conversions, the glyph caches now use QFontEngine's glyph format enum.

This also removes the iffy use of an int for the glyphFormat in the font
engines.

Change-Id: I529bad5c179e004f63e152f7dcc311d298c3db98
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-02-19 19:36:25 +01:00
Jørgen Lind 937a4f5443 QOpenGLTextureBlitter: Remove Origin location for the Target rect
The Origin for Target rect was deemed a confusing concept. The current
implementation would translate the target rect to the coordinate system
specified. However, the order and "direction" of the vertices would
always be the same. So drawing a texture in for one target rect defined in
one coordinate system would paint the texture the same way as it would
when a texture was drawn for a target rect drawn in the "opposite"
coordinate system. The point with this was that if you wanted to "flip"
the texture you would specify that with the source coordinate system.

However, this approach breaks on different levels, such as QRect has functions
which expects a top left coordinate system (ie. top() and bottom()).

In the end Qt uses a top left coordinate system, hence QWindow specifies
a top left coordinate system, and hence the api becomes easier if it is
not possible to define the coordinate system of the target viewport.

Change-Id: I7dd59b3718380876e87a4bff88381d7a1c7d58c1
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-02-16 11:06:19 +01:00
Shawn Rutledge 760a771fce Consolidate StandardButton, ButtonRole and related static functions
Moving them into QPlatformDialogHelper for the convenience of both
widgets and QtQuick.Dialogs.  The main reason is to ensure that
QtQuick.Dialogs does not need to depend on the widgets module, in
order to re-implement the button box concept in a generic dialog.

Change-Id: If400d215338d7cb6dade39d9de60e50b5e7515ef
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
2014-02-15 10:43:20 +01:00
Laszlo Agocs 97c187da3c Dynamic GL switch on Windows
The patch introduces a new build configuration on Windows which
can be requested by passing -opengl dynamic to configure.

Platforms other than Windows (including WinRT) are not affected.
The existing Angle and desktop configurations are not affected.
These continue to function as before and Angle remains the default.

In the future, when all modules have added support for the dynamic
path, as described below, the default configuration could be changed
to be the dynamic one. This would allow providing a single set of
binaries in the official builds instead of the current two.

When requesting dynamic GL, Angle is built but QT_OPENGL_ES[_2] are
never defined. Instead, the code path that has traditionally been
desktop GL only becomes the dynamic path that has to do runtime
checks. Qt modules and applications are not linked to opengl32.dll or
libegl/glesv2.dll in this case. Instead, QtGui exports all necessary
egl/egl/gl functions which will, under the hood, forward all requests
to a dynamically loaded EGL/WGL/GL implementation.

Porting guide (better said, changes needed to prepare your code to
work with dynamic GL builds when the fallback to Angle is utilized):

1. In !QT_OPENGL_ES[_2] code branches use QOpenGLFunctions::isES() to
differentiate between desktop and ES where needed. Keep in mind that
it is the desktop GL header (plus qopenglext.h) that is included,
not the GLES one.

QtGui's proxy will handle some differences, for example calling
glClearDepth will route to glClearDepthf when needed. The built-in
eglGetProcAddress is able to retrieve pointers for standard GLES2
functions too so code resolving OpenGL 2 functions will function
in any case.

2. QT_CONFIG will contain "opengl" and "dynamicgl" in dynamic builds,
but never "angle" or "opengles2".

3. The preprocessor define QT_OPENGL_DYNAMIC is also available in
dynamic builds. The usage of this is strongly discouraged and should
not be needed anywhere except for QtGui and the platform plugin.

4. Code in need of the library handle can use
QOpenGLFunctions::platformGLHandle().

The decision on which library to load is currently based on a simple
test that creates a dummy window/context and tries to resolve an
OpenGL 2 function. If this fails, it goes for Angle. This seems to work
well on Win7 PCs for example that do not have proper graphics drivers
providing OpenGL installed but are D3D9 capable using the default drivers.

Setting QT_OPENGL to desktop or angle skips the test and forces
usage of the given GL. There are also two new application attributes
that could be used for the same purpose.

If Angle is requested but the libraries are not present, desktop is
tried. If desktop is requested, or if angle is requested but nothing
works, the EGL/WGL functions will still be callable but will return 0.
This conveniently means that eglInitialize() and such will report a failure.

Debug messages can be enabled by setting QT_OPENGLPROXY_DEBUG. This will
tell which implementation is chosen.

The textures example application is ported to OpenGL 2, the GL 1
code path is removed.

[ChangeLog][QtGui] Qt builds on Windows can now be configured for
dynamic loading of the OpenGL implementation. This can be requested
by passing -opengl dynamic to configure. In this mode no modules will
link to opengl32.dll or Angle's libegl/libglesv2. Instead, QtGui will
dynamically choose between desktop and Angle during the first GL/EGL/WGL
call. This allows deploying applications with a single set of Qt libraries
with the ability of transparently falling back to Angle in case the
opengl32.dll is not suitable, due to missing graphics drivers for example.

Task-number: QTBUG-36483
Change-Id: I716fdebbf60b355b7d9ef57d1e069eef366b4ab9
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-02-14 10:51:44 +01:00
Laszlo Agocs ff11af4fbc QOpenGLWidget and new-style compositing on eglfs
Integrate with QOpenGLTextureBlitter, QOpenGLWidget and friends.

Change-Id: Ic2867b713a21a3d2820d546174fc9164b3dd220c
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
2014-02-13 20:54:01 +01:00
Frederik Gladhorn a9c88c1f39 Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
	src/gui/image/qimage.cpp
	src/gui/text/qtextengine.cpp
	src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp
	src/printsupport/kernel/qprintengine_win.cpp

Change-Id: I09ce991a57f39bc7b1ad6978d0e0d858df0cd444
2014-02-12 16:28:07 +01:00
Frederik Gladhorn 2a68cffa84 Accessibility Linux: Report Active state
The fixme comment is invalid since QAccessibleWidget actually checks for
isWindow and sets the active state.
This is messed up because in Qt 4 there was a work-around to set active
for windows in a different code path.

[ChangeLog][QtGui] Accessibility on Linux now reports the active state
correctly.

Change-Id: I9e2cf436b3ffa7ef28286ee49d6e582f179930c6
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
2014-02-11 16:03:02 +01:00
Frederik Gladhorn df62c31807 Merge "Merge remote-tracking branch 'origin/stable' into dev" into refs/staging/dev 2014-02-11 15:12:00 +01:00
Raphael Kubo da Costa a093204f07 EGL convenience: Guard Linux-specific code with Q_OS_LINUX.
Instead of "blacklisting" Unix platforms that don't have Linux headers,
do the opposite and check for Q_OS_LINUX in the framebuffer code that
has Linux-specific code.

This should help fix the build on other Unices, such as the BSDs.

Change-Id: Icb6edf34bb20c9a98843b6dc0e2a87ee71fcd046
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-02-10 10:47:57 +01:00
Kevin Kofler c716cb2600 glxconvenience: Add a QT_XCB_FORCE_SOFTWARE_OPENGL environment variable.
The QT_XCB_FORCE_SOFTWARE_OPENGL environment variable is equivalent to
LIBGL_ALWAYS_SOFTWARE for Qt 5 applications only. This is most useful
with drivers that only support OpenGL 1. We need OpenGL 2, but the user
probably doesn't want LIBGL_ALWAYS_SOFTWARE in OpenGL 1 apps.

Together with
http://pkgs.fedoraproject.org/cgit/qt5-qtbase.git/tree/10-qt5-check-opengl2.sh
which goes into /etc/X11/xinit/xinitrc.d, it makes QML 2 just work on
old hardware that supports only OpenGL 1.x in hardware. The scriptlet
checks the glxinfo output for the OpenGL version and sets
QT_XCB_FORCE_SOFTWARE_OPENGL if the major version is < 2. (The scriptlet
requires xorg-x11-xinit and glx-utils.)

Tested on a Radeon 9200 SE (RV280) that supports only OpenGL 1.3 in
hardware.

Change-Id: Ief80d283820d6336052b8f390a0030ba9b687492
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-02-07 15:55:24 +01:00
Frederik Gladhorn a1fe728fa5 Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
	src/gui/kernel/qguiapplication.cpp
	src/plugins/platforms/android/androidjnimain.cpp
	src/plugins/platforms/android/qandroidplatformintegration.cpp
	src/plugins/platforms/android/qandroidplatformintegration.h
	src/plugins/platforms/android/qandroidplatformopenglcontext.cpp
	src/plugins/platforms/cocoa/qcocoawindow.h
	src/plugins/platforms/cocoa/qcocoawindow.mm
	src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
	src/sql/doc/src/sql-driver.qdoc
	src/widgets/widgets/qtoolbararealayout.cpp

Change-Id: Ifd7e58760c3cb6bd8a7d1dd32ef83b7ec190d41e
2014-02-07 13:07:25 +01:00
Konstantin Ritt 903b9d41f7 Decrease code duplication
Check engine's supported scripts in a single place
and remove unused script parameter from fontEngine().

Change-Id: Ic153803bef519320c370b058e77eac1a4d92afd0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-02-06 11:38:49 +01:00
Frederik Gladhorn 113cfa9aa6 Accessibility Linux: Fix all widgets reporting being editable
[ChangeLog][QtGui] Accessibility on Linux reported all objects as being
editable instead of just editable text items.

Change-Id: I8bca2799a2e5b175b3ca515fee5dd02eae23829e
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
2014-02-05 14:16:56 +01:00
Cedric Chedaleux c6d3fe8873 Checking input mask before scanning evdev devices
Adding device mask verification for static device discovery.
DRM devices are no longer scanned if mask is set to input devices only

Change-Id: Ibd2e77280c2d93c707ba7bdb84c4ae3cb0932178
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-02-05 13:46:46 +01:00
Kimmo Leppälä cd820569dc Fix KDE calculated colors being all black
KDE calculated colors weren't set correctly rendering all calculated colors
"Light", "Midlight", "Mid" and "Dark" as black.

Issues fixed:
* QFrame with frameStyle Box|Raised didn't look raised but
instead just black border.
* QMdiArea had black background
* QToolBox separators were just black

Change-Id: I5e06bafe280f73af12f23960ae68a8b35e8549ac
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
Reviewed-by: Kimmo Leppälä <kimmo.leppala@digia.com>
2014-02-04 16:01:26 +01:00
Thiago Macieira 71eb4d4939 Fix compilation: testBit is only used if mtdev isn't
qevdevtouch.cpp:160:20: error: unused function 'testBit'

Change-Id: Idd9eee9b916c694bdfb963c00eeb0eaaf5618d40
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-02-03 17:12:48 +01:00
Konstantin Ritt 2d576f79f7 Make HarBuzz-NG the default shaper on Mac
Since we dropped all platform-related shapers during the
QPA refactoring, thus making HarfBuzz the only shaper on all
platforms, we can not deal with AAT-capable fonts anymore.
HarBuzz-NG now supports it's own shaper backend infrastructure,
so the decision was to enable HB's CoreText shaper backend on Mac
and simply make HB-NG the default shaper there.

Task-number: QTBUG-36056

Change-Id: If22e24fd5cc00c25952934332a2f4123f38135a4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-01-31 12:07:59 +01:00
Laszlo Agocs 6953f3a501 eglfs: Mouse hotplugging support
On Embedded Linux with libudev support hotplugging was already working,
except that the mouse cursor was not shown and hidden. This is now
corrected so that the cursor disappears when all mice become disconnected
and reappears if a mouse gets plugged in later on.

[ChangeLog][QtGui] Mouse hotplugging is now fully supported in eglfs
when running on Embedded Linux systems with libudev support enabled.

Task-number: QTBUG-36374
Change-Id: Iec7c1557ba6085e3958dd357460cc032896fb174
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-01-31 12:07:59 +01:00
Konstantin Ritt a5614264d5 Get rid of QGlyphLayout::advances_y
...and thus consume 4 bytes less per glyph and increase the performance a bit.
It seems, the only CTFontGetAdvancesForGlyphs() returns both x and y
advances, though y advances are always equal to 0 for horizontal
orientation and x advances are always equal to 0 for vertical orientation.

Also, rename `advances_x` to `advances` for consistency
and declare QGlyphLayout's data size in a single place.

Change-Id: I56b20f893f8a6feb7aa870e3edbca99dd93ba2e2
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-01-30 12:43:33 +01:00
Eskil Abrahamsen Blomfeldt b04d87b226 REG: Fix font matching in FontConfig
Change a4ff400e25 exposed a bug in
the font matching in the FontConfig engine. FcFontMatch is
documented to not work unless you call FcConfigSubstitute()
and FcDefaultSubstitute() on the pattern first. We were neglecting
to do this, but hiding the bug before since we were doing our own
font matching and never reading back the file name from FC's match.
When we started doing this, suddenly DejaVu Sans (for instance)
would match its bold variant instead.

Change-Id: Ie6b7026de24cfb0353dc892fa862d6ee79604f38
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2014-01-29 21:37:15 +01:00
Fabian Bumberger a4ff400e25 Fix application font removal when using FontConfig
This patch fixes an issue when a font that was added with QFontDatabase::addApplicationFont
can not be removed any more.
The reason for that is that QFontconfigDatabase::addApplicationFont adds the font to the FontConfig
application set from where it cannot be removed any more and is picked up every time the font database is
repopulated (e.g. after a call to QFontDatabase::removeApplicationFont).

This also fixes the QFontDatabase autotest which unfortunately does not fail on linux, because it tries
to add "FreeMono" (which in most cases is already there as a system font). So this patch removes FreeMono and adds
LED_REAL as test font.

Change-Id: I2fa5f4df0ad2099ac28673760ea25234c725dfc6
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-01-28 19:32:40 +01:00
Tor Arne Vestbø ce761f45fe Fix nested template declarations for non-C++11 builds
Change-Id: Ie38aae09033a47106a4a1cf2e9997f90961a4e33
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-01-27 13:16:53 +01:00
Tor Arne Vestbø 690761a74d Enable adding/removing application fonts on iOS
As CTFontManagerCreateFontDescriptorsFromURL is not available on iOS < 7.0
we unfortunately need to fall back to the old behavior of only adding a
single font on older iOS versions.

Task-number: QTBUG-34490

Change-Id: I9c37a5cada067a4ebfaa9f04e7a30d41b8945990
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2014-01-25 03:04:56 +01:00
Tor Arne Vestbø c76a6fe2c4 Teach CoreText font db to handle application font files with multiple fonts
The ATS code path already did this, by enumerating all the fonts in the
resolved collection. The CoreText code path assumed that registering a
font URL would only add a single font.

We now use CTFontManagerRegisterFontsForURL to enumerate all fonts
that were added. This functionality is not available for fonts based
on a data provider.

As part of implementing the patch the code was simplified to re-use
logic between the different ways of resolving font descriptors from
a file or byte array.

Change-Id: I6eb15df939d03dc588a87e46f39bd54e56b50643
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2014-01-25 03:04:49 +01:00
Tor Arne Vestbø 5173589b79 Use shared list of application fonts in CoreText font database
Instead of three separate lists depending on the font type. This
makes enables sharing more code between the different implementations.

Change-Id: If090d1b4a32f035b6344cbadd4c5ba66e0cb99f7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-01-25 03:04:42 +01:00
Robin Burchell a4e703764e evdevtouch: Don't try to keep reading on EAGAIN
This stops touching the screen (and not moving) consuming 80-90% CPU.
The mtdev and non-mtdev codepaths have been separated for additional clarity.

Change-Id: I0559a6bd80dab961fdb4a83ad50860a9aec6445c
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-01-24 20:54:52 +01:00
Laszlo Agocs a9f59f981d Disable terminal keyboard on eglfs and linuxfb
Unify the behavior for eglfs, linuxfb and kms. The relevant code is
now moved from kms into fbconvenience.

From now on, on all three platforms, terminal keyboard input is turned
off by default. This feature can be disabled by setting
QT_QPA_ENABLE_TERMINAL_KEYBOARD to 1. This is similar to what the
evdev-based keyboard handler did in QWS in Qt4.

[ChangeLog][QtGui] The main Embedded Linux platform plugins (eglfs,
linuxfb, kms) are changed to behave identically with regards to
terminal keyboard input: it is turned off by default on all of these
platforms. If this feature is not desired, it can be disabled by
setting the environment variable QT_QPA_ENABLE_TERMINAL_KEYBOARD.

Task-number: QTBUG-36394

Change-Id: I69e47ed7580464dc5e703e9a0e23891c7c8b7790
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-01-24 15:31:51 +01:00
Laszlo Agocs e02bda2105 eglfs: Fix physical screen size regression for some hooks
On boards that provide their own custom ways of querying the screen size
the resolution of widget apps became somewhat incorrect after the recent
eglfs/eglconvenience refactor. This is because the physical size query
helper was not able to access the screenSize() provided by the hooks,
it was instead falling back to the default fb query which in turn returned
the default screen size (e.g. 800x600).

Change-Id: I46d487b61341d69dd9cb76d93198b1f44b64f195
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-01-24 15:20:18 +01:00
Laszlo Agocs 0c01111a80 eglfs: Upload only damaged areas into the textures
Uploading the pixel data for the entire window on every update
is not nice. Not sure why the line in question was added, it is
most likely a leftover from some debugging session.

Change-Id: I161af536c42ac24b299fc674039f2318f0fb8c4f
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-01-24 15:20:14 +01:00
Laszlo Agocs 84756d94c7 eglfs: Fix quad coordinates
Prevent artifacts on raster windows by properly mapping
the coordinates to [-1,1].

Task-number: QTBUG-36370
Change-Id: I95d0d03952f597ef4ce6a950c6533a3af2df964a
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-01-24 11:32:56 +01:00
Robin Burchell 6c017d0a2b EvdevTouch: Don't remove released touch data for Type B; only ignore slot
The Type B protocol states that touch slots with an ID of -1 should be
considered unused, but data should be retained if that slot becomes
active again later. Instead of removing the contact from the contact list,
only "disable" it. This contact can later be reused if the slot becomes
active again.

Change-Id: I827ae311841dd97f73a2c64d943658cd3f29eaf8
Done-with: Andrew Knight <andrew.knight@digia.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-01-22 18:53:29 +01:00
Wolfgang Bremer 18c04d0ab6 QNX: Fix build on BB10 caused by missing linux fb
QNX/BB10 does not support linux framebuffer

Change-Id: Ic25f69fc16cbcd27cbaa6db08c2b6556e4def965
Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-01-18 18:16:04 +01:00
Friedemann Kleint ab2c90cc52 Introduce function for standard button texts to QPlatformTheme.
Change-Id: I91eec04a95b5047d893490a70152237b2991f662
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
2014-01-18 09:23:38 +01:00
Laszlo Agocs 328f2f9c35 eglfs: Move reusable functionality to eglconvenience
The cursor implementation is generic GL(ES) code that should be shared
by all the present and future egl-based embedded platform
plugins. Follow the pattern of QEGLPlatformContext and move this class
into eglconvenience as QEGLPlatformCursor.

Similarly, the common bits from the context implementation context are
moved back to EGLPlatformContext.

eglconvenience has now base classes for integration, screen, window,
etc. too. By using these, eglfs becomes much smaller and cleaner. This
also paves the way for creating new, separate EGL-based platform
plugins for Android, embedded Linux, etc.

Also added some documentation to each of the base classes.

devicediscovery is now fixed to be usable on any platform. The
implementation in this case is naturally a dummy one. This finally
allows using it from anywhere without myriads of ugly ifdefs.

Change-Id: I02946e360c04e02de7fe234a23a08320eff4ccf5
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
2014-01-17 14:30:48 +01:00
Frederik Gladhorn 7917dfbf1c Merge remote-tracking branch 'origin/stable' into dev
Change-Id: I99af0bef7f1c931533a324ebcfb27c40ee871a5e
2014-01-10 18:27:49 +01:00
Morten Johan Sørvig 8166a34fc5 Support running Qt apps on the integrated GPU
By default starting an app that uses OpenGL will
switch machines with dual graphics hardware over
to the discrete GPU. This causes a delay at startup
and possibly increased power usage.

It is possible to prevent the switch:

1) Add the NSOpenGLPFAAllowOfflineRenderers attribute
to the OpenGL pixel format. This is done in this commit.

2) Add <key>NSSupportsAutomaticGraphicsSwitching</key><true/>
to the apps Info.plist. This final opt-in is left to
the app author.

Change-Id: Ibff56fd7770a6b7f8041c8bb60bf290eed24330a
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
2014-01-10 13:28:13 +01:00
Thiago Macieira 52441ecd44 Remove unused member m_eglApi
It's not used anywhere. Found by Clang 3.4:

qeglplatformcontext_p.h:80:13: error: private field 'm_eglApi' is not used [-Werror,-Wunused-private-field]

Change-Id: I37ce240a9d07ef570e0814de366dbb7cd13ad714
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
2014-01-10 02:33:45 +01:00
Sérgio Martins f0f6c1d0ed Fix evdevtouch build with -qtnamespace
Change-Id: Ibac69cfa44eff33d8cc172fc16cf105fff4c12b1
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
2014-01-09 00:10:07 +01:00
Robin Burchell e48aa2a402 Support discovery of key evdev devices.
Change-Id: Iac2751b51fb0af9fba181c26ad788f25eb0b02f7
Done-with: Andrew den Exter <andrew.den.exter@jollamobile.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-01-06 20:55:47 +01:00
Frederik Gladhorn c8046f7d42 Merge remote-tracking branch 'origin/stable' into dev
Change-Id: I0b021b369725b73f09faa14b9da9e2431dc24fad
2014-01-06 15:26:02 +01:00
James Turner bf32528f4b Add support for OpenType (.otf) fonts
FreeType already has support for the file format, so simply
ensure they are picked up by the generic database. (Other backends, 
such as Windows, already had support)

[ChangeLog][QtGui] Qt's generic font database now adds OpenType fonts (.otf).

Change-Id: Ief5a3329e66b8066aad284172afd004f2cdfaebb
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-01-06 13:04:03 +01:00
Thiago Macieira a8d9878d48 Fix Qt build when mtdev is detected
If it's detected, we have "mtdev" in QT_CONFIG, not in CONFIG. With
the bad test, libQt5PlatformSupport.prl would not get -lmtdev and, in
turn, the evdevtouch generic plugin would fail to link.

Change-Id: I5dab57b648e66943f98a22527717a20be35f02a4
Reviewed-by: Richard J. Moore <rich@kde.org>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
2014-01-04 03:21:41 +01:00
Simon Hausmann b5ab7ee0d7 Merge remote-tracking branch 'origin/stable' into dev
Change-Id: Id13badc270db98806048753fd7fb658aa17f1ede
2014-01-03 14:30:21 +01:00
Frederik Gladhorn 286c41c32f Accessibility Linux: Fix atspi getActions to return action name
[ChangeLog][Accessibility] On Linux action names were returned as empty
strings in AT-SPI getActions, now returns the proper names.

Change-Id: I75a469a0b8a5789cd54ce1b489ed5012654bb265
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
2014-01-03 13:00:18 +01:00
Allan Sandfeld Jensen 68974f31ff Extend multimedia keys
Extends the Qt keycodes with four missing keys, common on remote controls:
Guide, Info, Settings and Exit.

Change-Id: I6789f13dbb662da4261a3c947757644e12306dd9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: BogDan Vatra <bogdan@kde.org>
2014-01-02 10:29:27 +01:00
Robin Burchell 5923196bc3 mtdev: Change to use configure detection instead of requiring source hacking.
This coincidentally fixes a case of accidental BIC in qevdevtouch_p.h, where not
all users would necessarily define USE_MTDEV: having it centralized inside Qt
makes this now, blessedly, impossible.

Change-Id: I196a8f21742830705759aa917a823afdc94ba2b5
Done-with: Michael Brasser <michael.brasser@jollamobile.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2013-12-30 16:51:23 +01:00
Łukasz 'sil2100' Zemczak d351f3a345 Make QKdeTheme constructor public, allowing for custom inheritance
Make QKdeTheme constructor public, allowing for custom inheritance by
other classes. The danger of making it public and not going through the
factory method are close to none, while other developers might want to
slightly enhance KDE-themed platform themes by themselves. Right now
the only choice is to copy-paste the whole code. QKdeTheme might be a
private class, but still it makes no sense to restrict derivation if
someone finds it necessary to do so.

Task-number: QTBUG-35566
Change-Id: Ia3488da71e7c06fe4b7dc6e275605970b435b00e
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
2013-12-30 14:36:16 +01:00
Frederik Gladhorn 4a8273a6fc Merge remote-tracking branch 'origin/stable' into dev
For the conflicts in msvc_nmake.cpp the ifdefs are extended since we
need to support windows phone in the target branch while it is not there
in the current stable branch (as of Qt 5.2).

Conflicts:
	configure
	qmake/generators/win32/msvc_nmake.cpp
	src/3rdparty/angle/src/libEGL/Surface.cpp
	src/angle/src/common/common.pri
	src/corelib/global/qglobal.h
	src/corelib/io/qstandardpaths.cpp
	src/plugins/platforms/qnx/qqnxintegration.cpp
	src/plugins/platforms/qnx/qqnxscreeneventhandler.h
	src/plugins/platforms/xcb/qglxintegration.h
	src/widgets/kernel/win.pri
	tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp
	tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
	tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
	tools/configure/configureapp.cpp

Change-Id: I00b579eefebaf61d26ab9b00046d2b5bd5958812
2013-11-26 22:35:48 +01:00
Allan Sandfeld Jensen 25b2b682d6 Evdev keyboard handler emits keyevents with QString(0xffff)
Key events that have no text representation are by the evdevkeyboard
emitted as a QString(0xffff). Other keyboard event handlers appear to
all emit key events with null strings for these events.

Change-Id: If6b5c61a8cb76a6843238f834ce4feb4b73aa199
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-11-26 00:13:36 +01:00
Andrew Knight 7b6253efbf EGL convenience: deal with DefaultRenderableType when appropriate
When encountering QSurfaceFormat::DefaultRenderableType, the surface
format choosers should not default to OpenGL ES, but rather desktop
OpenGL when Qt has been configured without ES2 support.

Change-Id: I57aa7cfe63ebe0ffb32f4ba32808e62b0a4589f8
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-11-24 21:32:03 +01:00
BogDan Vatra 2828072d50 Android: Initialize mWindowState
Use the same variable in QAndroidPlatformWindow.

Task-number: QTBUG-34764

Change-Id: Idf33707e81cf7306663196f3c17735d8dc1dde5d
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2013-11-14 21:15:35 +01:00
Laszlo Agocs 5dd94b75e3 Add swapInterval to QSurfaceFormat
Implement swap interval support for EGL, GLX and WGL.

The environment variable QT_QPA_EGLFS_SWAPINTERVAL is renamed to
QT_QPA_EGL_SWAPINTERVAL and can be used to override the applications'
setting of the swap interval.

Task-number: QTBUG-31939

Change-Id: I644325d5d3306b7604bffd7efccda3c00ed37d36
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-11-13 09:47:34 +01:00
BogDan Vatra b953e2f53f add/remove window only when the window is shown/hidden
Task-number: QTBUG-34469

Change-Id: Id77cf738f96bb94582833f6734a2a491b01e1666
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2013-11-07 14:56:32 +01:00
Oswald Buddenhagen 43684a20d0 use private linkage where possible
Change-Id: Ie8eaa71bee87654c21218a23efd7e9d65b71f022
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-10-31 19:49:32 +01:00
Allan Sandfeld Jensen 89ab267105 Keep web fontdata alive as long as CG uses it
With OS X 10.9 font decoding appears to happen lazily, this means we
have
to ensure the data we provide CG is kept alive until it dereferences it
itself.

Task-number: QTBUG-34332
Change-Id: I8fc38fafba746b062c4ad16314b0a410fd0b668d
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
2013-10-29 22:11:26 +01:00
Roger Maclean e65f568a8f Improve mapping between Font Config and Qt font attributes
It was sometimes impossible to select the desired font due to the code
completely ignoring the FC_WIDTH attribute and poor mapping of the
FC_WEIGHT attribute. The result was that it was easy to have a font file
that was inaccessible by Qt since it shared attributes with another
font file.

The FC_WIDTH attribute is now fetched and used unchanged as the font's
stretch value other than ensuring it is within the allowed range.

For FC_WEIGHT, the code no longer matches the value with the closest
QFont::Weight enum but instead does a piecewise linear mapping so
that Qt enum values match Font Config ones to the extent possible.

Also removed bogus call to fetch the width that was doing nothing with it.

Change-Id: Id39715f14a617c1d0e00ecf5a7d391cab99adc03
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
Reviewed-by: Bernd Weimer <bweimer@blackberry.com>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
2013-10-27 23:51:16 +01:00
Paul Olav Tvete aa7fa09312 Android/LinuxFb: fix QWidget::showFullScreen()
Previously, showFullScreen() had a race condition: it depended
on QFbScreen::setGeometry() being called after the window state was
set (that would trigger QPlatformScreen::resizeMaximizedWindows(), which
was the only part of the code that reacted to WindowFullScreen).
On Android this caused random behaviour.

Task-number: QTBUG-33294
Change-Id: I228e6af4139af1a47387e7d80757d7b46e859580
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2013-10-23 10:19:10 +02:00
Laszlo Agocs cc3ece1da4 evdevtouch: Make it work with am335x
The driver for the resistive touchscreen of these boards tends to report
ABS limits 0..4095 even tough it never sends coordinates outside a certain
range (e.g. approximately 165..4016 for X). This breaks the mapping of
hardware coordinates to screen space. Apply a workaround to make it
work properly.

Change-Id: I3eb5d76002acba1972061f3add44d797349c8ec8
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2013-10-17 20:53:09 +02:00
Laszlo Agocs b7d2882715 linuxfb: Do not crash with GL windows
We will show an error message saying no platform context is available
but the crash (due to GL windows having a null backingstore) is not
desirable.

Change-Id: Iba3a61bfc4eeeb89b4a0017a58c87a7dbd0895e7
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2013-10-15 20:18:20 +02:00
Allan Sandfeld Jensen b8da27bc90 Update keycode mappings of multimedia keys
Updates keycode mappings for evdev, directfb and android.

Change-Id: I6789f13dbb662da4261a3c947757644e12306dd9
Reviewed-by: BogDan Vatra <bogdan@kde.org>
2013-10-15 12:26:48 +02:00
Laszlo Agocs 4ba1072f3f linuxfb: Make the mouse cursor visible and working
Change-Id: I58bae7235ae714da551da1337ee6340fc712aaa5
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-10-14 12:08:12 +02:00
Laszlo Agocs c16dbfbdde eglfs: Show the mouse cursor when a mouse is connected
Currently the mouse cursor is shown by default and it can be
turned off by setting QT_QPA_EGLFS_HIDECURSOR to a non-zero
value. This is now enhanced with an automatic detection step
via QDeviceDiscovery (the helper the input code use anyway).

From now on if QT_QPA_EGLFS_HIDECURSOR is not set, the cursor
is shown only if a mouse device is present in the system.

This could later be enhanced further by showing and hiding the cursor
dynamically during runtime although that will not be of much use for
embedded platforms without libudev.

Change-Id: I7e4b85ea8807200871c88fc42b11ab2adac90d32
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-10-11 11:58:59 +02:00
Jerome Pasion 4533cc9944 Doc: Adding mark-up to boolean default values.
Default values should have mark-up to denote that they are code.
This commit changes:
-"property is true" to "property is \c true".
-"Returns true" to "Returns \c true".
-"property is false" to "property is \c false".
-"returns true" to "returns \c true".
-"returns false" to "returns \c false".

src/3rdparty and non-documentation instances were ignored.

Task-number: QTBUG-33360
Change-Id: Ie87eaa57af947caa1230602b61c5c46292a4cf4e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
2013-10-08 00:46:27 +02:00
Andy Shaw b1bd4021f3 Fallback to the original application font handling
When Qt is built for 10.8 but then used on a machine before 10.8 then
it was not falling back correctly when an application font was added.

Change-Id: I0f05226cdbcfa36621bb1b3aa2f2cd60e714dfdf
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
2013-10-07 14:00:57 +02:00
Laszlo Agocs e5ae6d896b evdevtouch: Do not print device information by default
Do it only when requested by having QT_QPA_EVDEV_DEBUG set.

Change-Id: I0e28808ae972bf681db3c0878ee53732611d11af
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-30 11:37:52 +02:00
Laszlo Agocs 091ca0ede2 evdevtouch: Fix ABS limit queries
Add the missing parentheses around the conditional
expression. EVIOCGABS and similar macros do not have guarding
parentheses in older kernel headers.

Change-Id: I5f464351e9407d90643d4e73d4afdbb2ad88b02b
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-26 18:45:16 +02:00
Laszlo Agocs 4ec31ce56a evdevtouch: Avoid duplicating points in released state
Points in released state should only be removed from m_contacts after
the disappeared-since-last-sync is done. Otherwise the same point can
appear twice (both times in released state) in the same event.

Change-Id: Ia751054c3fe893006a090bdce96a64738d8388ac
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-26 18:45:16 +02:00
Christian Strømme e4f1d83b6a Remove jniconvenience from platformsupport.
The jniconvenience api is replaces with private API's in core and
public API's in the qtandroidextras module.

Change-Id: Iaf4b4343f8022197e7ec3fdde2406eb3c881208d
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2013-09-20 23:45:06 +02:00
Liang Qi 9d56e9eae6 test: fix tst_QFont::defaultFamily on Mac OS X 10.8
Task-number: QTBUG-32834
Change-Id: Iac771eb0a544ae58d203717c39a13d2d21e3c3ed
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2013-09-20 23:45:06 +02:00
Laszlo Agocs cfd5284249 evdevtouch: Make TouchPointReleased working with certain drivers
The plugin failed to handle releases with protocol type A with some
drivers. There is no requirement to emit ABS_MT_TOUCH_MAJOR or
BTN_TOUCH to indicate a release. If the point is gone from the report,
it is a release as well.

Change-Id: I9527fbfb200fde3b160148e076357a29bf610427
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2013-09-20 12:04:13 +02:00
Laszlo Agocs b0b912181e evdevtouch: Handle single-touch devices
Such touchscreens emit no MT events, only ABS_X and ABS_Y.

Change-Id: I7db3d2fbb948eadb23c659e45bbbc5017f1a4f9d
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2013-09-20 12:03:56 +02:00
Frederik Gladhorn b449791c35 Make Accessibility public
There is no point in having QAccessible2, so merge it with the normal
QAccessible. The header will be removed in a subsequent commit as it is
still needed by declarative at this point in time.

Change-Id: I1fc47d484d482f25387eba827bc5a373536b7a8b
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
2013-09-19 14:55:19 +02:00
Tor Arne Vestbø 4bae7158d3 Don't send posted events from QWindowSystemInterface::sendWindowSystemEvents
The responsibility of sendWindowSystemEvents() is to process events from
the window system. Historially that logic was part of the QPA/QWS event
dispatcher, which naturally also sent posted events. Through refactoring,
the code at some point ended up in in the QWindowSystemInterface class,
still with the posting of events in place.

This resulted in QPA event dispatchers adopting a pattern of just calling
sendWindowSystemEvents(), as that would cover both posted and window system
events. Other event dispatchers would call sendWindowSystemEvents(), and
then use a base-class implementation from QtCore for processing events,
resulting in two calls to QCoreApplication::sendPostedEvents() per
iteration of processEvents(). This breaks the contract that processEvents
will only process posted events that has been queued up until then.

We fix this entanglement by removing the sendPostedEvents() call from
QWindowSystemInterface::sendWindowSystemEvents() and move it to the
respective event dispatchers. For some EDs it means an explicit call
to sendPostedEvents, while others were already doing sendPostedEvents
though a separate source (GLib), or using a base-class (UNIX/BB), and
did not need an extra call.

We still keep the ordering of the original sendWindowSystemEvents()
function of first sending posted events, and then processing any
window system events.

Task-number: QTBUG-33485
Change-Id: I8b069e76cea1f37875e72a034c11d09bf3fe166a
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
2013-09-16 15:22:40 +02:00
Shawn Rutledge 4c19055cb1 remove unnecessary beginPaint and endPaint overrides
QPlatformBackingStore::endPaint does not take a QRegion parameter.
6ce6b8a378 set the API, but the
platform implementations were not all synced up since then.  There
was anyway no point in overriding beginPaint and endPaint on
platforms which don't need to do anything there.  This fixes
clang warnings of the form
QXcbBackingStore::endPaint hides overloaded virtual function

Change-Id: Id6cd0fc2c831a34576ac2c73eeb0d5741d26e622
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-16 15:21:40 +02:00
Sergio Ahumada f7837e28b5 Merge branch 'stable' into dev
Conflicts:
	src/concurrent/qtconcurrentmedian.h
	src/corelib/itemmodels/qabstractitemmodel.cpp

Change-Id: Iac46a90bbb2958cef7670031a4b59c3becd8538a
2013-09-13 18:04:17 +02:00
Tor Arne Vestbø 59601e06d9 iOS: Interleave Qt application main() with iOS startup sequence
Our previous event loop integration had two unfortunate flaws:

  1. We would call qt_user_main() from a timer, after returning from
     didFinishLaunchingWithOptions. This had the effect of showing the
     iOS application window long before the Qt application UI had been
     set up, resulting in a 1-2 second flash of black/pink between the
     launch image disappearing and the actual application showing.

  2. We spun a nested event loop, where our implementation of the
     different event loop modes did not perfectly match the Apple
     implementation. This resulted in scrolling being busted in
     some cases such as when showing the virtual keyboard for
     Emoji characters.

These two issues have now been solved by calling the user's main()
from didFinishLaunchingWithOptions. Normally this would not work, as
the user's main would call QApplication::exec() at the end of their
main(), which would block and we would never return back from the
didFinishLaunchingWithOptions callback, resulting in no UI on screen.

We work around this by longjmp'ing out of QApplication::exec(), back
into didFinishLaunchingWithOptions, so that it can return. Again,
this would normally not work, as the call stack where QApplication
and friends would live would get smashed as the application
continued executing. We work around this by allocating a block
of stack space at the start of main(), which we then redirect the
stack pointer to before calling the user's main. This results in
the whole stack of the user's main() and below being preserved, even
if we longjmp out of the call stack (which then restores the
stack pointer).

This approach should work fine together with garbage-collection as
well, since the mark-and-sweep phase will walk the stack from the
stack pointer to the stack base, including sections of the stack
that were part of qt_user_main() and live in the reserved area.
One case where GC will fail though is if it happens as part of the
qt_user_main() call, where the GC will not mark anything in the
'real' callstack below UIApplicationMain(), but this is not
expected to happen.

The size of the reserved stack can be controlled through the
Info.plist key 'QtRunLoopIntegrationStackSize', as well as the
'QtRunLoopIntegrationDisableSeparateStack' key to disable the
separate stack approach completely. This will fall back to the
old approach. The amount of stack space used by the user's
main can be determined by enabling a special debugging mode,
using the 'QtRunLoopIntegrationDebugStackUsage' key.

Change-Id: I2af7a6cfe1a006a80fd220ed83d8a66d4c45b523
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2013-09-13 14:08:44 +02:00
Konstantin Ritt ff0fdc0462 Warn if OpenType support missing for script of interest
Change-Id: I076cfc5244ca3c060fd005cc3fbf30b357604bc7
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-13 02:29:10 +02:00
Konstantin Ritt 02651060b6 Decrease code duplication in QFontDatabase-s
Move scriptRequiresOpenType() body right into QFontEngine::supportsScript(),
thus centralizing use of this performance cheat.

Change-Id: I5f494b086f8f900b631c491f41e9cb800002c0f6
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-13 02:29:01 +02:00
Konstantin Ritt 75d06db873 QFontConfigDatabase: Minor code clean-up
Get rid of duplicated includes, useless defines, and private enums
that just duplicate a public ones; avoid variable names collisions.

Change-Id: I540e812b6cd510eb1ed441d97e9af377611d804a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-13 02:28:41 +02:00
Tor Arne Vestbø 40033ac299 iOS: Implement hasPendingEvents() in the event dispatcher
As we're using CFRunLoopIsWaiting() to check for the possible presence
of system events hasPendingEvents() will never return false if called
on the main thread. We assume clients will not use this function to
determine whether or not to call processEvents(), but instead use the
return value from processEvents.

Change-Id: Ifd63892c6d35bb7da204072616bfe3ee69ca1d85
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-09-12 16:48:00 +02:00
Tor Arne Vestbø 5d926657f4 iOS: Teach event-dispatcher to handle changes to run-loop mode at runtime
UIKit changes the run-loop mode during scrolling to UITrackingMode, which
presumably prioritizes touch events and other sources related to a
smooth scrolling experience. It signals this change by interrupting the
current run-loop pass, and the outer loop is responsible for re-entering
the run-loop in the new mode. Failing to enter the run-loop with this
new mode results in UIScrollViews losing their kinetic feel when
flicking. This can be observed by e.g. bringing up the Emoji keyboard
and scrolling it horizontally.

We keep track of the current run-loop mode by listening for push and pop
notifications on the UIApplication object. The current mode is then used
in our Q_FOREVER-loop when re-entering CFRunLoopRunInMode.

For now we don't add our posted event source or timer source to the
new modes, under the assumption that the system prefers to limit the
number of sources that will fire during scrolling. If this turns out
to give a bad user-experience for Qt applications we should consider
changing it.

Change-Id: I3a612b3cfc77c74b658963057732dc4d61684df8
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2013-09-12 16:47:54 +02:00
Tor Arne Vestbø 1ec3718432 iOS: Rewrite CoreFoundation event-dispatcher
Instead of having separate code-paths for QEventLoop::EventLoopExec
and the non-blocking processEvent() we now have a single Q_FOREVER
loop where the logic can be shared. We make multiple loop-passes,
each time calling CFRunLoopRunInMode with potentially different
arguments, depending on the result of the previous run.

For the EventLoopExec case we'll continue making loop-passes until
the event-loop has been interrupted. For the non-EventLoopExec case,
we respect interruption, but will continue making loop-passes only
until we've processed all events in the queue, optionally waiting
for the initial event if WaitForMoreEvents is set. Limitations in
the CoreFoundation APIs unfortunately force us to keep some state
on whether or not we've processed events and timers for a given
processEvents() pass (with corresponding deferred scheduling of
timers and event source signaling).

The way we handle timers has also been rewritten to no longer defer
the timer activation to a special timer source. The constraint of
CoreFoundation timers is that they can not recurse (re-fire) in a
callback, but that only applies per timer, so using multiple CF
timers allows us to recurse. We still only use a single CF timer
for all the Qt timers though, and only spawn a new CF timer if
the user calls processEvents() inside a timer callback.

This commit removes the logic related to dealing with UITrackingMode,
as that logic was slighly problematic, but the feature will be
added back in a follow-up commit, in line with the new approach.

The result of this commit is that we're passing all event-loop,
event-dispatcher, and timer auto-tests, both for the QtCore dispatcher
and the GUI event-dispatcher.

Change-Id: I3c56fbc7857a25110064681257abb47075b5bd2d
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-09-12 12:32:14 +02:00
Sergio Ahumada bcbec4bc49 Merge "Merge remote-tracking branch 'origin/stable' into dev" into refs/staging/dev 2013-09-10 23:22:23 +02:00
Konstantin Ritt 106843ad1a Make QFontEngine not derive from QObject
Whilst having the objectName set for each engine is
somewhat handy when debugging, deriving from QObject just for that
is a wasting of memory in all other cases.
This also broke the font engine abstraction by allowing qobject_cast()
to access some private data; the only sane way to distinguish
engines is querying their Type value.

Change-Id: Ib1d195692859eb39089f6d8d9016cb8f9dcc0400
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-10 01:56:20 +02:00
Allan Sandfeld Jensen 2ad331465c QRawFont::fromFont does not get antialias setting from fontconfig
When creating a fontengine in QFontconfigDatabase::fontEngine we
solely base the antialias setting on the QFont StyleStrategy and forget
to ask fontconfig it has an overriding definition for this font match.

This patch will now let fontconfig decide the antialias setting unless the
NoAntialias stylestrategy has been set.

Change-Id: I67981582a37cfd3c59aa1db929095585af554088
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
2013-09-09 15:30:08 +02:00