From 2e6101dc275b087bfde30c03d5c95d753b1469fb Mon Sep 17 00:00:00 2001 From: Zofia Abramowska Date: Mon, 24 Jul 2017 14:13:57 +0200 Subject: [PATCH] Notify logic of popup response from popupper Change-Id: Idf46c6b9f1a761bfdf7af25dcce06f9a13d0f7e0 --- src/notification-daemon/ui/Answerable.h | 15 ++++++--------- src/notification-daemon/ui/Popupper.cpp | 18 +++++++++++------- src/notification-daemon/ui/Popupper.h | 1 + 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/notification-daemon/ui/Answerable.h b/src/notification-daemon/ui/Answerable.h index 114fa2c..e43bef4 100644 --- a/src/notification-daemon/ui/Answerable.h +++ b/src/notification-daemon/ui/Answerable.h @@ -34,20 +34,17 @@ public: ALLOW, DENY }; - typedef std::function AnswerHandler; - IAnswerable(AnswerHandler handler) : m_handler(handler) {} - virtual void process(enum Button) const = 0; + IAnswerable() {} + virtual NResponseType getAnswer(enum Button) const = 0; virtual ~IAnswerable() {} -protected: - AnswerHandler m_handler; }; class AnswerablePopupCheck : public IAnswerable { public: - AnswerablePopupCheck(PopupCheck *popup, AnswerHandler handler) - : IAnswerable(handler), m_popup(popup) {} - virtual void process(enum Button button) const { + AnswerablePopupCheck(PopupCheck *popup) + : m_popup(popup) {} + virtual NResponseType getAnswer(enum Button button) const { NResponseType answer; switch (button) { case IAnswerable::Button::ALLOW: @@ -65,7 +62,7 @@ public: default: answer = NResponseType::Error; } - m_handler( answer); + return answer; } private: PopupCheck *m_popup; diff --git a/src/notification-daemon/ui/Popupper.cpp b/src/notification-daemon/ui/Popupper.cpp index 97f9e34..bde4a20 100644 --- a/src/notification-daemon/ui/Popupper.cpp +++ b/src/notification-daemon/ui/Popupper.cpp @@ -81,17 +81,21 @@ void Popupper::popupClose() evas_object_hide(m_win); } +void Popupper::buttonAnswer(IAnswerable::Button button) { + NResponseType answer = m_answerablePtr->getAnswer(button); + m_popupResponseHandler(answer); +} void Popupper::allowPressedCb(void *data, Evas_Object *, void *) { - IAnswerable *answerable = static_cast(data); - answerable->process(IAnswerable::Button::ALLOW); + Popupper *popupper = static_cast(data); + popupper->buttonAnswer(IAnswerable::Button::ALLOW); } void Popupper::denyPressedCb(void *data, Evas_Object *, void *) { - IAnswerable *answerable = static_cast(data); - answerable->process(IAnswerable::Button::DENY); + Popupper *popupper = static_cast(data); + popupper->buttonAnswer(IAnswerable::Button::DENY); } Eina_Bool Popupper::hwKeyClickedCb(void *data, int type, void *event) @@ -172,11 +176,11 @@ void Popupper::popupCheck(const std::string &pkgLabel, const std::string &priv) return; } - m_answerablePtr.reset(new AnswerablePopupCheck(popup, m_popupResponseHandler)); + m_answerablePtr.reset(new AnswerablePopupCheck(popup)); evas_object_smart_callback_add(popup->getAllowButton(), "clicked", &Popupper::allowPressedCb, - m_answerablePtr.get()); + this); evas_object_smart_callback_add(popup->getDenyButton(), "clicked", &Popupper::denyPressedCb, - m_answerablePtr.get()); + this); m_elementPtr.reset(popup); show(); diff --git a/src/notification-daemon/ui/Popupper.h b/src/notification-daemon/ui/Popupper.h index c818a0d..067b746 100644 --- a/src/notification-daemon/ui/Popupper.h +++ b/src/notification-daemon/ui/Popupper.h @@ -60,6 +60,7 @@ private: static void denyPressedCb(void *data, Evas_Object *, void *); static Eina_Bool hwKeyClickedCb(void *data, int type, void *event); + void buttonAnswer(IAnswerable::Button button); void show(); PopupHandler m_popupResponseHandler; -- 2.7.4