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

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

Issue 10004: Ensure that windowed plugins get focus during WM_MOUSEACTIVATE. This fixes... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/render_widget_host_view_win.h" 5 #include "chrome/browser/render_widget_host_view_win.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/gfx/gdi_util.h" 8 #include "base/gfx/gdi_util.h"
9 #include "base/gfx/rect.h" 9 #include "base/gfx/rect.h"
10 #include "base/histogram.h" 10 #include "base/histogram.h"
(...skipping 761 matching lines...) Expand 10 before | Expand all | Expand 10 after
772 if (!handled_by_webcontents) { 772 if (!handled_by_webcontents) {
773 render_widget_host_->ForwardWheelEvent( 773 render_widget_host_->ForwardWheelEvent(
774 WebMouseWheelEvent(m_hWnd, message, wparam, lparam)); 774 WebMouseWheelEvent(m_hWnd, message, wparam, lparam));
775 } 775 }
776 handled = TRUE; 776 handled = TRUE;
777 return 0; 777 return 0;
778 } 778 }
779 779
780 LRESULT RenderWidgetHostViewWin::OnMouseActivate(UINT, WPARAM, LPARAM, 780 LRESULT RenderWidgetHostViewWin::OnMouseActivate(UINT, WPARAM, LPARAM,
781 BOOL& handled) { 781 BOOL& handled) {
782 // We handle WM_MOUSEACTIVATE to set focus to the underlying plugin 782 HWND focus_window = GetFocus();
783 // child window. This is to ensure that keyboard events are received 783 if (!::IsWindow(focus_window) || !IsChild(focus_window)) {
784 // by the plugin. The correct way to fix this would be send over 784 // We handle WM_MOUSEACTIVATE to set focus to the underlying plugin
785 // an event to the renderer which would then eventually send over 785 // child window. This is to ensure that keyboard events are received
786 // a setFocus call to the plugin widget. This would ensure that 786 // by the plugin. The correct way to fix this would be send over
787 // the renderer (webkit) knows about the plugin widget receiving 787 // an event to the renderer which would then eventually send over
788 // focus. 788 // a setFocus call to the plugin widget. This would ensure that
789 // TODO(iyengar) Do the right thing as per the above comment. 789 // the renderer (webkit) knows about the plugin widget receiving
790 POINT cursor_pos = {0}; 790 // focus.
791 ::GetCursorPos(&cursor_pos); 791 // TODO(iyengar) Do the right thing as per the above comment.
792 MapWindowPoints(m_hWnd, &cursor_pos, 1); 792 POINT cursor_pos = {0};
793 HWND child_window = ::RealChildWindowFromPoint(m_hWnd, cursor_pos); 793 ::GetCursorPos(&cursor_pos);
794 if (::IsWindow(child_window)) { 794 ::ScreenToClient(m_hWnd, &cursor_pos);
795 ::SetFocus(child_window); 795 HWND child_window = ::RealChildWindowFromPoint(m_hWnd, cursor_pos);
796 return MA_NOACTIVATE; 796 if (::IsWindow(child_window)) {
797 } else { 797 ::SetFocus(child_window);
798 handled = FALSE; 798 return MA_NOACTIVATE;
799 return MA_ACTIVATE; 799 }
800 } 800 }
801 handled = FALSE;
802 return MA_ACTIVATE;
801 } 803 }
802 804
803 LRESULT RenderWidgetHostViewWin::OnGetObject(UINT message, WPARAM wparam, 805 LRESULT RenderWidgetHostViewWin::OnGetObject(UINT message, WPARAM wparam,
804 LPARAM lparam, BOOL& handled) { 806 LPARAM lparam, BOOL& handled) {
805 LRESULT reference_result = static_cast<LRESULT>(0L); 807 LRESULT reference_result = static_cast<LRESULT>(0L);
806 // TODO(jcampan): http://b/issue?id=1432077 Disabling accessibility in the 808 // TODO(jcampan): http://b/issue?id=1432077 Disabling accessibility in the
807 // renderer is a temporary work-around until that bug is fixed. 809 // renderer is a temporary work-around until that bug is fixed.
808 if (!renderer_accessible_) 810 if (!renderer_accessible_)
809 return reference_result; 811 return reference_result;
810 812
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
907 ::DestroyWindow(tooltip_hwnd_); 909 ::DestroyWindow(tooltip_hwnd_);
908 tooltip_hwnd_ = NULL; 910 tooltip_hwnd_ = NULL;
909 } 911 }
910 912
911 void RenderWidgetHostViewWin::ShutdownHost() { 913 void RenderWidgetHostViewWin::ShutdownHost() {
912 shutdown_factory_.RevokeAll(); 914 shutdown_factory_.RevokeAll();
913 render_widget_host_->Shutdown(); 915 render_widget_host_->Shutdown();
914 // Do not touch any members at this point, |this| has been deleted. 916 // Do not touch any members at this point, |this| has been deleted.
915 } 917 }
916 918
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