Review Request 123331: Cleanup dirs where Krita searches for ICC profiles

Friedrich W. H. Kossebau kossebau at kde.org
Mon Apr 13 21:11:18 BST 2015


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/123331/
-----------------------------------------------------------

(Updated April 13, 2015, 8:11 p.m.)


Status
------

This change has been marked as submitted.


Review request for Calligra, Cyrille Berger Skott, Boudewijn Rempt, and Srikanth Tiyyagura.


Changes
-------

Submitted with commit 462743a9cd6ca48597d039815806aae100050afd by Friedrich W. H. Kossebau to branch calligra/2.9.


Repository: calligra


Description
-------

While getting an overview over all the KStandardDirs usage in Calligra, to get an idea what is needed with KF5 where there is a bigger API/functionality breakage, I saw some issues with how ICC profiles are searched for.

Let's see if I have got things correctly:
ICC profiles are installed by different packages in `*/share/color/icc/*`. E.g. on my system there are number of different folders below `/usr/share/color/icc/`.
That is why the LcmsEnginePlugin calls
```
    KGlobal::mainComponent().dirs()->addResourceType("icc_profiles", 0, "share/color/icc/");
```
to get any such paths below the usual system prefixes (second argument `0` means immediate concatenation, without further grouping prefixes).
Krita itselfs installs all its own set of profiles in `${CMAKE_INSTALL_PREFIX}/share/color/icc/krita`.
Krita's ColorSettingsTab::installProfile() supports installation of additional ICC profiles, just to be used by Krita. It searches for the location to save the imported file with
```
    QString saveLocation = KGlobal::mainComponent().dirs()->saveLocation("icc_profiles");
```
which will give the first path in the list of prefixes + registered path suffix which can be written to. Which for me is `$KDEHOME/share/color/icc`.

So far things seem in order.


But then there are two calls that confuse me:

First is in KisFactory::componentData():
```
        s_componentData->dirs()->addResourceType("icc_profiles", 0, "krita/profiles/");
```
which will resolve to e.g. `/usr/krita/profiles/` or `$KDEHOME/krita/profiles/`.

Two questions:
a) Is that path resolution really wanted? Or should that have been done with `"data"` as second argument, so it would be resolved to e.g. `/usr/share/apps/krita/profiles/` or `$KDEHOME/share/apps/krita/profiles/`?
b) why that extra path, who is expected to put ICC files also in such folders?

Second issue is in LcmsEnginePlugin constructor:
```
    KGlobal::mainComponent().dirs()->addResourceDir("icc_profiles", QDir::homePath() + QString("/.kde/share/apps/krita/profiles/"));
```
Hardcoding `.kde` will not work on systems where the user data is stored under a different folder, after all that is configurable and possibly even platform-specific. Also giving a full path should not be needed.
This call seems to be a workaround for the first issue, as somebody has expected that ICC files in `$KDEHOME/share/apps/krita/profiles/` will be found.

So I propose to clean this up, by removing the code from LcmsEnginePlugin for registering the hardcoded path to the user's profile files.

And to either fix the registration of `krita/profiles/` or perhaps to even completely remove it (which I favour, unless there is a real need).

WRT to backwards compatibility, as `$KDEHOME/share/color/icc` seems to be picked first for saving ICC files via `saveLocation()`, removing both questionable resource path registrations should then only affect people who installed any files manually in the wrong `krita/profiles/` dirs or that hardcoded dir. Which I guess are not that many. And if they are, they surely are also able to fix it for them.

So for clean code and not collecting too much someone-on-the-earth-might-be-unhappy-to-have-to-adapt boilerplate I would remove this all, and make a comment in the release notes :)
But not my call, so asking you as maintainer :)
If you want to keep it, I will add at least some "this is broken, remove in a sane moment" comment explaining what brokeness we have here.


Diffs
-----

  krita/ui/kis_factory2.cc 2f5ba41 
  plugins/colorengines/lcms2/LcmsEnginePlugin.cpp c73ecf6 

Diff: https://git.reviewboard.kde.org/r/123331/diff/


Testing
-------


Thanks,

Friedrich W. H. Kossebau

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/calligra-devel/attachments/20150413/42a4fed1/attachment.htm>


More information about the calligra-devel mailing list