desktoptojson and list properties
Sebastian Kügler
sebas at kde.org
Mon Nov 17 17:35:51 GMT 2014
On Monday, November 17, 2014 02:04:51 Aleix Pol wrote:
> On Mon, Nov 17, 2014 at 12:24 AM, Milian Wolff <mail at milianw.de> wrote:
> On Sunday 16 November 2014 23:52:25 Milian Wolff wrote:
> > KDevelop is currently bitten hard by a bug/limitation in desktoptojson. It
> > does not actually understand the .desktop files and custom properties get
> > converted to plain JSON strings. Looking at the sources it's also clear
> > why, only a selected list of .desktop properties is interpreted as lists.
> >
> > We have a custom kdevelopplugin.desktop file that describes our custom
> > properties via something like:
> >
> > [Desktop Entry]
> > Type=ServiceType
> > X-KDE-ServiceType=KDevelop/Plugin
> > X-KDE-Derived=KPluginInfo
> > Name=KDevelop Plugin
> > ...
> > [PropertyDef::X-KDevelop-Interfaces]
> > Type=QStringList
> > ...
> >
> > To me it looks like I'll have to add support for such files to
> > desktoptojson. But I wonder: Where was/is the code for the above files
> > (how
> > are they called?)?
>
> Apparently these are KServiceType's and the code can be found in kservice.
> In kservice.cpp's KServicePrivate::property we see code like this:
>
> // No luck, let's ask KServiceTypeFactory what the type of this property
> // is supposed to be.
> // ######### this looks in all servicetypes, not just the ones this service
> // supports!
> KServiceTypeFactory::self()->findPropertyTypeByName(...)
You can't do this, desktoptojson is in kcoreaddons nowadays, and doesn't allow
KService as a dependency.
Currently, the list properties are hardcoded in desktoptojson. I suppose you
could also add it in there, but that feels quite meh, since ... well...
hardcoded.
> Fine, I could add similar code to desktoptojson, but:
> > Since desktoptojson will be called for the plugins we ship in
> > KDevplatform,
> > how would/could I make desktoptojson "know" about the
> > kdevelopplugin.desktop file without it being installed yet?
>
> that would not work here as our service type is still unknown to
> kbuildsycoca!
> > Or can we nowadays write the .json files directly, i.e. can scripty/ki18n
> > cope with them nowadays?
>
> So, any chance we can use .json directly here?
That should be possible, you can just drop the json file in there, and
reference that in the K_PLUGIN_FACTORY_WITH_JSON macro.
> I guess a solution would be to be able to provide the servicetype file as an
> argument to desktoptojson? Also given how the plan is to move away from
> kbuildsycoca database for these files (no?) maybe it would make sense to
> have an alternative way to look them up by path?
The problem is not so much looking them up, but reading them, as far as I
understand, those bits are really central to KService, and quite entangled at
that. I don't think you'll have much luck cutting that out there to make it
usable on its own -- but then, maybe you find a way...
Cheers,
--
sebas
http://www.kde.org | http://vizZzion.org | GPG Key ID: 9119 0EF9
More information about the kde-core-devel
mailing list