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 "ui/views/controls/menu/menu_controller.h" | 5 #include "ui/views/controls/menu/menu_controller.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <windowsx.h> | 8 #include <windowsx.h> |
9 #endif | 9 #endif |
10 | 10 |
(...skipping 2112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2123 | 2123 |
2124 void MenuController::RepostEvent(SubmenuView* source, | 2124 void MenuController::RepostEvent(SubmenuView* source, |
2125 const ui::LocatedEvent& event) { | 2125 const ui::LocatedEvent& event) { |
2126 gfx::Point screen_loc(event.location()); | 2126 gfx::Point screen_loc(event.location()); |
2127 View::ConvertPointToScreen(source->GetScrollViewContainer(), &screen_loc); | 2127 View::ConvertPointToScreen(source->GetScrollViewContainer(), &screen_loc); |
2128 | 2128 |
2129 gfx::NativeView native_view = source->GetWidget()->GetNativeView(); | 2129 gfx::NativeView native_view = source->GetWidget()->GetNativeView(); |
2130 gfx::Screen* screen = gfx::Screen::GetScreenFor(native_view); | 2130 gfx::Screen* screen = gfx::Screen::GetScreenFor(native_view); |
2131 gfx::NativeWindow window = screen->GetWindowAtScreenPoint(screen_loc); | 2131 gfx::NativeWindow window = screen->GetWindowAtScreenPoint(screen_loc); |
2132 | 2132 |
2133 if (!window) | 2133 // On Windows, it is ok for window to be NULL. Please refer to the |
2134 return; | 2134 // RepostLocatedEvent function for more information. |
2135 | |
2136 #if defined(OS_WIN) | 2135 #if defined(OS_WIN) |
2137 // Release the capture. | 2136 // Release the capture. |
2138 SubmenuView* submenu = state_.item->GetRootMenuItem()->GetSubmenu(); | 2137 SubmenuView* submenu = state_.item->GetRootMenuItem()->GetSubmenu(); |
2139 submenu->ReleaseCapture(); | 2138 submenu->ReleaseCapture(); |
2140 | 2139 |
2141 gfx::NativeView view = submenu->GetWidget()->GetNativeView(); | 2140 gfx::NativeView view = submenu->GetWidget()->GetNativeView(); |
2142 if (view) { | 2141 if (view) { |
2143 DWORD view_tid = GetWindowThreadProcessId(HWNDForNativeView(view), NULL); | 2142 DWORD view_tid = GetWindowThreadProcessId(HWNDForNativeView(view), NULL); |
2144 if (view_tid != GetWindowThreadProcessId(HWNDForNativeView(window), NULL)) { | 2143 if (view_tid != GetWindowThreadProcessId(HWNDForNativeView(window), NULL)) { |
sky
2014/02/12 22:51:29
What is this code going to do with a NULL window?
ananta
2014/02/12 23:17:08
Fixed.
| |
2145 // Even though we have mouse capture, windows generates a mouse event if | 2144 // Even though we have mouse capture, windows generates a mouse event if |
2146 // the other window is in a separate thread. Only repost an event if | 2145 // the other window is in a separate thread. Only repost an event if |
2147 // |view| was created on the same thread, else the target window can get | 2146 // |view| was created on the same thread, else the target window can get |
2148 // double events leading to bad behavior. | 2147 // double events leading to bad behavior. |
2149 return; | 2148 return; |
2150 } | 2149 } |
2151 } | 2150 } |
2151 #else | |
2152 if (!window) | |
2153 return; | |
2152 #endif | 2154 #endif |
2153 | 2155 |
2154 scoped_ptr<ui::LocatedEvent> clone; | 2156 scoped_ptr<ui::LocatedEvent> clone; |
2155 if (event.IsMouseEvent()) { | 2157 if (event.IsMouseEvent()) { |
2156 clone.reset(new ui::MouseEvent(static_cast<const ui::MouseEvent&>(event))); | 2158 clone.reset(new ui::MouseEvent(static_cast<const ui::MouseEvent&>(event))); |
2157 } else if (event.IsGestureEvent()) { | 2159 } else if (event.IsGestureEvent()) { |
2158 // TODO(rbyers): Gesture event repost is tricky to get right | 2160 // TODO(rbyers): Gesture event repost is tricky to get right |
2159 // crbug.com/170987. | 2161 // crbug.com/170987. |
2160 return; | 2162 return; |
2161 } else { | 2163 } else { |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2334 (!pending_state_.item->HasSubmenu() || | 2336 (!pending_state_.item->HasSubmenu() || |
2335 !pending_state_.item->GetSubmenu()->IsShowing())) { | 2337 !pending_state_.item->GetSubmenu()->IsShowing())) { |
2336 // On exit if the user hasn't selected an item with a submenu, move the | 2338 // On exit if the user hasn't selected an item with a submenu, move the |
2337 // selection back to the parent menu item. | 2339 // selection back to the parent menu item. |
2338 SetSelection(pending_state_.item->GetParentMenuItem(), | 2340 SetSelection(pending_state_.item->GetParentMenuItem(), |
2339 SELECTION_OPEN_SUBMENU); | 2341 SELECTION_OPEN_SUBMENU); |
2340 } | 2342 } |
2341 } | 2343 } |
2342 | 2344 |
2343 } // namespace views | 2345 } // namespace views |
OLD | NEW |