const int DetailPopup::HISTORY_ITEMS_NO = 5;
DetailPopup::DetailPopup(MainUI *mainUI)
- : m_layout(nullptr)
+ : m_main_view(nullptr)
+ , m_parent(nullptr)
+ , m_layout(nullptr)
, m_historyList(nullptr)
, m_mainUI(mainUI)
+ , m_urlButton(nullptr)
{
edjFilePath = EDJE_DIR;
edjFilePath.append("MainUI/DetailPopup.edj");
elm_genlist_item_class_free(m_history_item_class);
}
-void DetailPopup::createLayout(Evas_Object *parent)
+void DetailPopup::createLayout()
{
- m_layout = elm_layout_add(parent);
+ m_layout = elm_layout_add(m_parent);
elm_layout_file_set(m_layout, edjFilePath.c_str(), "popup");
evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(m_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
// TODO: add following (or simillar) callback for hardware back button when it will be available
//evas_object_event_callback_add(m_layout, EVAS_CALLBACK_KEY_DOWN, _back, this);
edje_object_signal_callback_add(elm_layout_edje_get(m_layout), "mouse,clicked,1", "bg", _bg_click, this);
- edje_object_signal_callback_add(elm_layout_edje_get(m_layout), "mouse,clicked,1", "url_over", _url_click, this);
+ m_urlButton = elm_button_add(m_layout); // add button to receive focus
+ elm_object_style_set(m_urlButton, "invisible_button");
+ evas_object_smart_callback_add(m_urlButton, "clicked", _url_click_button, this);
+ evas_object_show(m_urlButton);
+ elm_layout_content_set(m_layout, "url_over", m_urlButton);
+ elm_object_focus_custom_chain_unset(m_main_view);
+ elm_object_focus_custom_chain_append(m_main_view, m_urlButton, NULL);
+ elm_object_focus_set(m_urlButton, EINA_TRUE);
+
edje_object_signal_callback_add(elm_layout_edje_get(m_layout), "mouse,clicked,1", "thumbnail", _url_click, this);
elm_layout_text_set(m_layout, "history_title", "History");
elm_layout_text_set(m_layout, "url", tools::clearURL(m_item->getUrl()));
m_historyList = elm_genlist_add(m_layout);
evas_object_size_hint_weight_set(m_historyList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(m_historyList, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_smart_callback_add(m_historyList, "pressed", _history_url_click, this);
+ elm_genlist_select_mode_set(m_historyList, ELM_OBJECT_SELECT_MODE_ALWAYS);
+ elm_object_focus_custom_chain_append(m_main_view, m_historyList, NULL);
for (auto it = m_prevItems->begin(); it != m_prevItems->end(); ++it) {
- elm_genlist_item_append(m_historyList, m_history_item_class, it->get(), nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this);
+ elm_genlist_item_append(m_historyList, m_history_item_class, it->get(), nullptr, ELM_GENLIST_ITEM_NONE, _history_url_click, this);
}
evas_object_show(m_historyList);
elm_object_part_content_set(m_layout, "history_list", m_historyList);
evas_object_show(m_layout);
}
-void DetailPopup::show(Evas_Object *parent, std::shared_ptr<services::HistoryItem> currItem, std::shared_ptr<services::HistoryItemVector> prevItems)
+void DetailPopup::show(Evas_Object *parent, Evas_Object *main_view, std::shared_ptr<services::HistoryItem> currItem, std::shared_ptr<services::HistoryItemVector> prevItems)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ m_main_view = main_view;
+ m_parent = parent;
m_item = currItem;
m_prevItems = prevItems;
- createLayout(parent);
+ createLayout();
}
void DetailPopup::hide()
{
edje_object_signal_callback_del(elm_layout_edje_get(m_layout), "mouse,clicked,1", "bg", _bg_click);
- edje_object_signal_callback_del(elm_layout_edje_get(m_layout), "mouse,clicked,1", "url_over", _url_click);
+ elm_object_focus_custom_chain_unset(m_main_view);
+ evas_object_smart_callback_del(m_urlButton, "clicked", _url_click_button);
edje_object_signal_callback_del(elm_layout_edje_get(m_layout), "mouse,clicked,1", "thumbnail", _url_click);
- evas_object_smart_callback_del(m_historyList, "pressed", _history_url_click);
elm_genlist_clear(m_historyList);
evas_object_hide(m_layout);
evas_object_del(m_layout);
+ refreshQuicAccessFocusChain();
}
void DetailPopup::_bg_click(void* data, Evas_Object*, const char*, const char*)
dp->hide();
}
+void DetailPopup::_url_click_button(void* data, Evas_Object*, void*)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ DetailPopup *dp = reinterpret_cast<DetailPopup*>(data);
+ dp->openURLInNewTab(dp->m_item, dp->m_mainUI->isDesktopMode());
+ dp->hide();
+}
+
void DetailPopup::_history_url_click(void* data, Evas_Object*, void* event_info)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
/**
* @brief Show popup window
*/
- void show(Evas_Object *parent, std::shared_ptr<services::HistoryItem> currItem, std::shared_ptr<services::HistoryItemVector> prevItems);
+ void show(Evas_Object *parent, Evas_Object *main_view, std::shared_ptr<services::HistoryItem> currItem, std::shared_ptr<services::HistoryItemVector> prevItems);
+
+ /**
+ * @brief Hide popup
+ */
+ void hide();
+
+ bool isVisible() { return m_layout; }
boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::HistoryItem>, bool)> openURLInNewTab;
+ boost::signals2::signal<void ()> refreshQuicAccessFocusChain;
static const int HISTORY_ITEMS_NO;
private:
* @brief URL rectangle click callback
*/
static void _url_click(void *data, Evas_Object *obj, const char *emission, const char *source);
+ static void _url_click_button(void *data, Evas_Object *obj, void *event_info);
/**
* @brief History genlist item click callback
static void _history_url_click(void *data, Evas_Object *o, void *event_info);
/**
- * @brief Hide popup
- */
- void hide();
-
- /**
* @brief Create main layout and all compnents.
*/
- void createLayout(Evas_Object *parent);
+ void createLayout();
/**
* @brief Provide texts for history genlist
*/
static char* _get_history_link_text(void *data, Evas_Object *obj, const char *part);
+ Evas_Object* m_main_view;
+ Evas_Object* m_parent;
Evas_Object *m_layout;
Evas_Object *m_historyList;
+ Evas_Object* m_urlButton;
Elm_Gengrid_Item_Class * m_history_item_class;
MainUI *m_mainUI;
std::string edjFilePath;
{
addHistoryItems(vec);
showHistory();
- // update focus chain
- elm_object_focus_custom_chain_append(m_parent, m_mostVisitedButton, NULL);
- elm_object_focus_custom_chain_append(m_parent, m_bookmarksButton, NULL);
}
void MainUI::showBookmarks(std::vector< std::shared_ptr< tizen_browser::services::BookmarkItem > > vec)
Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(hi->getThumbnail(), m_parent);
elm_object_part_content_set(tile, "elm.thumbnail", thumb);
evas_object_smart_callback_add(tile, "clicked", _thumbClicked, itemData);
- elm_object_focus_custom_chain_append(m_parent, tile, NULL);
m_historyItems.push_back(hi);
}
} else {
evas_object_show(m_mostVisitedView);
}
+ refreshFocusChain();
}
void MainUI::hideUI()
void MainUI::openDetailPopup(std::shared_ptr<services::HistoryItem> currItem, std::shared_ptr<services::HistoryItemVector> prevItems)
{
- m_detailPopup.show(m_layout, currItem, prevItems);
+ m_detailPopup.show(m_layout, m_parent, currItem, prevItems);
}
void MainUI::showNoHistoryLabel()
return m_detailPopup;
}
+void MainUI::backButtonClicked()
+{
+ if (m_detailPopup.isVisible()) {
+ m_detailPopup.hide();
+ }
+}
+
+void MainUI::refreshFocusChain()
+{
+ elm_object_focus_custom_chain_append(m_parent, m_mostVisitedButton, NULL);
+ elm_object_focus_custom_chain_append(m_parent, m_bookmarksButton, NULL);
+ for (auto tile = m_tiles.begin(); tile != m_tiles.end(); ++tile) {
+ elm_object_focus_custom_chain_append(m_parent, *tile, NULL);
+ }
+}
+
}
}
M_ASSERT(m_mainUI.get());
m_mainUI->getDetailPopup().openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2));
+ m_mainUI->getDetailPopup().refreshQuicAccessFocusChain.connect(boost::bind(&WebPageUI::showUI, m_webPageUI.get()));
m_mainUI->openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2));
m_mainUI->mostVisitedTileClicked.connect(boost::bind(&SimpleUI::onMostVisitedTileClicked, this, _1, _2));
m_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this));
void SimpleUI::onBackPressed()
{
BROWSER_LOGD("[%s]", __func__);
- if (!m_webPageUI->getURIEntry().hasFocus() && !m_wvIMEStatus && !m_webPageUI->isHomePageActive())
- m_webEngine->backButtonClicked();
+ if (m_webPageUI->isHomePageActive()) {
+ m_mainUI->backButtonClicked();
+ } else {
+ if (!m_webPageUI->getURIEntry().hasFocus() && !m_wvIMEStatus)
+ m_webEngine->backButtonClicked();
+ }
}
void SimpleUI::reloadEnable(bool enable)