diff --git a/escher/include/escher/app.h b/escher/include/escher/app.h index 9afe972ff..ee5a98576 100644 --- a/escher/include/escher/app.h +++ b/escher/include/escher/app.h @@ -15,10 +15,12 @@ class App : public Responder { public: + constexpr static uint8_t Magic = 0xA8; App(); void setWindow(Window * window); void focus(Responder * responder); void processEvent(Ion::Events::Event event); + uint8_t m_magic; // Poor man's RTTI protected: virtual ViewController * rootViewController() = 0; private: diff --git a/escher/src/app.cpp b/escher/src/app.cpp index fe8a6c48b..86a062d20 100644 --- a/escher/src/app.cpp +++ b/escher/src/app.cpp @@ -5,6 +5,7 @@ extern "C" { } App::App() : + m_magic(Magic), Responder(nullptr), m_focusedResponder(nullptr) { diff --git a/escher/src/responder.cpp b/escher/src/responder.cpp index 6373a806b..5b867ba72 100644 --- a/escher/src/responder.cpp +++ b/escher/src/responder.cpp @@ -1,4 +1,6 @@ #include +#include +#include Responder::Responder(Responder * parentResponder) : m_parentResponder(parentResponder) @@ -29,5 +31,7 @@ App * Responder::app() { /* If we used RTTI we could use a dynamic_cast, which would be a lot more * safe, as such: * return dynamic_cast(rootResponder); */ - return (App *)rootResponder; + App * result = (App *)rootResponder; + assert(result->m_magic == App::Magic); // Poor man's RTTI + return result; }