#define ENABLE_TIZEN_INPUT_TAG_SUPPORT 1 /* Eunjoong Jeon : Support input tag type - 1. Hint the input tag type to apps 2. Define appearence of each input tag type */
#define ENABLE_TIZEN_INPUT_TAG_EXTENSION 1 /* Yuni Jeong(yhnet.jung@samsung.com) : For setting & getting focused input element value */
#define ENABLE_TIZEN_INPUT_COLOR_PICKER 1 /* KwangYong Choi(ky0.choi@samsung.com) : Interface for input color picker on Tizen */
+#define ENABLE_TIZEN_DATALIST_ELEMENT 1 /* KwangYong Choi(ky0.choi@samsung.com) : Support datalist feature of text input field */
#define ENABLE_TIZEN_CONTEXT_MENU_TEMPORARY_FIX 1 /* Michal Pakula(m.pakula@samsung.com) : Temporary hack to prevent from crash when calling context menu on editable fiedld */
#define ENABLE_TIZEN_FORM_SUBMIT_SUPPORT 1 /* Gyuyoung Kim(gyuyoung.kim@samsung.com) : fix a problem when form submits data to specific window */
#define ENABLE_TIZEN_SCROLL_ADDING_FIX 1 /* Kamil Blank(k.blank@samsung.com) : Fix for _ewk_view_scroll_add (pending repaints were wrongly updated) */
bool TextFieldInputType::shouldRespectListAttribute()
{
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ // FIXME: This should be checked by theme. It will be modified after upversioning of datalist element feature.
+ return true;
+#else
return InputType::themeSupportsDataListUI(this);
+#endif
}
void TextFieldInputType::updatePlaceholderText()
ewk_color_popup(inputValue);
}
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+void InputPicker::showDataList(Ewk_Input_Type inputType, Eina_List* optionList)
+{
+ // FIXME: Show DataList UI.
+}
+
+void InputPicker::hideDataList(Ewk_Input_Type inputType)
+{
+ // FIXME: Close DataList UI.
+}
+#endif
+
#if ENABLE(ELM_COLORPALLETE)
static void _color_palette_changed_cb(void* data, Evas_Object* obj, void* eventInfo)
{
#if OS(TIZEN) && ENABLE(TIZEN_INPUT_TAG_EXTENSION)
#include "ewk_view.h"
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+#include "ewk_view_private.h"
+#endif
+
typedef struct _Evas_Object Evas_Object;
struct Input_Date {
~InputPicker();
void show(Ewk_Input_Type, const char*);
+
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ void showDataList(Ewk_Input_Type inputType, Eina_List* optionList);
+ void hideDataList(Ewk_Input_Type inputType);
+#endif
+
void ewk_date_popup(const char*);
void ewk_time_popup(const char*);
void ewk_month_popup(const char*);
return;
}
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ Vector<String> optionList = page()->getFocusedInputElementDataList();
+ if (optionList.size() > 0) {
+ if (m_inputType == "tel")
+ ewkViewDataListShowRequest(m_viewWidget, EWK_INPUT_TYPE_TELEPHONE, optionList);
+ else if (m_inputType == "number")
+ ewkViewDataListShowRequest(m_viewWidget, EWK_INPUT_TYPE_NUMBER, optionList);
+ else if (m_inputType == "email")
+ ewkViewDataListShowRequest(m_viewWidget, EWK_INPUT_TYPE_EMAIL, optionList);
+ else if (m_inputType == "url")
+ ewkViewDataListShowRequest(m_viewWidget, EWK_INPUT_TYPE_URL, optionList);
+ else
+ ewkViewDataListShowRequest(m_viewWidget, EWK_INPUT_TYPE_TEXT, optionList);
+
+ return;
+ }
+#endif
+
LOG(ISF, "editorState.inputMethodHints %d, InputType %s\n", editorState.inputMethodHints, m_inputType.utf8().data());
// Allow Prediction text
#if ENABLE(TIZEN_INPUT_COLOR_PICKER)
WebColorChooserProxyEfl* colorChooser;
#endif // ENABLE(TIZEN_INPUT_COLOR_PICKER)
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ Eina_List* dataList;
+#endif
#if ENABLE(TIZEN_SCREEN_ORIENTATION_SUPPORT_INTERNAL)
struct {
Ewk_Orientation_Lock_Cb callback;
static Eina_Bool _ewk_view_input_picker_show(Ewk_View_Smart_Data*, Ewk_Input_Type, const char* inputValue);
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+static Eina_Bool _ewk_view_data_list_show(Ewk_View_Smart_Data*, Ewk_Input_Type, Eina_List*);
+static Eina_Bool _ewk_view_data_list_hide(Ewk_View_Smart_Data*, Ewk_Input_Type);
+#endif
+
#endif // #if OS(TIZEN)
static void _ewk_view_smart_changed(Ewk_View_Smart_Data* smartData)
}
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+static void _ewk_view_data_list_del(Eina_List* dataList)
+{
+ EINA_SAFETY_ON_NULL_RETURN(dataList);
+
+ void* item;
+ EINA_LIST_FREE(dataList, item)
+ eina_stringshare_del(static_cast<char*>(item));
+}
+#endif
+
#endif // #if OS(TIZEN)
static Evas_Smart_Class g_parentSmartClass = EVAS_SMART_CLASS_INIT_NULL;
priv->gestureRecognizer = GestureRecognizer::create(smartData->self);
priv->gestureClient = GestureClient::create(smartData->self);
#endif // #if ENABLE(TIZEN_GESTURE)
+
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ priv->dataList = 0;
+#endif
+
#endif // #if OS(TIZEN)
return priv;
#endif
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ _ewk_view_data_list_del(priv->dataList);
+ priv->dataList = 0;
+#endif
+
#if ENABLE(TIZEN_GEOLOCATION)
if (priv->geolocation)
ewkGeolocationDeleteGeolocation(priv->geolocation);
#if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
api->input_picker_show = _ewk_view_input_picker_show;
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ api->data_list_show = _ewk_view_data_list_show;
+ api->data_list_hide = _ewk_view_data_list_hide;
+#endif
#if ENABLE(TIZEN_SCREEN_ORIENTATION_SUPPORT_INTERNAL)
api->orientation_lock = _ewk_orientation_lock;
api->orientation_unlock = _ewk_orientation_unlock;
}
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+static Eina_Bool _ewk_view_data_list_show(Ewk_View_Smart_Data* smartData, Ewk_Input_Type inputType, Eina_List* optionList)
+{
+ EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, false);
+
+ priv->inputPicker->showDataList(inputType, optionList);
+ return true;
+}
+
+static Eina_Bool _ewk_view_data_list_hide(Ewk_View_Smart_Data* smartData, Ewk_Input_Type inputType)
+{
+ EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, false);
+
+ priv->inputPicker->hideDataList(inputType);
+ return true;
+}
+#endif
+
PageClientImpl* ewkViewGetPageClient(const Evas_Object* ewkView)
{
EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, 0);
#endif // ENABLE(TIZEN_INPUT_COLOR_PICKER)
}
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+void ewkViewDataListShowRequest(Evas_Object* ewkView, Ewk_Input_Type inputType, Vector<String> optionList)
+{
+ EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
+ EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
+ EINA_SAFETY_ON_NULL_RETURN(smartData->api);
+ EINA_SAFETY_ON_NULL_RETURN(smartData->api->data_list_show);
+
+ if (priv->dataList)
+ ewkViewDataListHideRequest(ewkView, inputType);
+
+ for (Vector<String>::const_iterator it = optionList.begin(); it != optionList.end(); ++it) {
+ String value = *it;
+ priv->dataList = eina_list_append(priv->dataList, eina_stringshare_add(value.utf8().data()));
+ }
+
+ smartData->api->data_list_show(smartData, inputType, priv->dataList);
+}
+
+void ewkViewDataListHideRequest(Evas_Object* ewkView, Ewk_Input_Type inputType)
+{
+ EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
+ EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
+ EINA_SAFETY_ON_NULL_RETURN(priv->dataList);
+ EINA_SAFETY_ON_NULL_RETURN(smartData->api);
+ EINA_SAFETY_ON_NULL_RETURN(smartData->api->data_list_hide);
+
+ _ewk_view_data_list_del(priv->dataList);
+ priv->dataList = 0;
+
+ smartData->api->data_list_hide(smartData, inputType);
+}
+#endif
+
+void ewk_view_data_list_close(Evas_Object* ewkView, const char* value)
+{
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
+ EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
+
+ _ewk_view_data_list_del(priv->dataList);
+ priv->dataList = 0;
+
+ ewk_view_focused_input_element_value_set(ewkView, value);
+#endif
+}
+
Eina_Bool ewk_view_horizontal_panning_hold_get(Evas_Object* ewkView)
{
#if ENABLE(TIZEN_GESTURE)
* @brief Provides type of focused input element
*/
enum _Ewk_Input_Type {
- EWK_INPUT_TYPE_TELEPHONE = 1,
+ EWK_INPUT_TYPE_TEXT,
+ EWK_INPUT_TYPE_TELEPHONE,
EWK_INPUT_TYPE_NUMBER,
EWK_INPUT_TYPE_EMAIL,
EWK_INPUT_TYPE_URL,
Eina_Bool (*input_picker_show)(Ewk_View_Smart_Data *sd, Ewk_Input_Type inputType, const char* inputValue);
//#endif
+//#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ Eina_Bool (*data_list_show)(Ewk_View_Smart_Data *sd, Ewk_Input_Type inputType, Eina_List *optionList);
+ Eina_Bool (*data_list_hide)(Ewk_View_Smart_Data *sd, Ewk_Input_Type inputType);
+// #endif
+
// #if ENABLE(SCREEN_ORIENTATION_SUPPORT) && ENABLE(TIZEN_SCREEN_ORIENTATION_SUPPORT)
Eina_Bool (*orientation_lock)(Ewk_View_Smart_Data *sd, int orientations);
void (*orientation_unlock)(Ewk_View_Smart_Data *sd);
* @see EWK_VIEW_SMART_CLASS_INIT_VERSION
* @see EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION
*/
-#define EWK_VIEW_SMART_CLASS_INIT(smart_class_init) {smart_class_init, EWK_VIEW_SMART_CLASS_VERSION, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+#define EWK_VIEW_SMART_CLASS_INIT(smart_class_init) {smart_class_init, EWK_VIEW_SMART_CLASS_VERSION, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
/**
* Initializer to zero a whole Ewk_View_Smart_Class structure.
*/
EAPI void ewk_view_color_chooser_close(Evas_Object* o);
// #endif // ENABLE(TIZEN_INPUT_COLOR_PICKER)
+
+// #if ENABLE(TIZEN_DATALIST_ELEMENT)
+/**
+ * Closes data list picker
+ *
+ * @param o view object contains data list element
+ * @param value value to be set to the input element
+ */
+void ewk_view_data_list_close(Evas_Object *o, const char *value);
+//#endif // ENABLE(TIZEN_DATALIST_ELEMENT)
+
// #endif // #if OS(TIZEN)
/**
#endif // ENABLE(TIZEN_INPUT_COLOR_PICKER)
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+void ewkViewDataListShowRequest(Evas_Object* ewkView, Ewk_Input_Type inputType, Vector<String> optionList);
+void ewkViewDataListHideRequest(Evas_Object* ewkView, Ewk_Input_Type inputType);
+#endif
+
#if ENABLE(TIZEN_WEBKIT2_GET_TEXT_STYLE_FOR_SELECTION)
void ewkViewDidGetTextStyleStateForSelection(Evas_Object* ewkView, int underlineState, int italicState, int boldState);
Ewk_Text_Style* ewkTextStyleCreate(int underlineState, int italicState, int boldState);
String getFocusedInputElementValue();
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ Vector<String> getFocusedInputElementDataList();
+#endif
+
void printMainFrame();
#if ENABLE(TIZEN_READER)
void checkPageForReader(PassRefPtr<DictionaryCallback>);
}
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+Vector<String> WebPageProxy::getFocusedInputElementDataList()
+{
+ if (!isValid())
+ return Vector<String>();
+
+ Vector<String> optionList;
+ process()->sendSync(Messages::WebPage::GetFocusedInputElementDataList(), Messages::WebPage::GetFocusedInputElementDataList::Reply(optionList), m_pageID);
+ return optionList;
+}
+#endif
+
void WebPageProxy::focusedNodeChanged(const IntRect& focusedNodeRect)
{
static_cast<PageClientImpl*>(m_pageClient)->setFocusedNodeRect(focusedNodeRect);
#include <WebCore/HTTPHeaderMap.h>
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+#include "HTMLDataListElement.h"
+#endif
+
namespace CoreIPC {
class ArgumentDecoder;
class Connection;
class SharedBuffer;
class VisibleSelection;
struct KeypressCommand;
+
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ class HTMLDataListElement;
+#endif
}
namespace WebKit {
void getFocusedInputElementValue(String& inputValue);
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ void getFocusedInputElementDataList(Vector<String>&);
+#endif
+
#if ENABLE(TIZEN_READER)
void checkPageForReader(uint64_t callbackID);
#endif
GetFocusedInputElementValue() -> (String inputValue)
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+ GetFocusedInputElementDataList() -> (Vector<WTF::String> options)
+#endif
+
#if ENABLE(TIZEN_READER)
CheckPageForReader(uint64_t callbackID)
#endif
#include "WebEditorClient.h"
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+#include "HTMLCollection.h"
+#include "HTMLDataListElement.h"
+#include "HTMLOptionElement.h"
+#endif
+
#endif // #if OS(TIZEN)
using namespace WebCore;
}
#endif
+#if ENABLE(TIZEN_DATALIST_ELEMENT)
+void WebPage::getFocusedInputElementDataList(Vector<String>& optionList)
+{
+ Frame* frame = m_page->focusController()->focusedOrMainFrame();
+ if (!frame || !frame->document())
+ return;
+
+ Node* node = frame->document()->focusedNode();
+ if (!node)
+ return;
+
+ HTMLInputElement* input = node->toInputElement();
+ if (!input)
+ return;
+
+ HTMLDataListElement* dataList = static_cast<HTMLDataListElement*>(input->list());
+ if (!dataList)
+ return;
+
+ RefPtr<HTMLCollection> options = static_cast<HTMLDataListElement*>(dataList)->options();
+ for (unsigned i = 0; Node* node = options->item(i); i++) {
+ ASSERT(node->hasTagName(optionTag));
+ HTMLOptionElement* optionElement = static_cast<HTMLOptionElement*>(node);
+ String value = optionElement->value();
+ optionList.append(value);
+ }
+}
+#endif
+
#if ENABLE(TIZEN_READER)
void WebPage::checkPageForReader(uint64_t callbackID)
{