add-flag-to-scroll-tabs.patch 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. --- a/chrome/browser/about_flags.cc
  2. +++ b/chrome/browser/about_flags.cc
  3. @@ -272,6 +272,16 @@ const FeatureEntry::Choice kShowAvatarBu
  4. "never"}
  5. };
  6. +const FeatureEntry::Choice kScrollEventChangesTab[] = {
  7. + {flags_ui::kGenericExperimentChoiceDefault, "", ""},
  8. + {"Always",
  9. + "scroll-tabs",
  10. + "always"},
  11. + {"Never",
  12. + "scroll-tabs",
  13. + "never"}
  14. +};
  15. +
  16. const FeatureEntry::Choice kTouchEventFeatureDetectionChoices[] = {
  17. {flags_ui::kGenericExperimentChoiceDisabled, "", ""},
  18. {flags_ui::kGenericExperimentChoiceEnabled,
  19. @@ -3922,6 +3932,11 @@ const FeatureEntry kFeatureEntries[] = {
  20. FEATURE_VALUE_TYPE(
  21. autofill::features::kAutofillEnableAccountWalletStorage)},
  22. + {"scroll-tabs",
  23. + "Scroll switches tab",
  24. + "Switch to the left/right tab if the wheel-scroll happens over the tabstrip, or the empty space beside the tabstrip.", kOsDesktop,
  25. + MULTI_VALUE_TYPE(kScrollEventChangesTab)},
  26. +
  27. #if defined(OS_CHROMEOS)
  28. {"enable-zero-state-suggestions",
  29. flag_descriptions::kEnableZeroStateSuggestionsName,
  30. --- a/chrome/browser/ui/views/frame/browser_root_view.cc
  31. +++ b/chrome/browser/ui/views/frame/browser_root_view.cc
  32. @@ -9,6 +9,7 @@
  33. #include <utility>
  34. #include "base/bind.h"
  35. +#include "base/command_line.h"
  36. #include "base/metrics/user_metrics.h"
  37. #include "base/task/post_task.h"
  38. #include "base/task/thread_pool.h"
  39. @@ -100,6 +101,18 @@ int GetDropEffect(const ui::DropTargetEv
  40. return ui::DragDropTypes::DRAG_MOVE;
  41. }
  42. +bool ShouldScrollChangesTab() {
  43. + const std::string flag_value =
  44. + base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("scroll-tabs");
  45. +
  46. + if (flag_value == "always")
  47. + return true;
  48. + else if (flag_value == "never")
  49. + return false;
  50. +
  51. + return browser_defaults::kScrollEventChangesTab;
  52. +}
  53. +
  54. } // namespace
  55. BrowserRootView::DropInfo::DropInfo() = default;
  56. @@ -114,7 +127,9 @@ const char BrowserRootView::kViewClassNa
  57. BrowserRootView::BrowserRootView(BrowserView* browser_view,
  58. views::Widget* widget)
  59. - : views::internal::RootView(widget), browser_view_(browser_view) {}
  60. + : views::internal::RootView(widget), browser_view_(browser_view) {
  61. + scroll_event_changes_tab_ = ShouldScrollChangesTab();
  62. +}
  63. BrowserRootView::~BrowserRootView() {
  64. // It's possible to destroy the browser while a drop is active. In this case,
  65. @@ -259,7 +274,7 @@ const char* BrowserRootView::GetClassNam
  66. }
  67. bool BrowserRootView::OnMouseWheel(const ui::MouseWheelEvent& event) {
  68. - if (browser_defaults::kScrollEventChangesTab) {
  69. + if (scroll_event_changes_tab_) {
  70. // Switch to the left/right tab if the wheel-scroll happens over the
  71. // tabstrip, or the empty space beside the tabstrip.
  72. views::View* hit_view = GetEventHandlerForPoint(event.location());
  73. --- a/chrome/browser/ui/views/frame/browser_root_view.h
  74. +++ b/chrome/browser/ui/views/frame/browser_root_view.h
  75. @@ -129,6 +129,8 @@ class BrowserRootView : public views::in
  76. int scroll_remainder_x_ = 0;
  77. int scroll_remainder_y_ = 0;
  78. + bool scroll_event_changes_tab_ = false;
  79. +
  80. std::unique_ptr<DropInfo> drop_info_;
  81. base::WeakPtrFactory<BrowserRootView> weak_ptr_factory_{this};