}
}
-bool App::lm_release(const struct WMAction &action)
+WMError App::lm_release(const struct WMAction &action)
{
//auto const &surface_id = this->lookup_id(drawing_name);
- unsigned req_num = app_list.currentSequenceNumber();
+ WMError ret = WMError::LAYOUT_CHANGE_FAIL;
+ unsigned req_num = g_app_list.currentRequestNumber();
auto const &surface_id = this->lookup_id(action.role.c_str());
if (!surface_id)
{
TODO: emit syncDraw with application*/
if (msg)
{
- HMI_SEQ_DEBUG(app_list.currentSequenceNumber(), msg);
- //app_list.removeRequest(req_num);
+ HMI_SEQ_DEBUG(g_app_list.currentRequestNumber(), msg);
- //g_app_list.removeRequest(req_num);
- return false;
+ return WMError::LAYOUT_CHANGE_FAIL;
}
this->lm_layout_change(action.role.c_str());
- return true;
+ return WMError::SUCCESS;
}
-bool App::do_transition(unsigned req_num)
+WMError App::do_transition(unsigned req_num)
{
/*
* Check Policy
{
is_activate = false;
}
- WMError ret = app_list.setAction(req_num, trigger.appid, trigger.role, trigger.area, is_activate);
- app_list.req_dump();
- bool ret = g_app_list.setAction(req_num, trigger.appid, trigger.role, trigger.area, is_activate);
++ WMError ret = g_app_list.setAction(req_num, trigger.appid, trigger.role, trigger.area, is_activate);
+ g_app_list.reqDump();
- if (!ret)
+ if (ret != WMError::SUCCESS)
{
HMI_SEQ_ERROR(req_num, "Failed to set action");
return ret;
{
sync_draw_happen = true;
ret = lm_layout_change(y);
- if (!ret)
+ if (ret != WMError::SUCCESS)
{
- HMI_SEQ_ERROR(req_num, "Failed layout change: %s", y.appid.c_str());
+ HMI_SEQ_ERROR(req_num, "%s: appid: %s, role: %s, area: %s",
+ errorDescription(ret), y.appid.c_str(), y.role.c_str(), y.area.c_str());
- app_list.removeRequest(req_num);
+ g_app_list.removeRequest(req_num);
break;
// TODO: if transition fails, what should we do?
}
}
}
- if (!ret)
+ if (ret != WMError::SUCCESS)
{
- //this->emit_error(request_seq, 0 /*error_num*/, "error happens"); // test
+ //this->emit_error(req_num, 0 /*error_num*/, "error happens"); // test
}
- else if (ret && sync_draw_happen)
+ else if (sync_draw_happen)
{
this->set_timer();
}
void App::process_request()
{
- unsigned req = app_list.currentSequenceNumber();
+ unsigned req = g_app_list.currentRequestNumber();
HMI_SEQ_DEBUG(req, "Do next request");
- do_transition(req);
+ WMError rc = do_transition(req);
+ if(rc != WMError::SUCCESS){
+ HMI_SEQ_ERROR(req, errorDescription(rc));
+ }
}
void App::api_enddraw(char const *appid, char const *drawing_name)
void emit_invisible(char const *label);
void emit_visible(char const *label);
- bool do_transition(unsigned req_num);
+ WMError do_transition(unsigned sequence_number);
- void do_enddraw(unsigned sequence_number);
+ void do_enddraw(unsigned req_num);
void process_request();
void set_timer();
void stop_timer();
}
else
{
- HMI_SEQ_DEBUG(current_seq, "real: %d", req_list.back().seq_num + 1);
- req.seq_num = req_list.back().seq_num + 1;
+ HMI_SEQ_DEBUG(this->current_req, "add: %d", this->req_list.back().req_num + 1);
+ req.req_num = this->req_list.back().req_num + 1;
}
- req_list.push_back(req);
- return req.seq_num; // return 1; if you test time_expire
- }
-
- bool AppList::requestFinished()
- {
- return req_list.empty();
+ this->req_list.push_back(req);
+ return req.req_num; // return 1; if you test time_expire
}
-bool AppList::requestFinished() const
-{
- return this->req_list.empty();
-}
-
struct WMTrigger AppList::getRequest(unsigned req_num)
{
- for (auto &x : req_list)
+ for (const auto &x : this->req_list)
{
- if (req_num == x.seq_num)
+ if (req_num == x.req_num)
{
return x.trigger;
}
}
}
-bool AppList::setAction(unsigned req_num, const struct WMAction &action)
+WMError AppList::setAction(unsigned req_num, const struct WMAction &action)
{
- bool result = false;
+ WMError result = WMError::FAIL;
- for (auto &x : req_list)
+ for (auto &x : this->req_list)
{
- if (req_num != x.seq_num)
+ if (req_num != x.req_num)
{
continue;
}
return result;
}
-bool AppList::setAction(unsigned req_num, const string &appid, const string &role, const string &area, bool visible)
+ /**
+ * Note:
+ * This function set action with parameters.
+ * if visible is true, it means app should be visible, so enddraw_finished parameter should be false.
+ * otherwise (visible is false) app should be invisible. Then enddraw_finished param is set to true.
+ * This function doesn't support actions for focus yet.
+ */
+WMError AppList::setAction(unsigned req_num, const string &appid, const string &role, const string &area, bool visible)
{
- bool result = false;
+ WMError result = WMError::NOT_REGISTERED;
for (auto &x : req_list)
{
- if (req_num != x.seq_num)
+ if (req_num != x.req_num)
{
continue;
}
- WMAction action{appid, role, area, visible, false};
+ bool edraw_f = (visible) ? false : true;
+ WMAction action{appid, role, area, visible, edraw_f};
x.sync_draw_req.push_back(action);
- result = true;
+ result = WMError::SUCCESS;
break;
}
return result;
/* TODO: consider, which is better WMClient or std::string appid?
if appid is key to manage resources, it is better to select std::string
otherwise WMClient is better, IMO */
- bool requestFinished();
- bool requestFinished() const;
- bool setAction(unsigned req_num, const struct WMAction &action);
- bool setAction(unsigned req_num, const std::string &appid, const std::string &role, const std::string &area, bool visible = true);
+ WMError setAction(unsigned req_num, const struct WMAction &action);
+ WMError setAction(unsigned req_num, const std::string &appid, const std::string &role, const std::string &area, bool visible = true);
bool setEndDrawFinished(unsigned req_num, const std::string &appid, const std::string &role);
bool endDrawFullfilled(unsigned req_num);
void removeRequest(unsigned req_num);
return "Request is rejected, due to the policy rejection of the request.";
case REQ_DROPPED:
return "Request is dropped, because the high priority request is done";
+ case NOT_REGISTERED:
+ return "Not registered";
case TIMEOUT_EXPIRED:
return "Request is dropped, due to time out expiring";
+ case LAYOUT_CHANGE_FAIL:
+ return "Layout change fails, due to some reasons";
+ case NO_ENTRY:
+ return "No element";
default:
return "Unknown error number. Window manager bug.";
}
REQ_REJECTED,
REQ_DROPPED,
TIMEOUT_EXPIRED,
+ NOT_REGISTERED,
+ LAYOUT_CHANGE_FAIL,
+ NO_ENTRY,
UNKNOWN,
ERR_MAX = UNKNOWN
-} WMError;
+}
+WMError;
-static const char *errorDescription(WMError enum_error_number);
+const char *errorDescription(WMError enum_error_number);
}
#endif // WINDOW_MANAGER_ERROR