summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/app.cpp30
-rw-r--r--src/app.hpp52
-rw-r--r--src/main.cpp7
4 files changed, 90 insertions, 1 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 62bdc9f..15ecc3c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -13,7 +13,7 @@ add_library(winman MODULE
wayland.hpp
util.cpp
util.hpp
- ${IVI_CON_PROTO} json_helper.cpp json_helper.hpp)
+ ${IVI_CON_PROTO} json_helper.cpp json_helper.hpp app.hpp app.cpp)
target_include_directories(winman
PRIVATE
diff --git a/src/app.cpp b/src/app.cpp
new file mode 100644
index 0000000..5da4f9d
--- /dev/null
+++ b/src/app.cpp
@@ -0,0 +1,30 @@
+//
+// Created by mfritzsc on 7/11/17.
+//
+
+#include "app.hpp"
+
+namespace wm {
+
+ App::App()
+ : api{this}
+ {}
+
+ result<char const *, json> App::API::register_surface(uint32_t appid,
+ uint32_t surfid) {
+ return Err<char const *, json>("not implemented");
+ }
+
+ result<char const *, json> App::API::debug_layers() const {
+ return Err<char const *, json>("not implemented");
+ }
+
+ result<char const *, json> App::API::debug_surfaces() const {
+ return Err<char const *, json>("not implemented");
+ }
+
+ result<char const *, json> App::API::debug_status() const {
+ return Err<char const *, json>("not implemented");
+ }
+
+} // namespace wm \ No newline at end of file
diff --git a/src/app.hpp b/src/app.hpp
new file mode 100644
index 0000000..a3108b3
--- /dev/null
+++ b/src/app.hpp
@@ -0,0 +1,52 @@
+//
+// Created by mfritzsc on 7/11/17.
+//
+
+#ifndef TMCAGLWM_APP_HPP
+#define TMCAGLWM_APP_HPP
+
+#include <json.hpp>
+#include <experimental/optional>
+
+namespace wm {
+
+ using std::experimental::optional;
+ using std::experimental::nullopt;
+
+ template <typename E, typename T>
+ struct result {
+ optional<E> e;
+ optional<T> t;
+
+ bool is_ok() const { return this->t != nullopt; }
+ bool is_err() const { return this->e != nullopt; }
+ T unwrap() { return this->t.value(); }
+ };
+
+ template <typename E, typename T>
+ struct result<E, T> Err(E e) { return result<E, T>{e, nullopt}; }
+
+ template <typename E, typename T>
+ struct result<E, T> Ok(T t) { return result<E, T>{nullopt, t}; }
+
+ using json = nlohmann::json;
+
+ struct App {
+ struct API {
+ struct App *app;
+
+ result<char const *, json> debug_status() const;
+ result<char const *, json> debug_layers() const;
+ result<char const *, json> debug_surfaces() const;
+
+ result<char const *, json> register_surface(uint32_t appid, uint32_t surfid);
+ };
+
+ struct API api;
+
+ App();
+ };
+
+} // namespace wm
+
+#endif //TMCAGLWM_APP_HPP
diff --git a/src/main.cpp b/src/main.cpp
index 4593f22..5c9df33 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,6 +1,7 @@
#include "json_helper.hpp"
#include "util.hpp"
#include "wayland.hpp"
+#include "app.hpp"
#include <algorithm>
#include <json.h>
@@ -211,6 +212,12 @@ void debug_status(struct afb_req req) {
// Quick and dirty, dump current surfaces and layers
AFB_REQ_DEBUG(req, "status");
+ // auto r = g_afb_instance->app.api.debug_status();
+ // if (r.is_err()) {
+ // afb_req_fail(req, "failed", r.e.value());
+ // return;
+ // }
+
auto o = json_object_new_object();
json_object_object_add(o, "surfaces",
to_json(g_afb_instance->controller->sprops));