| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "app/keyboard_codes.h" | |
| 8 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 9 #include "base/i18n/rtl.h" | 8 #include "base/i18n/rtl.h" |
| 10 #include "base/time.h" | 9 #include "base/time.h" |
| 11 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| 12 #include "gfx/canvas_skia.h" | 11 #include "gfx/canvas_skia.h" |
| 13 #include "ui/base/dragdrop/os_exchange_data.h" | 12 #include "ui/base/dragdrop/os_exchange_data.h" |
| 13 #include "ui/base/keycodes/keyboard_codes.h" |
| 14 #include "views/controls/button/menu_button.h" | 14 #include "views/controls/button/menu_button.h" |
| 15 #include "views/controls/menu/menu_scroll_view_container.h" | 15 #include "views/controls/menu/menu_scroll_view_container.h" |
| 16 #include "views/controls/menu/submenu_view.h" | 16 #include "views/controls/menu/submenu_view.h" |
| 17 #include "views/drag_utils.h" | 17 #include "views/drag_utils.h" |
| 18 #include "views/screen.h" | 18 #include "views/screen.h" |
| 19 #include "views/view_constants.h" | 19 #include "views/view_constants.h" |
| 20 #include "views/views_delegate.h" | 20 #include "views/views_delegate.h" |
| 21 #include "views/widget/root_view.h" | 21 #include "views/widget/root_view.h" |
| 22 #include "views/widget/widget.h" | 22 #include "views/widget/widget.h" |
| 23 | 23 |
| 24 #if defined(OS_LINUX) | 24 #if defined(OS_LINUX) |
| 25 #include "app/keyboard_code_conversion_gtk.h" | 25 #include "ui/base/keycodes/keyboard_code_conversion_gtk.h" |
| 26 #endif | 26 #endif |
| 27 | 27 |
| 28 #if defined(TOUCH_UI) | 28 #if defined(TOUCH_UI) |
| 29 #include "views/focus/accelerator_handler.h" | 29 #include "views/focus/accelerator_handler.h" |
| 30 #endif | 30 #endif |
| 31 | 31 |
| 32 using base::Time; | 32 using base::Time; |
| 33 using base::TimeDelta; | 33 using base::TimeDelta; |
| 34 using ui::OSExchangeData; | 34 using ui::OSExchangeData; |
| 35 | 35 |
| (...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 823 | 823 |
| 824 #else | 824 #else |
| 825 bool MenuController::Dispatch(GdkEvent* event) { | 825 bool MenuController::Dispatch(GdkEvent* event) { |
| 826 if (exit_type_ == EXIT_ALL || exit_type_ == EXIT_DESTROYED) { | 826 if (exit_type_ == EXIT_ALL || exit_type_ == EXIT_DESTROYED) { |
| 827 gtk_main_do_event(event); | 827 gtk_main_do_event(event); |
| 828 return false; | 828 return false; |
| 829 } | 829 } |
| 830 | 830 |
| 831 switch (event->type) { | 831 switch (event->type) { |
| 832 case GDK_KEY_PRESS: { | 832 case GDK_KEY_PRESS: { |
| 833 app::KeyboardCode win_keycode = | 833 ui::KeyboardCode win_keycode = |
| 834 app::WindowsKeyCodeForGdkKeyCode(event->key.keyval); | 834 app::WindowsKeyCodeForGdkKeyCode(event->key.keyval); |
| 835 | 835 |
| 836 if (!OnKeyDown(win_keycode)) | 836 if (!OnKeyDown(win_keycode)) |
| 837 return false; | 837 return false; |
| 838 | 838 |
| 839 // OnKeyDown may have set exit_type_. | 839 // OnKeyDown may have set exit_type_. |
| 840 if (exit_type_ != EXIT_NONE) | 840 if (exit_type_ != EXIT_NONE) |
| 841 return false; | 841 return false; |
| 842 | 842 |
| 843 guint32 keycode = gdk_keyval_to_unicode(event->key.keyval); | 843 guint32 keycode = gdk_keyval_to_unicode(event->key.keyval); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 876 | 876 |
| 877 bool MenuController::OnKeyDown(int key_code | 877 bool MenuController::OnKeyDown(int key_code |
| 878 #if defined(OS_WIN) | 878 #if defined(OS_WIN) |
| 879 , const MSG& msg | 879 , const MSG& msg |
| 880 #else | 880 #else |
| 881 #endif | 881 #endif |
| 882 ) { | 882 ) { |
| 883 DCHECK(blocking_run_); | 883 DCHECK(blocking_run_); |
| 884 | 884 |
| 885 switch (key_code) { | 885 switch (key_code) { |
| 886 case app::VKEY_UP: | 886 case ui::VKEY_UP: |
| 887 IncrementSelection(-1); | 887 IncrementSelection(-1); |
| 888 break; | 888 break; |
| 889 | 889 |
| 890 case app::VKEY_DOWN: | 890 case ui::VKEY_DOWN: |
| 891 IncrementSelection(1); | 891 IncrementSelection(1); |
| 892 break; | 892 break; |
| 893 | 893 |
| 894 // Handling of VK_RIGHT and VK_LEFT is different depending on the UI | 894 // Handling of VK_RIGHT and VK_LEFT is different depending on the UI |
| 895 // layout. | 895 // layout. |
| 896 case app::VKEY_RIGHT: | 896 case ui::VKEY_RIGHT: |
| 897 if (base::i18n::IsRTL()) | 897 if (base::i18n::IsRTL()) |
| 898 CloseSubmenu(); | 898 CloseSubmenu(); |
| 899 else | 899 else |
| 900 OpenSubmenuChangeSelectionIfCan(); | 900 OpenSubmenuChangeSelectionIfCan(); |
| 901 break; | 901 break; |
| 902 | 902 |
| 903 case app::VKEY_LEFT: | 903 case ui::VKEY_LEFT: |
| 904 if (base::i18n::IsRTL()) | 904 if (base::i18n::IsRTL()) |
| 905 OpenSubmenuChangeSelectionIfCan(); | 905 OpenSubmenuChangeSelectionIfCan(); |
| 906 else | 906 else |
| 907 CloseSubmenu(); | 907 CloseSubmenu(); |
| 908 break; | 908 break; |
| 909 | 909 |
| 910 case app::VKEY_SPACE: | 910 case ui::VKEY_SPACE: |
| 911 SendAcceleratorToHotTrackedView(); | 911 SendAcceleratorToHotTrackedView(); |
| 912 break; | 912 break; |
| 913 | 913 |
| 914 case app::VKEY_RETURN: | 914 case ui::VKEY_RETURN: |
| 915 if (pending_state_.item) { | 915 if (pending_state_.item) { |
| 916 if (pending_state_.item->HasSubmenu()) { | 916 if (pending_state_.item->HasSubmenu()) { |
| 917 OpenSubmenuChangeSelectionIfCan(); | 917 OpenSubmenuChangeSelectionIfCan(); |
| 918 } else if (!SendAcceleratorToHotTrackedView() && | 918 } else if (!SendAcceleratorToHotTrackedView() && |
| 919 pending_state_.item->IsEnabled()) { | 919 pending_state_.item->IsEnabled()) { |
| 920 Accept(pending_state_.item, 0); | 920 Accept(pending_state_.item, 0); |
| 921 return false; | 921 return false; |
| 922 } | 922 } |
| 923 } | 923 } |
| 924 break; | 924 break; |
| 925 | 925 |
| 926 case app::VKEY_ESCAPE: | 926 case ui::VKEY_ESCAPE: |
| 927 if (!state_.item->GetParentMenuItem() || | 927 if (!state_.item->GetParentMenuItem() || |
| 928 (!state_.item->GetParentMenuItem()->GetParentMenuItem() && | 928 (!state_.item->GetParentMenuItem()->GetParentMenuItem() && |
| 929 (!state_.item->HasSubmenu() || | 929 (!state_.item->HasSubmenu() || |
| 930 !state_.item->GetSubmenu()->IsShowing()))) { | 930 !state_.item->GetSubmenu()->IsShowing()))) { |
| 931 // User pressed escape and only one menu is shown, cancel it. | 931 // User pressed escape and only one menu is shown, cancel it. |
| 932 Cancel(EXIT_OUTERMOST); | 932 Cancel(EXIT_OUTERMOST); |
| 933 return false; | 933 return false; |
| 934 } else { | 934 } else { |
| 935 CloseSubmenu(); | 935 CloseSubmenu(); |
| 936 } | 936 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 971 DCHECK(!showing_); | 971 DCHECK(!showing_); |
| 972 StopShowTimer(); | 972 StopShowTimer(); |
| 973 StopCancelAllTimer(); | 973 StopCancelAllTimer(); |
| 974 } | 974 } |
| 975 | 975 |
| 976 bool MenuController::SendAcceleratorToHotTrackedView() { | 976 bool MenuController::SendAcceleratorToHotTrackedView() { |
| 977 View* hot_view = GetFirstHotTrackedView(pending_state_.item); | 977 View* hot_view = GetFirstHotTrackedView(pending_state_.item); |
| 978 if (!hot_view) | 978 if (!hot_view) |
| 979 return false; | 979 return false; |
| 980 | 980 |
| 981 Accelerator accelerator(app::VKEY_RETURN, false, false, false); | 981 Accelerator accelerator(ui::VKEY_RETURN, false, false, false); |
| 982 hot_view->AcceleratorPressed(accelerator); | 982 hot_view->AcceleratorPressed(accelerator); |
| 983 hot_view->SetHotTracked(true); | 983 hot_view->SetHotTracked(true); |
| 984 return true; | 984 return true; |
| 985 } | 985 } |
| 986 | 986 |
| 987 void MenuController::UpdateInitialLocation( | 987 void MenuController::UpdateInitialLocation( |
| 988 const gfx::Rect& bounds, | 988 const gfx::Rect& bounds, |
| 989 MenuItemView::AnchorPosition position) { | 989 MenuItemView::AnchorPosition position) { |
| 990 pending_state_.initial_bounds = bounds; | 990 pending_state_.initial_bounds = bounds; |
| 991 if (bounds.height() > 1) { | 991 if (bounds.height() > 1) { |
| (...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1817 | 1817 |
| 1818 MouseEvent release_event(Event::ET_MOUSE_RELEASED, -1, -1, 0); | 1818 MouseEvent release_event(Event::ET_MOUSE_RELEASED, -1, -1, 0); |
| 1819 // Reset the active_mouse_view_ before sending mouse released. That way if if | 1819 // Reset the active_mouse_view_ before sending mouse released. That way if if |
| 1820 // calls back to use we aren't in a weird state. | 1820 // calls back to use we aren't in a weird state. |
| 1821 View* active_view = active_mouse_view_; | 1821 View* active_view = active_mouse_view_; |
| 1822 active_mouse_view_ = NULL; | 1822 active_mouse_view_ = NULL; |
| 1823 active_view->OnMouseReleased(release_event, true); | 1823 active_view->OnMouseReleased(release_event, true); |
| 1824 } | 1824 } |
| 1825 | 1825 |
| 1826 } // namespace views | 1826 } // namespace views |
| OLD | NEW |