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. @@ -248,6 +248,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. @@ -3601,6 +3611,11 @@ const FeatureEntry kFeatureEntries[] = {
  20. kOsAndroid, FEATURE_VALUE_TYPE(safe_browsing::kUseLocalBlacklistsV2)},
  21. #endif // defined(OS_ANDROID)
  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-native-google-assistant",
  29. flag_descriptions::kEnableGoogleAssistantName,
  30. --- a/chrome/browser/ui/views/frame/browser_root_view.cc
  31. +++ b/chrome/browser/ui/views/frame/browser_root_view.cc
  32. @@ -8,6 +8,7 @@
  33. #include <string>
  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 "chrome/browser/autocomplete/autocomplete_classifier_factory.h"
  39. @@ -91,6 +92,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. @@ -105,7 +118,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() = default;
  64. @@ -238,7 +253,7 @@ const char* BrowserRootView::GetClassNam
  65. }
  66. bool BrowserRootView::OnMouseWheel(const ui::MouseWheelEvent& event) {
  67. - if (browser_defaults::kScrollEventChangesTab) {
  68. + if (scroll_event_changes_tab_) {
  69. // Switch to the left/right tab if the wheel-scroll happens over the
  70. // tabstrip, or the empty space beside the tabstrip.
  71. views::View* hit_view = GetEventHandlerForPoint(event.location());
  72. --- a/chrome/browser/ui/views/frame/browser_root_view.h
  73. +++ b/chrome/browser/ui/views/frame/browser_root_view.h
  74. @@ -125,6 +125,8 @@ class BrowserRootView : public views::in
  75. int scroll_remainder_x_ = 0;
  76. int scroll_remainder_y_ = 0;
  77. + bool scroll_event_changes_tab_ = false;
  78. +
  79. std::unique_ptr<DropInfo> drop_info_;
  80. base::WeakPtrFactory<BrowserRootView> weak_ptr_factory_{this};