popupper->buttonAnswer(IAnswerable::Button::DENY);
}
+Eina_Bool Popupper::checkWakeupCb(void *data, int type, void *event)
+{
+ Ecore_Event_Key *ev = static_cast<Ecore_Event_Key*>(event);
+ Popupper* popupper = static_cast<Popupper*>(data);
+ if ((!strcmp(getHomeKey().c_str(), ev->key) || !strcmp("XF86Back", ev->key)) && elm_win_focus_get(popupper->m_win)) {
+ ALOGD("Focused. Pressed key is <" << ev->key << "> type <" << type << ">");
+ popupper->m_focused = true;
+ } else {
+ popupper->m_focused = false;
+ }
+ return EINA_TRUE;
+}
+
Eina_Bool Popupper::hwKeyClickedCb(void *data, int type, void *event)
{
Ecore_Event_Key *ev = static_cast<Ecore_Event_Key*>(event);
Popupper* runner = static_cast<Popupper*>(data);
+ if (!runner->m_focused) {
+ ALOGD("Key input for wake up. Ignore.");
+ return EINA_TRUE;
+ }
double delay = 0.5;
ALOGD("HW button pressed. type <" << type << "> pressed key is <" << ev->key << ">");
if ((!strcmp(getHomeKey().c_str(), ev->key) || !strcmp("XF86Back", ev->key)) && runner->m_elementPtr) {
elm_win_keygrab_set(m_win, getHomeKey().c_str(), 0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
elm_win_keygrab_set(m_win, "XF86Back", 0, 0, 0, ELM_WIN_KEYGRAB_TOPMOST);
- ecore_event_handler_add(ECORE_EVENT_KEY_UP, &Popupper::hwKeyClickedCb, this);
+ m_keyDownHandler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, &Popupper::checkWakeupCb, this);
+ m_keyUpHandler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, &Popupper::hwKeyClickedCb, this);
}
void Popupper::show() {
m_shouldRaise = false;
elm_win_keygrab_unset(m_win, getHomeKey().c_str(), 0, 0);
elm_win_keygrab_unset(m_win, "XF86Back", 0, 0);
+ ecore_event_handler_del(m_keyDownHandler);
+ ecore_event_handler_del(m_keyUpHandler);
m_elementPtr.reset(nullptr);
m_answerablePtr.reset(nullptr);
m_responses.clear();
static void unfocusedCb(void *data, Evas_Object *, void *);
static void allowPressedCb(void *data, Evas_Object *, void *);
static void denyPressedCb(void *data, Evas_Object *, void *);
+ static Eina_Bool checkWakeupCb(void *data, int type, void *event);
static Eina_Bool hwKeyClickedCb(void *data, int type, void *event);
void buttonAnswer(IAnswerable::Button button);
std::string m_pkgId;
bool m_shouldRaise = false;
+ bool m_focused = false;
+
+ Ecore_Event_Handler *m_keyDownHandler = nullptr;
+ Ecore_Event_Handler *m_keyUpHandler = nullptr;
};
} /* namespace Notification */