Putting this logic for delaying changes in the TextSelectionController
isn't the cleanest, but all attempts at saving this state somewhere in
the Lua API instead turned out even worse. Also, the logic for inverted
selections probably does belong in there.
This way, automation scripts won't nuke the fold data on any lines they
modify.
This is done as userdata for now, so scripts that don't know what
they're doing don't break the folds even further. If scripts get more
access to folds, it should be with a safer and simpler API.
Line folds are managed using metadata of AssDialogue elements, and
saved in the project properties. They only affect the appearance of the
subtitle grid, and have no impact on other line operations.
The previous logic wouldn't compile on linux using clang.
With the meson build requiring c++14, there's no need for platform
specific code. Really, the entire agi::util::sleep_for function could be
removed entirely, but I'll keep the patch minimal for now.
This cuts down on the data duplication for the command names and help
texts, at the expense of copying a bit of code from the general toolbar
logic.
Modifying the toolbar Populate() function to also add additional buttons
appears very hard or impossible.
Meson 0.60.0 adds support for an "iconv" dependency that always does the
right thing for you, so that you don't need to think about it. It also
has some side advantages:
- you can do dependency fallback, and --force-fallback-for=iconv works
- it logs one line, not two, and that is "dependency found? yes or no"
Since Aegisub doesn't mandate the use of such new versions of Meson, we
cannot assume the dependency works. Instead, adapt to the version of
Meson being used: on new enough versions of Meson, use the new
dependency, but on older versions of Meson, use the pre-existing logic,
which isn't as nice but has been producing correct results so far.