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

Side by Side Diff: views/widget/widget_win.cc

Issue 6591120: Update MouseEvent (initial pass). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update MouseEvent (initial pass). Created 9 years, 9 months 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "views/widget/widget_win.h" 5 #include "views/widget/widget_win.h"
6 6
7 #include <dwmapi.h> 7 #include <dwmapi.h>
8 8
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/win/windows_version.h" 10 #include "base/win/windows_version.h"
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 } 401 }
402 402
403 bool WidgetWin::IsAccessibleWidget() const { 403 bool WidgetWin::IsAccessibleWidget() const {
404 return screen_reader_active_; 404 return screen_reader_active_;
405 } 405 }
406 406
407 TooltipManager* WidgetWin::GetTooltipManager() { 407 TooltipManager* WidgetWin::GetTooltipManager() {
408 return tooltip_manager_.get(); 408 return tooltip_manager_.get();
409 } 409 }
410 410
411 void WidgetWin::GenerateMousePressedForView(View* view,
412 const gfx::Point& point) {
413 gfx::Point point_in_widget(point);
414 View::ConvertPointToWidget(view, &point_in_widget);
415 GetRootView()->SetMouseHandler(view);
416 ProcessMousePressed(point_in_widget.ToPOINT(), MK_LBUTTON, false, false);
417 }
418
419 bool WidgetWin::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) { 411 bool WidgetWin::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) {
420 return false; 412 return false;
421 } 413 }
422 414
423 Window* WidgetWin::GetWindow() { 415 Window* WidgetWin::GetWindow() {
424 return GetWindowImpl(hwnd()); 416 return GetWindowImpl(hwnd());
425 } 417 }
426 418
427 const Window* WidgetWin::GetWindow() const { 419 const Window* WidgetWin::GetWindow() const {
428 return GetWindowImpl(hwnd()); 420 return GetWindowImpl(hwnd());
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 return 0; 740 return 0;
749 } 741 }
750 742
751 void WidgetWin::OnKillFocus(HWND focused_window) { 743 void WidgetWin::OnKillFocus(HWND focused_window) {
752 GetFocusManager()->GetWidgetFocusManager()->OnWidgetFocusEvent( 744 GetFocusManager()->GetWidgetFocusManager()->OnWidgetFocusEvent(
753 this->GetNativeView(), 745 this->GetNativeView(),
754 focused_window); 746 focused_window);
755 SetMsgHandled(FALSE); 747 SetMsgHandled(FALSE);
756 } 748 }
757 749
758 // TODO(pkasting): ORing the pressed/released button into the flags is _wrong_.
759 // It makes it impossible to tell which button was modified when multiple
760 // buttons are/were held down. We need to instead put the modified button into
761 // a separate member on the MouseEvent, then audit all consumers of MouseEvents
762 // to fix them to use the resulting values correctly.
763 750
764 void WidgetWin::OnLButtonDown(UINT flags, const CPoint& point) { 751 LRESULT WidgetWin::OnLButtonDblClk(UINT message,
765 ProcessMousePressed(point, flags | MK_LBUTTON, false, false); 752 WPARAM w_param,
753 LPARAM l_param) {
754 ProcessMousePressed(message, w_param, l_param);
755 return 0;
766 } 756 }
767 757
768 void WidgetWin::OnLButtonUp(UINT flags, const CPoint& point) { 758 LRESULT WidgetWin::OnLButtonDown(UINT message, WPARAM w_param, LPARAM l_param) {
769 ProcessMouseReleased(point, flags | MK_LBUTTON); 759 ProcessMousePressed(message, w_param, l_param);
760 return 0;
770 } 761 }
771 762
772 void WidgetWin::OnLButtonDblClk(UINT flags, const CPoint& point) { 763 LRESULT WidgetWin::OnLButtonUp(UINT message, WPARAM w_param, LPARAM l_param) {
773 ProcessMousePressed(point, flags | MK_LBUTTON, true, false); 764 ProcessMouseReleased(message, w_param, l_param);
765 return 0;
774 } 766 }
775 767
776 void WidgetWin::OnMButtonDown(UINT flags, const CPoint& point) { 768 LRESULT WidgetWin::OnMButtonDblClk(UINT message,
777 ProcessMousePressed(point, flags | MK_MBUTTON, false, false); 769 WPARAM w_param,
770 LPARAM l_param) {
771 ProcessMousePressed(message, w_param, l_param);
772 return 0;
778 } 773 }
779 774
780 void WidgetWin::OnMButtonUp(UINT flags, const CPoint& point) { 775 LRESULT WidgetWin::OnMButtonDown(UINT message, WPARAM w_param, LPARAM l_param) {
781 ProcessMouseReleased(point, flags | MK_MBUTTON); 776 ProcessMousePressed(message, w_param, l_param);
777 return 0;
782 } 778 }
783 779
784 void WidgetWin::OnMButtonDblClk(UINT flags, const CPoint& point) { 780 LRESULT WidgetWin::OnMButtonUp(UINT message, WPARAM w_param, LPARAM l_param) {
785 ProcessMousePressed(point, flags | MK_MBUTTON, true, false); 781 ProcessMouseReleased(message, w_param, l_param);
782 return 0;
786 } 783 }
787 784
788 LRESULT WidgetWin::OnMouseActivate(HWND window, UINT hittest_code, 785 LRESULT WidgetWin::OnMouseActivate(UINT message,
789 UINT message) { 786 WPARAM w_param,
787 LPARAM l_param) {
790 SetMsgHandled(FALSE); 788 SetMsgHandled(FALSE);
791 return MA_ACTIVATE; 789 return MA_ACTIVATE;
792 } 790 }
793 791
794 void WidgetWin::OnMouseMove(UINT flags, const CPoint& point) { 792 LRESULT WidgetWin::OnMouseMove(UINT message, WPARAM w_param, LPARAM l_param) {
795 ProcessMouseMoved(point, flags, false); 793 ProcessMouseMoved(message, w_param, l_param);
794 return 0;
796 } 795 }
797 796
798 LRESULT WidgetWin::OnMouseLeave(UINT message, WPARAM w_param, LPARAM l_param) { 797 LRESULT WidgetWin::OnMouseLeave(UINT message, WPARAM w_param, LPARAM l_param) {
799 tooltip_manager_->OnMouseLeave(); 798 tooltip_manager_->OnMouseLeave();
800 ProcessMouseExited(); 799 ProcessMouseExited();
801 return 0; 800 return 0;
802 } 801 }
803 802
804 LRESULT WidgetWin::OnMouseWheel(UINT message, WPARAM w_param, LPARAM l_param) { 803 LRESULT WidgetWin::OnMouseWheel(UINT message, WPARAM w_param, LPARAM l_param) {
805 // Reroute the mouse-wheel to the window under the mouse pointer if 804 // Reroute the mouse-wheel to the window under the mouse pointer if
(...skipping 30 matching lines...) Expand all
836 LRESULT WidgetWin::OnNCCalcSize(BOOL w_param, LPARAM l_param) { 835 LRESULT WidgetWin::OnNCCalcSize(BOOL w_param, LPARAM l_param) {
837 SetMsgHandled(FALSE); 836 SetMsgHandled(FALSE);
838 return 0; 837 return 0;
839 } 838 }
840 839
841 LRESULT WidgetWin::OnNCHitTest(const CPoint& pt) { 840 LRESULT WidgetWin::OnNCHitTest(const CPoint& pt) {
842 SetMsgHandled(FALSE); 841 SetMsgHandled(FALSE);
843 return 0; 842 return 0;
844 } 843 }
845 844
846 void WidgetWin::OnNCLButtonDblClk(UINT flags, const CPoint& point) { 845 LRESULT WidgetWin::OnNCLButtonDblClk(UINT message,
847 SetMsgHandled(ProcessMousePressed(point, flags | MK_LBUTTON, true, true)); 846 WPARAM w_param,
847 LPARAM l_param) {
848 SetMsgHandled(ProcessMousePressed(message, w_param, l_param));
849 return 0;
848 } 850 }
849 851
850 void WidgetWin::OnNCLButtonDown(UINT flags, const CPoint& point) { 852 LRESULT WidgetWin::OnNCLButtonDown(UINT message,
851 SetMsgHandled(ProcessMousePressed(point, flags | MK_LBUTTON, false, true)); 853 WPARAM w_param,
854 LPARAM l_param) {
855 SetMsgHandled(ProcessMousePressed(message, w_param, l_param));
856 return 0;
852 } 857 }
853 858
854 void WidgetWin::OnNCLButtonUp(UINT flags, const CPoint& point) { 859 LRESULT WidgetWin::OnNCLButtonUp(UINT message, WPARAM w_param, LPARAM l_param) {
855 SetMsgHandled(FALSE); 860 SetMsgHandled(FALSE);
861 return 0;
856 } 862 }
857 863
858 void WidgetWin::OnNCMButtonDblClk(UINT flags, const CPoint& point) { 864 LRESULT WidgetWin::OnNCMButtonDblClk(UINT message,
859 SetMsgHandled(ProcessMousePressed(point, flags | MK_MBUTTON, true, true)); 865 WPARAM w_param,
866 LPARAM l_param) {
867 SetMsgHandled(ProcessMousePressed(message, w_param, l_param));
868 return 0;
860 } 869 }
861 870
862 void WidgetWin::OnNCMButtonDown(UINT flags, const CPoint& point) { 871 LRESULT WidgetWin::OnNCMButtonDown(UINT message,
863 SetMsgHandled(ProcessMousePressed(point, flags | MK_MBUTTON, false, true)); 872 WPARAM w_param,
873 LPARAM l_param) {
874 SetMsgHandled(ProcessMousePressed(message, w_param, l_param));
875 return 0;
864 } 876 }
865 877
866 void WidgetWin::OnNCMButtonUp(UINT flags, const CPoint& point) { 878 LRESULT WidgetWin::OnNCMButtonUp(UINT message,
879 WPARAM w_param,
880 LPARAM l_param) {
867 SetMsgHandled(FALSE); 881 SetMsgHandled(FALSE);
882 return 0;
868 } 883 }
869 884
870 LRESULT WidgetWin::OnNCMouseLeave(UINT uMsg, WPARAM w_param, LPARAM l_param) { 885 LRESULT WidgetWin::OnNCMouseLeave(UINT message,
886 WPARAM w_param,
887 LPARAM l_param) {
871 ProcessMouseExited(); 888 ProcessMouseExited();
872 return 0; 889 return 0;
873 } 890 }
874 891
875 LRESULT WidgetWin::OnNCMouseMove(UINT flags, const CPoint& point) { 892 LRESULT WidgetWin::OnNCMouseMove(UINT message, WPARAM w_param, LPARAM l_param) {
876 // NC points are in screen coordinates. 893 // NC points are in screen coordinates.
877 CPoint temp = point; 894 // TODO(msw): Ensure point translation is correct. Move into ProcessMouseMoved ???
878 MapWindowPoints(HWND_DESKTOP, hwnd(), &temp, 1); 895 CPoint point(GET_X_LPARAM(l_param), GET_Y_LPARAM(l_param));
879 ProcessMouseMoved(temp, 0, true); 896 MapWindowPoints(HWND_DESKTOP, hwnd(), &point, 1);
897 l_param = MAKELPARAM(point.x, point.y);
898 ProcessMouseMoved(message, w_param, l_param);
880 899
881 // We need to process this message to stop Windows from drawing the window 900 // We need to process this message to stop Windows from drawing the window
882 // controls as the mouse moves over the title bar area when the window is 901 // controls as the mouse moves over the title bar area when the window is
883 // maximized. 902 // maximized.
884 return 0; 903 return 0;
885 } 904 }
886 905
887 void WidgetWin::OnNCPaint(HRGN rgn) { 906 void WidgetWin::OnNCPaint(HRGN rgn) {
888 SetMsgHandled(FALSE); 907 SetMsgHandled(FALSE);
889 } 908 }
890 909
891 void WidgetWin::OnNCRButtonDblClk(UINT flags, const CPoint& point) { 910 LRESULT WidgetWin::OnNCRButtonDblClk(UINT message,
892 SetMsgHandled(ProcessMousePressed(point, flags | MK_RBUTTON, true, true)); 911 WPARAM w_param,
912 LPARAM l_param) {
913 SetMsgHandled(ProcessMousePressed(message, w_param, l_param));
914 return 0;
893 } 915 }
894 916
895 void WidgetWin::OnNCRButtonDown(UINT flags, const CPoint& point) { 917 LRESULT WidgetWin::OnNCRButtonDown(UINT message,
896 SetMsgHandled(ProcessMousePressed(point, flags | MK_RBUTTON, false, true)); 918 WPARAM w_param,
919 LPARAM l_param) {
920 SetMsgHandled(ProcessMousePressed(message, w_param, l_param));
921 return 0;
897 } 922 }
898 923
899 void WidgetWin::OnNCRButtonUp(UINT flags, const CPoint& point) { 924 LRESULT WidgetWin::OnNCRButtonUp(UINT message, WPARAM w_param, LPARAM l_param) {
900 SetMsgHandled(FALSE); 925 SetMsgHandled(FALSE);
926 return 0;
901 } 927 }
902 928
903 LRESULT WidgetWin::OnNCUAHDrawCaption(UINT msg, 929 LRESULT WidgetWin::OnNCUAHDrawCaption(UINT msg,
904 WPARAM w_param, 930 WPARAM w_param,
905 LPARAM l_param) { 931 LPARAM l_param) {
906 SetMsgHandled(FALSE); 932 SetMsgHandled(FALSE);
907 return 0; 933 return 0;
908 } 934 }
909 935
910 LRESULT WidgetWin::OnNCUAHDrawFrame(UINT msg, WPARAM w_param, LPARAM l_param) { 936 LRESULT WidgetWin::OnNCUAHDrawFrame(UINT msg, WPARAM w_param, LPARAM l_param) {
(...skipping 22 matching lines...) Expand all
933 } 959 }
934 960
935 LRESULT WidgetWin::OnPowerBroadcast(DWORD power_event, DWORD data) { 961 LRESULT WidgetWin::OnPowerBroadcast(DWORD power_event, DWORD data) {
936 ui::SystemMonitor* monitor = ui::SystemMonitor::Get(); 962 ui::SystemMonitor* monitor = ui::SystemMonitor::Get();
937 if (monitor) 963 if (monitor)
938 monitor->ProcessWmPowerBroadcastMessage(power_event); 964 monitor->ProcessWmPowerBroadcastMessage(power_event);
939 SetMsgHandled(FALSE); 965 SetMsgHandled(FALSE);
940 return 0; 966 return 0;
941 } 967 }
942 968
943 void WidgetWin::OnRButtonDown(UINT flags, const CPoint& point) { 969 LRESULT WidgetWin::OnRButtonDblClk(UINT message, WPARAM w_param,
944 ProcessMousePressed(point, flags | MK_RBUTTON, false, false); 970 LPARAM l_param) {
971 ProcessMousePressed(message, w_param, l_param);
972 return 0;
945 } 973 }
946 974
947 void WidgetWin::OnRButtonUp(UINT flags, const CPoint& point) { 975 LRESULT WidgetWin::OnRButtonDown(UINT message, WPARAM w_param, LPARAM l_param) {
948 ProcessMouseReleased(point, flags | MK_RBUTTON); 976 ProcessMousePressed(message, w_param, l_param);
977 return 0;
949 } 978 }
950 979
951 void WidgetWin::OnRButtonDblClk(UINT flags, const CPoint& point) { 980 LRESULT WidgetWin::OnRButtonUp(UINT message, WPARAM w_param, LPARAM l_param) {
952 ProcessMousePressed(point, flags | MK_RBUTTON, true, false); 981 ProcessMouseReleased(message, w_param, l_param);
982 return 0;
953 } 983 }
954 984
955 LRESULT WidgetWin::OnReflectedMessage(UINT msg, 985 LRESULT WidgetWin::OnReflectedMessage(UINT msg,
956 WPARAM w_param, 986 WPARAM w_param,
957 LPARAM l_param) { 987 LPARAM l_param) {
958 SetMsgHandled(FALSE); 988 SetMsgHandled(FALSE);
959 return 0; 989 return 0;
960 } 990 }
961 991
962 void WidgetWin::OnSetFocus(HWND focused_window) { 992 void WidgetWin::OnSetFocus(HWND focused_window) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 tme.dwFlags = mouse_tracking_flags; 1071 tme.dwFlags = mouse_tracking_flags;
1042 tme.hwndTrack = hwnd(); 1072 tme.hwndTrack = hwnd();
1043 tme.dwHoverTime = 0; 1073 tme.dwHoverTime = 0;
1044 TrackMouseEvent(&tme); 1074 TrackMouseEvent(&tme);
1045 } else if (mouse_tracking_flags != active_mouse_tracking_flags_) { 1075 } else if (mouse_tracking_flags != active_mouse_tracking_flags_) {
1046 TrackMouseEvents(active_mouse_tracking_flags_ | TME_CANCEL); 1076 TrackMouseEvents(active_mouse_tracking_flags_ | TME_CANCEL);
1047 TrackMouseEvents(mouse_tracking_flags); 1077 TrackMouseEvents(mouse_tracking_flags);
1048 } 1078 }
1049 } 1079 }
1050 1080
1051 bool WidgetWin::ProcessMousePressed(const CPoint& point, 1081 bool WidgetWin::ProcessMousePressed(UINT message,
1052 UINT flags, 1082 WPARAM w_param,
1053 bool dbl_click, 1083 LPARAM l_param) {
1054 bool non_client) {
1055 last_mouse_event_was_move_ = false; 1084 last_mouse_event_was_move_ = false;
1085
1086 MSG msg;
1087 MakeMSG(&msg, message, w_param, l_param, 0, GET_X_LPARAM(l_param),
1088 GET_Y_LPARAM(l_param));
1089 MouseEvent mouse_pressed(msg);
1090
1091 // TODO(msw): this is awkward... can this pattern be improved?
1092 // Make a separate ProcessNCMousePressed that translates and then c alls this?
1056 // Windows gives screen coordinates for nonclient events, while the RootView 1093 // Windows gives screen coordinates for nonclient events, while the RootView
1057 // expects window coordinates; convert if necessary. 1094 // expects window coordinates; convert if necessary.
1058 gfx::Point converted_point(point); 1095 bool result = false;
1059 if (non_client) 1096 if (mouse_pressed.flags() & ui::EF_IS_NON_CLIENT)
1060 View::ConvertPointToView(NULL, GetRootView(), &converted_point); 1097 result = GetRootView()->OnMousePressed(
1061 MouseEvent mouse_pressed(ui::ET_MOUSE_PRESSED, 1098 MouseEvent(mouse_pressed, NULL, GetRootView()));
1062 converted_point.x(), 1099 else
1063 converted_point.y(), 1100 result = GetRootView()->OnMousePressed(mouse_pressed);
1064 (dbl_click ? ui::EF_IS_DOUBLE_CLICK : 0) | 1101
1065 (non_client ? ui::EF_IS_NON_CLIENT : 0) | 1102 if (result) {
1066 Event::ConvertWindowsFlags(flags));
1067 if (GetRootView()->OnMousePressed(mouse_pressed)) {
1068 is_mouse_down_ = true; 1103 is_mouse_down_ = true;
1069 if (!has_capture_) { 1104 if (!has_capture_) {
1070 SetCapture(); 1105 SetCapture();
1071 has_capture_ = true; 1106 has_capture_ = true;
1072 } 1107 }
1073 return true; 1108 return true;
1074 } 1109 }
1075 return false; 1110 return false;
1076 } 1111 }
1077 1112
1078 void WidgetWin::ProcessMouseDragged(const CPoint& point, UINT flags) { 1113 void WidgetWin::ProcessMouseDragged(UINT message,
1114 WPARAM w_param,
1115 LPARAM l_param) {
1079 last_mouse_event_was_move_ = false; 1116 last_mouse_event_was_move_ = false;
1080 MouseEvent mouse_drag(ui::ET_MOUSE_DRAGGED, 1117
1081 point.x, 1118 MSG msg;
1082 point.y, 1119 MakeMSG(&msg, message, w_param, l_param, 0, GET_X_LPARAM(l_param),
1083 Event::ConvertWindowsFlags(flags)); 1120 GET_Y_LPARAM(l_param));
1084 GetRootView()->OnMouseDragged(mouse_drag); 1121 GetRootView()->OnMouseDragged(MouseEvent(msg));
1085 } 1122 }
1086 1123
1087 void WidgetWin::ProcessMouseReleased(const CPoint& point, UINT flags) { 1124 void WidgetWin::ProcessMouseReleased(UINT message,
1125 WPARAM w_param,
1126 LPARAM l_param) {
1088 last_mouse_event_was_move_ = false; 1127 last_mouse_event_was_move_ = false;
1089 MouseEvent mouse_up(ui::ET_MOUSE_RELEASED, 1128
1090 point.x,
1091 point.y,
1092 Event::ConvertWindowsFlags(flags));
1093 // Release the capture first, that way we don't get confused if 1129 // Release the capture first, that way we don't get confused if
1094 // OnMouseReleased blocks. 1130 // OnMouseReleased blocks.
1095 if (has_capture_ && ReleaseCaptureOnMouseReleased()) { 1131 if (has_capture_ && ReleaseCaptureOnMouseReleased()) {
1096 has_capture_ = false; 1132 has_capture_ = false;
1097 ReleaseCapture(); 1133 ReleaseCapture();
1098 } 1134 }
1099 is_mouse_down_ = false; 1135 is_mouse_down_ = false;
1100 GetRootView()->OnMouseReleased(mouse_up, false); 1136
1137 MSG msg;
1138 MakeMSG(&msg, message, w_param, l_param, 0, GET_X_LPARAM(l_param),
1139 GET_Y_LPARAM(l_param));
1140 GetRootView()->OnMouseReleased(MouseEvent(msg), false);
1101 } 1141 }
1102 1142
1103 void WidgetWin::ProcessMouseMoved(const CPoint &point, UINT flags, 1143 void WidgetWin::ProcessMouseMoved(UINT message,
1104 bool is_nonclient) { 1144 WPARAM w_param,
1145 LPARAM l_param) {
1146 MSG msg;
1147 MakeMSG(&msg, message, w_param, l_param, 0, GET_X_LPARAM(l_param),
1148 GET_Y_LPARAM(l_param));
1149 MouseEvent mouse_move(msg);
1150
1105 // Windows only fires WM_MOUSELEAVE events if the application begins 1151 // Windows only fires WM_MOUSELEAVE events if the application begins
1106 // "tracking" mouse events for a given HWND during WM_MOUSEMOVE events. 1152 // "tracking" mouse events for a given HWND during WM_MOUSEMOVE events.
1107 // We need to call |TrackMouseEvents| to listen for WM_MOUSELEAVE. 1153 // We need to call |TrackMouseEvents| to listen for WM_MOUSELEAVE.
1108 if (!has_capture_) 1154 if (!has_capture_)
1109 TrackMouseEvents(is_nonclient ? TME_NONCLIENT | TME_LEAVE : TME_LEAVE); 1155 TrackMouseEvents((mouse_move.flags() & ui::EF_IS_NON_CLIENT) ?
1156 TME_NONCLIENT | TME_LEAVE : TME_LEAVE);
1110 if (has_capture_ && is_mouse_down_) { 1157 if (has_capture_ && is_mouse_down_) {
1111 ProcessMouseDragged(point, flags); 1158 ProcessMouseDragged(message, w_param, l_param);
1112 } else { 1159 } else {
1113 gfx::Point screen_loc(point); 1160 if (last_mouse_event_was_move_ && last_mouse_move_x_ == msg.pt.x &&
1114 View::ConvertPointToScreen(GetRootView(), &screen_loc); 1161 last_mouse_move_y_ == msg.pt.y) {
1115 if (last_mouse_event_was_move_ && last_mouse_move_x_ == screen_loc.x() &&
1116 last_mouse_move_y_ == screen_loc.y()) {
1117 // Don't generate a mouse event for the same location as the last. 1162 // Don't generate a mouse event for the same location as the last.
1118 return; 1163 return;
1119 } 1164 }
1120 last_mouse_move_x_ = screen_loc.x(); 1165 last_mouse_move_x_ = msg.pt.x;
1121 last_mouse_move_y_ = screen_loc.y(); 1166 last_mouse_move_y_ = msg.pt.y;
1167
1168 // TODO(msw): this is awkward... can this pattern be improved?
1169 gfx::Point screen_loc(msg.pt.x, msg.pt.y);
1170 View::ConvertPointToScreen(GetRootView(), &screen_loc);
1171 msg.pt.x = screen_loc.x();
1172 msg.pt.y = screen_loc.y();
1173 msg.lParam = MAKELPARAM(screen_loc.x(), screen_loc.y());
1174 MouseEvent mouse_move_converted(msg);
1122 last_mouse_event_was_move_ = true; 1175 last_mouse_event_was_move_ = true;
1123 MouseEvent mouse_move(ui::ET_MOUSE_MOVED, 1176 GetRootView()->OnMouseMoved(mouse_move_converted);
1124 point.x,
1125 point.y,
1126 Event::ConvertWindowsFlags(flags));
1127 GetRootView()->OnMouseMoved(mouse_move);
1128 } 1177 }
1129 } 1178 }
1130 1179
1131 void WidgetWin::ProcessMouseExited() { 1180 void WidgetWin::ProcessMouseExited() {
1132 last_mouse_event_was_move_ = false; 1181 last_mouse_event_was_move_ = false;
1133 GetRootView()->ProcessOnMouseExited(); 1182 GetRootView()->ProcessOnMouseExited();
1134 // Reset our tracking flag so that future mouse movement over this WidgetWin 1183 // Reset our tracking flag so that future mouse movement over this WidgetWin
1135 // results in a new tracking session. 1184 // results in a new tracking session.
1136 active_mouse_tracking_flags_ = 0; 1185 active_mouse_tracking_flags_ = 0;
1137 } 1186 }
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 Widget* Widget::GetWidgetFromNativeWindow(gfx::NativeWindow native_window) { 1382 Widget* Widget::GetWidgetFromNativeWindow(gfx::NativeWindow native_window) {
1334 return Widget::GetWidgetFromNativeView(native_window); 1383 return Widget::GetWidgetFromNativeView(native_window);
1335 } 1384 }
1336 1385
1337 // static 1386 // static
1338 void Widget::NotifyLocaleChanged() { 1387 void Widget::NotifyLocaleChanged() {
1339 NOTIMPLEMENTED(); 1388 NOTIMPLEMENTED();
1340 } 1389 }
1341 1390
1342 } // namespace views 1391 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698