OLD | NEW |
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/controls/menu/menu_controller.h" | 5 #include "views/controls/menu/menu_controller.h" |
6 | 6 |
7 #include "base/i18n/case_conversion.h" | 7 #include "base/i18n/case_conversion.h" |
8 #include "base/i18n/rtl.h" | 8 #include "base/i18n/rtl.h" |
9 #include "base/time.h" | 9 #include "base/time.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 1307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1318 DCHECK(item); | 1318 DCHECK(item); |
1319 if (item->GetSubmenu()->IsShowing()) { | 1319 if (item->GetSubmenu()->IsShowing()) { |
1320 return; | 1320 return; |
1321 } | 1321 } |
1322 | 1322 |
1323 OpenMenuImpl(item, true); | 1323 OpenMenuImpl(item, true); |
1324 did_capture_ = true; | 1324 did_capture_ = true; |
1325 } | 1325 } |
1326 | 1326 |
1327 void MenuController::OpenMenuImpl(MenuItemView* item, bool show) { | 1327 void MenuController::OpenMenuImpl(MenuItemView* item, bool show) { |
1328 if (show) | 1328 if (show) { |
| 1329 int old_count = item->GetSubmenu()->child_count(); |
1329 item->GetDelegate()->WillShowMenu(item); | 1330 item->GetDelegate()->WillShowMenu(item); |
| 1331 if (old_count != item->GetSubmenu()->child_count()) { |
| 1332 // If the number of children changed then we may need to add empty items. |
| 1333 item->AddEmptyMenus(); |
| 1334 } |
| 1335 } |
1330 bool prefer_leading = | 1336 bool prefer_leading = |
1331 state_.open_leading.empty() ? true : state_.open_leading.back(); | 1337 state_.open_leading.empty() ? true : state_.open_leading.back(); |
1332 bool resulting_direction; | 1338 bool resulting_direction; |
1333 gfx::Rect bounds = | 1339 gfx::Rect bounds = |
1334 CalculateMenuBounds(item, prefer_leading, &resulting_direction); | 1340 CalculateMenuBounds(item, prefer_leading, &resulting_direction); |
1335 state_.open_leading.push_back(resulting_direction); | 1341 state_.open_leading.push_back(resulting_direction); |
1336 bool do_capture = (!did_capture_ && blocking_run_); | 1342 bool do_capture = (!did_capture_ && blocking_run_); |
1337 showing_submenu_ = true; | 1343 showing_submenu_ = true; |
1338 if (show) | 1344 if (show) |
1339 item->GetSubmenu()->ShowAt(owner_, bounds, do_capture); | 1345 item->GetSubmenu()->ShowAt(owner_, bounds, do_capture); |
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1862 return; | 1868 return; |
1863 | 1869 |
1864 // Reset the active_mouse_view_ before sending mouse capture lost. That way if | 1870 // Reset the active_mouse_view_ before sending mouse capture lost. That way if |
1865 // it calls back to us, we aren't in a weird state. | 1871 // it calls back to us, we aren't in a weird state. |
1866 View* active_view = active_mouse_view_; | 1872 View* active_view = active_mouse_view_; |
1867 active_mouse_view_ = NULL; | 1873 active_mouse_view_ = NULL; |
1868 active_view->OnMouseCaptureLost(); | 1874 active_view->OnMouseCaptureLost(); |
1869 } | 1875 } |
1870 | 1876 |
1871 } // namespace views | 1877 } // namespace views |
OLD | NEW |