Update windowmanager
[apps/agl-service-windowmanager.git] / src / window_manager.hpp
index 3ad9cc7..f3b3c64 100644 (file)
 #include <unordered_map>
 #include <experimental/optional>
 #include "controller_hooks.hpp"
-#include "layers.hpp"
-#include "layout.hpp"
-#include "wayland_ivi_wm.hpp"
+//#include "layers.hpp"
+// #include "layout.hpp"
+//#include "wayland_ivi_wm.hpp"
+#include "result.hpp"
 #include "pm_wrapper.hpp"
-#include "hmi-debug.h"
+#include "util.hpp"
 #include "request.hpp"
 #include "wm_error.hpp"
+#include "wm_layer_control.hpp"
+extern "C"
+{
+#include <afb/afb-binding.h>
+}
 
 struct json_object;
 
@@ -88,7 +94,7 @@ struct id_allocator
         unsigned sid = this->next++;
         this->id2name[sid] = name;
         this->name2id[name] = sid;
-        HMI_DEBUG("wm", "allocated new id %u with name %s", sid, name.c_str());
+        HMI_DEBUG("allocated new id %u with name %s", sid, name.c_str());
         return sid;
     }
 
@@ -97,7 +103,7 @@ struct id_allocator
     {
         this->id2name[sid] = name;
         this->name2id[name] = sid;
-        HMI_DEBUG("wm", "register id %u with name %s", sid, name.c_str());
+        HMI_DEBUG("register id %u with name %s", sid, name.c_str());
         return;
     }
 
@@ -140,7 +146,7 @@ struct id_allocator
 class WindowManager
 {
   public:
-    typedef std::unordered_map<uint32_t, struct compositor::rect> rect_map;
+    typedef std::unordered_map<uint32_t, struct rect> rect_map;
     typedef std::function<void(const char *err_msg)> reply_func;
 
     enum EventType
@@ -163,42 +169,7 @@ class WindowManager
         Event_Val_Max = Event_Error,
     };
 
-    const std::vector<const char *> kListEventName{
-        "active",
-        "inactive",
-        "visible",
-        "invisible",
-        "syncDraw",
-        "flushDraw",
-        "screenUpdated",
-        "error"};
-
-    struct controller_hooks chooks;
-
-    // This is the one thing, we do not own.
-    struct wl::display *display;
-
-    std::unique_ptr<struct compositor::controller> controller;
-    std::vector<std::unique_ptr<struct wl::output>> outputs;
-
-    // track current layouts separately
-    layer_map layers;
-
-    // ID allocation and proxy methods for lookup
-    struct id_allocator id_alloc;
-
-    // Set by AFB API when wayland events need to be dispatched
-    std::atomic<bool> pending_events;
-
-    std::map<const char *, struct afb_event> map_afb_event;
-
-    // Surface are info (x, y, w, h)
-    rect_map area_info;
-
-    // FOR CES DEMO
-    std::vector<int> surface_bg;
-
-    explicit WindowManager(wl::display *d);
+    explicit WindowManager();
     ~WindowManager() = default;
 
     WindowManager(WindowManager const &) = delete;
@@ -207,11 +178,10 @@ class WindowManager
     WindowManager &operator=(WindowManager &&) = delete;
 
     int init();
-    int dispatch_pending_events();
-    void set_pending_events();
 
     result<int> api_request_surface(char const *appid, char const *role);
     char const *api_request_surface(char const *appid, char const *role, char const *ivi_id);
+    bool api_set_role(char const *appid, char const *role, unsigned pid);
     void api_activate_surface(char const *appid, char const *role, char const *drawing_area, const reply_func &reply);
     void api_deactivate_surface(char const *appid, char const *role, const reply_func &reply);
     void api_enddraw(char const *appid, char const *role);
@@ -235,10 +205,18 @@ class WindowManager
     void startTransitionWrapper(std::vector<WMAction> &actions);
     void processError(WMError error);
 
+    const std::vector<const char *> kListEventName{
+        "active",
+        "inactive",
+        "visible",
+        "invisible",
+        "syncDraw",
+        "flushDraw",
+        "screenUpdated",
+        "error"};
+    std::map<const char *, struct afb_event> map_afb_event;
+
   private:
-    bool pop_pending_events();
-    optional<int> lookup_id(char const *name);
-    optional<std::string> lookup_name(int id);
     int init_layers();
     void surface_set_layout(int surface_id, const std::string& area = "");
     void layout_commit();
@@ -257,7 +235,6 @@ class WindowManager
     void deactivate(int id);
     WMError setRequest(const std::string &appid, const std::string &role, const std::string &area,
                              Task task, unsigned *req_num);
-    WMError doTransition(unsigned sequence_number);
     WMError checkPolicy(unsigned req_num);
     WMError startTransition(unsigned req_num);
 
@@ -276,12 +253,20 @@ class WindowManager
     const char *check_surface_exist(const char *role);
 
   private:
-    std::unordered_map<std::string, struct compositor::rect> area2size;
+    std::unordered_map<std::string, struct rect> area2size;
     std::unordered_map<std::string, std::string> roleold2new;
     std::unordered_map<std::string, std::string> rolenew2old;
-
+    std::shared_ptr<LayerControl> lc;
     PMWrapper pmw;
 
+    struct controller_hooks chooks;
+    // ID allocation and proxy methods for lookup
+    struct id_allocator id_alloc;
+    // Surface are info (x, y, w, h)
+    rect_map area_info;
+    // FOR CES DEMO
+    std::vector<int> surface_bg;
+
     static const char* kDefaultOldRoleDb;
 };