[Title] Show date in the correct field after DatePicker closes. Remember field that activated DatePicker and use it instead of focused field.
[Issue] N_SE-52629
[Problem] Date value is inserted into focused fields, which might not be date field that activated DatePicker.
[Cause] When asyncronic event is sent from WebProcess to UIProcess, for a short while focus chaning events are still active on page and can lead to focus move.
In order to put new text into correct field, we not longer put new text into focused field, but store the target node and store new text into this target node.
[Solution] Insert date value into last clicked or entered field.
Change-Id: Idbe7d9dadb8d68ab2c342e249a6137d7a533eb43
#if ENABLE(TIZEN_GSTREAMER_AUDIO)
, m_activeMediaObjectCount(0)
#endif
+#if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+ , m_currentTargetNode(0)
+#endif
{
m_document = this;
m_activeNode = 0;
m_titleElement = 0;
m_documentElement = 0;
+#if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+ m_currentTargetNode = 0;
+#endif
m_contextFeatures = ContextFeatures::defaultSwitch();
#if ENABLE(FULLSCREEN_API)
m_fullScreenElement = 0;
m_styleResolver.clear();
}
+#if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+void Document::setCurrentTargetNode(PassRefPtr<Node> prpNode)
+{
+ m_currentTargetNode = prpNode;
+}
+#endif
+
void Document::attach()
{
ASSERT(!attached());
m_hoverNode = 0;
m_focusedNode = 0;
m_activeNode = 0;
+#if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+ m_currentTargetNode = 0;
+#endif
ContainerNode::detach();
bool setFocusedNode(PassRefPtr<Node>);
Node* focusedNode() const { return m_focusedNode.get(); }
+#if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+ void setCurrentTargetNode(PassRefPtr<Node>);
+ Node* currentTargetNode() const { return m_currentTargetNode.get(); }
+#endif
+
void getFocusableNodes(Vector<RefPtr<Node> >&);
// The m_ignoreAutofocus flag specifies whether or not the document has been changed by the user enough
RefPtr<Node> m_hoverNode;
RefPtr<Node> m_activeNode;
RefPtr<Element> m_documentElement;
+#if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+ RefPtr<Node> m_currentTargetNode;
+#endif
uint64_t m_domTreeVersion;
static uint64_t s_globalTreeVersion;
{
if (evt->isMouseEvent() && evt->type() == eventNames().clickEvent && static_cast<MouseEvent*>(evt)->button() == LeftButton) {
m_inputType->handleClickEvent(static_cast<MouseEvent*>(evt));
+#if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+ if(shouldUsePicker())
+ document()->setCurrentTargetNode(document()->focusedNode());
+#endif
if (evt->defaultHandled())
return;
}
m_inputType->handleKeydownEvent(static_cast<KeyboardEvent*>(evt));
if (evt->defaultHandled())
return;
-#if ENABLE(TIZEN_FOCUS_UI) && ENABLE(TIZEN_INPUT_TAG_EXTENSION)
- if (static_cast<KeyboardEvent*>(evt)->keyCode() == VK_RETURN && shouldUsePicker()
- && document()->settings() && document()->settings()->isSpatialNavigationEnabled()) {
- setSelectionRange(0, 0);
- evt->setDefaultHandled();
- return;
+
+#if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+ if (static_cast<KeyboardEvent*>(evt)->keyCode() == VK_RETURN && shouldUsePicker()) {
+ document()->setCurrentTargetNode(document()->focusedNode());
+#if ENABLE(TIZEN_FOCUS_UI)
+ if (document()->settings() && document()->settings()->isSpatialNavigationEnabled()) {
+ setSelectionRange(0, 0);
+ evt->setDefaultHandled();
+ return;
+ }
+#endif
}
#endif
}
}
#endif
+void ewk_view_current_target_input_element_value_set(Evas_Object* ewkView, const char* value)
+{
+#if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+ EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
+ EWK_VIEW_IMPL_GET_OR_RETURN(smartData, impl);
+
+ impl->pageProxy->setCurrentTargetInputElementValue(String::fromUTF8(value));
+#endif // ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+}
+
void ewk_view_focused_input_element_value_set(Evas_Object* ewkView, const char* value)
{
#if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
// #if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
/**
+ * Sets the last clicked or entered input element value
+ *
+ * @param o view object to send the value
+ * @param value the string value to be set
+ */
+EAPI void ewk_view_current_target_input_element_value_set(Evas_Object* o, const char* value);
+// #endif // ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+
+// #if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
+/**
* Sets the focused input element value
*
* @param o view object to send the value
date.year = 1900 + date.year;
sprintf(dateStr, "%d-%02d-%02d" , date.year, date.mon + 1, date.day);
- ewk_view_focused_input_element_value_set(inputPicker->m_ewkView, dateStr);
+ ewk_view_current_target_input_element_value_set(inputPicker->m_ewkView, dateStr);
ewk_view_command_execute(inputPicker->m_ewkView, "Unselect", 0);
inputPicker->deletePopupLayout();
date.year = 1900 + date.year;
sprintf(dateStr, "%d-W%02d" , date.year, weekNum);
- ewk_view_focused_input_element_value_set(inputPicker->m_ewkView, dateStr);
+ ewk_view_current_target_input_element_value_set(inputPicker->m_ewkView, dateStr);
ewk_view_command_execute(inputPicker->m_ewkView, "Unselect", 0);
inputPicker->deletePopupLayout();
date.min = currentTime.tm_min;
sprintf(dateStr, "%02d:%02d" , date.hour, date.min);
- ewk_view_focused_input_element_value_set(inputPicker->m_ewkView, dateStr);
+ ewk_view_current_target_input_element_value_set(inputPicker->m_ewkView, dateStr);
ewk_view_command_execute(inputPicker->m_ewkView, "Unselect", 0);
inputPicker->deletePopupLayout();
date.year = 1900 + date.year;
sprintf(dateStr, "%02d-%02d" , date.year, date.mon + 1);
- ewk_view_focused_input_element_value_set(inputPicker->m_ewkView, dateStr);
+ ewk_view_current_target_input_element_value_set(inputPicker->m_ewkView, dateStr);
ewk_view_command_execute(inputPicker->m_ewkView, "Unselect", 0);
inputPicker->deletePopupLayout();
else
sprintf(dateStr, "%d-%02d-%02dT%02d:%02dZ" , date.year, date.mon + 1, date.day, date.hour, date.min);
- ewk_view_focused_input_element_value_set(inputPicker->m_ewkView, dateStr);
+ ewk_view_current_target_input_element_value_set(inputPicker->m_ewkView, dateStr);
ewk_view_command_execute(inputPicker->m_ewkView, "Unselect", 0);
inputPicker->deletePopupLayout();
void setShouldSendEventsSynchronously(bool sync) { m_shouldSendEventsSynchronously = sync; };
#if ENABLE(TIZEN_INPUT_TAG_EXTENSION) || ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
+ void setCurrentTargetInputElementValue(const String& inputValue);
void setFocusedInputElementValue(const String& inputValue);
String getFocusedInputElementValue();
#endif
#if ENABLE(TIZEN_INPUT_TAG_EXTENSION) || ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
+void WebPageProxy::setCurrentTargetInputElementValue(const String& inputValue)
+{
+ if (!isValid())
+ return;
+
+ process()->send(Messages::WebPage::SetCurrentTargetInputElementValue(inputValue), m_pageID);
+}
+
void WebPageProxy::setFocusedInputElementValue(const String& inputValue)
{
if (!isValid())
#endif
#if ENABLE(TIZEN_INPUT_TAG_EXTENSION) || ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
+ void setCurrentTargetInputElementValue(const String& inputValue);
void setFocusedInputElementValue(const String& inputValue);
void getFocusedInputElementValue(String& inputValue);
#endif
#endif
#if ENABLE(TIZEN_INPUT_TAG_EXTENSION) || ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
+ SetCurrentTargetInputElementValue(WTF::String inputValue)
SetFocusedInputElementValue(WTF::String inputValue)
GetFocusedInputElementValue() -> (String inputValue)
#endif
#endif
#if ENABLE(TIZEN_INPUT_TAG_EXTENSION) || ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
+void WebPage::setCurrentTargetInputElementValue(const String& inputValue)
+{
+ Frame* frame = m_page->focusController()->focusedOrMainFrame();
+ if (!frame || !frame->document() || !frame->document()->currentTargetNode())
+ return;
+
+ HTMLInputElement* inputElement = frame->document()->currentTargetNode()->toInputElement();
+ if (!inputElement)
+ return;
+
+ frame->document()->setCurrentTargetNode(0);
+
+ inputElement->toNode()->dispatchFocusEvent(0);
+ inputElement->setValue(inputValue, DispatchChangeEvent);
+}
+
void WebPage::setFocusedInputElementValue(const String& inputValue)
{
Frame* frame = m_page->focusController()->focusedOrMainFrame();