Chromium Code Reviews| Index: chrome/renderer/page_click_tracker.cc |
| diff --git a/chrome/renderer/page_click_tracker.cc b/chrome/renderer/page_click_tracker.cc |
| index 2bbb6d0c4deff16e5dff5f0cef33ef336fae73c2..0a44e098354b21f511e49d241419cb573771f2b3 100644 |
| --- a/chrome/renderer/page_click_tracker.cc |
| +++ b/chrome/renderer/page_click_tracker.cc |
| @@ -79,8 +79,6 @@ void PageClickTracker::DidHandleMouseEvent(const WebMouseEvent& event) { |
| if (listener->InputElementClicked(input_element, was_focused_, is_focused)) |
| break; |
| } |
| - |
| - last_node_clicked_.reset(); |
| } |
| void PageClickTracker::AddListener(PageClickListener* listener) { |
| @@ -109,8 +107,6 @@ void PageClickTracker::FrameDetached(WebKit::WebFrame* frame) { |
| } |
| void PageClickTracker::handleEvent(const WebDOMEvent& event) { |
| - last_node_clicked_.reset(); |
|
Ilya Sherman
2011/10/27 22:04:17
I think you might want to leave this in place. Ot
csharp
2011/10/31 15:24:25
Done.
|
| - |
| if (!event.isMouseEvent()) |
| return; |
| @@ -123,10 +119,37 @@ void PageClickTracker::handleEvent(const WebDOMEvent& event) { |
| // We'll get a notification once the mouse event has been processed |
| // (DidHandleMouseEvent), we'll notify the listener at that point. |
| WebNode node = mouse_event.target(); |
| + |
| + // The selected text field has lost focus. |
| + if (DidSelectedTextFieldLoseFocus(node)) |
| + SelectedTextFieldLostFocus(); |
|
Ilya Sherman
2011/10/27 22:04:17
nit: It might be cleaner to combine these two func
csharp
2011/10/31 15:24:25
Done.
|
| + |
| // We are only interested in text field clicks. |
| - if (GetTextWebInputElement(node).isNull()) |
| + if (GetTextWebInputElement(node).isNull()) { |
| + last_node_clicked_.reset(); |
| + |
| return; |
| + } |
| last_node_clicked_ = node; |
| was_focused_ = (render_view()->GetFocusedNode() == last_node_clicked_); |
|
Ilya Sherman
2011/10/27 22:04:17
nit: Just noticed this line, which uses |render_vi
csharp
2011/10/31 15:24:25
Done.
|
| } |
| + |
| +void PageClickTracker::SelectedTextFieldLostFocus() { |
| + ObserverListBase<PageClickListener>::Iterator it(listeners_); |
| + PageClickListener* listener; |
| + while ((listener = it.GetNext()) != NULL) { |
| + if (listener->InputElementLostFocus()) |
| + break; |
| + } |
| +} |
| + |
| +bool PageClickTracker::DidSelectedTextFieldLoseFocus( |
| + WebKit::WebNode newly_clicked_node) { |
| + WebKit::WebNode focused_node = newly_clicked_node.document().focusedNode(); |
| + |
| + if (focused_node.isNull() || GetTextWebInputElement(focused_node).isNull()) |
| + return false; |
| + |
| + return focused_node != newly_clicked_node; |
| +} |