|
36 | 36 | #include "chrome/browser/ui/browser_command_controller.h"
|
37 | 37 | #include "chrome/browser/ui/browser_commands.h"
|
38 | 38 | #include "chrome/browser/ui/browser_window/public/browser_window_features.h"
|
| 39 | +#include "chrome/browser/ui/tabs/split_tab_visual_data.h" |
39 | 40 | #include "chrome/browser/ui/tabs/tab_change_type.h"
|
40 | 41 | #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
41 | 42 | #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
|
| 43 | +#include "chrome/browser/ui/ui_features.h" |
42 | 44 | #include "chrome/common/pref_names.h"
|
43 | 45 | #include "components/prefs/pref_service.h"
|
44 | 46 | #include "components/sync/base/command_line_switches.h"
|
@@ -136,6 +138,40 @@ void BraveBrowserCommandController::OnTabStripModelChanged(
|
136 | 138 | selection.active_tab_changed()) {
|
137 | 139 | UpdateCommandForSplitView();
|
138 | 140 | }
|
| 141 | + |
| 142 | + if (base::FeatureList::IsEnabled(features::kSideBySide) && |
| 143 | + browser_->is_type_normal() && selection.active_tab_changed()) { |
| 144 | + UpdateCommandForSplitViewWithSideBySide(); |
| 145 | + } |
| 146 | +} |
| 147 | + |
| 148 | +void BraveBrowserCommandController::OnSplitTabCreated( |
| 149 | + std::vector<std::pair<tabs::TabInterface*, int>> tabs, |
| 150 | + split_tabs::SplitTabId split_id, |
| 151 | + SplitTabAddReason reason, |
| 152 | + split_tabs::SplitTabVisualData visual_data) { |
| 153 | + UpdateCommandForSplitViewWithSideBySide(); |
| 154 | +} |
| 155 | + |
| 156 | +void BraveBrowserCommandController::OnSplitTabRemoved( |
| 157 | + std::vector<std::pair<tabs::TabInterface*, int>> tabs, |
| 158 | + split_tabs::SplitTabId split_id, |
| 159 | + SplitTabRemoveReason reason) { |
| 160 | + UpdateCommandForSplitViewWithSideBySide(); |
| 161 | +} |
| 162 | + |
| 163 | +void BraveBrowserCommandController::OnSplitTabVisualsChanged( |
| 164 | + split_tabs::SplitTabId split_id, |
| 165 | + split_tabs::SplitTabVisualData old_visual_data, |
| 166 | + split_tabs::SplitTabVisualData new_visual_data) { |
| 167 | + UpdateCommandForSplitViewWithSideBySide(); |
| 168 | +} |
| 169 | + |
| 170 | +void BraveBrowserCommandController::OnSplitTabContentsUpdated( |
| 171 | + split_tabs::SplitTabId split_id, |
| 172 | + std::vector<std::pair<tabs::TabInterface*, int>> prev_tabs, |
| 173 | + std::vector<std::pair<tabs::TabInterface*, int>> new_tabs) { |
| 174 | + UpdateCommandForSplitViewWithSideBySide(); |
139 | 175 | }
|
140 | 176 |
|
141 | 177 | void BraveBrowserCommandController::OnTabGroupChanged(
|
@@ -466,6 +502,20 @@ void BraveBrowserCommandController::UpdateCommandForSplitView() {
|
466 | 502 | }
|
467 | 503 | }
|
468 | 504 |
|
| 505 | +void BraveBrowserCommandController::UpdateCommandForSplitViewWithSideBySide() { |
| 506 | + UpdateCommandEnabled( |
| 507 | + IDC_NEW_SPLIT_VIEW, |
| 508 | + brave::CanOpenNewSplitTabsWithSideBySide(base::to_address(browser_))); |
| 509 | + UpdateCommandEnabled(IDC_TILE_TABS, brave::CanSplitTabsWithSideBySide( |
| 510 | + base::to_address(browser_))); |
| 511 | + |
| 512 | + const auto is_split_tab = brave::IsSplitTabs(base::to_address(browser_)); |
| 513 | + for (auto command_enabled_when_tab_is_split : |
| 514 | + {IDC_BREAK_TILE, IDC_SWAP_SPLIT_VIEW}) { |
| 515 | + UpdateCommandEnabled(command_enabled_when_tab_is_split, is_split_tab); |
| 516 | + } |
| 517 | +} |
| 518 | + |
469 | 519 | void BraveBrowserCommandController::UpdateCommandForBraveSync() {
|
470 | 520 | UpdateCommandEnabled(IDC_SHOW_BRAVE_SYNC, true);
|
471 | 521 | }
|
@@ -687,18 +737,42 @@ bool BraveBrowserCommandController::ExecuteBraveCommandWithDisposition(
|
687 | 737 | case IDC_WINDOW_BRING_ALL_TABS:
|
688 | 738 | brave::BringAllTabs(&*browser_);
|
689 | 739 | break;
|
690 |
| - case IDC_NEW_SPLIT_VIEW: |
691 |
| - brave::NewSplitViewForTab(&*browser_); |
| 740 | + case IDC_NEW_SPLIT_VIEW: { |
| 741 | + if (tabs::features::IsBraveSplitViewEnabled()) { |
| 742 | + brave::NewSplitViewForTab(&*browser_); |
| 743 | + } else { |
| 744 | + CHECK(base::FeatureList::IsEnabled(features::kSideBySide)); |
| 745 | + brave::SplitTabsWithSideBySide(base::to_address(browser_)); |
| 746 | + } |
692 | 747 | break;
|
693 |
| - case IDC_TILE_TABS: |
694 |
| - brave::TileTabs(&*browser_); |
| 748 | + } |
| 749 | + case IDC_TILE_TABS: { |
| 750 | + if (tabs::features::IsBraveSplitViewEnabled()) { |
| 751 | + brave::TileTabs(&*browser_); |
| 752 | + } else { |
| 753 | + CHECK(base::FeatureList::IsEnabled(features::kSideBySide)); |
| 754 | + brave::NewSplitTabsForTabWithSideBySide(base::to_address(browser_)); |
| 755 | + } |
695 | 756 | break;
|
696 |
| - case IDC_BREAK_TILE: |
697 |
| - brave::BreakTiles(&*browser_); |
| 757 | + } |
| 758 | + case IDC_BREAK_TILE: { |
| 759 | + if (tabs::features::IsBraveSplitViewEnabled()) { |
| 760 | + brave::BreakTiles(&*browser_); |
| 761 | + } else { |
| 762 | + CHECK(base::FeatureList::IsEnabled(features::kSideBySide)); |
| 763 | + brave::RemoveSplitWithSideBySide(base::to_address(browser_)); |
| 764 | + } |
698 | 765 | break;
|
699 |
| - case IDC_SWAP_SPLIT_VIEW: |
700 |
| - brave::SwapTabsInTile(&*browser_); |
| 766 | + } |
| 767 | + case IDC_SWAP_SPLIT_VIEW: { |
| 768 | + if (tabs::features::IsBraveSplitViewEnabled()) { |
| 769 | + brave::SwapTabsInTile(&*browser_); |
| 770 | + } else { |
| 771 | + CHECK(base::FeatureList::IsEnabled(features::kSideBySide)); |
| 772 | + brave::SwapTabsInSplitWithSideBySide(base::to_address(browser_)); |
| 773 | + } |
701 | 774 | break;
|
| 775 | + } |
702 | 776 | default:
|
703 | 777 | LOG(WARNING) << "Received Unimplemented Command: " << id;
|
704 | 778 | break;
|
|
0 commit comments