This is a chearry pick by me (gfgtdf) of 66176b1738. It differes a lot from the original becasue since there were so much merging conflics i decided to do it mostly from scratch.
Conflicts:
src/addon/manager.cpp
src/addon/manager_ui.cpp
src/campaign_server/campaign_server.cpp
src/config_cache.cpp
src/create_engine.cpp
src/editor/map/context_manager.cpp
src/editor/map/map_context.cpp
src/font.cpp
src/game_config_manager.cpp
src/gamestatus.cpp
src/gui/dialogs/editor/custom_tod.cpp
src/gui/dialogs/lobby/lobby_data.cpp
src/gui/dialogs/mp_create_game.cpp
src/gui/widgets/settings.cpp
src/hotkeys.cpp
src/image.cpp
src/multiplayer_lobby.cpp
src/network.cpp
src/playcampaign.cpp
src/preferences.cpp
src/savegame.cpp
src/serialization/preprocessor.cpp
src/tests/main.cpp
src/wesnoth.cpp
src/widgets/button.cpp
If the main button image could not be loaded, the previous code
would throw an exception of an obscure type "error". It appears that
this was not caught anywhere except the main function in wesnoth.cpp
and so the program would close immediately.
I first tried to go into the gui initialization and construct
buttons in try catch blocks, skipping ones that have problems, but
rather than being able to proceed, this just causes a segfault
because other parts of the code assume that all buttons have been
constructed successfully. This means that not finding the image is
necessarily a fatal error.
My fix for the problem is, instead of throwing error, we throw the
more standard "game::game_error". The new behavior is, if you try
to load a theme with nonexistant images, then a black screen will
appear with a dialog
"error initializing button images! filename: buttons/dontexist.png"
The game then returns to the title screen.
Conflicts:
src/widgets/button.cpp
(just the #include reorder)
This is the result of running this command in directory src/
find . -type f -exec sed -i 's/\(ERR.*\)\\n\"\;/\1\" << std::endl\;/g' '{}' \;
and carefully inspecting the results.
...-lib and -test even if they got no translateable strings the
declaration is done via this define: #define GETTEXT_DOMAIN
"wesnoth-lib" a short "how to get .cpp files translated" is left in
src/gettext.hpp