Tizen Native: функция обратного вызова для аппаратных кнопок не вызывается
Я установил обратный вызов для аппаратных кнопок "Назад" и "Еще", используя код:
static void win_more_cb(void* data, Evas_Object* obj, void* event_info) {
appdata_s* ad = data;
if (ad->ctxpopup != NULL) evas_object_del(ad->ctxpopup);
ad->ctxpopup = elm_ctxpopup_add(ad->win);
elm_object_style_set(ad->ctxpopup, "more/default");
eext_object_event_callback_add(ad->ctxpopup, EEXT_CALLBACK_BACK, _eext_ctxpopup_back_cb, NULL);
eext_object_event_callback_add(ad->ctxpopup, EEXT_CALLBACK_MORE, _eext_ctxpopup_back_cb, NULL);
evas_object_smart_callback_add(ad->ctxpopup, "dismissed", ctxpopup_dismissed_cb, NULL);
elm_ctxpopup_item_append(ad->ctxpopup, "Add", NULL, ctxpopup_add_cb, NULL);
move_more_ctxpopup(ad->ctxpopup);
evas_object_show(ad->ctxpopup);
}
Но это никогда не называется.
Обратите внимание: я использовал специально созданный _eext_ctxpopup_back_cb
, который записывает журнал отладки, чтобы проверить, вызван ли он, вместо стандартного eext_ctxpopup_back_cb
, Я пробовал с eext_ctxpopup_back_cb
тоже.
С этим кодом, когда я нажимаю аппаратную кнопку (Назад или Больше), он вызывает обратный вызов, который был установлен для главного окна. _eext_ctxpopup_back_cb
никогда не называется!
Вот код, который устанавливает обратные вызовы для главного окна:
eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, win_back_cb, ad);
eext_object_event_callback_add(ad->win, EEXT_CALLBACK_MORE, win_more_cb, ad);
Итак, похоже eext_object_event_callback_add()
фактически не устанавливает обратный вызов для Ctxpopup или Ctxpopup не получает EEXT_CALLBACK_BACK
а также EEXT_CALLBACK_MORE
события по какой-то причине.
Я видел использование eext_object_event_callback_add()
с Ctxpopup в документации Tizen Native API и во многих типовых приложениях, поэтому я предполагаю, что это должно было сработать, но это не так.
Пожалуйста посоветуй.
Обновить:
Я развернул свое еще не готовое приложение на устройстве Tizen, и там работала кнопка Назад! Итак, это что-то в среде отладки или эмуляторе (это не работает в эмуляторе).
1 ответ
Как я писал в "обновлении", это происходило только в эмуляторе. На реальном устройстве (Samsung Z1) аппаратная кнопка "Назад" работала нормально с указанным кодом.
Но мне удалось исправить это и для эмулятора:
Я понял, что EEXT_CALLBACK_BACK
не призван для ctxpopup
(а также для naviframe
, что я добавил позже), если какой-либо из аппаратных обратных вызовов (EEXT_CALLBACK_BACK
или же EEXT_CALLBACK_MORE
) зарегистрирован в главном окне (ad->win
). Как только я переехал EEXT_CALLBACK_MORE
к naviframe
, аппаратная кнопка Back начала работать и в эмуляторе.
Так что, как правило, эти два обратных вызова не должны быть установлены для главного окна. Если они есть, дочерние компоненты не получают аппаратные события Back и More.