Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: chrome/browser/renderer_host/render_widget_host_view_win.cc

Issue 348022: Fix for the crasher with select drop-downs (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "chrome/browser/renderer_host/render_widget_host_view_win.h" 5 #include "chrome/browser/renderer_host/render_widget_host_view_win.h"
6 6
7 #include "app/gfx/canvas.h" 7 #include "app/gfx/canvas.h"
8 #include "app/gfx/gdi_util.h" 8 #include "app/gfx/gdi_util.h"
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "app/l10n_util_win.h" 10 #include "app/l10n_util_win.h"
(...skipping 922 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 case TTN_SHOW: 933 case TTN_SHOW:
934 tooltip_showing_ = true; 934 tooltip_showing_ = true;
935 SetMsgHandled(TRUE); 935 SetMsgHandled(TRUE);
936 break; 936 break;
937 } 937 }
938 return 0; 938 return 0;
939 } 939 }
940 940
941 LRESULT RenderWidgetHostViewWin::OnImeSetContext( 941 LRESULT RenderWidgetHostViewWin::OnImeSetContext(
942 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { 942 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
943 if (!render_widget_host_)
944 return 0;
945
943 // We need status messages about the focused input control from a 946 // We need status messages about the focused input control from a
944 // renderer process when: 947 // renderer process when:
945 // * the current input context has IMEs, and; 948 // * the current input context has IMEs, and;
946 // * an application is activated. 949 // * an application is activated.
947 // This seems to tell we should also check if the current input context has 950 // This seems to tell we should also check if the current input context has
948 // IMEs before sending a request, however, this WM_IME_SETCONTEXT is 951 // IMEs before sending a request, however, this WM_IME_SETCONTEXT is
949 // fortunately sent to an application only while the input context has IMEs. 952 // fortunately sent to an application only while the input context has IMEs.
950 // Therefore, we just start/stop status messages according to the activation 953 // Therefore, we just start/stop status messages according to the activation
951 // status of this application without checks. 954 // status of this application without checks.
952 bool activated = (wparam == TRUE); 955 bool activated = (wparam == TRUE);
953 if (Send(new ViewMsg_ImeSetInputMode( 956 if (Send(new ViewMsg_ImeSetInputMode(
954 render_widget_host_->routing_id(), activated))) { 957 render_widget_host_->routing_id(), activated))) {
955 ime_notification_ = activated; 958 ime_notification_ = activated;
956 } 959 }
957 960
958 if (ime_notification_) 961 if (ime_notification_)
959 ime_input_.CreateImeWindow(m_hWnd); 962 ime_input_.CreateImeWindow(m_hWnd);
960 963
961 ime_input_.CleanupComposition(m_hWnd); 964 ime_input_.CleanupComposition(m_hWnd);
962 ime_input_.SetImeWindowStyle(m_hWnd, message, wparam, lparam, &handled); 965 ime_input_.SetImeWindowStyle(m_hWnd, message, wparam, lparam, &handled);
963 return 0; 966 return 0;
964 } 967 }
965 968
966 LRESULT RenderWidgetHostViewWin::OnImeStartComposition( 969 LRESULT RenderWidgetHostViewWin::OnImeStartComposition(
967 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { 970 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
971 if (!render_widget_host_)
972 return 0;
973
968 // Reset the composition status and create IME windows. 974 // Reset the composition status and create IME windows.
969 ime_input_.CreateImeWindow(m_hWnd); 975 ime_input_.CreateImeWindow(m_hWnd);
970 ime_input_.ResetComposition(m_hWnd); 976 ime_input_.ResetComposition(m_hWnd);
971 // We have to prevent WTL from calling ::DefWindowProc() because the function 977 // We have to prevent WTL from calling ::DefWindowProc() because the function
972 // calls ::ImmSetCompositionWindow() and ::ImmSetCandidateWindow() to 978 // calls ::ImmSetCompositionWindow() and ::ImmSetCandidateWindow() to
973 // over-write the position of IME windows. 979 // over-write the position of IME windows.
974 handled = TRUE; 980 handled = TRUE;
975 return 0; 981 return 0;
976 } 982 }
977 983
978 LRESULT RenderWidgetHostViewWin::OnImeComposition( 984 LRESULT RenderWidgetHostViewWin::OnImeComposition(
979 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { 985 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
986 if (!render_widget_host_)
987 return 0;
988
980 // At first, update the position of the IME window. 989 // At first, update the position of the IME window.
981 ime_input_.UpdateImeWindow(m_hWnd); 990 ime_input_.UpdateImeWindow(m_hWnd);
982 991
983 // Retrieve the result string and its attributes of the ongoing composition 992 // Retrieve the result string and its attributes of the ongoing composition
984 // and send it to a renderer process. 993 // and send it to a renderer process.
985 ImeComposition composition; 994 ImeComposition composition;
986 if (ime_input_.GetResult(m_hWnd, lparam, &composition)) { 995 if (ime_input_.GetResult(m_hWnd, lparam, &composition)) {
987 Send(new ViewMsg_ImeSetComposition(render_widget_host_->routing_id(), 996 Send(new ViewMsg_ImeSetComposition(render_widget_host_->routing_id(),
988 WebKit::WebCompositionCommandConfirm, 997 WebKit::WebCompositionCommandConfirm,
989 composition.cursor_position, 998 composition.cursor_position,
(...skipping 17 matching lines...) Expand all
1007 composition.ime_string)); 1016 composition.ime_string));
1008 } 1017 }
1009 // We have to prevent WTL from calling ::DefWindowProc() because we do not 1018 // We have to prevent WTL from calling ::DefWindowProc() because we do not
1010 // want for the IMM (Input Method Manager) to send WM_IME_CHAR messages. 1019 // want for the IMM (Input Method Manager) to send WM_IME_CHAR messages.
1011 handled = TRUE; 1020 handled = TRUE;
1012 return 0; 1021 return 0;
1013 } 1022 }
1014 1023
1015 LRESULT RenderWidgetHostViewWin::OnImeEndComposition( 1024 LRESULT RenderWidgetHostViewWin::OnImeEndComposition(
1016 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { 1025 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
1026 if (!render_widget_host_)
1027 return 0;
1028
1017 if (ime_input_.is_composing()) { 1029 if (ime_input_.is_composing()) {
1018 // A composition has been ended while there is an ongoing composition, 1030 // A composition has been ended while there is an ongoing composition,
1019 // i.e. the ongoing composition has been canceled. 1031 // i.e. the ongoing composition has been canceled.
1020 // We need to reset the composition status both of the ImeInput object and 1032 // We need to reset the composition status both of the ImeInput object and
1021 // of the renderer process. 1033 // of the renderer process.
1022 std::wstring empty_string; 1034 std::wstring empty_string;
1023 Send(new ViewMsg_ImeSetComposition(render_widget_host_->routing_id(), 1035 Send(new ViewMsg_ImeSetComposition(render_widget_host_->routing_id(),
1024 WebKit::WebCompositionCommandDiscard, 1036 WebKit::WebCompositionCommandDiscard,
1025 -1, -1, -1, empty_string)); 1037 -1, -1, -1, empty_string));
1026 ime_input_.ResetComposition(m_hWnd); 1038 ime_input_.ResetComposition(m_hWnd);
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
1388 SetFocus(); 1400 SetFocus();
1389 } 1401 }
1390 } 1402 }
1391 1403
1392 void RenderWidgetHostViewWin::ShutdownHost() { 1404 void RenderWidgetHostViewWin::ShutdownHost() {
1393 shutdown_factory_.RevokeAll(); 1405 shutdown_factory_.RevokeAll();
1394 if (render_widget_host_) 1406 if (render_widget_host_)
1395 render_widget_host_->Shutdown(); 1407 render_widget_host_->Shutdown();
1396 // Do not touch any members at this point, |this| has been deleted. 1408 // Do not touch any members at this point, |this| has been deleted.
1397 } 1409 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698