From ce0b610396aa8f760462fa4d7a6bb207a43994d2 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Mon, 10 Nov 2014 19:25:19 +0200 Subject: [PATCH] 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. --- source/core/application.cpp | 12 ++++++++++-- source/core/application.h | 7 +++++++ 2 files changed, 17 insertions(+), 2 deletions(-) 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_; } -- 2.43.0