From: Mikko Rasa Date: Mon, 10 Nov 2014 17:25:19 +0000 (+0200) Subject: Allow startup info to be set externally X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=ce0b610396aa8f760462fa4d7a6bb207a43994d2;p=libs%2Fcore.git Allow startup info to be set externally ... but only if startup didn't happen through Application::run(). Certain facilities, like Graphics::Display on Windows, require startup info to be set and would not work without this in a custom startup scenario. --- diff --git a/source/core/application.cpp b/source/core/application.cpp index f4887e7..0ef9507 100644 --- a/source/core/application.cpp +++ b/source/core/application.cpp @@ -37,8 +37,7 @@ int Application::run(int argc, char **argv, void *data, void (*created_callback) return 126; } - argv0_ = argv[0]; - data_ = data; + set_startup_info(argv[0], data); try { @@ -81,6 +80,15 @@ int Application::run(int argc, char **argv, void *data, void (*created_callback) } } +void Application::set_startup_info(const char *argv0, void *data) +{ + if(argv0_) + throw logic_error("startup info already set"); + + argv0_ = argv0; + data_ = data; +} + int Application::main() { done = false; diff --git a/source/core/application.h b/source/core/application.h index 35ab873..6b3ec1a 100644 --- a/source/core/application.h +++ b/source/core/application.h @@ -46,6 +46,13 @@ public: by the library normally does it automatically at program startup. */ static int run(int, char **, void * =0, void (*)(void *) = 0); + /** Sets application startup info, including argv[0] value and platform- + specific data. + + This function can only be called once, and is normally called by + Application::run(). */ + static void set_startup_info(const char *, void *); + static void *get_data() { return data_; } static const char *get_argv0() { return argv0_; } static const std::string &get_name() { return name_; }