| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
Task-number: QTBUG-16425
Reviewed-by: Gabriel
Reviewed-by: Markus Goetz
|
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* '4.7' of scm.dev.nokia.troll.no:qt/doc-staging: (29 commits)
Doc: Added a missing license header.
doc: Replaced some \raw and \endraw uses with \table and \endtable
doc: Replaced some \raw and \endraw uses with \table and \endtable
doc: Replaced some \raw and \endraw uses with \table and \endtable
Doc: Added a note about the Public Suffix List.
Doc: Fixed doc bug in Diagram Scene example
doc: Removed some empty \row commands from a table.
Doc: Added link to QML Basic Types in main Qt Quick page.
Doc: Added missing What's New information for Qt 4.6 and 4.7.
Doc: Fixed incorrect case in a page file name.
Doc: Added a link to the QML Basic Types page.
Doc: Removed duplicate external page reference.
Doc: Fixed a link to the correct searchPaths() function.
Doc: Added documentation about the use of null custom title bar widgets.
Doc: Added a missing external page reference.
Fixed the QML Focus document. Fixed snippets, images, and formatting.
Added QML coding convention for "private" properties.
Fixed link to qtestlib-tools by adding link to qt-webpages.qdoc.
Some whitespace fixes.
Fixed a bug by changing the id name to lower case.
...
|
| |\ |
|
| |\ \ |
|
| |\ \ \ |
|
| | | | | |
|
| |\ \ \ \ |
|
| |\ \ \ \ \ |
|
| |\ \ \ \ \ \ |
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Task-number: QTBUG-15492
|
| |\ \ \ \ \ \ \ |
|
| |\ \ \ \ \ \ \ \ |
|
| |\ \ \ \ \ \ \ \ \ |
|
| | |\ \ \ \ \ \ \ \ \ |
|
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | | |
Task-number: QTBUG-15488
|
| |_|_|_|_|_|_|_|_|_|/
|/| | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Reviewed-By: Trust Me
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
The cell corresponding to an allocated timer ID in the free list is unused
(because the ID isn't free). So use it to store an invalid value that we
can check against the user's value.
This provides some protection against a given timer being released twice.
Since we store the serial counter of the nextFreeTimerId, getting the
same ID twice is a 1-in-128 chance.
Reviewed-By: Bradley T. Hughes
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Reviewed-By: Bradley T. Hughes
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
The nextFreeTimerId's serial counter was only being updated on timer
ID releasing. It needs to be updated on allocation too.
Reviewed-by: Bradley T. Hughes
|
| |_|_|_|_|_|_|_|_|/
|/| | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
Also add the notes for where to place .loadAcquire when that function
exists.
Reviewed-By: Bradley T. Hughes
|
| |_|_|_|_|_|_|_|/
|/| | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
It's completely wrong to assume that any Linux has
features.h. Instead, include something that comes from the libc (like
stdlib.h, which is specified by ISO C 89) and hope that __GLIBC__ gets
defined.
Specifically don't do this to stddef.h as that one comes from the
compiler.
Reviewed-by: Andreas Kling
|
| |_|_|_|_|_|_|/
|/| | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Merge-request: 939
Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com>
|
| |_|_|_|_|_|/
|/| | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Task-number: QTBUG-14929, QTBUG-15739
Reviewed-by: TrustMe
|
|\ \ \ \ \ \ \
| |_|_|_|_|_|/
|/| | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1: (21 commits)
Fix strict-aliasing violation warning.
Fix warning about %x parameter type mismatch in EGL
Fix warning about address of a function being constant.
Fix warnings related to unused variables.
Fix silly "will be initialised after" warning.
Fix warning about mixing integral with non-integral type in ?:
Fix warning about use of uninitialised variable
Fix "value not in enum" warning with GCC 4.5.
Fix warnings with GCC 4.5: some cases are not part of the enum
Fix a race condition related to service acquisition.
QNetworkReply autotest: fix possible crash
QKqueueFileSystemWatcher: don't stop thread that isn't running
Fix QSettings auto test to use QTRY_VERIFY
tst_QFileSystemWatcher: Don't exit the event loop on first signal.
QPollingFileSystemWatcherEngine: Fix double report of directory change.
QKqueueFileSystemWatcherEngine: Use higher file descriptors.
QKqueueFileSystemWatcherEngine: Unlock mutex between two events.
QKqueueFileSystemWatcherEngine: Unlock mutex before calling write(2).
QKqueueFileSystemWatcherEngine: Handle kevent(2) returning EINTR.
QKqueueFileSystemWatcherEngine: Deleting kevent is handled by close().
...
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
When removing paths from the watch list, if we end up with an empty
watch list, we would send a request to the processing thread to quit.
In the case where the watch list was empty to begin with (the paths
being removed weren't actually being watched) the request to quit would
still be queued. If the processing thread wasn't running (and it
shouldn't if there weren't any paths being watched) the request to quit
would still be posted but not processed.
The next time paths were added and the thread started, the request would
be processed and the thread would quit at once.
When removing paths from the list, we now check whether the watch list
is empty to begin with and exit early without asking the processing
thread to quit itself.
Task-Number: QTBUG-14435
Reviewed-by: Bradley T. Hughes
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
The polling engine first retrieves a QFileInfo for a given path, then
tests whether it's different from before and if so, stores the new file
info and emits a signal. In case path is a directory the test also
checks if the list of directory entries has changed. This creates a
window between retrieving the file info and the test in which a file can
be added/removed from the directory or the directory itself can be
removed. In that case the test returns true, because the list of entries
has changed, but outdated file info is stored which means that on the
next timeout the same change will be reported a second time.
Therefore, refresh the file info after the test for changes.
Merge-request: 2425
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
A file descriptor is used for every path to be monitored, but descriptors
below FD_SETSIZE (typically 1024) are precious, for use with select(2). To
allow the application (and other parts of Qt) to use select(2), try to
duplicate the descriptor returned by open(2) above FD_SETSIZE and close(2)
the original. However, only do so when the descriptor table is already
fairly large (FD_SETSIZE / 2). This keeps the descriptor table small for
applications that use only a few descriptors.
While here, also set the close-on-exec flag on the (new) descriptor.
Merge-request: 2425
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
In the worker thread unlock the mutex between processing two events.
Otherwise it's possible for the worker thread to block the application
thread when many events occur. Also, there's no need to lock the mutex
when processing a pipe event. Generally the worker thread should hamper
the application thread as little as possible, so only lock the mutex
where needed.
Merge-request: 2425
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Calls to write(2) potentially block, so make sure the application thread
unlocks the mutex before it writes to the pipe between itself and the
worker thread, so the latter can continue to process events and eventually
unblock the write call (if needed) by emptying the pipe.
Merge-request: 2425
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
The worker thread exits whenever the kevent call returns an error, but
in the case of EINTR (interrupted by signal) it should just call kevent
again. Otherwise for instance, attaching a debugger to the process
causes the worker thread to exit because of the SIGSTOP it receives.
Merge-request: 2425
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Merge-request: 2425
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
|
| | |_|_|_|/
| |/| | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Using EV_ONESHOT and re-enabling the kevent after emitting the signal
allows for a window in which file system changes can go undetected. By
using EV_CLEAR instead the kevent can stay enabled.
Merge-request: 2425
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
|
|/ / / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
QProcessPrivate::startDetached() in qprocess_symbian.cpp was leaking
RProcess object.
Reviewed-by: Janne Koskinen
|
|\ \ \ \ \
| |_|_|_|/
|/| | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public: (28 commits)
Fixed tst_qwidget::winIdChangeEvent
Use parent class function to generate Makefile headers in Symbian
Fix spaces
Fix QPixmap::fromImage() in the OpenVG pixmap backend.
Native color dialog on symbian
Fix non-stroked filled paths in OpenVG paint engine.
Fix symbian-mmp.conf include path
Fix a build break when namespace is defined
Fixed namespace issues related to epocroot.cpp
Corrected ASCII comparison and removed extra braces
Add symbian scope for qfiledialog_symbian.cpp
Resolve EPOCROOT in qt.conf using same logic as in .pro
Make epocroot resolving compatible with more build environments
Fix for QtOpenGL RVCT4 compilation error
Removed extra cpp and done changes based on comments
Correct flags for Symbian file dialogs
Fix for WServ 64 crash on Symbian.
Use include(original mkspec) instead of copying of mkspec to default
Fixed code style of d92cbfc5, reported by git push.
Switched qdesktopservices to use SchemeHandler for Symbian^3 and later.
...
|
| |\ \ \ \
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public: (27 commits)
Use parent class function to generate Makefile headers in Symbian
Fix spaces
Fix QPixmap::fromImage() in the OpenVG pixmap backend.
Native color dialog on symbian
Fix non-stroked filled paths in OpenVG paint engine.
Fix symbian-mmp.conf include path
Fix a build break when namespace is defined
Fixed namespace issues related to epocroot.cpp
Corrected ASCII comparison and removed extra braces
Add symbian scope for qfiledialog_symbian.cpp
Resolve EPOCROOT in qt.conf using same logic as in .pro
Make epocroot resolving compatible with more build environments
Fix for QtOpenGL RVCT4 compilation error
Removed extra cpp and done changes based on comments
Correct flags for Symbian file dialogs
Fix for WServ 64 crash on Symbian.
Use include(original mkspec) instead of copying of mkspec to default
Fixed code style of d92cbfc5, reported by git push.
Switched qdesktopservices to use SchemeHandler for Symbian^3 and later.
Removed unnecessary Q_OS_SYMBIAN flags from qdesktopservices_s60.cpp.
...
|
| | |\ \ \ \
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Conflicts:
src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
|
| | |\ \ \ \ \
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public: (21 commits)
Fixed handling of QInputMethodEvents with nonzero replacementLength.
Fixed namespace issues related to epocroot.cpp
Corrected ASCII comparison and removed extra braces
Add symbian scope for qfiledialog_symbian.cpp
Resolve EPOCROOT in qt.conf using same logic as in .pro
Make epocroot resolving compatible with more build environments
Fix for QtOpenGL RVCT4 compilation error
Removed extra cpp and done changes based on comments
Correct flags for Symbian file dialogs
Fix for WServ 64 crash on Symbian.
Use include(original mkspec) instead of copying of mkspec to default
Fixed code style of d92cbfc5, reported by git push.
Switched qdesktopservices to use SchemeHandler for Symbian^3 and later.
Removed unnecessary Q_OS_SYMBIAN flags from qdesktopservices_s60.cpp.
Documented usage of dialogs on Symbian
Native file dialog on Symbian^3
Add Location as self signable capability in patch_capabilities.pl
Localize .loc and .pkg content based on TRANSLATIONS
Bump Qt version to 4.7.2.
SSL: Fix for systemCaCertificates being called first on symbian
...
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Task-number: QTBUG-15393
Reviewed-by: axis
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Previously it was only possible to use EPOCROOT in qt.conf via env
variable, while qmake & configure could resolve it also via devices.xml.
Changed qt.conf parsing to support $${EPOCROOT} tag and use same
resolving logic as qmake & configure.
Task-number: QTBUG-15393
Reviewed-by: axis
|
| | | |\ \ \ \ \
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public:
Fix for WServ 64 crash on Symbian.
Use include(original mkspec) instead of copying of mkspec to default
Fixed code style of d92cbfc5, reported by git push.
Switched qdesktopservices to use SchemeHandler for Symbian^3 and later.
Removed unnecessary Q_OS_SYMBIAN flags from qdesktopservices_s60.cpp.
Documented usage of dialogs on Symbian
Native file dialog on Symbian^3
Add Location as self signable capability in patch_capabilities.pl
Localize .loc and .pkg content based on TRANSLATIONS
Bump Qt version to 4.7.2.
SSL: Fix for systemCaCertificates being called first on symbian
Send WinIdChange event when winId is set to zero
|
| | | | |\ \ \ \ \
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
Conflicts:
tools/qdoc3/test/qt-build-docs.qdocconf
tools/qdoc3/test/qt.qdocconf
|
| | | | |\ \ \ \ \ \
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public:
Add Location as self signable capability in patch_capabilities.pl
Localize .loc and .pkg content based on TRANSLATIONS
Bump Qt version to 4.7.2.
SSL: Fix for systemCaCertificates being called first on symbian
Send WinIdChange event when winId is set to zero
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Reviewed-by: Trust Me
|
|\ \ \ \ \ \ \ \ \ \ \
| |/ / / / / / / / / /
|/| | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/qt-multimedia-staging:
Prevent compilers optimizing eval timebomb code out of existence.
|
| | |_|_|_|_|/ / / /
| |/| | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
The variable that holds the eval license key is a placeholder that is
patched during package installation. Unfortunately, for a non-final
package build, the placeholder is filled with nulls at compile-time and
a clever compiler will optimize away most of the eval timebomb code due
to a check in the eval code for the first character of the license key
being null.
This commit makes the variable that holds the license key volatile, to
convince compilers that they cannot make assumptions about the contents
of the variable when optimizing.
Task-number: QT-3848
Acked-by: Thiago Macieira
|
|\ \ \ \ \ \ \ \ \ \
| |/ / / / / / / / /
|/| | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2:
tst_qthread: fix compilation
Round origin of text in OpenVG engine
QThread::exec(): Fix possibility to enter several time the event loop
QMessageBox: change the documentation to reflect that it is application modal
Compile on OpenBSD
Doc: Q_PROPERTY, implements the setter/getter in the example
Dynamically register the event number.
Fix wrong error assumption when converting "0.0" to double
|
| |\ \ \ \ \ \ \ \ \
| | |_|_|_|_|_|_|_|/
| |/| | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2:
Round origin of text in OpenVG engine
QThread::exec(): Fix possibility to enter several time the event loop
QMessageBox: change the documentation to reflect that it is application modal
Compile on OpenBSD
Doc: Q_PROPERTY, implements the setter/getter in the example
Dynamically register the event number.
Fix wrong error assumption when converting "0.0" to double
|
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
If one call exit() before calling exec(), this should prevent the
event loop from starting once, but later calls to exec() should work.
This is a regression against Qt 4.6 introduced when fixing QTBUG-1184
Task-number: QTBUG-15378
Reviewed-by: Joao
Reviewed-by: Brad
|
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
Fail to compile since f3405a516ac30fc7dee1
Reviewed-by: Joao
|
| | |/ / / / / / /
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
The function qstrtod calls strtod without first resetting the errno
but verifying it nonetheless. This could lead to situations where
the errno was already set to ERANGE and hence it would mistakenly
assume the conversion could not be done right.
Merge-request: 2507
Reviewed-by: Harald Fernengel <harald.fernengel@nokia.com>
(cherry picked from commit 759c0b5ecf84201f36d44b4e6c46da1886d85dee)
|