OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/render_widget.h" | 5 #include "content/renderer/render_widget.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 // As two different kinds of events could cause us to postpone an ack | 598 // As two different kinds of events could cause us to postpone an ack |
599 // we send it now, if we have one pending. The Browser should never | 599 // we send it now, if we have one pending. The Browser should never |
600 // send us the same kind of event we are delaying the ack for. | 600 // send us the same kind of event we are delaying the ack for. |
601 Send(pending_input_event_ack_.release()); | 601 Send(pending_input_event_ack_.release()); |
602 } | 602 } |
603 pending_input_event_ack_.reset(response); | 603 pending_input_event_ack_.reset(response); |
604 } else { | 604 } else { |
605 Send(response); | 605 Send(response); |
606 } | 606 } |
607 | 607 |
| 608 #if defined(OS_ANDROID) |
| 609 // Allow the IME to be shown when the focus changes as a consequence |
| 610 // of a processed touch end event. |
| 611 if (input_event->type == WebInputEvent::TouchEnd && processed) |
| 612 UpdateTextInputState(SHOW_IME_IF_NEEDED); |
| 613 #endif |
| 614 |
608 handling_input_event_ = false; | 615 handling_input_event_ = false; |
609 | 616 |
610 if (!prevent_default) { | 617 if (!prevent_default) { |
611 if (WebInputEvent::isKeyboardEventType(input_event->type)) | 618 if (WebInputEvent::isKeyboardEventType(input_event->type)) |
612 DidHandleKeyEvent(); | 619 DidHandleKeyEvent(); |
613 if (WebInputEvent::isMouseEventType(input_event->type)) | 620 if (WebInputEvent::isMouseEventType(input_event->type)) |
614 DidHandleMouseEvent(*(static_cast<const WebMouseEvent*>(input_event))); | 621 DidHandleMouseEvent(*(static_cast<const WebMouseEvent*>(input_event))); |
615 if (WebInputEvent::isTouchEventType(input_event->type)) | 622 if (WebInputEvent::isTouchEventType(input_event->type)) |
616 DidHandleTouchEvent(*(static_cast<const WebTouchEvent*>(input_event))); | 623 DidHandleTouchEvent(*(static_cast<const WebTouchEvent*>(input_event))); |
617 } | 624 } |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
866 AnimateIfNeeded(); | 873 AnimateIfNeeded(); |
867 | 874 |
868 // Layout may generate more invalidation. It may also enable the | 875 // Layout may generate more invalidation. It may also enable the |
869 // GPU acceleration, so make sure to run layout before we send the | 876 // GPU acceleration, so make sure to run layout before we send the |
870 // GpuRenderingActivated message. | 877 // GpuRenderingActivated message. |
871 webwidget_->layout(); | 878 webwidget_->layout(); |
872 | 879 |
873 // The following two can result in further layout and possibly | 880 // The following two can result in further layout and possibly |
874 // enable GPU acceleration so they need to be called before any painting | 881 // enable GPU acceleration so they need to be called before any painting |
875 // is done. | 882 // is done. |
876 UpdateTextInputState(); | 883 UpdateTextInputState(DO_NOT_SHOW_IME); |
877 UpdateSelectionBounds(); | 884 UpdateSelectionBounds(); |
878 | 885 |
879 // Suppress painting if nothing is dirty. This has to be done after updating | 886 // Suppress painting if nothing is dirty. This has to be done after updating |
880 // animations running layout as these may generate further invalidations. | 887 // animations running layout as these may generate further invalidations. |
881 if (!paint_aggregator_.HasPendingUpdate()) { | 888 if (!paint_aggregator_.HasPendingUpdate()) { |
882 TRACE_EVENT0("renderer", "EarlyOut_NoPendingUpdate"); | 889 TRACE_EVENT0("renderer", "EarlyOut_NoPendingUpdate"); |
883 webwidget_->instrumentCancelFrame(); | 890 webwidget_->instrumentCancelFrame(); |
884 return; | 891 return; |
885 } | 892 } |
886 | 893 |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1156 } | 1163 } |
1157 | 1164 |
1158 void RenderWidget::willBeginCompositorFrame() { | 1165 void RenderWidget::willBeginCompositorFrame() { |
1159 TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame"); | 1166 TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame"); |
1160 | 1167 |
1161 DCHECK(RenderThreadImpl::current()->compositor_thread()); | 1168 DCHECK(RenderThreadImpl::current()->compositor_thread()); |
1162 | 1169 |
1163 // The following two can result in further layout and possibly | 1170 // The following two can result in further layout and possibly |
1164 // enable GPU acceleration so they need to be called before any painting | 1171 // enable GPU acceleration so they need to be called before any painting |
1165 // is done. | 1172 // is done. |
1166 UpdateTextInputState(); | 1173 UpdateTextInputState(DO_NOT_SHOW_IME); |
1167 UpdateSelectionBounds(); | 1174 UpdateSelectionBounds(); |
1168 | 1175 |
1169 WillInitiatePaint(); | 1176 WillInitiatePaint(); |
1170 } | 1177 } |
1171 | 1178 |
1172 void RenderWidget::didBecomeReadyForAdditionalInput() { | 1179 void RenderWidget::didBecomeReadyForAdditionalInput() { |
1173 TRACE_EVENT0("renderer", "RenderWidget::didBecomeReadyForAdditionalInput"); | 1180 TRACE_EVENT0("renderer", "RenderWidget::didBecomeReadyForAdditionalInput"); |
1174 if (pending_input_event_ack_.get()) | 1181 if (pending_input_event_ack_.get()) |
1175 Send(pending_input_event_ack_.release()); | 1182 Send(pending_input_event_ack_.release()); |
1176 } | 1183 } |
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1630 } | 1637 } |
1631 | 1638 |
1632 void RenderWidget::set_next_paint_is_restore_ack() { | 1639 void RenderWidget::set_next_paint_is_restore_ack() { |
1633 next_paint_flags_ |= ViewHostMsg_UpdateRect_Flags::IS_RESTORE_ACK; | 1640 next_paint_flags_ |= ViewHostMsg_UpdateRect_Flags::IS_RESTORE_ACK; |
1634 } | 1641 } |
1635 | 1642 |
1636 void RenderWidget::set_next_paint_is_repaint_ack() { | 1643 void RenderWidget::set_next_paint_is_repaint_ack() { |
1637 next_paint_flags_ |= ViewHostMsg_UpdateRect_Flags::IS_REPAINT_ACK; | 1644 next_paint_flags_ |= ViewHostMsg_UpdateRect_Flags::IS_REPAINT_ACK; |
1638 } | 1645 } |
1639 | 1646 |
1640 void RenderWidget::UpdateTextInputState() { | 1647 void RenderWidget::UpdateTextInputState(ShowIme show_ime) { |
1641 if (!input_method_is_active_) | 1648 bool show_ime_if_needed = (show_ime == SHOW_IME_IF_NEEDED); |
| 1649 if (!show_ime_if_needed && !input_method_is_active_) |
1642 return; | 1650 return; |
1643 ui::TextInputType new_type = GetTextInputType(); | 1651 ui::TextInputType new_type = GetTextInputType(); |
1644 WebKit::WebTextInputInfo new_info; | 1652 WebKit::WebTextInputInfo new_info; |
1645 if (webwidget_) | 1653 if (webwidget_) |
1646 new_info = webwidget_->textInputInfo(); | 1654 new_info = webwidget_->textInputInfo(); |
1647 | 1655 |
1648 bool new_can_compose_inline = CanComposeInline(); | 1656 bool new_can_compose_inline = CanComposeInline(); |
1649 | 1657 |
1650 // Only sends text input params if they are changed. | 1658 // Only sends text input params if they are changed or if the ime should be |
1651 if (text_input_type_ != new_type || text_input_info_ != new_info | 1659 // shown. |
1652 || can_compose_inline_ != new_can_compose_inline) { | 1660 if (show_ime_if_needed || (text_input_type_ != new_type |
| 1661 || text_input_info_ != new_info |
| 1662 || can_compose_inline_ != new_can_compose_inline)) { |
1653 ViewHostMsg_TextInputState_Params p; | 1663 ViewHostMsg_TextInputState_Params p; |
1654 p.type = new_type; | 1664 p.type = new_type; |
1655 p.value = new_info.value.utf8(); | 1665 p.value = new_info.value.utf8(); |
1656 p.selection_start = new_info.selectionStart; | 1666 p.selection_start = new_info.selectionStart; |
1657 p.selection_end = new_info.selectionEnd; | 1667 p.selection_end = new_info.selectionEnd; |
1658 p.composition_start = new_info.compositionStart; | 1668 p.composition_start = new_info.compositionStart; |
1659 p.composition_end = new_info.compositionEnd; | 1669 p.composition_end = new_info.compositionEnd; |
1660 p.can_compose_inline = new_can_compose_inline; | 1670 p.can_compose_inline = new_can_compose_inline; |
| 1671 p.show_ime_if_needed = show_ime_if_needed; |
1661 Send(new ViewHostMsg_TextInputStateChanged(routing_id(), p)); | 1672 Send(new ViewHostMsg_TextInputStateChanged(routing_id(), p)); |
1662 | 1673 |
1663 text_input_info_ = new_info; | 1674 text_input_info_ = new_info; |
1664 text_input_type_ = new_type; | 1675 text_input_type_ = new_type; |
1665 can_compose_inline_ = new_can_compose_inline; | 1676 can_compose_inline_ = new_can_compose_inline; |
1666 } | 1677 } |
1667 } | 1678 } |
1668 | 1679 |
1669 void RenderWidget::GetSelectionBounds(gfx::Rect* start, gfx::Rect* end) { | 1680 void RenderWidget::GetSelectionBounds(gfx::Rect* start, gfx::Rect* end) { |
1670 WebRect start_webrect; | 1681 WebRect start_webrect; |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1852 pending_smooth_scroll_gestures_.insert(std::make_pair(id, callback)); | 1863 pending_smooth_scroll_gestures_.insert(std::make_pair(id, callback)); |
1853 } | 1864 } |
1854 | 1865 |
1855 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) { | 1866 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) { |
1856 return false; | 1867 return false; |
1857 } | 1868 } |
1858 | 1869 |
1859 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const { | 1870 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const { |
1860 return false; | 1871 return false; |
1861 } | 1872 } |
OLD | NEW |