| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Change-Id: I43b95991fcf37ac8b125b176a59518e6a81e11dc
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
|
|
|
|
|
|
| |
Generalized from the logging used in the Apple key mapper.
Change-Id: I61cc120e31b72995071756961d36f6a7fae14553
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
|
|
|
|
|
|
|
|
| |
Having the explicit type instead of the opaque int makes it clearer
what we're dealing with.
Task-number: QTBUG-116873
Change-Id: I19e42ed329e15ab25a958602ecfb99b1c9d52a99
Reviewed-by: Liang Qi <liang.qi@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The QKeyMapper class never got a platform integration companion.
As we might be adding more functionality here in the future, let's
fix that now, instead of adding more hooks directly to the platform
integration class.
The QKeyMapper will soon update its possibleKeys signature to
return QKeyCombination, but for now transform the result.
Change-Id: I88ef498180b2a8a7937a74627b7eb6b5156e872a
Reviewed-by: Liang Qi <liang.qi@qt.io>
|
|
|
|
|
|
|
| |
To match the QPA layer (QPlatformIntegration, QPlatformKeyMapper).
Change-Id: If1b4817eb334c6cdf1ccd587794701245076bd2f
Reviewed-by: Liang Qi <liang.qi@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
As described in QTBUG-27681, we no longer send KeyboardLayoutChange
events in Qt 5 and up. We have QInputMethod::localeChanged, but that
doesn't cover the cases where the input language stays the same, but
the layout is changed.
None of our widgets react to KeyboardLayoutChange these days, but
ideally we should send KeyboardLayoutChange if we can plumb it from
the platforms.
However that plumbing wouldn't live in QKeyMapper, and having it
around as dead code doesn't help, so remove it for now, and track
the work to implement it in QTBUG-27681.
Task-number: QTBUG-27681
Change-Id: I480590550f3bc741b829fb30aa85393b07d5c16f
Reviewed-by: Liang Qi <liang.qi@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There is no point in maintaining the keyboardInputLocale and
keyboardInputDirection in the QKeyMapperPrivate, as these
things are handled by QInputContext nowadays. The values
were never updated either, so the base class implementation
of QPlatformInputContext referring to them was confusing.
With those gone, we can remove the entire class.
Subclasses of QPlatformInputContext typically only override
locale(), so we now base the input language direction on the
current locale(), giving dynamic updates of the direction as
well (without the signal, but this will be fixed in a follow
up patch).
Change-Id: I16ae4097eadadd278e60edea3c1101ab90ed7444
Reviewed-by: Liang Qi <liang.qi@qt.io>
|
|
|
|
|
| |
Change-Id: I1988ac60689b3e6f4b29e38d1167d2b998702c09
Reviewed-by: Liang Qi <liang.qi@qt.io>
|
|
|
|
|
|
|
| |
Task-number: QTBUG-116873
Change-Id: I9091f4a9d465fb928afcabce0536fcd2d03b7f82
Reviewed-by: Andrey Butirsky <butirsky@gmail.com>
Reviewed-by: Liang Qi <liang.qi@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Files that have to be modified by hand are modified.
License files are organized under LICENSES directory.
Task-number: QTBUG-67283
Change-Id: Id880c92784c40f3bbde861c0d93f58151c18b9f1
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
Including moc files directly into their classes' TU tends to improve
codegen and enables extended compiler warnings, e.g. about unused
private functions or fields.
Pick-to: 6.3 6.2 5.15
Task-number: QTBUG-102886
Change-Id: I1945741794c25679a9d94c0d68c8642e2c823502
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The use of a freestanding function is not needed now that the name
doesn't alias the nativeInterface accessor function, and was just
adding complexity to the machinery.
People not familiar with the code will have an easier time following
the flow through the helper member function, and we no longer need
to declare our own export macros.
Pick-to: 6.2
Change-Id: I17530b7e89939cfc19ab8ffaa076b7129ae02dcf
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
The latter forces users to build with RTTI enabled, as the typeid
use is in our public headers. Surprisingly this is also the case
even without instantiating the relevant template.
Change-Id: Icd18a2b85b250e0b77960797e5c43b7eaf9bd891
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The initial approach for providing public access to native
interfaces via T::nativeInteface<I>() was based on the template
not being defined, and then having explicit instantiations of
the supported types in a source file, so that the accessors
were exported and available to the user.
This worked fine for "simple" types such as QOpenGLContext
and QOffscreenSurface, but presented a problem in the context
of classes with subclasses, such as Q{Core,Gui}Application.
To ensure that a native interface for QCoreApplication was
accessible both from QCoreApplication and its subclasses,
while at the same time preventing a native interface for
QGuiApplication to be accessible for QCoreApplication, the
nativeInterface() template function had to be declared in
each subclass. Which in turn meant specializing each native
interface once for each subclass it was available in.
This quickly became tedious to manage, and the requirements
for exposing a new native interface wasn't very clear with
all these template specializations and explicit instantiations
spread around.
To improve on this situation, while also squashing a few
other birds at the same time, we change the approach to
use type erasure. The definition of T::nativeInteface<I>()
is now inline, passing on the requested interface to a per
type (T, not I) helper function, with the interface type
flattened to a std::type_info.
The type_info requested by the user is then compared to the
available types in a single per-type (T) "switch statement",
which is a lot easier to follow for someone trying to trace
the logic of how a native interface is resolved.
We can safely rely on type_info being stable between the user
application and the Qt library as a result of exporting the
type info for each native interface, by explicitly ensuring
they have a key function. This is the same mechanism that
ensures we can safely dynamic_cast these interfaces, even
across library boundaries.
The use of a free standing templated helper function instead
of a member function in the type T, is to avoid shadowing issues,
and to not pollute the class namespace of T with the helper
function.
Since we are already changing the plumbing for how a user
resolves a native interface for a type T, we take the opportunity
to add a few extra safeguards to the machinery.
First, we add a static assert in the T::nativeInteface<I>()
definition, that ensures that only compatible interfaces,
as declared by the interface themselves, are allowed.
This ensures a compile time error when an incompatible
interface is requested, which improves on the link time
errors we had prior to this patch, and also offsets the
one downside of type erasure, namely that errors are only
caught at runtime.
Secondly, each interface meant for public consumption through
T::nativeInteface<I>() is declared with a revision, which
is checked when requesting the interface. This allows us
to bump the revision when we make breaking changes to the
interface that would have otherwise been binary incompatible.
Since the user will never see this interface due to the
revision check, they will not end up calling methods that
have been removed or renamed.
One advantage of moving to a type-erased approach for the
plumbing is that we're not longer exposing the native
interface types as part of the T::nativeInteface symbols.
This means that if we ever want to rename a native interface,
the only exported symbol that the user code relies on is
the type info. Renaming is then possible by just exporting
the type info for the old interface, but leaving it empty.
Since no class in Qt implements the old native interface,
the user will just get a nullptr back, similarly to bumping
the revision of an interface.
Change-Id: Ie50d8fb536aafe2836370caacb22afbcfaf1712a
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In the porting from Qt 4 to Qt 5 an assumption was made in QKeyMapper
that the underlying platform implementation needed the native scan
code to be able to resolve the possible keymaps for an event.
As a result, the macOS platform plugin started sending key events
with a fake native scan code of 1, so that it would still be allowed
to map key events.
Which in turn led to the documentation of QKeyEvent::nativeScanCode()
getting an exception for macOS.
Let's clean up this by removing the original assumption, and leave it
up to the platforms to decide what information from the key event
is needed.
QKeyMapperPrivate::possibleKeys() will still call extractKeyFromEvent
as a fallback if the platform layer doesn't return any possible keys.
Change-Id: I122a45bcec658c45ccc0b2c0671eb264d85d7be6
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
C++20 via P1120 is deprecating arithmetic operations between
unrelated enumeration types, and GCC 10 is already complaining.
Hence, these operations might become illegal in C++23 or C++26 at
the latest.
A case of this that affects Qt is in key combinations: a
QKeySequence can be constructed by summing / ORing modifiers and a
key, for instance:
Qt::CTRL + Qt::Key_A
Qt::SHIFT | Qt::CTRL | Qt::Key_G (recommended, see below)
The problem is that the modifiers and the key belong to different
enumerations (and there's 2 enumerations for the modifier, and one
for the key).
To solve this: add a dedicated class to represent a combination of
keys, and operators between those enumerations to build instances
of this class.
I would've simply defined operator|, but again docs and pre-existing
code use operator+ as well, so added both to at least tackle simple
cases (modifier + key).
Multiple modifiers create a problem: operator+ between them yields
int, not the corresponding flags type (because operator+ is not
overloaded for this use case):
Qt::CTRL + Qt::SHIFT + Qt::Key_A
\__________________/ /
int /
\______________/
int
Not only this loses track of the datatypes involved, but it would
also then "add" the key (with NO warnings, now its int + enum, so
it's not mixing enums!) and yielding int again.
I don't want to special-case this; the point of the class is
that int is the wrong datatype. Everything works just fine when
using operator| instead:
Qt::CTRL | Qt::SHIFT | Qt::Key_A
\__________________/ /
Qt::Modifiers /
\______________/
QKeyCombination
So I'm defining operator+ so that the simple cases still work,
but also deprecating it.
Port some code around Qt to the new class. In certain cases,
it's a huge win for clarity. In some others, I've just added
the necessary casts to make it still compile without warnings,
without attempting refactorings.
[ChangeLog][QtCore][QKeyCombination] New class to represent
a combination of a key and zero or more modifiers, to be used
when defining shortcuts or similar.
[ChangeLog][Potentially Source-Incompatible Changes] A keyboard
modifier (such as Qt::CTRL, Qt::AltModifier, etc.) should be
combined with a key (such as Qt::Key_A, Qt::Key_F1, etc.) by using
operator|, not operator+. The result is now an object of type
QKeyCombination, that stores the key and the modifiers.
Change-Id: I657a3a328232f059023fff69c5031ee31cc91dd6
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
The plumbing from QKeyMapper to the platform specific key mappers
via QPA was never done, so this method is unused. The code path
in QKeyMapper that would trigger it would be changeKeyboard(),
but that's already handled in QCocoaKeyMapper, and wouldn't be
initiated from the cross platform code in any case.
Change-Id: Ibc0c419627fc0430d028945038c1f2fbafe42d4b
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
Move away from using 0 as pointer literal.
Done using clang-tidy. This is not complete as
run-clang-tidy can't handle all of qtbase in one go.
Change-Id: I1076a21f32aac0dab078af6f175f7508145eece0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
From Qt 5.7 -> LGPL v2.1 isn't an option anymore, see
http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/
Updated license headers to use new LGPL header instead of LGPL21 one
(in those files which will be under LGPL v3)
Change-Id: I046ec3e47b1876cd7b4b0353a576b352e3a946d9
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.
Outdated header.LGPL removed (use header.LGPL21 instead)
Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing
combination. New header.LGPL-COMM taken in the use file which were
using old header.LGPL3 (src/plugins/platforms/android/extract.cpp)
Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license
combination
Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe
Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
|
|
|
|
|
|
|
|
|
| |
- Renamed LICENSE.LGPL to LICENSE.LGPLv21
- Added LICENSE.LGPLv3
- Removed LICENSE.GPL
Change-Id: Iec3406e3eb3f133be549092015cefe33d259a3f2
Reviewed-by: Iikka Eklund <iikka.eklund@digia.com>
|
|
|
|
|
|
| |
Change-Id: I9730247371ccf0e83579b71e13a9f3d8adcf0fff
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
|
|
|
|
|
| |
Change-Id: Ic804938fc352291d011800d21e549c10acac66fb
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
|
|
|
|
|
|
|
|
| |
Change copyrights and license headers from Nokia to Digia
Change-Id: If1cc974286d29fd01ec6c19dd4719a67f4c3f00e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
|
|
|
|
|
|
|
|
|
|
| |
As in the past, to avoid rewriting various autotests that contain
line-number information, an extra blank line has been inserted at the
end of the license text to ensure that this commit does not change the
total number of lines in the license header.
Change-Id: I311e001373776812699d6efc045b5f742890c689
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
|
|
|
|
|
|
|
| |
Replace Nokia contact email address with Qt Project website.
Change-Id: I431bbbf76d7c27d8b502f87947675c116994c415
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
|
|
|
|
|
| |
Change-Id: I02f2c620296fcd91d4967d58767ea33fc4e1e7dc
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
|
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
examples/animation/animatedtiles/animatedtiles.pro
examples/animation/appchooser/appchooser.pro
examples/animation/easing/easing.pro
examples/animation/easing/window.h
examples/animation/moveblocks/moveblocks.pro
examples/animation/states/states.pro
examples/animation/stickman/stickman.pro
examples/dbus/dbus-chat/dbus-chat.pro
examples/dbus/dbus.pro
examples/dbus/remotecontrolledcar/car/car.pro
examples/dbus/remotecontrolledcar/controller/controller.pro
examples/dbus/remotecontrolledcar/remotecontrolledcar.pro
examples/desktop/desktop.pro
examples/desktop/screenshot/screenshot.pro
examples/dialogs/classwizard/classwizard.pro
examples/dialogs/configdialog/configdialog.pro
examples/dialogs/dialogs.pro
examples/dialogs/extension/extension.pro
examples/dialogs/findfiles/findfiles.pro
examples/dialogs/licensewizard/licensewizard.pro
examples/dialogs/sipdialog/sipdialog.pro
examples/dialogs/standarddialogs/standarddialogs.pro
examples/dialogs/tabdialog/tabdialog.pro
examples/dialogs/trivialwizard/trivialwizard.pro
examples/draganddrop/draggableicons/draggableicons.pro
examples/draganddrop/draggabletext/draggabletext.pro
examples/draganddrop/dropsite/dropsite.pro
examples/draganddrop/fridgemagnets/fridgemagnets.pro
examples/draganddrop/puzzle/puzzle.pro
examples/effects/blurpicker/blurpicker.pro
examples/effects/fademessage/fademessage.pro
examples/effects/lighting/lighting.pro
examples/examples.pro
examples/gestures/imagegestures/imagegestures.pro
examples/graphicsview/anchorlayout/anchorlayout.pro
examples/graphicsview/basicgraphicslayouts/basicgraphicslayouts.pro
examples/graphicsview/collidingmice/collidingmice.pro
examples/graphicsview/diagramscene/diagramscene.pro
examples/graphicsview/dragdroprobot/dragdroprobot.pro
examples/graphicsview/elasticnodes/elasticnodes.pro
examples/graphicsview/flowlayout/flowlayout.pro
examples/graphicsview/graphicsview.pro
examples/graphicsview/simpleanchorlayout/simpleanchorlayout.pro
examples/graphicsview/weatheranchorlayout/weatheranchorlayout.pro
examples/ipc/ipc.pro
examples/ipc/sharedmemory/sharedmemory.pro
examples/itemviews/addressbook/addressbook.pro
examples/itemviews/basicsortfiltermodel/basicsortfiltermodel.pro
examples/itemviews/chart/chart.pro
examples/itemviews/coloreditorfactory/coloreditorfactory.pro
examples/itemviews/combowidgetmapper/combowidgetmapper.pro
examples/itemviews/customsortfiltermodel/customsortfiltermodel.pro
examples/itemviews/dirview/dirview.pro
examples/itemviews/editabletreemodel/editabletreemodel.pro
examples/itemviews/fetchmore/fetchmore.pro
examples/itemviews/frozencolumn/frozencolumn.pro
examples/itemviews/itemviews.pro
examples/itemviews/pixelator/pixelator.pro
examples/itemviews/puzzle/puzzle.pro
examples/itemviews/simpletreemodel/simpletreemodel.pro
examples/itemviews/simplewidgetmapper/simplewidgetmapper.pro
examples/itemviews/spinboxdelegate/spinboxdelegate.pro
examples/itemviews/stardelegate/stardelegate.pro
examples/ja_JP/linguist/hellotr/hellotr.pro
examples/layouts/basiclayouts/basiclayouts.pro
examples/layouts/borderlayout/borderlayout.pro
examples/layouts/dynamiclayouts/dynamiclayouts.pro
examples/layouts/flowlayout/flowlayout.pro
examples/layouts/layouts.pro
examples/linguist/arrowpad/arrowpad.pro
examples/linguist/hellotr/hellotr.pro
examples/linguist/linguist.pro
examples/linguist/trollprint/trollprint.pro
examples/mainwindows/application/application.pro
examples/mainwindows/dockwidgets/dockwidgets.pro
examples/mainwindows/mainwindows.pro
examples/mainwindows/mdi/mdi.pro
examples/mainwindows/menus/menus.pro
examples/mainwindows/recentfiles/recentfiles.pro
examples/mainwindows/sdi/sdi.pro
examples/network/network.pro
examples/opengl/opengl.pro
examples/openvg/openvg.pro
examples/painting/basicdrawing/basicdrawing.pro
examples/painting/concentriccircles/concentriccircles.pro
examples/painting/fontsampler/fontsampler.pro
examples/painting/imagecomposition/imagecomposition.pro
examples/painting/painterpaths/painterpaths.pro
examples/painting/painting.pro
examples/painting/transformations/transformations.pro
examples/qtconcurrent/imagescaling/imagescaling.pro
examples/qtconcurrent/map/map.pro
examples/qtconcurrent/progressdialog/progressdialog.pro
examples/qtconcurrent/qtconcurrent.pro
examples/qtconcurrent/runfunction/runfunction.pro
examples/qtconcurrent/wordcount/wordcount.pro
examples/qtestlib/qtestlib.pro
examples/qtestlib/tutorial1/tutorial1.pro
examples/qtestlib/tutorial2/tutorial2.pro
examples/qtestlib/tutorial3/tutorial3.pro
examples/qtestlib/tutorial4/tutorial4.pro
examples/qtestlib/tutorial5/tutorial5.pro
examples/qws/dbscreen/dbscreen.pro
examples/qws/framebuffer/framebuffer.pro
examples/qws/mousecalibration/mousecalibration.pro
examples/qws/simpledecoration/simpledecoration.pro
examples/qws/svgalib/svgalib.pro
examples/richtext/calendar/calendar.pro
examples/richtext/orderform/orderform.pro
examples/richtext/richtext.pro
examples/richtext/syntaxhighlighter/syntaxhighlighter.pro
examples/sql/sql.pro
examples/statemachine/eventtransitions/eventtransitions.pro
examples/statemachine/rogue/rogue.pro
examples/statemachine/trafficlight/trafficlight.pro
examples/statemachine/twowaybutton/twowaybutton.pro
examples/threads/mandelbrot/mandelbrot.pro
examples/threads/queuedcustomtype/queuedcustomtype.pro
examples/threads/threads.pro
examples/tools/codecs/codecs.pro
examples/tools/completer/completer.pro
examples/tools/contiguouscache/contiguouscache.pro
examples/tools/customcompleter/customcompleter.pro
examples/tools/customtype/customtype.pro
examples/tools/customtypesending/customtypesending.pro
examples/tools/echoplugin/echoplugin.pro
examples/tools/echoplugin/echowindow/echowindow.pro
examples/tools/echoplugin/plugin/plugin.pro
examples/tools/i18n/i18n.pro
examples/tools/inputpanel/inputpanel.pro
examples/tools/plugandpaint/plugandpaint.pro
examples/tools/plugandpaintplugins/basictools/basictools.pro
examples/tools/plugandpaintplugins/extrafilters/extrafilters.pro
examples/tools/plugandpaintplugins/plugandpaintplugins.pro
examples/tools/regexp/regexp.pro
examples/tools/settingseditor/settingseditor.pro
examples/tools/styleplugin/plugin/plugin.pro
examples/tools/styleplugin/styleplugin.pro
examples/tools/styleplugin/stylewindow/stylewindow.pro
examples/tools/tools.pro
examples/tools/treemodelcompleter/treemodelcompleter.pro
examples/tools/undoframework/undoframework.pro
examples/touch/dials/dials.pro
examples/touch/fingerpaint/fingerpaint.pro
examples/touch/knobs/knobs.pro
examples/touch/pinchzoom/pinchzoom.pro
examples/tutorials/addressbook-fr/addressbook-fr.pro
examples/tutorials/addressbook-fr/part1/part1.pro
examples/tutorials/addressbook-fr/part2/part2.pro
examples/tutorials/addressbook-fr/part3/part3.pro
examples/tutorials/addressbook-fr/part4/part4.pro
examples/tutorials/addressbook-fr/part5/part5.pro
examples/tutorials/addressbook-fr/part6/part6.pro
examples/tutorials/addressbook-fr/part7/part7.pro
examples/tutorials/addressbook/addressbook.pro
examples/tutorials/addressbook/part1/part1.pro
examples/tutorials/addressbook/part2/part2.pro
examples/tutorials/addressbook/part3/part3.pro
examples/tutorials/addressbook/part4/part4.pro
examples/tutorials/addressbook/part5/part5.pro
examples/tutorials/addressbook/part6/part6.pro
examples/tutorials/addressbook/part7/part7.pro
examples/tutorials/modelview/1_readonly/1_readonly.pro
examples/tutorials/modelview/2_formatting/2_formatting.pro
examples/tutorials/modelview/3_changingmodel/3_changingmodel.pro
examples/tutorials/modelview/4_headers/4_headers.pro
examples/tutorials/modelview/5_edit/5_edit.pro
examples/tutorials/modelview/6_treeview/6_treeview.pro
examples/tutorials/modelview/7_selections/7_selections.pro
examples/tutorials/modelview/modelview.pro
examples/tutorials/widgets/childwidget/childwidget.pro
examples/tutorials/widgets/nestedlayouts/nestedlayouts.pro
examples/tutorials/widgets/toplevel/toplevel.pro
examples/tutorials/widgets/windowlayout/windowlayout.pro
examples/uitools/multipleinheritance/multipleinheritance.pro
examples/uitools/textfinder/textfinder.pro
examples/uitools/uitools.pro
examples/widgets/analogclock/analogclock.pro
examples/widgets/calculator/calculator.pro
examples/widgets/calendarwidget/calendarwidget.pro
examples/widgets/charactermap/charactermap.pro
examples/widgets/codeeditor/codeeditor.pro
examples/widgets/digitalclock/digitalclock.pro
examples/widgets/groupbox/groupbox.pro
examples/widgets/icons/icons.pro
examples/widgets/imageviewer/imageviewer.pro
examples/widgets/lineedits/lineedits.pro
examples/widgets/movie/movie.pro
examples/widgets/scribble/scribble.pro
examples/widgets/shapedclock/shapedclock.pro
examples/widgets/sliders/sliders.pro
examples/widgets/softkeys/softkeys.pro
examples/widgets/spinboxes/spinboxes.pro
examples/widgets/styles/styles.pro
examples/widgets/stylesheet/stylesheet.pro
examples/widgets/tablet/tablet.pro
examples/widgets/tetrix/tetrix.pro
examples/widgets/tooltips/tooltips.pro
examples/widgets/validators/validators.pro
examples/widgets/widgets.pro
examples/widgets/windowflags/windowflags.pro
examples/xml/xml.pro
mkspecs/qws/freebsd-generic-g++/qplatformdefs.h
mkspecs/qws/linux-arm-g++/qplatformdefs.h
mkspecs/qws/linux-arm-gnueabi-g++/qplatformdefs.h
mkspecs/qws/linux-armv6-g++/qplatformdefs.h
mkspecs/qws/linux-avr32-g++/qplatformdefs.h
mkspecs/qws/linux-cellon-g++/qplatformdefs.h
mkspecs/qws/linux-dm7000-g++/qplatformdefs.h
mkspecs/qws/linux-dm800-g++/qplatformdefs.h
mkspecs/qws/linux-generic-g++-32/qplatformdefs.h
mkspecs/qws/linux-generic-g++/qplatformdefs.h
mkspecs/qws/linux-ipaq-g++/qplatformdefs.h
mkspecs/qws/linux-lsb-g++/qplatformdefs.h
mkspecs/qws/linux-mips-g++/qplatformdefs.h
mkspecs/qws/linux-nacl-g++/qplatformdefs.h
mkspecs/qws/linux-powerpc-g++/qplatformdefs.h
mkspecs/qws/linux-sh-g++/qplatformdefs.h
mkspecs/qws/linux-sh4al-g++/qplatformdefs.h
mkspecs/qws/linux-sharp-g++/qplatformdefs.h
mkspecs/qws/linux-x86-g++/qplatformdefs.h
mkspecs/qws/linux-x86_64-g++/qplatformdefs.h
mkspecs/qws/linux-zylonite-g++/qplatformdefs.h
mkspecs/qws/macx-generic-g++/qplatformdefs.h
mkspecs/qws/macx-iphonedevice-g++/qplatformdefs.h
mkspecs/qws/macx-iphonesimulator-g++/qplatformdefs.h
mkspecs/qws/macx-nacl-g++/qplatformdefs.h
mkspecs/qws/solaris-generic-g++/qplatformdefs.h
src/gui/dialogs/qprintdialog_qws.cpp
src/gui/egl/qegl_qws.cpp
src/gui/embedded/qcopchannel_qws.cpp
src/gui/embedded/qcopchannel_qws.h
src/gui/embedded/qdecoration_qws.cpp
src/gui/embedded/qdecoration_qws.h
src/gui/embedded/qdecorationdefault_qws.cpp
src/gui/embedded/qdecorationdefault_qws.h
src/gui/embedded/qdecorationfactory_qws.cpp
src/gui/embedded/qdecorationfactory_qws.h
src/gui/embedded/qdecorationplugin_qws.cpp
src/gui/embedded/qdecorationplugin_qws.h
src/gui/embedded/qdecorationstyled_qws.cpp
src/gui/embedded/qdecorationstyled_qws.h
src/gui/embedded/qdecorationwindows_qws.cpp
src/gui/embedded/qdecorationwindows_qws.h
src/gui/embedded/qdirectpainter_qws.cpp
src/gui/embedded/qdirectpainter_qws.h
src/gui/embedded/qkbd_defaultmap_qws_p.h
src/gui/embedded/qkbd_qws.cpp
src/gui/embedded/qkbd_qws.h
src/gui/embedded/qkbd_qws_p.h
src/gui/embedded/qkbddriverfactory_qws.cpp
src/gui/embedded/qkbddriverfactory_qws.h
src/gui/embedded/qkbddriverplugin_qws.cpp
src/gui/embedded/qkbddriverplugin_qws.h
src/gui/embedded/qkbdintegrity_qws.cpp
src/gui/embedded/qkbdintegrity_qws.h
src/gui/embedded/qkbdlinuxinput_qws.cpp
src/gui/embedded/qkbdlinuxinput_qws.h
src/gui/embedded/qkbdqnx_qws.cpp
src/gui/embedded/qkbdqnx_qws.h
src/gui/embedded/qkbdtty_qws.cpp
src/gui/embedded/qkbdtty_qws.h
src/gui/embedded/qkbdum_qws.cpp
src/gui/embedded/qkbdum_qws.h
src/gui/embedded/qkbdvfb_qws.cpp
src/gui/embedded/qkbdvfb_qws.h
src/gui/embedded/qlock.cpp
src/gui/embedded/qlock_p.h
src/gui/embedded/qmouse_qws.cpp
src/gui/embedded/qmouse_qws.h
src/gui/embedded/qmousedriverfactory_qws.cpp
src/gui/embedded/qmousedriverfactory_qws.h
src/gui/embedded/qmousedriverplugin_qws.cpp
src/gui/embedded/qmousedriverplugin_qws.h
src/gui/embedded/qmouseintegrity_qws.cpp
src/gui/embedded/qmouseintegrity_qws.h
src/gui/embedded/qmouselinuxinput_qws.cpp
src/gui/embedded/qmouselinuxinput_qws.h
src/gui/embedded/qmouselinuxtp_qws.cpp
src/gui/embedded/qmouselinuxtp_qws.h
src/gui/embedded/qmousepc_qws.cpp
src/gui/embedded/qmousepc_qws.h
src/gui/embedded/qmouseqnx_qws.cpp
src/gui/embedded/qmouseqnx_qws.h
src/gui/embedded/qmousetslib_qws.cpp
src/gui/embedded/qmousetslib_qws.h
src/gui/embedded/qmousevfb_qws.cpp
src/gui/embedded/qmousevfb_qws.h
src/gui/embedded/qscreen_qws.cpp
src/gui/embedded/qscreen_qws.h
src/gui/embedded/qscreendriverfactory_qws.cpp
src/gui/embedded/qscreendriverfactory_qws.h
src/gui/embedded/qscreendriverplugin_qws.cpp
src/gui/embedded/qscreendriverplugin_qws.h
src/gui/embedded/qscreenintegrityfb_qws.cpp
src/gui/embedded/qscreenintegrityfb_qws.h
src/gui/embedded/qscreenlinuxfb_qws.cpp
src/gui/embedded/qscreenlinuxfb_qws.h
src/gui/embedded/qscreenmulti_qws.cpp
src/gui/embedded/qscreenmulti_qws_p.h
src/gui/embedded/qscreenproxy_qws.cpp
src/gui/embedded/qscreenproxy_qws.h
src/gui/embedded/qscreenqnx_qws.cpp
src/gui/embedded/qscreenqnx_qws.h
src/gui/embedded/qscreentransformed_qws.cpp
src/gui/embedded/qscreentransformed_qws.h
src/gui/embedded/qscreenvfb_qws.cpp
src/gui/embedded/qscreenvfb_qws.h
src/gui/embedded/qsoundqss_qws.cpp
src/gui/embedded/qsoundqss_qws.h
src/gui/embedded/qtransportauth_qws.cpp
src/gui/embedded/qtransportauth_qws.h
src/gui/embedded/qtransportauth_qws_p.h
src/gui/embedded/qtransportauthdefs_qws.h
src/gui/embedded/qunixsocket.cpp
src/gui/embedded/qunixsocket_p.h
src/gui/embedded/qunixsocketserver.cpp
src/gui/embedded/qunixsocketserver_p.h
src/gui/embedded/qvfbhdr.h
src/gui/embedded/qwindowsystem_p.h
src/gui/embedded/qwindowsystem_qws.cpp
src/gui/embedded/qwindowsystem_qws.h
src/gui/embedded/qwscommand_qws.cpp
src/gui/embedded/qwscommand_qws_p.h
src/gui/embedded/qwscursor_qws.cpp
src/gui/embedded/qwsdisplay_qws.h
src/gui/embedded/qwsdisplay_qws_p.h
src/gui/embedded/qwsembedwidget.cpp
src/gui/embedded/qwsevent_qws.cpp
src/gui/embedded/qwsevent_qws.h
src/gui/embedded/qwslock.cpp
src/gui/embedded/qwslock_p.h
src/gui/embedded/qwsmanager_p.h
src/gui/embedded/qwsmanager_qws.cpp
src/gui/embedded/qwsmanager_qws.h
src/gui/embedded/qwsproperty_qws.cpp
src/gui/embedded/qwsproperty_qws.h
src/gui/embedded/qwsprotocolitem_qws.h
src/gui/embedded/qwssharedmemory.cpp
src/gui/embedded/qwssharedmemory_p.h
src/gui/embedded/qwssignalhandler.cpp
src/gui/embedded/qwssignalhandler_p.h
src/gui/embedded/qwssocket_qws.cpp
src/gui/embedded/qwssocket_qws.h
src/gui/embedded/qwsutils_qws.h
src/gui/image/qpixmap_qws.cpp
src/gui/inputmethod/qwsinputcontext_p.h
src/gui/inputmethod/qwsinputcontext_qws.cpp
src/gui/kernel/qapplication_qpa.cpp
src/gui/kernel/qapplication_qws.cpp
src/gui/kernel/qclipboard_qws.cpp
src/gui/kernel/qcursor_qws.cpp
src/gui/kernel/qdesktopwidget_qws.cpp
src/gui/kernel/qeventdispatcher_glib_qws.cpp
src/gui/kernel/qeventdispatcher_glib_qws_p.h
src/gui/kernel/qeventdispatcher_qws.cpp
src/gui/kernel/qeventdispatcher_qws_p.h
src/gui/kernel/qplatformintegration_qpa.cpp
src/gui/kernel/qplatformwindowformat_qpa.cpp
src/gui/kernel/qplatformwindowformat_qpa.h
src/gui/kernel/qsessionmanager_qws.cpp
src/gui/kernel/qsound_qws.cpp
src/gui/kernel/qwidget_qws.cpp
src/gui/painting/qcolormap_qws.cpp
src/gui/painting/qgraphicssystem.cpp
src/gui/painting/qgraphicssystem_mac.cpp
src/gui/painting/qgraphicssystem_mac_p.h
src/gui/painting/qgraphicssystem_p.h
src/gui/painting/qgraphicssystem_qws.cpp
src/gui/painting/qgraphicssystem_qws_p.h
src/gui/painting/qgraphicssystem_raster.cpp
src/gui/painting/qgraphicssystem_raster_p.h
src/gui/painting/qgraphicssystem_runtime.cpp
src/gui/painting/qgraphicssystem_runtime_p.h
src/gui/painting/qgraphicssystemfactory.cpp
src/gui/painting/qgraphicssystemfactory_p.h
src/gui/painting/qgraphicssystemplugin.cpp
src/gui/painting/qgraphicssystemplugin_p.h
src/gui/painting/qpaintdevice_x11.cpp
src/gui/painting/qprintengine_ps.cpp
src/gui/painting/qprintengine_ps_p.h
src/gui/painting/qprintengine_qws.cpp
src/gui/painting/qprintengine_qws_p.h
src/gui/painting/qregion_qws.cpp
src/gui/painting/qunifiedtoolbarsurface_mac.cpp
src/gui/painting/qunifiedtoolbarsurface_mac_p.h
src/gui/painting/qwindowsurface_mac.cpp
src/gui/painting/qwindowsurface_qws.cpp
src/gui/painting/qwindowsurface_qws_p.h
src/gui/painting/qwindowsurface_raster.cpp
src/gui/painting/qwindowsurface_raster_p.h
src/gui/painting/qwindowsurface_s60.cpp
src/gui/painting/qwindowsurface_s60_p.h
src/gui/painting/qwindowsurface_x11.cpp
src/gui/painting/qwindowsurface_x11_p.h
src/gui/painting/qwmatrix.h
src/gui/text/qabstractfontengine_qws.cpp
src/gui/text/qabstractfontengine_qws.h
src/gui/text/qfont_qws.cpp
src/gui/text/qfontdatabase_qws.cpp
src/gui/text/qfontengine_qws.cpp
src/opengl/qgl_qpa.cpp
src/opengl/qgl_qws.cpp
src/opengl/qglscreen_qws.cpp
src/opengl/qglscreen_qws.h
src/opengl/qglwindowsurface_qws.cpp
src/opengl/qgraphicssystem_gl.cpp
src/opengl/qgraphicssystem_gl_p.h
src/openvg/qpaintengine_vg.cpp
src/openvg/qpaintengine_vg_p.h
src/openvg/qpixmapdata_vg.cpp
src/openvg/qpixmapdata_vg_p.h
src/openvg/qpixmapfilter_vg.cpp
src/openvg/qpixmapfilter_vg_p.h
src/openvg/qvg.h
src/openvg/qvg_p.h
src/openvg/qvg_symbian.cpp
src/openvg/qvgcompositionhelper_p.h
src/openvg/qvgfontglyphcache_p.h
src/openvg/qvgimagepool.cpp
src/openvg/qvgimagepool_p.h
src/openvg/qwindowsurface_vg.cpp
src/openvg/qwindowsurface_vg_p.h
src/openvg/qwindowsurface_vgegl.cpp
src/openvg/qwindowsurface_vgegl_p.h
src/plugins/decorations/default/main.cpp
src/plugins/decorations/styled/main.cpp
src/plugins/decorations/windows/main.cpp
src/plugins/gfxdrivers/ahi/qscreenahi_qws.cpp
src/plugins/gfxdrivers/ahi/qscreenahi_qws.h
src/plugins/gfxdrivers/ahi/qscreenahiplugin.cpp
src/plugins/gfxdrivers/directfb/qdirectfbkeyboard.cpp
src/plugins/gfxdrivers/directfb/qdirectfbkeyboard.h
src/plugins/gfxdrivers/directfb/qdirectfbmouse.cpp
src/plugins/gfxdrivers/directfb/qdirectfbmouse.h
src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.cpp
src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.h
src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.h
src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
src/plugins/gfxdrivers/directfb/qdirectfbpixmap.h
src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
src/plugins/gfxdrivers/directfb/qdirectfbscreen.h
src/plugins/gfxdrivers/directfb/qdirectfbscreenplugin.cpp
src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h
src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.cpp
src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.h
src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.cpp
src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.h
src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.cpp
src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.h
src/plugins/gfxdrivers/linuxfb/main.cpp
src/plugins/gfxdrivers/powervr/QWSWSEGL/pvrqwsdrawable.c
src/plugins/gfxdrivers/powervr/QWSWSEGL/pvrqwsdrawable.h
src/plugins/gfxdrivers/powervr/QWSWSEGL/pvrqwsdrawable_p.h
src/plugins/gfxdrivers/powervr/QWSWSEGL/pvrqwswsegl.c
src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp
src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.h
src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreenplugin.cpp
src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglwindowsurface.cpp
src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglwindowsurface.h
src/plugins/gfxdrivers/qvfb/main.cpp
src/plugins/gfxdrivers/transformed/main.cpp
src/plugins/gfxdrivers/vnc/main.cpp
src/plugins/gfxdrivers/vnc/qscreenvnc_p.h
src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp
src/plugins/gfxdrivers/vnc/qscreenvnc_qws.h
src/plugins/graphicssystems/meego/dithering.cpp
src/plugins/graphicssystems/meego/qmeegoextensions.cpp
src/plugins/graphicssystems/meego/qmeegoextensions.h
src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
src/plugins/graphicssystems/meego/qmeegographicssystem.h
src/plugins/graphicssystems/meego/qmeegographicssystemplugin.cpp
src/plugins/graphicssystems/meego/qmeegographicssystemplugin.h
src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp
src/plugins/graphicssystems/meego/qmeegolivepixmapdata.h
src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp
src/plugins/graphicssystems/meego/qmeegopixmapdata.h
src/plugins/graphicssystems/meego/qmeegorasterpixmapdata.cpp
src/plugins/graphicssystems/opengl/main.cpp
src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp
src/plugins/graphicssystems/openvg/qgraphicssystem_vg_p.h
src/plugins/graphicssystems/shivavg/main.cpp
src/plugins/graphicssystems/shivavg/shivavggraphicssystem.cpp
src/plugins/graphicssystems/shivavg/shivavggraphicssystem.h
src/plugins/graphicssystems/shivavg/shivavgwindowsurface.cpp
src/plugins/graphicssystems/shivavg/shivavgwindowsurface.h
src/plugins/graphicssystems/trace/main.cpp
src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp
src/plugins/graphicssystems/trace/qgraphicssystem_trace_p.h
src/plugins/kbddrivers/linuxinput/main.cpp
src/plugins/mousedrivers/linuxtp/main.cpp
src/plugins/mousedrivers/pc/main.cpp
src/plugins/mousedrivers/tslib/main.cpp
src/widgets/kernel/qwidget_qpa.cpp
|
| |
| |
| |
| |
| |
| |
| | |
Updated version of LGPL and FDL licenseheaders.
Apply release phase licenseheaders for all source files.
Reviewed-by: Trust Me
|
| |
| |
| |
| |
| | |
Rename the guikernel subdir to kernel
and guiutil to util.
|
|/
|
|
|
|
|
| |
Create a guikernel/ directory that contains the files that'll go
into libQtGui. What remains in kernel/ will go into QtWidgets.
In addition to that image/, painting/ and text will end up
int QtGui.
|
|
This is the beginning of revision history for this module. If you
want to look at revision history older than this, please refer to the
Qt Git wiki for how to use Git history grafting. At the time of
writing, this wiki is located here:
http://qt.gitorious.org/qt/pages/GitIntroductionWithQt
If you have already performed the grafting and you don't see any
history beyond this commit, try running "git log" with the "--follow"
argument.
Branched from the monolithic repo, Qt master branch, at commit
896db169ea224deb96c59ce8af800d019de63f12
|