diff --git a/src/libs/tgfclient/guistack.cpp b/src/libs/tgfclient/guistack.cpp new file mode 100644 index 000000000..def2622c8 --- /dev/null +++ b/src/libs/tgfclient/guistack.cpp @@ -0,0 +1,46 @@ +#include "guistack.h" +#include "tgfclient.h" +#include +#include + +GuiStack & +GuiStack::get() +{ + static GuiStack stack; + return stack; +} + +void * +GuiStack::top() +{ + GuiStack &g = get(); + + return g.screens.empty() ? NULL : g.screens.top(); +} + +void +GuiStack::push(void *screen) +{ + get().screens.push(screen); + GfuiScreenActivate(screen); +} + +void * +GuiStack::pop() +{ + void *ret; + GuiStack &g = get(); + + if (g.screens.empty()) + return NULL; + + GfuiScreenRelease(g.screens.top()); + g.screens.pop(); + + if (g.screens.empty()) + return NULL; + + ret = g.screens.top(); + GfuiScreenActivate(ret); + return ret; +} diff --git a/src/libs/tgfclient/guistack.h b/src/libs/tgfclient/guistack.h new file mode 100644 index 000000000..556024cf6 --- /dev/null +++ b/src/libs/tgfclient/guistack.h @@ -0,0 +1,20 @@ +#ifndef GUI_STACK_H +#define GUI_STACK_H + +#include + +class GuiStack +{ +public: + static void *top(); + static void push(void *screen); + static void *pop(); + +private: + static GuiStack &get(); + GuiStack() {}; + void operator=(const GuiStack &); + std::stack screens; +}; + +#endif /* GUI_STACK_H */