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

Side by Side Diff: chrome/browser/ui/views/download/download_item_view.cc

Issue 16979002: Add ContextMenuSourceType to views::ContextMenuController::ShowContextMenuForView. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: patch Created 7 years, 6 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) 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 "chrome/browser/ui/views/download/download_item_view.h" 5 #include "chrome/browser/ui/views/download/download_item_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 HandleClickEvent(*event, true); 510 HandleClickEvent(*event, true);
511 event->SetHandled(); 511 event->SetHandled();
512 return; 512 return;
513 } 513 }
514 514
515 SetState(NORMAL, NORMAL); 515 SetState(NORMAL, NORMAL);
516 views::View::OnGestureEvent(event); 516 views::View::OnGestureEvent(event);
517 } 517 }
518 518
519 void DownloadItemView::ShowContextMenuForView(View* source, 519 void DownloadItemView::ShowContextMenuForView(View* source,
520 const gfx::Point& point) { 520 const gfx::Point& point,
521 ui::MenuSourceType source_type) {
521 // |point| is in screen coordinates. So convert it to local coordinates first. 522 // |point| is in screen coordinates. So convert it to local coordinates first.
522 gfx::Point local_point = point; 523 gfx::Point local_point = point;
523 ConvertPointFromScreen(this, &local_point); 524 ConvertPointFromScreen(this, &local_point);
524 ShowContextMenuImpl(local_point, true); 525 ShowContextMenuImpl(local_point, source_type);
525 } 526 }
526 527
527 void DownloadItemView::ButtonPressed( 528 void DownloadItemView::ButtonPressed(
528 views::Button* sender, const ui::Event& event) { 529 views::Button* sender, const ui::Event& event) {
529 if (sender == discard_button_) { 530 if (sender == discard_button_) {
530 if (model_.ShouldAllowDownloadFeedback() && BeginDownloadFeedback()) 531 if (model_.ShouldAllowDownloadFeedback() && BeginDownloadFeedback())
531 return; 532 return;
532 UMA_HISTOGRAM_LONG_TIMES("clickjacking.discard_download", 533 UMA_HISTOGRAM_LONG_TIMES("clickjacking.discard_download",
533 base::Time::Now() - creation_time_); 534 base::Time::Now() - creation_time_);
534 download()->Remove(); 535 download()->Remove();
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 } 883 }
883 884
884 void DownloadItemView::UpdateColorsFromTheme() { 885 void DownloadItemView::UpdateColorsFromTheme() {
885 if (dangerous_download_label_ && GetThemeProvider()) { 886 if (dangerous_download_label_ && GetThemeProvider()) {
886 dangerous_download_label_->SetEnabledColor( 887 dangerous_download_label_->SetEnabledColor(
887 GetThemeProvider()->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT)); 888 GetThemeProvider()->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT));
888 } 889 }
889 } 890 }
890 891
891 void DownloadItemView::ShowContextMenuImpl(const gfx::Point& p, 892 void DownloadItemView::ShowContextMenuImpl(const gfx::Point& p,
892 bool is_mouse_gesture) { 893 ui::MenuSourceType source_type) {
893 gfx::Point point = p; 894 gfx::Point point = p;
894 gfx::Size size; 895 gfx::Size size;
895 896
896 // Similar hack as in MenuButton. 897 // Similar hack as in MenuButton.
897 // We're about to show the menu from a mouse press. By showing from the 898 // We're about to show the menu from a mouse press. By showing from the
898 // mouse press event we block RootView in mouse dispatching. This also 899 // mouse press event we block RootView in mouse dispatching. This also
899 // appears to cause RootView to get a mouse pressed BEFORE the mouse 900 // appears to cause RootView to get a mouse pressed BEFORE the mouse
900 // release is seen, which means RootView sends us another mouse press no 901 // release is seen, which means RootView sends us another mouse press no
901 // matter where the user pressed. To force RootView to recalculate the 902 // matter where the user pressed. To force RootView to recalculate the
902 // mouse target during the mouse press we explicitly set the mouse handler 903 // mouse target during the mouse press we explicitly set the mouse handler
903 // to NULL. 904 // to NULL.
904 static_cast<views::internal::RootView*>(GetWidget()->GetRootView())-> 905 static_cast<views::internal::RootView*>(GetWidget()->GetRootView())->
905 SetMouseHandler(NULL); 906 SetMouseHandler(NULL);
906 907
907 // If |is_mouse_gesture| is false, |p| is ignored. The menu is shown aligned 908 // If |is_mouse_gesture| is false, |p| is ignored. The menu is shown aligned
908 // to drop down arrow button. 909 // to drop down arrow button.
909 if (!is_mouse_gesture) { 910 if (!source_type == ui::MENU_SOURCE_MOUSE) {
910 drop_down_pressed_ = true; 911 drop_down_pressed_ = true;
911 SetState(NORMAL, PUSHED); 912 SetState(NORMAL, PUSHED);
912 point.SetPoint(drop_down_x_left_, box_y_); 913 point.SetPoint(drop_down_x_left_, box_y_);
913 size.SetSize(drop_down_x_right_ - drop_down_x_left_, box_height_); 914 size.SetSize(drop_down_x_right_ - drop_down_x_left_, box_height_);
914 } 915 }
915 // Post a task to release the button. When we call the Run method on the menu 916 // Post a task to release the button. When we call the Run method on the menu
916 // below, it runs an inner message loop that might cause us to be deleted. 917 // below, it runs an inner message loop that might cause us to be deleted.
917 // Posting a task with a WeakPtr lets us safely handle the button release. 918 // Posting a task with a WeakPtr lets us safely handle the button release.
918 base::MessageLoop::current()->PostNonNestableTask( 919 base::MessageLoop::current()->PostNonNestableTask(
919 FROM_HERE, 920 FROM_HERE,
920 base::Bind(&DownloadItemView::ReleaseDropDown, 921 base::Bind(&DownloadItemView::ReleaseDropDown,
921 weak_ptr_factory_.GetWeakPtr())); 922 weak_ptr_factory_.GetWeakPtr()));
922 views::View::ConvertPointToScreen(this, &point); 923 views::View::ConvertPointToScreen(this, &point);
923 924
924 if (!context_menu_.get()) { 925 if (!context_menu_.get()) {
925 context_menu_.reset( 926 context_menu_.reset(
926 new DownloadShelfContextMenuView(download(), shelf_->GetNavigator())); 927 new DownloadShelfContextMenuView(download(), shelf_->GetNavigator()));
927 } 928 }
928 context_menu_->Run(GetWidget()->GetTopLevelWidget(), 929 context_menu_->Run(GetWidget()->GetTopLevelWidget(),
929 gfx::Rect(point, size)); 930 gfx::Rect(point, size), source_type);
930 // We could be deleted now. 931 // We could be deleted now.
931 } 932 }
932 933
933 void DownloadItemView::HandlePressEvent(const ui::LocatedEvent& event, 934 void DownloadItemView::HandlePressEvent(const ui::LocatedEvent& event,
934 bool active_event) { 935 bool active_event) {
935 // The event should not activate us in dangerous mode. 936 // The event should not activate us in dangerous mode.
936 if (mode_ == DANGEROUS_MODE) 937 if (mode_ == DANGEROUS_MODE)
937 return; 938 return;
938 939
939 // Stop any completion animation. 940 // Stop any completion animation.
940 if (complete_animation_.get() && complete_animation_->is_animating()) 941 if (complete_animation_.get() && complete_animation_->is_animating())
941 complete_animation_->End(); 942 complete_animation_->End();
942 943
943 if (active_event) { 944 if (active_event) {
944 if (InDropDownButtonXCoordinateRange(event.x())) { 945 if (InDropDownButtonXCoordinateRange(event.x())) {
945 drop_down_pressed_ = true; 946 drop_down_pressed_ = true;
946 SetState(NORMAL, PUSHED); 947 SetState(NORMAL, PUSHED);
947 // We are setting is_mouse_gesture to false when calling ShowContextMenu 948 // We are setting is_mouse_gesture to false when calling ShowContextMenu
948 // so that the positioning of the context menu will be similar to a 949 // so that the positioning of the context menu will be similar to a
949 // keyboard invocation. I.e. we want the menu to always be positioned 950 // keyboard invocation. I.e. we want the menu to always be positioned
950 // next to the drop down button instead of the next to the pointer. 951 // next to the drop down button instead of the next to the pointer.
951 ShowContextMenuImpl(event.location(), false); 952 ShowContextMenuImpl(event.location(), ui::MENU_SOURCE_KEYBOARD);
952 // Once called, it is possible that *this was deleted (e.g.: due to 953 // Once called, it is possible that *this was deleted (e.g.: due to
953 // invoking the 'Discard' action.) 954 // invoking the 'Discard' action.)
954 } else if (!IsShowingWarningDialog()) { 955 } else if (!IsShowingWarningDialog()) {
955 SetState(PUSHED, NORMAL); 956 SetState(PUSHED, NORMAL);
956 } 957 }
957 } 958 }
958 } 959 }
959 960
960 void DownloadItemView::HandleClickEvent(const ui::LocatedEvent& event, 961 void DownloadItemView::HandleClickEvent(const ui::LocatedEvent& event,
961 bool active_event) { 962 bool active_event) {
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1241 void DownloadItemView::AnimateStateTransition(State from, State to, 1242 void DownloadItemView::AnimateStateTransition(State from, State to,
1242 ui::SlideAnimation* animation) { 1243 ui::SlideAnimation* animation) {
1243 if (from == NORMAL && to == HOT) { 1244 if (from == NORMAL && to == HOT) {
1244 animation->Show(); 1245 animation->Show();
1245 } else if (from == HOT && to == NORMAL) { 1246 } else if (from == HOT && to == NORMAL) {
1246 animation->Hide(); 1247 animation->Hide();
1247 } else if (from != to) { 1248 } else if (from != to) {
1248 animation->Reset((to == HOT) ? 1.0 : 0.0); 1249 animation->Reset((to == HOT) ? 1.0 : 0.0);
1249 } 1250 }
1250 } 1251 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698