diff --git a/components/loadinglistener/loadinglistener.hpp b/components/loadinglistener/loadinglistener.hpp index 14a1b96f9a..e61f3837f1 100644 --- a/components/loadinglistener/loadinglistener.hpp +++ b/components/loadinglistener/loadinglistener.hpp @@ -2,6 +2,7 @@ #define COMPONENTS_LOADINGLISTENER_H #include +#include namespace Loading { @@ -33,12 +34,26 @@ namespace Loading virtual ~Listener() = default; }; + struct LoadingOff + { + void operator()(Listener* listener) const + { + if (listener != nullptr) + listener->loadingOff(); + } + }; + /// @brief Used for stopping a loading sequence when the object goes out of scope struct ScopedLoad { - ScopedLoad(Listener* l) : mListener(l) { mListener->loadingOn(); } - ~ScopedLoad() { mListener->loadingOff(); } - Listener* mListener; + std::unique_ptr mListener; + + explicit ScopedLoad(Listener* listener) + : mListener(listener) + { + if (mListener != nullptr) + mListener->loadingOn(); + } }; }