Changeset 133441 in webkit
- Timestamp:
- Nov 5, 2012 12:22:02 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r133439 r133441 1 2012-11-05 Kent Tamura <tkent@chromium.org> 2 3 BaseChooserOnlyDateAndTimeInputType should implement DateTimeChooserClient 4 https://bugs.webkit.org/show_bug.cgi?id=101038 5 6 Reviewed by Hajime Morita. 7 8 Add DateTimeChooserClient behavior to BaseChooserOnlyDateAndTimeInputType. 9 It means that date/time input elements without 10 ENABLE_INPUT_MULTIPLE_FIELDS_UI can open date/time choosers by 11 DOMActivate event. 12 13 This patch doesn't change behavior yet because Chromimum-Android port 14 intercepts user events and doesn't deliver them to date/time input 15 elements. <http://crbug.com/159381> 16 17 * html/BaseChooserOnlyDateAndTimeInputType.cpp: 18 Add DateTimeChooserClient behavior. The code is similar to 19 PickerIndicatorElement. 20 (WebCore::BaseChooserOnlyDateAndTimeInputType::~BaseChooserOnlyDateAndTimeInputType): 21 Closes DateTimeChooser. 22 (WebCore::BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent): 23 Open DateTimeChooser if 24 - The element is not disabled, 25 - The element is not read-only, 26 - The element has a renderer, 27 - This event is created by a user gesture, and 28 - The element has no DateTimeChooser. 29 (WebCore::BaseChooserOnlyDateAndTimeInputType::detach): 30 Closes DateTimeChooser. 31 (WebCore::BaseChooserOnlyDateAndTimeInputType::didChooseValue): 32 Set a string value coming from a chooser to the input element. 33 (WebCore::BaseChooserOnlyDateAndTimeInputType::didEndChooser): 34 Clear m_dateTimeChooser when the chooser was closed. 35 (WebCore::BaseChooserOnlyDateAndTimeInputType::closeDateTimeChooser): 36 Requests to close the chooser. 37 * html/BaseChooserOnlyDateAndTimeInputType.h: 38 (BaseChooserOnlyDateAndTimeInputType): 39 - Implement DateTimeChooserClient 40 - Add closeDateTimeChooser helper function. 41 - Add detach override. 42 - Add m_dateTimeChooser. 43 * html/HTMLInputElement.cpp: 44 (WebCore::HTMLInputElement::setupDateTimeChooserParameters): 45 Added. The code is moved from PickerIndicatorElement.cpp in order to 46 share it with BaseChooserOnlyDateAndTimeInputType. 47 * html/HTMLInputElement.h: 48 (HTMLInputElement): Declare setupDateTimeChooserParameters. 49 * html/shadow/PickerIndicatorElement.cpp: 50 (WebCore::PickerIndicatorElement::openPopup): 51 Move some code to HTMLInputElement::setupDateTimeChooserParameters. 52 1 53 2012-11-04 Julien Chaffraix <jchaffraix@webkit.org> 2 54 -
trunk/Source/WebCore/html/BaseChooserOnlyDateAndTimeInputType.cpp
r133427 r133441 28 28 #include "BaseChooserOnlyDateAndTimeInputType.h" 29 29 30 #include "Chrome.h" 31 #include "ChromeClient.h" 32 #include "HTMLInputElement.h" 33 #include "Page.h" 34 #include "ScriptController.h" 35 30 36 namespace WebCore { 31 37 32 38 BaseChooserOnlyDateAndTimeInputType::~BaseChooserOnlyDateAndTimeInputType() 33 39 { 40 closeDateTimeChooser(); 34 41 } 35 42 36 43 void BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent(Event*) 37 44 { 38 // FIXME: start date-time chooser. webkit.org/b/101038. 45 if (element()->disabled() || element()->readOnly() || !element()->renderer() || !ScriptController::processingUserGesture()) 46 return; 47 48 if (m_dateTimeChooser) 49 return; 50 if (!element()->document()->page()) 51 return; 52 Chrome* chrome = element()->document()->page()->chrome(); 53 if (!chrome) 54 return; 55 DateTimeChooserParameters parameters; 56 if (!element()->setupDateTimeChooserParameters(parameters)) 57 return; 58 m_dateTimeChooser = chrome->client()->openDateTimeChooser(this, parameters); 59 } 60 61 void BaseChooserOnlyDateAndTimeInputType::detach() 62 { 63 closeDateTimeChooser(); 64 } 65 66 void BaseChooserOnlyDateAndTimeInputType::didChooseValue(const String& value) 67 { 68 element()->setValue(value, DispatchChangeEvent); 69 } 70 71 void BaseChooserOnlyDateAndTimeInputType::didEndChooser() 72 { 73 m_dateTimeChooser.clear(); 74 } 75 76 void BaseChooserOnlyDateAndTimeInputType::closeDateTimeChooser() 77 { 78 if (m_dateTimeChooser) 79 m_dateTimeChooser->endChooser(); 39 80 } 40 81 -
trunk/Source/WebCore/html/BaseChooserOnlyDateAndTimeInputType.h
r133427 r133441 30 30 #include "BaseClickableWithKeyInputType.h" 31 31 #include "BaseDateAndTimeInputType.h" 32 #include "DateTimeChooser.h" 33 #include "DateTimeChooserClient.h" 32 34 33 35 namespace WebCore { 34 36 35 // FIXME: This class should implement DateTimeChooserClient. webkit.org/b/101038. 36 class BaseChooserOnlyDateAndTimeInputType : public BaseDateAndTimeInputType { 37 class BaseChooserOnlyDateAndTimeInputType : public BaseDateAndTimeInputType, public DateTimeChooserClient { 37 38 protected: 38 39 BaseChooserOnlyDateAndTimeInputType(HTMLInputElement* element) : BaseDateAndTimeInputType(element) { } … … 40 41 41 42 private: 43 void closeDateTimeChooser(); 44 42 45 // InputType functions: 46 virtual void detach() OVERRIDE; 43 47 virtual void handleDOMActivateEvent(Event*) OVERRIDE; 44 48 virtual void handleKeydownEvent(KeyboardEvent*) OVERRIDE; … … 46 50 virtual void handleKeyupEvent(KeyboardEvent*) OVERRIDE; 47 51 virtual void accessKeyAction(bool sendMouseEvents) OVERRIDE; 52 53 // DateTimeChooserClient functions: 54 virtual void didChooseValue(const String&) OVERRIDE; 55 virtual void didEndChooser() OVERRIDE; 56 57 RefPtr<DateTimeChooser> m_dateTimeChooser; 48 58 }; 49 59 -
trunk/Source/WebCore/html/HTMLInputElement.cpp
r133275 r133441 34 34 #include "CSSPropertyNames.h" 35 35 #include "CSSValueKeywords.h" 36 #include "DateTimeChooser.h" 36 37 #include "Document.h" 37 38 #include "EventNames.h" … … 41 42 #include "FormController.h" 42 43 #include "Frame.h" 44 #include "FrameView.h" 43 45 #include "HTMLCollection.h" 44 46 #include "HTMLDataListElement.h" … … 1902 1904 } 1903 1905 1906 #if ENABLE(DATE_AND_TIME_INPUT_TYPES) 1907 bool HTMLInputElement::setupDateTimeChooserParameters(DateTimeChooserParameters& parameters) 1908 { 1909 if (!document()->view()) 1910 return false; 1911 1912 parameters.type = type(); 1913 parameters.minimum = minimum(); 1914 parameters.maximum = maximum(); 1915 parameters.required = required(); 1916 1917 StepRange stepRange = createStepRange(RejectAny); 1918 if (stepRange.hasStep()) { 1919 parameters.step = stepRange.step().toDouble(); 1920 parameters.stepBase = stepRange.stepBase().toDouble(); 1921 } else { 1922 parameters.step = 1.0; 1923 parameters.stepBase = 0; 1924 } 1925 1926 parameters.anchorRectInRootView = document()->view()->contentsToRootView(pixelSnappedBoundingBox()); 1927 parameters.currentValue = value(); 1928 parameters.isAnchorElementRTL = computedStyle()->direction() == RTL; 1929 #if ENABLE(DATALIST_ELEMENT) 1930 if (HTMLDataListElement* dataList = this->dataList()) { 1931 RefPtr<HTMLCollection> options = dataList->options(); 1932 for (unsigned i = 0; HTMLOptionElement* option = toHTMLOptionElement(options->item(i)); ++i) { 1933 if (!isValidValue(option->value())) 1934 continue; 1935 parameters.suggestionValues.append(sanitizeValue(option->value())); 1936 parameters.localizedSuggestionValues.append(localizeValue(option->value())); 1937 parameters.suggestionLabels.append(option->value() == option->label() ? String() : option->label()); 1938 } 1939 } 1940 #endif 1941 return true; 1942 } 1943 #endif 1944 1904 1945 void HTMLInputElement::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const 1905 1946 { -
trunk/Source/WebCore/html/HTMLInputElement.h
r133275 r133441 42 42 class KURL; 43 43 class ListAttributeTargetObserver; 44 struct DateTimeChooserParameters; 44 45 45 46 class HTMLInputElement : public HTMLTextFormControlElement, public ImageLoaderClientBase<HTMLInputElement> { … … 292 293 virtual void setRangeText(const String& replacement, unsigned start, unsigned end, const String& selectionMode, ExceptionCode&) OVERRIDE; 293 294 295 #if ENABLE(DATE_AND_TIME_INPUT_TYPES) 296 bool setupDateTimeChooserParameters(DateTimeChooserParameters&); 297 #endif 294 298 virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE; 295 299 -
trunk/Source/WebCore/html/shadow/PickerIndicatorElement.cpp
r133284 r133441 36 36 #include "ChromeClient.h" 37 37 #include "Event.h" 38 #include "FrameView.h"39 #include "HTMLDataListElement.h"40 38 #include "HTMLInputElement.h" 41 #include "HTMLOptionElement.h"42 39 #include "Page.h" 43 40 #include "RenderDetailsMarker.h" … … 125 122 if (!chrome) 126 123 return; 127 if (!document()->view()) 124 DateTimeChooserParameters parameters; 125 if (!hostInput()->setupDateTimeChooserParameters(parameters)) 128 126 return; 129 130 HTMLInputElement* input = hostInput();131 DateTimeChooserParameters parameters;132 parameters.type = input->type();133 parameters.minimum = input->minimum();134 parameters.maximum = input->maximum();135 parameters.required = input->required();136 137 StepRange stepRange = input->createStepRange(RejectAny);138 if (stepRange.hasStep()) {139 parameters.step = stepRange.step().toDouble();140 parameters.stepBase = stepRange.stepBase().toDouble();141 } else {142 parameters.step = 1.0;143 parameters.stepBase = 0;144 }145 146 parameters.anchorRectInRootView = document()->view()->contentsToRootView(hostInput()->pixelSnappedBoundingBox());147 parameters.currentValue = input->value();148 parameters.isAnchorElementRTL = input->computedStyle()->direction() == RTL;149 if (HTMLDataListElement* dataList = input->dataList()) {150 RefPtr<HTMLCollection> options = dataList->options();151 for (unsigned i = 0; HTMLOptionElement* option = toHTMLOptionElement(options->item(i)); ++i) {152 if (!input->isValidValue(option->value()))153 continue;154 parameters.suggestionValues.append(input->sanitizeValue(option->value()));155 parameters.localizedSuggestionValues.append(input->localizeValue(option->value()));156 parameters.suggestionLabels.append(option->value() == option->label() ? String() : option->label());157 }158 }159 127 m_chooser = chrome->client()->openDateTimeChooser(this, parameters); 160 128 }
Note: See TracChangeset
for help on using the changeset viewer.