| 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" |
| 7 #include "app/l10n_util.h" | 8 #include "app/l10n_util.h" |
| 8 #include "app/os_exchange_data.h" | 9 #include "app/os_exchange_data.h" |
| 9 #include "base/i18n/rtl.h" | 10 #include "base/i18n/rtl.h" |
| 10 #include "base/keyboard_codes.h" | |
| 11 #include "base/time.h" | 11 #include "base/time.h" |
| 12 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
| 13 #include "gfx/canvas_skia.h" | 13 #include "gfx/canvas_skia.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 "base/keyboard_code_conversion_gtk.h" | 25 #include "app/keyboard_code_conversion_gtk.h" |
| 26 #endif | 26 #endif |
| 27 | 27 |
| 28 using base::Time; | 28 using base::Time; |
| 29 using base::TimeDelta; | 29 using base::TimeDelta; |
| 30 | 30 |
| 31 // Period of the scroll timer (in milliseconds). | 31 // Period of the scroll timer (in milliseconds). |
| 32 static const int kScrollTimerMS = 30; | 32 static const int kScrollTimerMS = 30; |
| 33 | 33 |
| 34 // Delay, in ms, between when menus are selected are moused over and the menu | 34 // Delay, in ms, between when menus are selected are moused over and the menu |
| 35 // appears. | 35 // appears. |
| (...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 806 | 806 |
| 807 #else | 807 #else |
| 808 bool MenuController::Dispatch(GdkEvent* event) { | 808 bool MenuController::Dispatch(GdkEvent* event) { |
| 809 if (exit_type_ == EXIT_ALL || exit_type_ == EXIT_DESTROYED) { | 809 if (exit_type_ == EXIT_ALL || exit_type_ == EXIT_DESTROYED) { |
| 810 gtk_main_do_event(event); | 810 gtk_main_do_event(event); |
| 811 return false; | 811 return false; |
| 812 } | 812 } |
| 813 | 813 |
| 814 switch (event->type) { | 814 switch (event->type) { |
| 815 case GDK_KEY_PRESS: { | 815 case GDK_KEY_PRESS: { |
| 816 base::KeyboardCode win_keycode = | 816 app::KeyboardCode win_keycode = |
| 817 base::WindowsKeyCodeForGdkKeyCode(event->key.keyval); | 817 app::WindowsKeyCodeForGdkKeyCode(event->key.keyval); |
| 818 | 818 |
| 819 if (!OnKeyDown(win_keycode)) | 819 if (!OnKeyDown(win_keycode)) |
| 820 return false; | 820 return false; |
| 821 | 821 |
| 822 // OnKeyDown may have set exit_type_. | 822 // OnKeyDown may have set exit_type_. |
| 823 if (exit_type_ != EXIT_NONE) | 823 if (exit_type_ != EXIT_NONE) |
| 824 return false; | 824 return false; |
| 825 | 825 |
| 826 guint32 keycode = gdk_keyval_to_unicode(event->key.keyval); | 826 guint32 keycode = gdk_keyval_to_unicode(event->key.keyval); |
| 827 if (keycode) | 827 if (keycode) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 846 | 846 |
| 847 bool MenuController::OnKeyDown(int key_code | 847 bool MenuController::OnKeyDown(int key_code |
| 848 #if defined(OS_WIN) | 848 #if defined(OS_WIN) |
| 849 , const MSG& msg | 849 , const MSG& msg |
| 850 #else | 850 #else |
| 851 #endif | 851 #endif |
| 852 ) { | 852 ) { |
| 853 DCHECK(blocking_run_); | 853 DCHECK(blocking_run_); |
| 854 | 854 |
| 855 switch (key_code) { | 855 switch (key_code) { |
| 856 case base::VKEY_UP: | 856 case app::VKEY_UP: |
| 857 IncrementSelection(-1); | 857 IncrementSelection(-1); |
| 858 break; | 858 break; |
| 859 | 859 |
| 860 case base::VKEY_DOWN: | 860 case app::VKEY_DOWN: |
| 861 IncrementSelection(1); | 861 IncrementSelection(1); |
| 862 break; | 862 break; |
| 863 | 863 |
| 864 // Handling of VK_RIGHT and VK_LEFT is different depending on the UI | 864 // Handling of VK_RIGHT and VK_LEFT is different depending on the UI |
| 865 // layout. | 865 // layout. |
| 866 case base::VKEY_RIGHT: | 866 case app::VKEY_RIGHT: |
| 867 if (base::i18n::IsRTL()) | 867 if (base::i18n::IsRTL()) |
| 868 CloseSubmenu(); | 868 CloseSubmenu(); |
| 869 else | 869 else |
| 870 OpenSubmenuChangeSelectionIfCan(); | 870 OpenSubmenuChangeSelectionIfCan(); |
| 871 break; | 871 break; |
| 872 | 872 |
| 873 case base::VKEY_LEFT: | 873 case app::VKEY_LEFT: |
| 874 if (base::i18n::IsRTL()) | 874 if (base::i18n::IsRTL()) |
| 875 OpenSubmenuChangeSelectionIfCan(); | 875 OpenSubmenuChangeSelectionIfCan(); |
| 876 else | 876 else |
| 877 CloseSubmenu(); | 877 CloseSubmenu(); |
| 878 break; | 878 break; |
| 879 | 879 |
| 880 case base::VKEY_SPACE: | 880 case app::VKEY_SPACE: |
| 881 SendAcceleratorToHotTrackedView(); | 881 SendAcceleratorToHotTrackedView(); |
| 882 break; | 882 break; |
| 883 | 883 |
| 884 case base::VKEY_RETURN: | 884 case app::VKEY_RETURN: |
| 885 if (pending_state_.item) { | 885 if (pending_state_.item) { |
| 886 if (pending_state_.item->HasSubmenu()) { | 886 if (pending_state_.item->HasSubmenu()) { |
| 887 OpenSubmenuChangeSelectionIfCan(); | 887 OpenSubmenuChangeSelectionIfCan(); |
| 888 } else if (!SendAcceleratorToHotTrackedView() && | 888 } else if (!SendAcceleratorToHotTrackedView() && |
| 889 pending_state_.item->IsEnabled()) { | 889 pending_state_.item->IsEnabled()) { |
| 890 Accept(pending_state_.item, 0); | 890 Accept(pending_state_.item, 0); |
| 891 return false; | 891 return false; |
| 892 } | 892 } |
| 893 } | 893 } |
| 894 break; | 894 break; |
| 895 | 895 |
| 896 case base::VKEY_ESCAPE: | 896 case app::VKEY_ESCAPE: |
| 897 if (!state_.item->GetParentMenuItem() || | 897 if (!state_.item->GetParentMenuItem() || |
| 898 (!state_.item->GetParentMenuItem()->GetParentMenuItem() && | 898 (!state_.item->GetParentMenuItem()->GetParentMenuItem() && |
| 899 (!state_.item->HasSubmenu() || | 899 (!state_.item->HasSubmenu() || |
| 900 !state_.item->GetSubmenu()->IsShowing()))) { | 900 !state_.item->GetSubmenu()->IsShowing()))) { |
| 901 // User pressed escape and only one menu is shown, cancel it. | 901 // User pressed escape and only one menu is shown, cancel it. |
| 902 Cancel(EXIT_OUTERMOST); | 902 Cancel(EXIT_OUTERMOST); |
| 903 return false; | 903 return false; |
| 904 } else { | 904 } else { |
| 905 CloseSubmenu(); | 905 CloseSubmenu(); |
| 906 } | 906 } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 949 instance_count--; | 949 instance_count--; |
| 950 DLOG(INFO) << "destroyed MC, count=" << instance_count; | 950 DLOG(INFO) << "destroyed MC, count=" << instance_count; |
| 951 #endif | 951 #endif |
| 952 } | 952 } |
| 953 | 953 |
| 954 bool MenuController::SendAcceleratorToHotTrackedView() { | 954 bool MenuController::SendAcceleratorToHotTrackedView() { |
| 955 View* hot_view = GetFirstHotTrackedView(pending_state_.item); | 955 View* hot_view = GetFirstHotTrackedView(pending_state_.item); |
| 956 if (!hot_view) | 956 if (!hot_view) |
| 957 return false; | 957 return false; |
| 958 | 958 |
| 959 Accelerator accelerator(base::VKEY_RETURN, false, false, false); | 959 Accelerator accelerator(app::VKEY_RETURN, false, false, false); |
| 960 hot_view->AcceleratorPressed(accelerator); | 960 hot_view->AcceleratorPressed(accelerator); |
| 961 hot_view->SetHotTracked(true); | 961 hot_view->SetHotTracked(true); |
| 962 return true; | 962 return true; |
| 963 } | 963 } |
| 964 | 964 |
| 965 void MenuController::UpdateInitialLocation( | 965 void MenuController::UpdateInitialLocation( |
| 966 const gfx::Rect& bounds, | 966 const gfx::Rect& bounds, |
| 967 MenuItemView::AnchorPosition position) { | 967 MenuItemView::AnchorPosition position) { |
| 968 pending_state_.initial_bounds = bounds; | 968 pending_state_.initial_bounds = bounds; |
| 969 if (bounds.height() > 1) { | 969 if (bounds.height() > 1) { |
| (...skipping 794 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1764 | 1764 |
| 1765 MouseEvent release_event(Event::ET_MOUSE_RELEASED, -1, -1, 0); | 1765 MouseEvent release_event(Event::ET_MOUSE_RELEASED, -1, -1, 0); |
| 1766 // Reset the active_mouse_view_ before sending mouse released. That way if if | 1766 // Reset the active_mouse_view_ before sending mouse released. That way if if |
| 1767 // calls back to use we aren't in a weird state. | 1767 // calls back to use we aren't in a weird state. |
| 1768 View* active_view = active_mouse_view_; | 1768 View* active_view = active_mouse_view_; |
| 1769 active_mouse_view_ = NULL; | 1769 active_mouse_view_ = NULL; |
| 1770 active_view->OnMouseReleased(release_event, true); | 1770 active_view->OnMouseReleased(release_event, true); |
| 1771 } | 1771 } |
| 1772 | 1772 |
| 1773 } // namespace views | 1773 } // namespace views |
| OLD | NEW |