| 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/browser/renderer_host/render_widget_host_view_win.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_win.h" | 
| 6 | 6 | 
| 7 #include <algorithm> | 7 #include <algorithm> | 
| 8 #include <map> | 8 #include <map> | 
| 9 #include <peninputpanel_i.c> | 9 #include <peninputpanel_i.c> | 
| 10 #include <stack> | 10 #include <stack> | 
| (...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 469       capture_enter_key_(false), | 469       capture_enter_key_(false), | 
| 470       is_hidden_(false), | 470       is_hidden_(false), | 
| 471       about_to_validate_and_paint_(false), | 471       about_to_validate_and_paint_(false), | 
| 472       close_on_deactivate_(false), | 472       close_on_deactivate_(false), | 
| 473       being_destroyed_(false), | 473       being_destroyed_(false), | 
| 474       tooltip_hwnd_(NULL), | 474       tooltip_hwnd_(NULL), | 
| 475       tooltip_showing_(false), | 475       tooltip_showing_(false), | 
| 476       weak_factory_(this), | 476       weak_factory_(this), | 
| 477       is_loading_(false), | 477       is_loading_(false), | 
| 478       text_input_type_(ui::TEXT_INPUT_TYPE_NONE), | 478       text_input_type_(ui::TEXT_INPUT_TYPE_NONE), | 
|  | 479       can_compose_inline_(true), | 
| 479       is_fullscreen_(false), | 480       is_fullscreen_(false), | 
| 480       ignore_mouse_movement_(true), | 481       ignore_mouse_movement_(true), | 
| 481       composition_range_(ui::Range::InvalidRange()), | 482       composition_range_(ui::Range::InvalidRange()), | 
| 482       ALLOW_THIS_IN_INITIALIZER_LIST( | 483       ALLOW_THIS_IN_INITIALIZER_LIST( | 
| 483           touch_state_(new WebTouchState(this))), | 484           touch_state_(new WebTouchState(this))), | 
| 484       pointer_down_context_(false), | 485       pointer_down_context_(false), | 
| 485       focus_on_editable_field_(false), | 486       focus_on_editable_field_(false), | 
| 486       received_focus_change_after_pointer_down_(false), | 487       received_focus_change_after_pointer_down_(false), | 
| 487       touch_events_enabled_(false), | 488       touch_events_enabled_(false), | 
| 488       ALLOW_THIS_IN_INITIALIZER_LIST( | 489       ALLOW_THIS_IN_INITIALIZER_LIST( | 
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 755   } | 756   } | 
| 756 } | 757 } | 
| 757 | 758 | 
| 758 void RenderWidgetHostViewWin::SetIsLoading(bool is_loading) { | 759 void RenderWidgetHostViewWin::SetIsLoading(bool is_loading) { | 
| 759   is_loading_ = is_loading; | 760   is_loading_ = is_loading; | 
| 760   UpdateCursorIfOverSelf(); | 761   UpdateCursorIfOverSelf(); | 
| 761 } | 762 } | 
| 762 | 763 | 
| 763 void RenderWidgetHostViewWin::TextInputStateChanged( | 764 void RenderWidgetHostViewWin::TextInputStateChanged( | 
| 764     const ViewHostMsg_TextInputState_Params& params) { | 765     const ViewHostMsg_TextInputState_Params& params) { | 
| 765   // TODO(kinaba): currently, can_compose_inline is ignored and always treated | 766   if (text_input_type_ != params.type || | 
| 766   // as true. We need to support "can_compose_inline=false" for PPAPI plugins | 767       can_compose_inline_ != params.can_compose_inline) { | 
| 767   // that may want to avoid drawing composition-text by themselves and pass |  | 
| 768   // the responsibility to the browser. |  | 
| 769   if (text_input_type_ != params.type) { |  | 
| 770     text_input_type_ = params.type; | 768     text_input_type_ = params.type; | 
|  | 769     can_compose_inline_ = params.can_compose_inline; | 
| 771     UpdateIMEState(); | 770     UpdateIMEState(); | 
| 772   } | 771   } | 
| 773 } | 772 } | 
| 774 | 773 | 
| 775 void RenderWidgetHostViewWin::SelectionBoundsChanged( | 774 void RenderWidgetHostViewWin::SelectionBoundsChanged( | 
| 776     const gfx::Rect& start_rect, | 775     const gfx::Rect& start_rect, | 
| 777     WebKit::WebTextDirection start_direction, | 776     WebKit::WebTextDirection start_direction, | 
| 778     const gfx::Rect& end_rect, | 777     const gfx::Rect& end_rect, | 
| 779     WebKit::WebTextDirection end_direction) { | 778     WebKit::WebTextDirection end_direction) { | 
| 780   bool is_enabled = (text_input_type_ != ui::TEXT_INPUT_TYPE_NONE && | 779   bool is_enabled = (text_input_type_ != ui::TEXT_INPUT_TYPE_NONE && | 
| (...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1665 | 1664 | 
| 1666 LRESULT RenderWidgetHostViewWin::OnImeStartComposition( | 1665 LRESULT RenderWidgetHostViewWin::OnImeStartComposition( | 
| 1667     UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { | 1666     UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { | 
| 1668   TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnImeStartComposition"); | 1667   TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnImeStartComposition"); | 
| 1669   if (!render_widget_host_) | 1668   if (!render_widget_host_) | 
| 1670     return 0; | 1669     return 0; | 
| 1671 | 1670 | 
| 1672   // Reset the composition status and create IME windows. | 1671   // Reset the composition status and create IME windows. | 
| 1673   ime_input_.CreateImeWindow(m_hWnd); | 1672   ime_input_.CreateImeWindow(m_hWnd); | 
| 1674   ime_input_.ResetComposition(m_hWnd); | 1673   ime_input_.ResetComposition(m_hWnd); | 
| 1675   // We have to prevent WTL from calling ::DefWindowProc() because the function | 1674   // When the focus is on an element that does not draw composition by itself | 
|  | 1675   // (i.e., PPAPI plugin not handling IME), let IME to draw the text. Otherwise | 
|  | 1676   // we have to prevent WTL from calling ::DefWindowProc() because the function | 
| 1676   // calls ::ImmSetCompositionWindow() and ::ImmSetCandidateWindow() to | 1677   // calls ::ImmSetCompositionWindow() and ::ImmSetCandidateWindow() to | 
| 1677   // over-write the position of IME windows. | 1678   // over-write the position of IME windows. | 
| 1678   handled = TRUE; | 1679   handled = (can_compose_inline_ ? TRUE : FALSE); | 
| 1679   return 0; | 1680   return 0; | 
| 1680 } | 1681 } | 
| 1681 | 1682 | 
| 1682 LRESULT RenderWidgetHostViewWin::OnImeComposition( | 1683 LRESULT RenderWidgetHostViewWin::OnImeComposition( | 
| 1683     UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { | 1684     UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { | 
| 1684   TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnImeComposition"); | 1685   TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnImeComposition"); | 
| 1685   if (!render_widget_host_) | 1686   if (!render_widget_host_) | 
| 1686     return 0; | 1687     return 0; | 
| 1687 | 1688 | 
| 1688   // At first, update the position of the IME window. | 1689   // At first, update the position of the IME window. | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 1717     const std::vector<WebKit::WebCompositionUnderline>& underlines = | 1718     const std::vector<WebKit::WebCompositionUnderline>& underlines = | 
| 1718         reinterpret_cast<const std::vector<WebKit::WebCompositionUnderline>&>( | 1719         reinterpret_cast<const std::vector<WebKit::WebCompositionUnderline>&>( | 
| 1719             composition.underlines); | 1720             composition.underlines); | 
| 1720     render_widget_host_->ImeSetComposition( | 1721     render_widget_host_->ImeSetComposition( | 
| 1721         composition.text, underlines, | 1722         composition.text, underlines, | 
| 1722         composition.selection.start(), composition.selection.end()); | 1723         composition.selection.start(), composition.selection.end()); | 
| 1723   } | 1724   } | 
| 1724   // We have to prevent WTL from calling ::DefWindowProc() because we do not | 1725   // We have to prevent WTL from calling ::DefWindowProc() because we do not | 
| 1725   // want for the IMM (Input Method Manager) to send WM_IME_CHAR messages. | 1726   // want for the IMM (Input Method Manager) to send WM_IME_CHAR messages. | 
| 1726   handled = TRUE; | 1727   handled = TRUE; | 
|  | 1728   if (!can_compose_inline_) { | 
|  | 1729     // When the focus is on an element that does not draw composition by itself | 
|  | 1730     // (i.e., PPAPI plugin not handling IME), let IME to draw the text, which | 
|  | 1731     // is the default behavior of DefWindowProc. Note, however, even in this | 
|  | 1732     // case we don't want GCS_RESULTSTR to be converted to WM_IME_CHAR messages. | 
|  | 1733     // Thus we explicitly drop the flag. | 
|  | 1734     return ::DefWindowProc(m_hWnd, message, wparam, lparam & ~GCS_RESULTSTR); | 
|  | 1735   } | 
| 1727   return 0; | 1736   return 0; | 
| 1728 } | 1737 } | 
| 1729 | 1738 | 
| 1730 LRESULT RenderWidgetHostViewWin::OnImeEndComposition( | 1739 LRESULT RenderWidgetHostViewWin::OnImeEndComposition( | 
| 1731     UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { | 1740     UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { | 
| 1732   TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnImeEndComposition"); | 1741   TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnImeEndComposition"); | 
| 1733   if (!render_widget_host_) | 1742   if (!render_widget_host_) | 
| 1734     return 0; | 1743     return 0; | 
| 1735 | 1744 | 
| 1736   if (ime_input_.is_composing()) { | 1745   if (ime_input_.is_composing()) { | 
| (...skipping 1329 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3066 } | 3075 } | 
| 3067 | 3076 | 
| 3068 void RenderWidgetHostViewWin::UpdateIMEState() { | 3077 void RenderWidgetHostViewWin::UpdateIMEState() { | 
| 3069   if (base::win::IsTsfAwareRequired()) { | 3078   if (base::win::IsTsfAwareRequired()) { | 
| 3070     ui::TsfBridge::GetInstance()->OnTextInputTypeChanged(this); | 3079     ui::TsfBridge::GetInstance()->OnTextInputTypeChanged(this); | 
| 3071     return; | 3080     return; | 
| 3072   } | 3081   } | 
| 3073   if (text_input_type_ != ui::TEXT_INPUT_TYPE_NONE && | 3082   if (text_input_type_ != ui::TEXT_INPUT_TYPE_NONE && | 
| 3074       text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD) { | 3083       text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD) { | 
| 3075     ime_input_.EnableIME(m_hWnd); | 3084     ime_input_.EnableIME(m_hWnd); | 
|  | 3085     ime_input_.SetUseCompositionWindow(!can_compose_inline_); | 
| 3076   } else { | 3086   } else { | 
| 3077     ime_input_.DisableIME(m_hWnd); | 3087     ime_input_.DisableIME(m_hWnd); | 
| 3078   } | 3088   } | 
| 3079 } | 3089 } | 
| 3080 | 3090 | 
| 3081 //////////////////////////////////////////////////////////////////////////////// | 3091 //////////////////////////////////////////////////////////////////////////////// | 
| 3082 // RenderWidgetHostView, public: | 3092 // RenderWidgetHostView, public: | 
| 3083 | 3093 | 
| 3084 // static | 3094 // static | 
| 3085 RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget( | 3095 RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget( | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 3102   // receive a focus change in the context of a pointer down message, it means | 3112   // receive a focus change in the context of a pointer down message, it means | 
| 3103   // that the pointer down message occurred on the edit field and we should | 3113   // that the pointer down message occurred on the edit field and we should | 
| 3104   // display the on screen keyboard | 3114   // display the on screen keyboard | 
| 3105   if (!received_focus_change_after_pointer_down_ && virtual_keyboard_) | 3115   if (!received_focus_change_after_pointer_down_ && virtual_keyboard_) | 
| 3106     DisplayOnScreenKeyboardIfNeeded(); | 3116     DisplayOnScreenKeyboardIfNeeded(); | 
| 3107   received_focus_change_after_pointer_down_ = false; | 3117   received_focus_change_after_pointer_down_ = false; | 
| 3108   pointer_down_context_ = false; | 3118   pointer_down_context_ = false; | 
| 3109 } | 3119 } | 
| 3110 | 3120 | 
| 3111 }  // namespace content | 3121 }  // namespace content | 
| OLD | NEW | 
|---|