Commit Graph

2519 Commits

Author SHA1 Message Date
Nicolás Alvarez
51b77bcd59 Don't use QStringLiteral when concatenating string literals.
QStringLiteral("foo" "bar") is documented not to work on MSVC.
2014-08-30 14:46:36 -03:00
Nicolás Alvarez
123d5a6d8b Replace #warning with #pragma message.
MSVC doesn't have #warning.
2014-08-30 14:46:11 -03:00
Nicolás Alvarez
8515d0ef09 Fix reference to Types::ImmutabilityType.
I don't know how Types::Types::ImmutabilityType even worked in gcc...
2014-08-30 14:45:50 -03:00
Nicolás Alvarez
0807dda74f Add missing cstdint include.
Needed for uint32_t.
2014-08-30 14:45:21 -03:00
Marco Martin
f89b86589f almost same order as the context menu
the leave action is still fixed as the last one by the toolbox

CCBUG:338585
2014-08-29 18:01:10 +02:00
Aaron Seigo
faf75a95e5 ws for readability
REVIEW:119992
2014-08-29 17:24:43 +02:00
Aaron Seigo
cd87344d80 make PackageStructure plugins use the json method as with DataEngines 2014-08-29 17:24:43 +02:00
Aaron Seigo
aa99a4f15c tidy up the data engine plugin loading code 2014-08-29 17:24:43 +02:00
Aaron Seigo
67cab00bf3 remove the unused ContainmentPackage 2014-08-29 17:24:43 +02:00
Marco Martin
f934b3b6d6 make sure to cleanup applet pointers on deletion 2014-08-29 14:53:56 +02:00
Vishesh Handa
012e002092 Dialog: Add accidentally removed Q_PRIVATE_SLOT 2014-08-29 14:35:47 +02:00
Marco Martin
727755d28a action order nearer to menu
still catalog actions by type
the order is still not exactly the same, but that's not possible, since the action order is decided in the context menu plugin and there are some actions only in the toolbox

CCBUG:338585
2014-08-29 13:32:19 +02:00
Sebastian Kügler
d8b2ef147f typo-- in comment 2014-08-28 23:30:29 +02:00
Sebastian Kügler
714bb667fc Minor fixes
- Fix encoding in copyright
- compile-time syntax for iconLoaderSettingsChanged slot
- --stray ;
2014-08-28 23:26:12 +02:00
Vishesh Handa
f293888be6 Dialog: Avoid adjusting the geometry twice when with visualparent
We are in a strange cycle when we have a visual parent. In order to
obtain our position, we need to know our size. Our size depends on the
borders visible. The borders visible depend on the size.

When we do not have a visual parent this is not a problem as we do not
have a position where we are supposed to be.

In order to solve this cycle, when we have a visual parent, we typically
assume we have all borders, call popupPosition, move to that position
and then use that new position to figure out the borders, get the new
size (incase any borders have changed) and move again. This double
moving is not good. With that patch, we still do the same but we avoid
moving twice.
2014-08-28 18:25:03 +02:00
Vishesh Handa
e0ea93cb7e Dialog: Use the correct screen for repositioning when overflowing 2014-08-28 17:35:05 +02:00
Vishesh Handa
8a3f38511d Dialog: Set the correct popup position on layout width/height change
We seem to have cases where once the dialog is visible and the visible
event is over, then the width/height updates itself, so we need to
reposition the dialog appropriately.
2014-08-28 16:28:56 +02:00
Vishesh Handa
eb6ea04be7 Dialog: Dot not update layout width/height unlesss completed
The functions are often called a number of times before the
component is actually completed. There is no point of this.

Also added a function updateLayoutParameters which update all 4
of these in a more efficient manner. There is a certain amount
of code duplication between those 4 functions and this one, but
that can be fixed in another patch.
2014-08-28 16:15:26 +02:00
Marco Martin
b58a3ef754 add a FIXME comment 2014-08-28 16:15:12 +02:00
Marco Martin
85fa280111 Merge branch 'mart/QtControlsSlider'
REVIEW:119974
2014-08-28 16:14:24 +02:00
Marco Martin
f7eb69f078 comment++ 2014-08-28 16:06:48 +02:00
Marco Martin
60976b67ae more comment&docs 2014-08-28 16:04:02 +02:00
Vishesh Handa
4f622a5158 Dialog: Fix poisitioning and theme rendering
- updateTheme should always be called the frameSvgItem's size has been
  upated. It uses the geometry of the frameSvgItem. Also updated the
  documentation.

- When a dialog has a visualParent, setting the position of the dialog
  is slightly compilcated. In order to set the position we have to give
  the function popupPosition the size of the dialog so that it can
  determine where to place it, however the size of the dialog depends on
  the position as some of the borders are drawn depending on the
  position. We have a circular problem.

  For now we're solving this by tempoarily giving the full size with all
  the borders in the case when there is a visual parent.
2014-08-28 15:49:16 +02:00
Marco Martin
846f740dae fix copyright 2014-08-28 14:25:48 +02:00
Marco Martin
4ac3652d10 some documentation fixes 2014-08-28 14:21:12 +02:00
Vishesh Handa
30174dd367 Dialog: Mark componentComplete as false on creation 2014-08-28 13:17:17 +02:00
Marco Martin
d6b08c303a style tickmarks 2014-08-28 13:15:09 +02:00
Marco Martin
4ec02e7b1d style handle and groove 2014-08-28 13:12:04 +02:00
Aaron Seigo
d5f156e968 add an interactive console QML definition 2014-08-28 11:52:49 +02:00
l10n daemon script
ce814a5285 SVN_SILENT made messages (.desktop file) 2014-08-28 08:49:15 +00:00
Marco Martin
6d6ff41aee start port of Slider 2014-08-27 18:51:52 +02:00
Vishesh Handa
e3c1095d92 Dialog: Remove syncTimer
Remove the timer and call syncToMainItemSize directly whenever it used
to be called. We avoid the extra event loop this way. This probably
breaks somethings, but we can figure that out and add tests for that.
2014-08-27 18:16:24 +02:00
Vishesh Handa
9ddbd93855 Dialog: Remove syncMainItemToSize
The only place it is now used is when the window x/y position changes.
There is now a dedicated function to handle that.

This brings us one step closer to removing the entire sync timer
2014-08-27 18:16:24 +02:00
Vishesh Handa
67810adbf1 Dialog: Replace QWeakPointer with QPointer
This simplifies the code as we do not have to call .data() everywhere
2014-08-27 18:16:24 +02:00
Vishesh Handa
7fd87741de Dialog: Simplify handling of min/max width/height changed
When the minimumWidth/Height of the attached Layout of the mainItem
would change. The following events would happen -

- updateMinimumWidth is called
--> results in resizeEvent being called
--> results in syncMainItemToSize
--> results in slots connected to mainItem widthChanged
---> syncMainItemToSize + syncToMainItemSize being called a few more
times. It's not entirely apparent why at thist point.

This kind of logic is quite hard to follow and more importantly because
of the timers in the middle, an extra paint event is called. This means
the user can first see the window resize and then the item getting
resized.

This patch introduces a little bit of code duplication (can be fixed in
future commits) to clearly establish what updateMinimumWidth should be
doing -
* disconnect signals to make sure mainItem's widthChange is not triggered
* update window size + item size + borders
* reposition if required

The repositioning is useful as currently if a dialog becomes wider if
will not reposition itself and will overflow. With this patch we always
make sure the entire dialog is shown.

Minor Point: On testing without the patch the dialog does reposition
itself if it is not already overflowing. I suspect this is kwin moving
the window.

A test called dialog_minWidthHeighRepositioning.qml can be used to see
how the change occurs before and after.
2014-08-27 18:16:24 +02:00
Marco Martin
5b9bb128d8 ckeck for loops or too deep fallback chains 2014-08-27 17:39:32 +02:00
Marco Martin
6a190670ba create the Layout attached object in init()
always create it and create it immediately.
this way it's possible for other c++ users to find it
2014-08-27 13:37:56 +02:00
Marco Martin
49bb894a21 use QUrl::fromLocalFile 2014-08-27 13:11:26 +02:00
Marco Martin
2a575c810d noise-- 2014-08-27 12:22:22 +02:00
Marco Martin
20906f6b0d allow the private imports relative to alloewdPath 2014-08-27 12:20:39 +02:00
Aaron Seigo
c97611dfac Merge branch 'simplify_shell'
REVIEW:119942
2014-08-26 21:43:56 +02:00
Marco Martin
ccab23fccb the config view can load files from the applet pkg 2014-08-26 18:11:11 +02:00
Aaron Seigo
0401da9ec8 give the applet alternatives QML file an entry 2014-08-26 16:26:07 +02:00
Marco Martin
11094417a3 delete the fallback 2014-08-22 19:27:09 +02:00
Marco Martin
e0db15c96d crash--
use a pointer, so we don't do infinite stack recursion

create the fallback in the proper place
2014-08-22 19:25:49 +02:00
Marco Martin
d369782ae1 ntroduce the concept of package fallback 2014-08-22 18:48:26 +02:00
Marco Martin
2b7d633687 Merge branch 'mart/DialogBackgroundHints'
REVIEW:119860
2014-08-22 16:56:08 +02:00
Marco Martin
d7472118c6 remove actions with menus also from corona ones
again, something different will be needed to support submenus here
2014-08-22 16:43:28 +02:00
Marco Martin
0f0006e4a9 remove manus from plasmoid.actions
not really solution-solution, but not really other ways due to QAction api
so will stay this way for a long time
CCBUG:338317
2014-08-21 21:21:19 +02:00
Jonathan Riddell
8596689f2c add version cmake file for PlasmaQuick
add version cmake file for PlasmaQuick
this allows Plasma Desktop to be able to set a required KF5 version

REVIEW:119881
2014-08-21 18:18:01 +02:00
Marco Martin
f74bf9a8b8 don't call updateTheme 2 times 2014-08-21 15:49:29 +02:00
Marco Martin
fcb8c85951 remove dead code 2014-08-21 15:47:37 +02:00
Marco Martin
e0fd14903c fix comment 2014-08-21 14:55:16 +02:00
Frederik Gladhorn
db6da1eb54 Make TabGroup a focus scope
This allows to manage the sub focus inside each tab independently.

REVIEW: 119870
2014-08-21 10:02:16 +02:00
Frederik Gladhorn
92928e38af Make ConditionalLoader a FocusScope
QQuickLoader is a focus scope so that it can automatically forward the
focus to it's item. Conditional loader should do the same and forward
the focus to its internal loader.
2014-08-21 10:02:16 +02:00
Frederik Gladhorn
f7a6df9129 AppletInterface::init should set focus not forceActiveFocus
Setting the focus is a good thing, the problem with forceActiveFocus is
that it will not allow any child to receive the actual focus, instead
the focus is forced on to the root element of the applet which may not
be desired.
When for example trying to improve keyboard focus behavior of KickOff
without this patch I cannot get the initial focus on the list of
favorites since it gets reset after the applet is created.

REVIEW: 119872
2014-08-21 10:02:16 +02:00
Martin Klapetek
0631608d74 Fix a filename typo 2014-08-20 23:29:25 +02:00
Marco Martin
da70f9e0bf Merge branch 'mart/QtControlsCheckBox'
REVIEW:119846
2014-08-20 20:46:59 +02:00
Martin Klapetek
766af15d8c Add an icon for keyboard layout change OSD
The svg needs some adjusting like inner padding to match the other svg
icons, but I have 0 knowledge of inkscape; Marco, can you please have a
look?

CCMAIL:notmart@gmail.com
2014-08-20 19:05:13 +02:00
Marco Martin
a135c4de7d correctly enable/disable shadow 2014-08-20 18:01:47 +02:00
Marco Martin
c7d16008d7 centralize theme enable/disable 2014-08-20 16:46:46 +02:00
Marco Martin
38bcec95b0 a simple way to enable/disable background 2014-08-20 16:33:38 +02:00
Marco Martin
770121d516 dd focus rectangles 2014-08-20 15:04:39 +02:00
Marco Martin
93052bf263 fill the anchors of tool contents in toolbar 2014-08-20 13:55:08 +02:00
Marco Martin
58f4f3b126 Revert "proper icons in drawers"
This reverts commit 0527185a09.
2014-08-20 12:14:19 +02:00
Marco Martin
0527185a09 proper icons in drawers 2014-08-20 12:11:57 +02:00
Marco Martin
9c485f8427 fix of the radio svg size 2014-08-20 11:34:49 +02:00
Marco Martin
ff775e3ad7 support evil tristates 2014-08-20 10:56:50 +02:00
Marco Martin
df637bf5bb add a radiobutton style
almost identical to checkbox stuff, goes together
2014-08-19 19:14:36 +02:00
Marco Martin
c7ef2a34a9 switch is just a compat class for checkbox
since the guidelines forbid the switch looking switch
2014-08-19 19:14:03 +02:00
Marco Martin
b3c6c294ee style the ckeckbox 2014-08-19 18:07:19 +02:00
Marco Martin
1ab872181b start of a checkbox style 2014-08-19 17:54:49 +02:00
Marco Martin
d2a2ac18f7 Merge branch 'mart/QtControlsTextArea'
Conflicts:
	src/declarativeimports/plasmacomponents/qml/TextArea.qml
REVIEW:119781
2014-08-18 11:34:47 +02:00
Marco Martin
907da69251 properties don't need to be declared anymore 2014-08-18 11:32:49 +02:00
Marco Martin
21e47e6ab8 inherit QtQuickControlStyle, use internal ScrollViewStyle 2014-08-18 11:18:08 +02:00
Marco Martin
f39edd6fc4 use Elarun as wallpaper for air and oxygen 2014-08-15 18:12:59 +02:00
Marco Martin
6dcd361943 remoev the extra screenshot file definition 2014-08-15 18:12:59 +02:00
Marco Martin
428e4736b6 add margins from svg 2014-08-14 12:43:42 +02:00
Marco Martin
7e71e0bf95 comments++ 2014-08-14 12:36:46 +02:00
Marco Martin
5ad59675df don't duplicate ScrollViewStyle 2014-08-14 11:57:36 +02:00
Marco Martin
f9d64e2b09 try with new documentation 2014-08-13 19:19:23 +02:00
Marco Martin
99cc40053f make old contentMaxWidth/height props kinda work 2014-08-13 19:14:05 +02:00
Marco Martin
5961bcaaa7 add a focus effect 2014-08-13 18:55:08 +02:00
Marco Martin
877c2a3325 use the background framesvg only in TextAreaStyle 2014-08-13 18:52:50 +02:00
Marco Martin
76d24e8fe2 beginning of official style for TextArea
for now it copies ScrollViewStyle.. the style will have to be an import as well
2014-08-13 18:41:57 +02:00
David Edmundson
1d83cc0baf Guard against Plasma::SVG giving us null pixmaps
On some themes Plasma::SVG gives empty pixmaps. Loading a null QImage to
an atlas texture causes a crash in old versions of Qt.

Guard against it.

BUG: 88039
Reviewed-by: Martin Klapetek
2014-08-13 15:07:53 +02:00
David Edmundson
d4c9c20144 State inheritance from QtQuick / QtQuick.Controls modules 2014-08-13 12:16:33 +02:00
David Edmundson
f817168d02 Fix remaining doxygen exporting in Plasma.Core 2014-08-13 01:07:55 +02:00
David Edmundson
9f18d8c9e1 hide non qml accessible internal member functions from QML docs 2014-08-13 00:57:42 +02:00
David Edmundson
a2c04745f1 Generate documentation on remaining PlasmaCore classes 2014-08-13 00:45:43 +02:00
David Edmundson
f17761d508 Explicitly link QML Types with the name exposed in QML (which may be different) 2014-08-13 00:45:43 +02:00
Martin Klapetek
2f3c411956 [calendar] Initialize the ints properly
Fixes a cppcheck report
2014-08-12 23:50:36 +02:00
David Edmundson
5478c7e3c2 Add more missing @class and @short descriptors 2014-08-12 23:15:57 +02:00
David Edmundson
ace0209e0e Hide member documentation in imports
These classes are exposed only as QML so we should only show members the
user can actually use.

The invokable is moved to the top for easier reading

REVIEW: 119745
2014-08-12 23:13:52 +02:00
David Edmundson
c92a2697fa Remove non-true comment about certain classes being exported to QML 2014-08-12 21:33:49 +02:00
David Edmundson
6bdf7487cd Provide documentation on FrameSvgItem and ColorScope
without an @class no documentation is generated at all
2014-08-12 21:33:49 +02:00
Marco Martin
0ada27caa7 Merge branch 'mart/XPlasmaRootPath'
Revieved by: Eike Hein
2014-08-12 10:34:37 +02:00
Marco Martin
bcf653b9d4 Revert "check X-Plasma-RootPath as well for privates"
This reverts commit d7e0a9f0bc.
2014-08-12 10:34:07 +02:00
Marco Martin
d7e0a9f0bc check X-Plasma-RootPath as well for privates 2014-08-12 10:25:11 +02:00
Marco Martin
fb51115b39 remove the run associated app from here 2014-08-11 19:51:32 +02:00
Marco Martin
90cac04202 recompute actions text on sycoca change
it can update the app name it's opening it with
if the file association has been changed
2014-08-11 19:32:30 +02:00
Marco Martin
b5dfbdb0c8 fix build 2014-08-11 17:56:13 +02:00
Marco Martin
d5ef46d43d add file definition for colors 2014-08-11 17:54:45 +02:00
Marco Martin
7f383b968b use "open in" 2014-08-10 16:34:19 +02:00
Marco Martin
6a19de43fa Merge branch 'mart/AssociatedApplicationFromMime'
reviewed by: Eike Hein
2014-08-08 16:11:25 +02:00
Marco Martin
52bc83a65a action in containment as well 2014-08-08 16:09:36 +02:00
Marco Martin
2642fc3329 use open in 2014-08-08 15:45:04 +02:00
Aaron Seigo
928d5e63a5 bool Package::hasValidStructure() const
needed to differentiate between packages with structures and without
before path is set
2014-08-08 14:12:22 +02:00
Aaron Seigo
3e61b26178 better variable naming for clarity 2014-08-08 14:12:22 +02:00
Marco Martin
0d3a814e20 Don't leak
we were creating new packagestructures on each package creation
and never deleting them, causing a pretty big leak.

now keep a single instance of the structures, with prototype packages.
members are static for binary compatibility.
i would go for max one bic change in this library that's when and if
this library will be made pubic.

Patch by Aaron Seigo
2014-08-08 14:04:46 +02:00
Marco Martin
f608e85294 extract the app name and icon we'll be open with 2014-08-08 13:40:34 +02:00
Marco Martin
5f1abfbbe3 add definition for a screenshot 2014-08-08 13:29:46 +02:00
Marco Martin
d266a9594b valid package internalload even if just structure
consider a loaded package valid even if !isvalid() but does have some file
that indicates it has a valid packagestructure.
for how packages are loaded now, a package is never valid at first if has a required file:
because the path gets set only after the package is loaded
this fixes wallpaper loading
2014-08-08 11:29:23 +02:00
Aaron Seigo
b99001ace4 typos in comments 2014-08-08 08:25:27 +02:00
Aaron Seigo
b4f4515d2a detach on file/directory definition add 2014-08-08 08:25:27 +02:00
Aaron Seigo
9ee252475f setRequired actually works now 2014-08-08 08:25:26 +02:00
Aaron Seigo
402825b301 after detaching, fetch the item from the collection again
fixes setting these values on a copy of the package
2014-08-08 08:25:26 +02:00
Marco Martin
fad59eb01a bind setAssociatedApplicationUrls
add notify signal for setAssociatedApplication
Reviewed-by: Eike Hein
2014-08-07 19:34:57 +02:00
Marco Martin
1585c9b26a be aware of dpi changes
BUG:338093
2014-08-07 17:05:55 +02:00
Marco Martin
2482eb193c allow applets specify a different root than pluginname
introduce X-Plasma-RootPath: it would be used instead of
the plugin name for package root path if present
2014-08-07 16:26:51 +02:00
Marco Martin
419d97cfe0 Merge branch 'mart/QtControlsTextField'
REVIEW:119523
2014-08-07 15:42:21 +02:00
Marco Martin
11b2da667d fix logic of install/remove eventfilter 2014-08-07 13:28:37 +02:00
Marco Martin
1baddcc004 port plasma1 popupapplet event filter logic
use an event filter to open popup menus inside popups.
requires a recent 5.3 revision and a small change in the shell package
2014-08-06 19:45:31 +02:00
Marco Martin
120132879a contextualActionsAboutToShow signal
emitted just before showing a context menu
gives the plasmoid the time to fiddle with the actions beforehand
reviewd by:Eike Hein
BUG:337959
2014-08-06 11:43:55 +02:00
Aleix Pol
d7a7a4fb83 Use Qt API for figuring out the dialog screen
At the moment it's trying to translate the item position and iterating
through all screens, but we can get the screen through the item's window.

REVIEW: 119603
2014-08-05 19:48:28 +02:00
Aleix Pol
ebe9011253 Have separate texture hashes for each window
Apparently in nvidia we get corruptions when a texture created for a window
is used in another one.
With this patch we tell the texture has changed when we move it from a
window to another, so it's re-created and we keep textures for all windows
separately. This way we ensure they don't mix.

REVIEW: 119465
2014-08-04 19:53:35 +02:00
Marco Martin
712de91021 leave space for the clear button 2014-08-04 19:44:34 +02:00
Marco Martin
d66e62116b reintroduce all removed properties and methods
reintroduced as dummy, so existing stuff doesn't break but gets a warning
2014-08-04 19:28:30 +02:00
Marco Martin
b93132fca7 use QtControls for the textField 2014-07-28 19:55:32 +02:00
Aleix Pol
b6f5335cd8 Have separate texture hashes for each window
Apparently in nvidia we get corruptions when a texture created for a window
is used in another one.
With this patch we tell the texture has changed when we move it from a
window to another, so it's re-created and we keep textures for all windows
separately. This way we ensure they don't mix.

REVIEW: 119465
2014-07-28 19:48:08 +02:00
Marco Martin
f040238d82 Merge branch 'mart/QtControlsToolButton'
REVIEW:119464
2014-07-28 17:48:31 +02:00
Marco Martin
546ffbc791 reintroduce containmentForScreen with defaultPlugin
reintroduces an api call from plasma1:
its the only way to solve
https://bugs.kde.org/show_bug.cgi?id=337200
basically to avoid a crash when plasma starts with missing containments in the appletsrc and a locked corona, or a screen added with locked widgets.

it's the only entry point that allows a creation of a containment when widgets are locked
REVIEW:119513
CCBUG:337200
2014-07-28 13:43:23 +02:00
Marco Martin
0aaf7db0e4 use QtControls.ToolButton 2014-07-25 18:51:12 +02:00
Marco Martin
f2a1824c31 proper colors for the labels and icons 2014-07-25 15:43:17 +02:00
Marco Martin
957eab570e support for attached buttons 2014-07-25 15:36:14 +02:00
Marco Martin
c8cb89faa9 support for round buttons 2014-07-25 14:40:13 +02:00
Marco Martin
a3266857ad initial port of ToolButton
wonder if will be possible to share something with Button,
but ToolButton is way more complicated
2014-07-25 14:21:05 +02:00
Marco Martin
a059748fbc Merge branch 'mart/QtControlsButton'
REVIEW:119455
2014-07-25 13:05:00 +02:00
Aleix Pol
daf7981820 Just pass the bigger textures from the !m_fastPath to the textures cache
It's a really cheap lookup, and maybe we get to skip some textures
uploading

Reviewed by David Edmundson
2014-07-25 12:57:16 +02:00
Marco Martin
05f4a44059 use implicitWidth as label minimum width 2014-07-25 12:54:27 +02:00
Aleix Pol
ab0740228c Remove hint-stretch-over-borders from lineedit
This way the line edit can go through the fast path as well
2014-07-25 12:53:24 +02:00
Aleix Pol
6641285d3b Remove deprecated code-path
hint-compose-over-border is now treated by the !m_fastPath
2014-07-25 12:42:31 +02:00
Aleix Pol
bc425f1809 Cache the textures created for the fast path
Create a cache that has pointers to all the textures that we've generated,
so in case we have one already created, we can re-use it.

REVIEW: 119425
2014-07-25 12:41:53 +02:00
Marco Martin
dbbb8056f5 use the minimumWidth gave by the Layout 2014-07-25 11:26:41 +02:00
Marco Martin
d29b3f051d don't mix anchors and layouts 2014-07-25 11:20:26 +02:00
Marco Martin
7538c3292c don't compute two times the same thing 2014-07-24 20:16:46 +02:00
Marco Martin
0c2138916e use RowLayout 2014-07-24 20:11:31 +02:00
Marco Martin
b538a1dca9 override iconSource for compatibility 2014-07-24 19:19:26 +02:00
Marco Martin
9301163142 support checked buttons 2014-07-24 18:30:55 +02:00
Marco Martin
2e06bb3214 create arrow on demand, layout it correctly 2014-07-24 18:29:48 +02:00