WebContextMenuProxyTizen::~WebContextMenuProxyTizen()
{
#if ENABLE(TIZEN_CONTEXT_MENU_WEBKIT_2)
- if (m_popup)
+ if (m_popup) {
evas_object_del(m_popup);
+ m_popup = 0;
+ }
#endif
}
void WebContextMenuProxyTizen::createEflMenu(const Vector<WebContextMenuItemData>& items)
{
- if (m_popup)
+ if (m_popup) {
evas_object_del(m_popup);
+ m_popup = 0;
+ }
Evas_Object* topWidget = elm_object_top_widget_get(elm_object_parent_widget_get(m_webView));
if (!topWidget)
if (!m_popup)
return;
-#if ENABLE(TIZEN_HW_MORE_BACK_KEY)
- if (EflAssistHandle) {
- void (*webkit_ea_object_event_callback_add)(Evas_Object *, Ea_Callback_Type , Ea_Event_Cb func, void *);
- webkit_ea_object_event_callback_add = (void (*)(Evas_Object *, Ea_Callback_Type , Ea_Event_Cb func, void *))dlsym(EflAssistHandle, "ea_object_event_callback_add");
- (*webkit_ea_object_event_callback_add)(m_popup, EA_CALLBACK_BACK, contextMenuHwBackKeyCallback, 0);
- }
-#endif
-
m_items = items;
evas_object_data_set(m_popup, "WebContextMenuProxyTizen", this);
elm_object_tree_focus_allow_set(m_popup, false);
m_isContextMenuForTextSelection = false;
#endif
+ int appendedItemSize = 0;
for (size_t i = 0; i < size; i++) {
+ Elm_Object_Item* appendedItem = 0;
#if ENABLE(TIZEN_WEBKIT2_CLIPBOARD_HELPER)
if ((m_items.at(i).action() == ContextMenuItemTagPaste || m_items.at(i).action() == ContextMenuItemTagClipboard) && !clipboardItemSize)
continue;
}
if (!m_items.at(i).title().isEmpty())
- elm_ctxpopup_item_append(m_popup, m_items.at(i).title().utf8().data(), icon,
+ appendedItem = elm_ctxpopup_item_append(m_popup, m_items.at(i).title().utf8().data(), icon,
contextMenuItemSelectedCallback, &(m_items.at(i)));
else
- elm_ctxpopup_item_append(m_popup, 0, icon,
+ appendedItem = elm_ctxpopup_item_append(m_popup, 0, icon,
contextMenuItemSelectedCallback, &(m_items.at(i)));
}
#else
if (!m_items.at(i).title().isEmpty())
- elm_ctxpopup_item_append(m_popup, m_items.at(i).title().utf8().data(), 0,
+ appendedItem = elm_ctxpopup_item_append(m_popup, m_items.at(i).title().utf8().data(), 0,
contextMenuItemSelectedCallback, &(m_items.at(i)));
#endif
+
+ if (appendedItem)
+ appendedItemSize++;
+ }
+
+ TIZEN_LOGI("appendedItemSize : %d", appendedItemSize);
+ if (!appendedItemSize) {
+ evas_object_del(m_popup);
+ m_popup = 0;
+ return;
}
}
createEflMenu(items);
+ if (!m_popup)
+ return;
+
#if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
- if (m_isContextMenuForTextSelection && !evas_object_focus_get(m_webView))
+ if (m_isContextMenuForTextSelection && !evas_object_focus_get(m_webView)) {
+ evas_object_del(m_popup);
+ m_popup = 0;
return;
+ }
#endif
- if (m_popup) {
- int webViewX, webViewY;
- evas_object_geometry_get(m_webView, &webViewX, &webViewY, 0, 0);
- IntPoint popupPosition = position;
+ int webViewX, webViewY;
+ evas_object_geometry_get(m_webView, &webViewX, &webViewY, 0, 0);
+ IntPoint popupPosition = position;
#if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
- if (m_pageClientImpl) {
- popupPosition.scale(m_pageClientImpl->scaleFactor(), m_pageClientImpl->scaleFactor());
- IntPoint scrollPosition = m_pageClientImpl->scrollPosition();
- popupPosition.move(-scrollPosition.x(), -scrollPosition.y());
- }
+ if (m_pageClientImpl) {
+ popupPosition.scale(m_pageClientImpl->scaleFactor(), m_pageClientImpl->scaleFactor());
+ IntPoint scrollPosition = m_pageClientImpl->scrollPosition();
+ popupPosition.move(-scrollPosition.x(), -scrollPosition.y());
+ }
#endif
- popupPosition.setX(popupPosition.x() + webViewX);
- popupPosition.setY(popupPosition.y() + webViewY);
+ popupPosition.setX(popupPosition.x() + webViewX);
+ popupPosition.setY(popupPosition.y() + webViewY);
#if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
- if (m_isContextMenuForTextSelection) {
- if (!m_pageClientImpl->isTextSelectionMode())
- m_pageClientImpl->setIsTextSelectionMode(true);
+ if (m_isContextMenuForTextSelection) {
+ if (!m_pageClientImpl->isTextSelectionMode())
+ m_pageClientImpl->setIsTextSelectionMode(true);
- elm_object_style_set(m_popup,"copypaste");
- elm_ctxpopup_horizontal_set(m_popup, EINA_TRUE);
- elm_ctxpopup_direction_priority_set(m_popup, ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_LEFT, ELM_CTXPOPUP_DIRECTION_RIGHT, ELM_CTXPOPUP_DIRECTION_DOWN);
+ elm_object_style_set(m_popup,"copypaste");
+ elm_ctxpopup_horizontal_set(m_popup, EINA_TRUE);
+ elm_ctxpopup_direction_priority_set(m_popup, ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_LEFT, ELM_CTXPOPUP_DIRECTION_RIGHT, ELM_CTXPOPUP_DIRECTION_DOWN);
- m_pageClientImpl->changeContextMenuPosition(popupPosition);
- }
+ m_pageClientImpl->changeContextMenuPosition(popupPosition);
+ }
#endif
- evas_object_move(m_popup, popupPosition.x(), popupPosition.y());
- evas_object_show(m_popup);
+ evas_object_move(m_popup, popupPosition.x(), popupPosition.y());
+ evas_object_show(m_popup);
- evas_object_smart_callback_add(m_popup, "dismissed", contextMenuPopupDismissedCallback, this);
+ evas_object_smart_callback_add(m_popup, "dismissed", contextMenuPopupDismissedCallback, this);
+#if ENABLE(TIZEN_HW_MORE_BACK_KEY)
+ if (EflAssistHandle && !m_isContextMenuForTextSelection) {
+ void (*webkit_ea_object_event_callback_add)(Evas_Object *, Ea_Callback_Type , Ea_Event_Cb func, void *);
+ webkit_ea_object_event_callback_add = (void (*)(Evas_Object *, Ea_Callback_Type , Ea_Event_Cb func, void *))dlsym(EflAssistHandle, "ea_object_event_callback_add");
+ (*webkit_ea_object_event_callback_add)(m_popup, EA_CALLBACK_BACK, contextMenuHwBackKeyCallback, 0);
+ }
+#endif
- m_pageClientImpl->setIsContextMenuVisible(true);
+ m_pageClientImpl->setIsContextMenuVisible(true);
#if ENABLE(TOUCH_EVENTS) && ENABLE(TIZEN_GESTURE)
- // Cancel touch event when ContextMenu is shown.
- EwkViewImpl::fromEvasObject(m_webView)->feedTouchEventsByType(EWK_TOUCH_CANCEL);
+ // Cancel touch event when ContextMenu is shown.
+ EwkViewImpl::fromEvasObject(m_webView)->feedTouchEventsByType(EWK_TOUCH_CANCEL);
#endif
- }
#else
createEflMenu();
notImplemented();