summaryrefslogtreecommitdiffstats
path: root/src/app.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.hpp')
-rw-r--r--src/app.hpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/app.hpp b/src/app.hpp
index 37122ef..00a2ba2 100644
--- a/src/app.hpp
+++ b/src/app.hpp
@@ -18,10 +18,12 @@
#define TMCAGLWM_APP_HPP
#include <json-c/json.h>
+
+#include <atomic>
#include <memory>
#include <unordered_map>
#include <unordered_set>
-#include <deque>
+#include <experimental/optional>
#include "afb_binding_api.hpp"
#include "config.hpp"
@@ -41,6 +43,8 @@ struct controller;
namespace wm {
+using std::experimental::optional;
+
struct id_allocator {
constexpr static const unsigned id_shift = 22;
constexpr static const unsigned id_mask = (1 << id_shift) - 1;
@@ -100,13 +104,21 @@ struct id_allocator {
struct LayoutState {
enum States {
+ LayoutNone, // Not useful...
LayoutSingle,
LayoutSplit,
};
- enum States state;
- int main;
- int sub;
+ enum States state{LayoutSingle};
+ int main{-1};
+ int sub{-1};
+
+ bool operator==(const LayoutState &b) const {
+ return state == b.state && main == b.main && sub == b.sub;
+ }
+ bool operator!=(const LayoutState &b) const {
+ return !(*this == b);
+ }
};
struct App {
@@ -121,7 +133,8 @@ struct App {
struct config config;
- layouts_type layouts;
+ // track current layouts separately
+ std::map<int, struct LayoutState> layouts;
layer_map layers;
// ID allocation and proxy methods for lookup
@@ -135,6 +148,8 @@ struct App {
struct LayoutState state;
+ std::atomic<bool> pending_events;
+
explicit App(wl::display *d);
~App();
@@ -148,7 +163,8 @@ struct App {
int dispatch_events();
- void surface_init_layout(uint32_t surface_id);
+ void surface_set_layout_full(uint32_t surface_id);
+ void surface_set_layout_split(uint32_t surface_id, uint32_t sub_surface_id);
// Allocate a surface ID for this role
result<int> request_surface(char const *drawing_name);