#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;
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;
}
{
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;
}
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
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;
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);
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();
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);
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> lm;
+ 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;
+ std::unordered_map<unsigned, std::string> tmp_surface2app;
+
static const char* kDefaultOldRoleDb;
};