Remove unnecessary file existence check in GMenu2X::readConfig(string)

A file existence check is already performed, atomically with respect to
the filesystem, by ifstream's constructor. The result of this check is
available using ifstream::is_open().
Remove unnecessary file existence check in main

mkdir is able to return an error code in errno to indicate that the
directory requested to be created already exists (EEXIST).
Remove unnecessary file existence check in GMenu2X::setSkin(2)

The existence of modifications to the skin configuration in the home
directory is now checked with ifstream::is_open, and the system's skin
configuration is used if that returns false.
Remove unnecessary file existence check in GMenu2X -> InputManager

Instead of checking which input configuration file exists among 2
choices, then asking InputManager to load that file, InputManager
itself now performs the resolution based on whether ifstream::is_open
returns true for each choice.
When editing colors, show the selected color component using its color

Instead of showing 'R:', 'G:', 'B:' and 'A:', which take up a lot of space
and can overlap in standard fonts, the selection rectangle surrounding the
number is red, green, blue or gray, and the text is shorter.

This will allow the labels for the skin colors to be longer for translations
as well, given that their values are shown less wide.
Split creation, configuration and use of FileLister objects

The constructor now has zero arguments. showDirectories and showFiles
are now set using setter methods.

FileLister::browse is now the sole way to start a scan for files and
directories, replacing the initial path in the constructor and the
setPath method. It allows merging results from multiple directories
as before.

This is all to make explicit how many times the costly task of browsing
a directory is actually carried out.
Use a plain FileLister instead of a pointer in BrowseDialog

Configuration of the FileLister is now left to the subclasses of
BrowseDialog, as the construction of a FileLister and its configuration
(to show or hide directories and files) have been separated.

This allows deleting the destructors of BrowseDialog's subclasses,
which existed solely to delete a FileLister object constructed by
each subclass.

The allocation of a BrowseDialog now also implies allocating enough
space for its FileLister, so remove the check for fl being nullptr in
BrowseDialog::exec().
Pre-process the filter string in FileLister::setFilter

Instead of splitting the filter for every file in FileLister::browse,
the filter is split immediately in FileLister::setFilter, improving
performance.

getFilter is removed because it was unused. This also removes the need
to update the return type to 'const std::vector&' in the method and
rewrite its callers.
Optimise duplicate checking and sorting in FileLister::browse

Using a std::set makes both duplicate checking and sorting run in
O(n log n).
Move instead of copy strings at the end of FileLister::browse

This takes a little trickery, which I wrapped and documented.
Removed special case handling for !(showDirectories || showFiles)

The special case is not necessary for correctness. It would help
performance in theory, but it seems very unlikely that any code would
request a directory scan when it interested in neither the subdirs nor
the files in that directory.
In FileLister::browse, declare variables when they are needed
Avoid moving around entries unless new ones were found

When scanning multiple directories in succession, it's possible that
in some of them no matches are found. Avoid moving all pre-existing
entries back and forth in that case.

Also use move instead of copy for transferring the pre-existing
entries from the vector to the set.
Set the clock to 0 before reading application link files

0 is the default clock value, which doesn't get written to link files
if it's not changed. The clock was previously uninitialised before
reading link files, so it would get written with a random value if
there was none before.
Remove unnecessary file existence check in GMenu2X::readTmp()

A file existence check is already performed, atomically with respect to
the filesystem, by ifstream's constructor. The result of this check is
available using ifstream::is_open().
Remove unnecessary file existence check in GMenu2X::writeSkinConfig

mkdir is able to return an error code in errno to indicate that the
directory requested to be created already exists (EEXIST).
Remove unnecessary file existence check in GMenu2X::showSettings()

Browsing the user's translations directory will simply add no new files
to the list of translations available if the directory doesn't exist.
GMenu2X::showSettings() doesn't need to care about that.

Because translations are files, not directories, also don't return
directories in the result. The code that makes the translations list
calls FileLister::getFiles and ignores directories anyway.
Remove unnecessary file existence check in WallpaperDialog::exec()

Browsing the user's wallpaper directory will simply add no new files
to the list of wallpapers available if the directory doesn't exist.
WallpaperDialog::exec doesn't need to care about that.

Because wallpapers are files, not directories, also don't return
directories in the result. The code that makes the wallpapers list
calls FileLister::getFiles and ignores directories anyway.
Make FileLister::browse not log a non-existing directory as an error

To avoid unnecessary existence checks, we consider browsing a
non-existing directory to be a normal situation.
Show a file selector in OPK links only if Exec requires a file

Previously, if a user installed a new version of an OPK with the same
name as one that had a link configuration file, GMenu2X could request
a file for an application whose new version required no files to
launch.

In practice, this transition would occur only once per OPK application,
when its developer decided to use a custom browser after having used
GMenu2X's file browser. This bug would then show GMenu2X's file browser
to request a file that would not even be passed to the application.

Thanks to Nebuleon for analyzing the problem and the above description.