Tizen Native: функция обратного вызова для аппаратных кнопок не вызывается - PullRequest
0 голосов
/ 10 июня 2018

Я установил обратный вызов для аппаратных кнопок «Назад» и «Еще», используя код:

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 Ответ

0 голосов
/ 16 июля 2018

Как я писал в "обновлении", это происходило только в эмуляторе.На реальном устройстве (Samsung Z1) аппаратная кнопка «Назад» работала нормально с указанным кодом.

Но мне удалось исправить это и для эмулятора:

Я понял, что EEXT_CALLBACK_BACKне вызывается для ctxpopup (а также для naviframe, который я добавил позже), если какой-либо из аппаратных обратных вызовов (EEXT_CALLBACK_BACK или EEXT_CALLBACK_MORE) зарегистрирован для главного окна (ad->win).Как только я переместил EEXT_CALLBACK_MORE в naviframe, аппаратная кнопка «Назад» начала работать и в эмуляторе.

Так что, как правило, эти два обратных вызова не должны устанавливаться для основногоокно.Если они есть, дочерние компоненты не получают аппаратные события Back и More.

...