summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Add Q_REVISION(1) to QWindow::alert().Friedemann Kleint2013-06-281-1/+1
| | | | | | | | Task-number: QTBUG-32069 Task-number: QTBUG-30416 Change-Id: Idabf9962def24ecd709be7d981302c91c42ccac4 Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
* QWindow min/max width/height, contentOrientation are not new in 5.1Shawn Rutledge2013-06-282-19/+14
| | | | | | | | | so that part of Id03ae17270832a7b5915e4324a508e591c0b6d98 which added the Q_REVISION(1)'s and \since docs was a mistake. Change-Id: I159b68491bd7dc55657d8c978bff527094ef4547 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com> Reviewed-by: Alan Alpert <aalpert@blackberry.com>
* Avoid crash when QOpenGLContext is destroyed before the VAOSean Harmer2013-06-282-2/+26
| | | | | | | Change-Id: I19df59453156a95c5075a065268333a74cec2476 Reviewed-by: James Turner <james.turner@kdab.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* QNX: Fix screen rotationRafael Roquetto2013-06-262-1/+7
| | | | | | | | | | | | | | | | | | | The behavior introduced by qtdeclarative's 475d1ed4f6a2 mandates that an expose event follows a geometry change event. The fix for this uncovered a bug on the raster backing store which caused the rotation to break on QtWidgets. The problem was rooted on the assumption that the QQnxRasterBackingStore::flush() method was only called after paints to the backing store surface, which was discovered to be a false assumption. Flushing the backing store can occur in other circunstances, which are out of scope on the context of the QNX plugin. Task-number: QTBUG-31329 Task-number: QTBUG-31934 Change-Id: Icfc3e85324f5a8745f6b5f189f27f8b763f770c7 (cherry picked from commit 0343b926608a4014ef386b3b21be9a0940d9f8e8) Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com> Reviewed-by: Vladimir Minenko <vminenko@rim.com>
* Fix compilation with ICC 13.1: the MSVC 2005 & 2008 code is badThiago Macieira2013-06-261-1/+1
| | | | | | | | | qvariant_p.h(226): error: name followed by "::" must be a class or namespace name template<class C> static Yes test(char (*)[(&C::isNull == 0) + 1]); ^ Change-Id: I42eef44d46ca0fb7aac8f82150e917c4fb912b15 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Fix win32-icc build: _CHAR16T is not an indication of C++11 supportThiago Macieira2013-06-261-1/+1
| | | | | | | | | | The macro comes from MSVC's yvals.h header and it actually indicates absence of C++11 support in MSVC. It is defined if _HAS_CHAR16_T_LANGUAGE_SUPPORT isn't defined, which is a C++11 feature. Task-number: QTBUG-31701 Change-Id: I155b8e764f786e95a08de660f70094b2bee38937 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Android: Fix initial window size for raster backendPaul Olav Tvete2013-06-262-0/+12
| | | | | | | | | | | We forgot to set the ShowIsFullScreen property for the raster engine case. OpenGL windows already did the right thing, since the GL backend is based on eglFS. The iOS backend also has this logic. Task-number: QTBUG-31984 Change-Id: I1cf5df32d79f441768126f00632107a7971eb5ad Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
* BlackBerry: fix delayed root window posting on OpenGLRafael Roquetto2013-06-261-0/+3
| | | | | | | | | | | | | | The delayed root window posting introduced by 77a06e7e6c517003 broke the OpenGL support. In that patch, the posting of the root window is trigerred by QQnxRasterRasterBackingStore's call to QQnxWindow::post(), that obviously does not happen when OpenGL is enabled, therefore requiring the OpenGL context to explicitly post() the root window. Task-number: QTBUG-31934 Change-Id: Ifd302c1dde612a03b79c778ec4586aa70f88260d (cherry picked from commit 6a9333841d9d5233b0457ec6f0da5bdacda8ea5b) Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
* Mac OSX: get the correct key code when the control key is pressedShawn Rutledge2013-06-261-1/+5
| | | | | | | | | | | | | | | The control key results in modifiers having Qt::MetaModifier, and then the correct character is found in charactersIgnoringModifiers. The rest of the time, [nsevent characters] seems to be correct. If we use charactersIgnoringModifiers too much of the time, then the keycode will be wrong in some cases even though typing is still possible. Task-number: QTBUG-29005 Task-number: QTBUG-31811 Task-number: QTBUG-31977 Change-Id: Ib23b89f03bc9a61fe6d177320fa603c05649e979 Reviewed-by: Eike Ziller <eike.ziller@digia.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
* install qconfig.h into framework bundlesOswald Buddenhagen2013-06-251-1/+4
| | | | | | Task-number: QTBUG-31969 Change-Id: I5ade18352a9989bdfd513c51c021d475f39aa7c6 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
* Update for the newest Darwin-family operating systems.Jake Petroules2013-06-253-5/+18
| | | | | Change-Id: Ib90296e35f8aa8d63692cf03ba9ffcb94a1a7687 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
* Fix QDir::mkpath failing for drive paths on WindowsKai Koehne2013-06-241-0/+4
| | | | | | | | | | | | This fixes a regression introduced in 3e2cd8ef6f1ce4f467. We shouldn't try to call mkdir for just a drive letter. Task-number: QTBUG-31862 Change-Id: I56035857aec03f9f1cceef62e82f372486b7737b Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com> Reviewed-by: Kai Koehne <kai.koehne@digia.com>
* Use BSD licensing for QtOpenGLExtensions instead of LGPLJonathan Liu2013-06-242-52/+50
| | | | | | | | | | | | | BSD licensing should be used for QtOpenGLExtensions instead of LGPL as it is a static library that is linked into applications. Using LGPL would impose additional requirements for application developers to provide object files to end users to be able to relink the application with a modified or updated QtOpenGLExtensions static library. Task-number: QTBUG-29918 Change-Id: I0bb80f8ba5158be0a71fe4c5e1c37787ce21337d Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Widgets: Set qt_button_down for each press.Friedemann Kleint2013-06-241-1/+1
| | | | | | | | | Do not rely on release events. Task-number: QTBUG-31333 Change-Id: I09a056fed8892715c04ca78a42ae191e5a9a3b42 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
* Fix missing shortcuts for WindowContainersJørgen Lind2013-06-212-18/+58
| | | | | Change-Id: Iee2d97e1ff2b1f0c56b1dde4f3ce22a427fbe554 Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
* Fix missing focus events for mapped child windowsJørgen Lind2013-06-211-2/+2
| | | | | | | | | Its a bit brutal Task-number: QTBUG-31776 Change-Id: I2d8b530646d1e2b2ba86f0e82d76f928c9a2bb11 Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
* Android: handle keyboard connect/disconnectPaul Olav Tvete2013-06-211-1/+1
| | | | | | | | | | | | Even though the documentation says that "This should never normally happen", we do get a "navigation" change when an external keyboard is connected or disconnected. Thanks to BogDan for finding the solution. Task-number: QTBUG-31806 Change-Id: Id92639800e617821976f842f93e09517529e14ef Reviewed-by: BogDan Vatra <bogdan@kde.org>
* QFactoryLoader: Release unused libraries.Friedemann Kleint2013-06-181-1/+6
| | | | | | | Task-number: QTBUG-31476 Change-Id: Ib2eb076afaa21ab1fdc12944f80483e3de260d4b Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Remove unused member QFactoryLoaderPrivate::keyList.Friedemann Kleint2013-06-181-9/+3
| | | | | | | Task-number: QTBUG-31476 Change-Id: Ife9b25ede67837152d94cd500a1d7c6dc6cd8ab8 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Android Mute and FastForward keys mapped wrongAllan Sandfeld Jensen2013-06-174-4/+12
| | | | | | | | | | | | | | KEYCODE_MEDIA_FAST_FORWARD is mapped to Qt::Key_Forward, which undoes Back. I believe the best match in Qt would be Qt::Key_AudioForward which is also mapped by XCB from XF86XK_AudioForward /* fast-forward audio track */ KEYCODE_MUTE is mapped to Qt::Key_Volume_Mute, but the mute button is for muting the microphone, the volume mute is called KEYCODE_VOLUME_MUTE. Change-Id: Id0b78c9bde78faef1f5d31019693e6c466941d70 Reviewed-by: BogDan Vatra <bogdan@kde.org>
* OSX: Disable window restoration for the Mac color panelShawn Rutledge2013-06-151-0/+5
| | | | | | | | | | | | because if it is automatically restored it's out of the application's control, so the user's interaction will be ignored. Change I8ce3cd94f5ae81d7877a346743ca4e0e188baa02 did this for normal windows by default, but the dialog helpers generate windows which aren't affected by that. Task-number: QTBUG-31750 Change-Id: I636bd87b664a489a2dc8693dad5370a715b1cf7b Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
* Cocoa color dialog cannot be modal, but should show anywayShawn Rutledge2013-06-152-8/+8
| | | | | | | | | | | Silently failing doesn't seem the right way to handle this. Updated docs for DontUseNativeDialog option: it's not just for the Mac anymore. Ensure that the Qt dialog and Mac panel will never be shown at the same time. Change-Id: Ia9e80754df6c7622d9039c8dd050ac4de771a030 Task-number: QTBUG-29161 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* OSX color dialog can be accepted repeatedlyShawn Rutledge2013-06-151-0/+1
| | | | | | | | | QNSColorPanelDelegate::finishOffWithCode sets mResultSet = true and it needs to be set false again the next time the dialog is shown. Task-number: QTBUG-31566 Change-Id: If1d4bb9d4e76273c6423f5bf2ae37790e8a9704e Reviewed-by: Liang Qi <liang.qi@digia.com>
* network requests: do not access 1st byte of empty byte arrayPeter Hartmann2013-06-151-1/+2
| | | | | | | | | | | ... because otherwise this would crash. Apparently there are cases where the header name is empty. Task-number: QTBUG-31667 Change-Id: I31b3e964502c05b7614c23876bb3752fa75ab22d Reviewed-by: Richard J. Moore <rich@kde.org> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Adjust the cmake files to find the dlls in the bin dir.Stephen Kelly2013-06-151-3/+4
| | | | | | Change-Id: I840f963c3648d123b31f79aa2c8902c0ad74e982 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
* fix QFileSystemEngine::createDirectory race conditionv5.1.0-rc1Shawn Rutledge2013-06-142-12/+12
| | | | | | | | | | | | | | | | | | | | | | During a call to QDir::mkpath(), the same path could be created by another process, in which case the OS mkdir will fail with EEXIST. But the docs for mkpath() state that it's not an error if it already exists, whereas for mkdir() it is an error. So QFileSystemEngine::createDirectory should accept the EEXIST error silently if it occurs while creating the sequence of parent directories and the final leaf directory, but should fail if EEXIST happens when it was called from QDir::mkdir(), which is when the createParents parameter is false. We assume the operating system mkdir() and CreateDirectory() are atomic, so there should be no race condition in QDir::mkdir(). It's not necessary for mkpath() to call stat() at each level, only to check whether an existing entry is a directory or a file. Also added to the autotest to verify that if the path is an existing file, creating a dir with the same name will fail in either mkdir or mkpath. Task-number: QTBUG-30046 Change-Id: I926352f10654fdf3b322c8685bb85ad8b8844874 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Widgets: Do not create QWindow in createTLExtra().Friedemann Kleint2013-06-142-4/+5
| | | | | | | | | | | | QWidget::setWindowIcon() and similar call createTLExtra() which creates a QWindow without setting the native attributes on the parent, which can cause crashes when setParent_sys() decides to delete the window. Task-number: QTBUG-31672 Change-Id: I4c40ee12741be88b2281df90329ffb698d4009eb Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
* Fix another type of crash when dragging QDockWidget in and outShawn Rutledge2013-06-131-1/+1
| | | | | | | | | | | | QDockWidgetPrivate::mouseMoveEvent calls q->move() which can result in a call to QDockWidgetPrivate::endDrag(), which will delete the state struct. Therefore mouseMoveEvent needs to check whether it's null or not before accessing it. Task-number: QTBUG-31672 Change-Id: I91a31620f16a80b31b65b2742e7937ae8960f0fd Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* Fix crash for pressing Ctrl+C in a message boxKai Koehne2013-06-121-1/+1
| | | | | | | | | This fixes a regression introduced with e34dccc9e Task-number: QTBUG-31635 Change-Id: I7c991f3b98f5c51e5fb3c12db04d3ace7be87010 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
* Fix xkbcommon.pri not to override QMAKE_CFLAGSJ-P Nurmi2013-06-121-1/+1
| | | | | | | Task-number: QTBUG-31585 Change-Id: I6628a8eececc34aef4cd358ad2c8b246d8845602 Reviewed-by: Jani Heikkinen <jani.heikkinen@digia.com> Reviewed-by: Andy Shaw <andy.shaw@digia.com>
* Cocoa: Make QWidget::showNormal() work on minimized windowsGabriel de Dietrich2013-06-121-1/+1
| | | | | | | | | | | | | | Cocoa sets the NSWindow hidden when it's minimized, and we don't propagate that further to QWindow or QWidget (QWidget's 'visible' documentation is quite ambiguous about that state). The obvious fix is to check for QWindow's visibility. However, this might need to be corrected later if we truly want the visible state to be in sync. Task-number: QTBUG-31117 Change-Id: I457452eff75e6ea746a0ef5351104f8bbb65f98b Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* Cocoa: Make sure internal minimized state is up to dateGabriel de Dietrich2013-06-122-14/+17
| | | | | | | | Refactors some code from previous changes addressing the same issue for maximized and fullscreen states. Change-Id: I8a27274a90e6610b424ea7af3269369a1d724c48 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* Cocoa: Update window state when maximizing from the title barGabriel de Dietrich2013-06-124-0/+20
| | | | | | | | There's no NSWindow notification we can listen to, but we can override behavior from its delegate. Change-Id: I61cebf4119f83c770fe4e7f45ff0d4e8bf9d0df9 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* Cocoa: Make sure we update internal window fullscreen stateGabriel de Dietrich2013-06-123-4/+17
| | | | | | | | | | | We update the internal/synched state by assigning it its QWindow's state. Since that one is not a flag, it can only be in one state at a time, meaning that we may lose the maximized state (but we've been losing it for some time). Task-number: QTBUG-30139 Change-Id: Idf30713c6ae912cafe3bbdd7be18214cf4de34f7 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* Cocoa: Remove compilation warningGabriel de Dietrich2013-06-121-0/+1
| | | | | Change-Id: Ib530e7ef4643de07aec91c4af0de8bbedef9882a Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* Update support status for older Mac OS X platforms.Jake Petroules2013-06-121-3/+3
| | | | | | Change-Id: Ifdf487fbae8acbffb32b6db5f8dd93e9eb213d77 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
* Qdoc: replaced example file qt.qdocconf with qtgui.qdocconfNico Vertriest2013-06-122-35/+65
| | | | | | Task-number: QTBUG-31574 Change-Id: Idf8509395dd5f16c696473d1eeb91fb86f2b97e7 Reviewed-by: Martin Smith <martin.smith@digia.com>
* Fix gcc warnings about unused-valueKai Koehne2013-06-121-1/+1
| | | | | | | | | Fix multiple gcc warnings about statements in accessibleDebug arguments have no effect. Change-Id: I34bf05d911707f0b50592bf76442a3805c560d56 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
* Avoid floating point exceptions in rasterizeLine.Gunnar Sletta2013-06-121-16/+45
| | | | | | | Task-number: QTBUG-16757 Change-Id: I3ef988f1e039c12529d62197d85a62f201e4ae12 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Disable long press on AndroidPaul Olav Tvete2013-06-101-0/+4
| | | | | | | | | | | | | | | | Remove the mapping from press-and-hold to right-mouse-button press. This logic was implemented in the android plugin, and there was no way to disable it for applications that needed to handle long presses in a different way. Add an environment variable to enable the mapping for those who really need it, but do not advertise it. (We want to add a proper API for this in 5.2) Task-number: QTBUG-31644 Change-Id: Ia5ae75d6147485b73c78b7c3fa88d11af5d84c06 Reviewed-by: BogDan Vatra <bogdan@kde.org>
* Fix drawing of 0-width polylines from outside the devicerect.Gunnar Sletta2013-06-102-17/+27
| | | | | | | | | | | | | | This was broken by a previous fix which aimed to fix gaps in polylines with tiny line segments. The result was that we skipped updating the origin point when stroke() didn't produce pixels which accidentally included the case of the line being completely outside the deviceRect. I fixed this by returning the value of clipLine in drawLine to the caller so we could still update the origin for this case. Task-number: QTBUG-31579 Change-Id: Iac29436f042da7658bbeaf9370351dc6f2c95065 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* qdoc: QGLFrameBufferObject::bindDefault() was marked \internalMartin Smith2013-06-101-1/+0
| | | | | | | | | The \internal is removed. Task-number: QTBUG-31638 Change-Id: Ib1b65783599fe50e907373e3223a0774f17ac65e Reviewed-by: Jerome Pasion <jerome.pasion@digia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
* Remove the use of CMAKE_FIND_ROOT_PATH.Stephen Kelly2013-06-102-9/+7
| | | | | | | | | | | | This is actually a list in CMake, not a value to be prepended to paths. Specify the QT_SYSROOT instead to root the location of include directories. CMake will soon get a CMAKE_SYSROOT variable which will replace this. Change-Id: I239f69f127f3676a3835aa4f29638f44ef209819 Reviewed-by: Volker Krause <volker.krause@kdab.com> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Windows save file dialog: Set default suffix only once.Friedemann Kleint2013-06-101-18/+18
| | | | | | | | | | | | | | | | | IFileDialog::SetDefaultExtension() needs to be called for the dialog to automatically update the suffix when the user chooses a new file type. Calling it IFileDialogEvents::OnTypeChanged as introduced by 42760e43eaa64e834809ef5fb01a83cfb75f4f04 causes it to use the previous suffix when switching. Call in setNameFilters() using the first available suffix instead. Task-number: QTBUG-31381 Task-number: QTBUG-30748 Change-Id: Idd532e4190c752aa80abce963dd0389be7d22a34 Reviewed-by: Andy Shaw <andy.shaw@digia.com> Reviewed-by: Oliver Wolff <oliver.wolff@digia.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Fix issue when QKeyEvent::text() was returning empty stringGatis Paeglis2013-06-101-5/+5
| | | | | | | | | | | The code that sets 'text' variable was executed only for KeyPress events. This patch moves 'text' initialization higher up where it will be run for both - KeyPress and KeyRelease events. Task-number: QTBUG-31285 Change-Id: I140de9ef5d29beedad276d348bed964ecdf46f9d Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com> Reviewed-by: Andy Shaw <andy.shaw@digia.com>
* Doc: Fixed snippet issues in QDoc documentationTopi Reinio2013-06-104-11/+11
| | | | | | | | | | | QDoc uses .qdoc files as snippets in other .qdoc files. These snippet .qdoc files are also parsed, which is not the intent. This change resolves the issue by renaming the files to have a different extension. Task-number: QTBUG-31574 Change-Id: I399c8b714478b9c4b8fbe2db53f601e6a1386cea Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* Doc: Mark QOpenGLFunctions_4_1_Core as a wrapper classTopi Reinio2013-06-101-0/+1
| | | | | | | | | The class documentation missing the \wrapper command, making QDoc complain a lot. Change-Id: Iad8fa3d2facadfb3393642dc08ff4dc416bdccc7 Reviewed-by: Martin Smith <martin.smith@digia.com> Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* redo include path logic for pre-generated headersOswald Buddenhagen2013-06-102-3/+5
| | | | | | | | | make the include dir in the source tree the "main" include path, as that's where the majority of the headers is. then selectively add the shadowed dirs. Change-Id: I03ad13cfcf77175c141b94d41b1221740d851faf Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* put ANGLE includes in a QtANGLE subdirOswald Buddenhagen2013-06-105-6/+14
| | | | | | | | | otherwise even non-angle builds with pre-generated headers will get them into their include path, which is Not Good (tm). Change-Id: Ie98354297baf3564ef82b3d4a32e5763e625b8f2 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* RecalcAdvances and DoKerning should agree on when to use design metricsAllan Sandfeld Jensen2013-06-072-3/+16
| | | | | | | | | | | | | | QFontEngineFT::recalcAdvances uses design metrics if hinting is disabled or slight. QFontEngine::doKerning only follows the QFontEngine::DesignMetrics flag. This means in some instances the advances will be calculated in subpixels but kerned in full pixels. This patch makes QFontEngineFT decide if it should request design metrics from QFontEngine::doKerning or not. Change-Id: Ia0236efde2d7269623f690a6074afbe26e07c458 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>