Allow startup info to be set externally
authorMikko Rasa <tdb@tdb.fi>
Mon, 10 Nov 2014 17:25:19 +0000 (19:25 +0200)
committerMikko Rasa <tdb@tdb.fi>
Mon, 10 Nov 2014 17:25:19 +0000 (19:25 +0200)
... 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
source/core/application.h

index f4887e756ff2ca64811b37bb7093c06157ff59b8..0ef9507a14275af33fadbd1a73f190528e8f1601 100644 (file)
@@ -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;
index 35ab8734ef30fa08b7a9da21e3c854a9f30d24b1..6b3ec1aa65bdd98b2877440a3f7a2f6e668d191a 100644 (file)
@@ -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_; }