| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The position of the offscreen window needs to be exact
as it is used for popup menus by the Quick Controls.
Updating the position in show amends the situation.
Task-number: QTBUG-49097
Change-Id: I416021d6632ede45b1f9dc6b35a3ff15394566ee
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Qt.test.qtestroot is only provided by quick_test_main so
if we find any plugin that tries to inherit from TestCase.qml
qmlplugindump will fail trying to import this unexistant import
Change-Id: Idee881fa641267a17594dd3c92e929ca3473f3df
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Timo Jyrinki <timo.jyrinki@canonical.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| | |
Saves iterating the whole container and unneeded allocation of a list
Change-Id: Iae1f8e0cf3a17b163cf930c43a27b2ebb4315e5c
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| | |
Without this all styled text appears as solid-filled rectangles.
Change-Id: I7b64b274b3562b75ed7126d4bb8e89b6cb8d6f77
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Fix warnings when running tst_qquicktextedit:
QWARN : tst_qquicktextedit::mouseSelectionMode_accessors() QSignalSpy: Unable to handle parameter 'mode' of type 'QQuickTextEdit::SelectionMode' of method 'mouseSelectionModeChanged', use qRegisterMetaType to register it.
QWARN : tst_qquicktextedit::textFormat() QSignalSpy: Unable to handle parameter 'textFormat' of type 'QQuickTextEdit::TextFormat' of method 'textFormatChanged', use qRegisterMetaType to register it.
Change-Id: I2d41f970777c9ee4d8999acceed9e1b9cf52b0f0
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Added a small test infrastructure in order to run tests on sample
projects and quickly define new test cases.
Running tests will also compile (and clean) sample tests.
Change-Id: Ibd0e48201dafe335198479d605d676ca5b753566
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Not destroying the Animator controller leads to scenegraph animators
running even after destroying the rendercontrol and the window. Add
the missing delete call and fix the somewhat broken cleanup sequence.
Task-number: QTBUG-49635
Change-Id: I170b4bb4b065bda46d8ab9ad9a3992bc8cfd1d1e
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Turbulence was always reading from local files and never reading from
QRC files.
Change-Id: I93501f136a6934764422e2a914c01f359b054b2e
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Geometry changes triggered a grid initialization which removed the
reference to the Particle System thus deactivating the Affector, fixed.
Change-Id: I56446ae2116a9645d2e4b51c42358cdfb360ee82
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Performance will be bad but this allows having simple scenes in a
QQuickWidget embedded into a QGraphicsView (ouch).
This kind of setup is strongly discouraged but QWidget already has the
readback-based fallback for render(), so we only need to add the
update re-routing to the proxy widget.
Task-number: QTBUG-49724
Change-Id: I1c80cb0a7b401327304ec7b92c77dc654d843b33
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Turbulence was only taking into account the red component, and it was
wrongly using the image sideways.
Change-Id: I7f50e44a198993b9ea2ac0a66c1952bf9c7e92fb
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Use the qt_findAtNxFile function from QtGui.
Note: this changes the behavior slightly if the file name
contains '@2x' not at the end of the file name. We now check
that it contains '@2x.' including the dot.
Change-Id: I7e6a97d2d9c5aa0706538badf22a13e4c41824c0
Reviewed-by: Edward Welbourne <edward.welbourne@theqtcompany.com>
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In QQuickListViewPrivate::applyInsertionChange(), we update the
visibleItems list by first shifting the currently visible items
and then we add as many items as the model was added and at the
right position. We do this in such a way that we won't create
items that will not be visible right away (and may be deleted
right after by removeNonVisibleItems()). However, this may leave
gaps in the item index sequence, and QQuickListView doesn't always
recover gracefully from it.
The purpose of this patch is to make sure those gaps are cleared
right after inserting the new items. Since the insertions can happen
in two different places (either before or after the first visible
item) we need to update the visibleItems list accordingly. The way
we sanitize visibleItems is by removing those items that lie beyond
a possible index gap. If insertion happens before the first visible
item, we'll remove all those items before the insertion point. If
the insertion happens after the first visible item, we'll remove the
items after the insertion point.
Besides that, the logic for inserting before the visible position was
wrong. As items are inserted bottom-up in that case, the insertion
would start by just accounting for the item's size until the condition
pos > from && insertionIdx < visibleIndex
would become false only because 'pos' would be small enough. After
that, the next loop run would start adding items before the 'from'
position, which is wrong. Our fix is to move the condition outside
the loop if the insertion index will be before the visible index
and just account for the items' size in that case. Otherwise, the
insertion happens as usual until pos < from.
Change-Id: I35767cf6e9737bea1fe7677e580245fc7172710c
Task-number: QTBUG-48870
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The bug was that when using the mouse wheel, a single "scroll down"
wheel event followed by a rapid succession of "scroll up" events
would cause extreme overshoot. Experimentally determined that when
this happens, the calls to timeline.accel() in
QQuickFlickablePrivate::flick() were occurring after the call to
accel in QQuickFlickablePrivate::viewportAxisMoved(). But nearby,
data.inOvershoot is set to true, so that can be used to avoid calling
accel() additional times in flick(). So basically, this patch avoids
doing any more acceleration in response to further wheel events after
the momentum from previous events has already taken the content
beyond bounds.
Task-number: QTBUG-21328
Change-Id: I3ab5510a288a080f6b526407b6a2293c44a2498a
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Stress testing might sound unfair, but it can happen that
the user is flicking the view while the model gets updated
resulting in an internally inconsistent state. We need to
cover this and start working on a solution.
The test is initially blacklisted as it's not expected to
pass all the time.
Task-number: QTBUG 48870
Change-Id: I7c1e4fd1876f52dd2dad5a28584b571753ebe69a
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This avoids ending up with invalid pointers when under some circumstances the
target (which is not owned by the QQuickAnimatorJob) is destroyed between the
time the QQuickAnimatorJob is created and the time it is initialized. This is
the case when the target of an Animator is the item loaded by a Loader and
that the animator is started just before setting the Loader to inactive.
Also added an auto test for that special case.
Task-number: QTBUG-49634
Change-Id: Iab9bfe76d13755ba735432c6f97bde175d308814
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This adds two .qmltypes files: QtQml/plugins.qmltypes
describes the components in the QtQml import, and
builtins.qmltypes the enumerations in the implicit
"Qt" namespace that does not require an import.
builtins.qmltypes is automatically picked up by
Qt Creator for each Qt version, while plugins.qmltypes
will only be parsed if the import is used.
Done-with: Kai Koehne <kai.koehne@theqtcompany.com>
Done-with: Marco Benelli <marco.benelli@theqtcompany.com>
Change-Id: Ia2b1739172c827b945d118b41b647c0a15f3419d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Set a suitable font, fixing the error:
FAIL! : tst_qquicktextedit::hAlignVisual() Compared values are not the same
Actual (left): 2
Expected (0) : 0
Task-number: QTBUG-48546
Change-Id: I4d6222a39647229c65f3e5aa12c39d50a722e584
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
MousePress and MouseRelease event handlers now better integrated into
generic touch processing methods.
We used to manually add a touch point for mouse press event and
prevent updateTouchData() from pressed() emission, but mouseRelease
handler used to cause the signal emission in updateTouchData() and then
emit the signal on its own.
The code reworked to always emit pressed() and released() signals from
the single place in updateTouchData().
[ChangeLog][QtQuick][MultiPointTouchArea] Fixed released() signal
duplication on mouseReleaseEvent.
Task-number: QTBUG-44370
Change-Id: I2d88931ba56d6edf778213c61e9467c2b6abf0e7
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
|
| |
| |
| |
| |
| | |
Change-Id: Id13e982ff3286ec6f369c3d5898de3da3314579d
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Otherwise valgrind complains about
"Conditional jump or move depends on uninitialised value(s)"
Change-Id: If1cc6f2839799a80dde5106700bb26fda4b357c3
Reviewed-by: Michael Brasser <michael.brasser@live.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Check that we have the right type and number of arguments
and throw a type error if they don't match.
Change-Id: I23d37074bf0a6f88e656897862eedc8f7c9f9f8f
Task-number: QTBUG-41686
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This test case changed after change 2e00500b9f32f25a15563a4fd35375ead12c14a7
got merged into qtbase. With that change, colors with alpha components
will now be converted correctly to a #AARRGGBB string.
Change-Id: I8a1edc846537bf7868ba56d819d7aedae1a10fa1
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Zooming in large steps on every wheel-events breaks with fine-grained
wheel events like we get on touch-pads. We should therefore not
encourage that in our examples.
Change-Id: Ie2e70b91c66c73f12ef1f6cd55c8610ae70b36ed
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
After qtbase:c7e5e1d, QEvent::ShortcutOverride is no longer sent
directly to the focus object, but to the window. But since
QQuickWindow didn't catch it, it ended up nowhere.
This patch will implement the same strategy as QWidgetWindow, and
let QQuickWindow forward the ShortcutOverride event the same way
as key events.
Note that even if the event was never being delivered, the corresponding
key events would still end up in the focus object and trigger shortcuts.
But if a window global shortcut existed with the same key sequence, it would
grab the shortcut instead of the override, which was wrong.
Change-Id: I4ad7b3879adac14d88a3fbce5851409d0963d163
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| | |
See change 4efa50a5e37497bc3a3dd30f27db7d8100e3f6a5 in qtbase
Change-Id: I00e5e529faed029bc3bc461a3b1807811d33c769
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
tst_qquicktextedit.cpp: In member function 'void tst_qquicktextedit::positionAt()':
tst_qquicktextedit.cpp:2428:68: warning: 'y1' may be used uninitialized in this function [-Wmaybe-uninitialized]
tst_qquicktextedit.cpp:2425:64: warning: 'y0' may be used uninitialized in this function [-Wmaybe-uninitialized]
Change-Id: I28d5a8c1c5421e20097b25ca18915763bac3200c
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In addition streamline the code and only do the lookup of
the property name once.
Change-Id: If2bad4b9179214492ff5692cf1f503f927ca2246
Task-number: QTBUG-48918
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Make sure the context is correct the first time we create the
offscreenSurface, so we don't have to destroy it immediately
afterwards and create a new one. This causes problems with
some (probably buggy) drivers.
Task-number: QTBUG-48440
Change-Id: I4790e1b02738fc84aca201430548934d8054e2b2
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
builtins.qmltypes used to contain also definitions that belong to
QtQml. This patch makes qmlplugindump dump only Qt built-ins when
called with the '-builtin' option, and makes dumping of QtQml work
correctly.
Change-Id: I123b9cae6f2557cf281f857df51fae095cbc25cc
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Change 1a1f10806c901bc10483370a932d41af0c9629cd started mapping
id values to member expressions in the IR. But these should of
course not get resolved against local properties of the object.
Change-Id: I56bef738ec60b818d7af86bb1aa6d37b2c01d3fd
Task-number: QTBUG-49484
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Volker Krause <volker.krause@kdab.com>
Reviewed-by: Anton Kreuzkamp <anton.kreuzkamp@kdab.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Re-enable the options after the attributes have their final names.
Add options for enabling scaling.
This reverts commit 051684f125bbc31bd882c4cd313c3482bcd145a0.
Task-number: QTBUG-46615
Task-number: QTBUG-48379
Change-Id: If862061c688f9febff3b9511a4f19649b07d2011
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Fixes a regression introduced by change
01c0c0963794f4dd8c3601e8340cc3dc4dec41bd, where interceptors
wouldn't work correctly on alias properties.
This required some refactoring and splitting out the interceptor
handling from the VMEMO into it's own class, as we are now
installing bindings directly on the target property of an alias and
not on the alias anymore.
We now resolve the target property inside the QML object creator
and install a interceptor metaobject on the target if required where
we can then register the interceptor.
Change-Id: I3ebc8f492ce5dcab7acf901711b47336d5182ffa
Task-number: QTBUG-49072
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Change-Id: I56bb1f56a9c37137bab322b699d6345e82449c9c
Task-number: QTBUG-49643
Reviewed-by: Kai Uwe Broulik <kde@privat.broulik.de>
Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When including QtQuick headers outside of QtQuick, MSVC fails to link
the staticMetaObject of any unexported Q_OBJECT class that it sees.
QQuickPen is the only autotest-exported type in qquickrectangle_p.h.
All other types in the same header (QQuickRectangle, QQuickGradient,
and QQuickGradientStop) are private exported. Because of the MSVC
linking behavior described above, those private exports are worthless
if the last remaining type is not exported.
Change-Id: Ife1bf466fa46a1b86ddf8ff76ab73c1beaa71acc
Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
These crashes occur randomly with tst_combobox from qtquickcontrols2,
and with the test case attached to the linked bug report.
Change-Id: If7d91045f86ec33e7fe398ed02f3edf80700651a
Task-number: QTBUG-48277
Reviewed-by: Nikita Krupenko <krnekit@gmail.com>
Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This fix prevents the crash documented in QTBUG-49076.
To quote Erik on the cause of the crash:
Call stack is probably: FunctionPrototype::method_bind ->
BoundFunction::create -> mm::allocObject ->
BoundFunction::BoundFunction -> Heap::FunctionObject ->
(Scoped)FunctionObject::init -> engine::newObject ->
... -> mm::allocObject
The call to Heap::FunctionObject in BoundFunction is the
call to the parent class constructor, which causes an
allocation. But at that point, BoundFunction's target is
still zero-initialised (the real initialization happens
first thing *after* the parent class' constructor is called).
Change-Id: If256f59168867cba9c886642ebaacb1d56801da4
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Qt Quick Controls 2 ComboBox needs access to:
- QQuickItemView::itemAt()
- QQuickItemView::indexAt()
QQuickItemViewAttached had to be exported because it's in the
same header file and has the Q_OBJECT macro (MSVC would fail
to link staticMetaObject). Alternatively, it could have been
moved to another header file.
Change-Id: Icaab2c90c136074ae78ce02a422794bb7ccff4aa
Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
|
|\ \ |
|
| |\|
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
src/quick/util/qquickimageprovider.cpp
Change-Id: I7ca4e49468b5ba697208287be4684e42b9900023
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Passing a qrc based path to shellNormalizeFileName() was causing problems
with the Windows API. Since it won't change the path in this case anyway
because the path is not valid on the file system then there is no need to
do any checking.
Task-number: QTBUG-46248
Change-Id: If20075c25aade3740287250b4e1f31538b398f8f
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
|
| | |
| | |
| | |
| | |
| | | |
Change-Id: I78ecd97c25da70faf8438dd02d50952d2fb80a22
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Task-number: QTBUG-36985
Change-Id: I219375d405fbfb53611c0138698e955d9cd5d821
Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com>
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
DesignerSupport should not keep users from compiling with -no-rtti.
Next step is to move DesignerSupport into a library and only build
it on desktop platforms.
Task-number: QTBUG-49154
Change-Id: Ie0037f3371c24da56f34f27b1f39e8c318e41451
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
|/ /
| |
| |
| |
| |
| | |
Task-number: QTBUG-33521
Change-Id: I616369c3a535395ddb465a2f787dec7fc055a503
Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The "visibility" and "visible" properties are exported to QML and
should return useful values.
Task-number: QTBUG-49054
Change-Id: I3c474885653c4b57659b02f183293e3186edc972
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It's not currently clear how to get the default mode when
also passing a parent, though lots of Qt code simply omits
the argument.
Change-Id: I35db7cf57991a2a3fafe4d00df2879b98037e93c
Reviewed-by: Andy Shaw <andy.shaw@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Output example line containing the Qt import path ready for
copy & paste.
Task-number: QTBUG-48424
Change-Id: I44d0793ade4322d376ed2b72e5c3935b19ba2c7d
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
This allows the popup framework in Qt Quick Controls 2 to include the
header without pulling in unexported classes via indirect includes.
Change-Id: Ia69b248c8c227d5c1b44f13a185c07f94a7b5968
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
|
| |
| |
| |
| |
| | |
Change-Id: I888dc4b1dbc49deeb13f967b0da34cd2273f1680
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|