kded ==== kded is responsible for creating the sycoca file, i.e. the binary cache of servicetypes, mimetypes, and services for a particular user. It uses KDirWatch to monitor the directories containing .desktop files. When a file is added/removed, it waits 5 seconds (in case of series of updates), and then launches kbuildsycoca. kbuildsycoca recreates the sycoca file by: * parsing all .desktop files, replacing global ones by local ones (at any level of the hierarchy) * creating all objects in memory * saving everything in the sycoca file (see below for ksycoca internals) * clearing all memory * notifying the applications that use ksycoca by a DBUS signal emitted to the ksycoca object (KSycoca::notifyDatabaseChanged()). Format of the sycoca database file ================================== * Version List of factories | * Factory id, Factory offset | * Factory id, Factory offset | * ... | * 0 * KDE prefixes * timestamp * KDE language * resource hash * list of all resource dirs For each factory | Header | * offset of the dict | * offset of the beginning of the entries | * offset of the end of the entries | Rest of the header (factory-specific), for instance: | * Offer-list offset | * Mimetype-patterns index offset (fast patterns) | * Mimetype-patterns index offset (other) | * Entry size in the mimetype-patterns index ("fast" part) | | KSycocaEntries | | * entry type | | Entry | | | entry-dependent information | | ... | | | Dict | | * hashtable size | | Hash list | | | * list of values used to compute a hash key | | Hash table | | | * id (positive = entry offset) | | | * id (negative = - offset in duplicates list ) | | | * 0 if no entry for that hash value | | Table of duplicates | | | * entry offset, key | | | * entry offset, key | Offer list | * servicetype offset, service offset | * servicetype offset, service offset | * servicetype offset, service offset | * servicetype offset, service offset | * mimetype offset, service offset | * mimetype offset, service offset | * mimetype offset, service offset | * mimetype offset, service offset | * 0 This allows to quickly find services associated with a servicetype. It does NOT reflect the user profile, which is stored in profilerc and implemented in KServiceTypeProfile. Mimetype patterns | Fast patterns (fixed size) | * Extension (padded to 4 chars), mimetype offset | * Extension (padded to 4 chars), mimetype offset | * Extension (padded to 4 chars), mimetype offset | Other patterns (variable size) | * Pattern (ex : *.*gf), mimetype offset | * Pattern (ex : Makefile*), mimetype offset | * "" The first one is designed for a binary search, since entries have a fixed size and are sorted by extension. The second one (10% of the mimetypes usually) is for a linear search.