From c4944c3a238c1e9900539ca863465d590ed73b1b Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Fri, 28 Apr 2023 18:05:28 -0500 Subject: [PATCH] Move the Close... actions to a nested menu on the tab (#15250) A resurrection of the original nested "Close" menu from #7728. We discovered that nested flyouts crash in #8238. Those are fixed now though! So we can bring this back. This also includes the "Close Pane" item from #15198. --- src/cascadia/TerminalApp/TabBase.cpp | 22 ++++++++++++---------- src/cascadia/TerminalApp/TabBase.h | 2 +- src/cascadia/TerminalApp/TerminalTab.cpp | 6 ++++-- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/cascadia/TerminalApp/TabBase.cpp b/src/cascadia/TerminalApp/TabBase.cpp index 32627a3b925..00aa0882e13 100644 --- a/src/cascadia/TerminalApp/TabBase.cpp +++ b/src/cascadia/TerminalApp/TabBase.cpp @@ -70,8 +70,9 @@ namespace winrt::TerminalApp::implementation // Arguments: // - flyout - the menu flyout to which the close items must be appended // Return Value: - // - - void TabBase::_AppendCloseMenuItems(winrt::Windows::UI::Xaml::Controls::MenuFlyout flyout) + // - the sub-item that we use for all the nested "close" entries. This + // enables subclasses to add their own entries to this menu. + winrt::Windows::UI::Xaml::Controls::MenuFlyoutSubItem TabBase::_AppendCloseMenuItems(winrt::Windows::UI::Xaml::Controls::MenuFlyout flyout) { auto weakThis{ get_weak() }; @@ -120,15 +121,16 @@ namespace winrt::TerminalApp::implementation WUX::Controls::ToolTipService::SetToolTip(closeTabMenuItem, box_value(closeTabToolTip)); Automation::AutomationProperties::SetHelpText(closeTabMenuItem, closeTabToolTip); - // GH#8238 append the close menu items to the flyout itself until crash in XAML is fixed - //Controls::MenuFlyoutSubItem closeSubMenu; - //closeSubMenu.Text(RS_(L"TabCloseSubMenu")); - //closeSubMenu.Items().Append(_closeTabsAfterMenuItem); - //closeSubMenu.Items().Append(_closeOtherTabsMenuItem); - //flyout.Items().Append(closeSubMenu); - flyout.Items().Append(_closeTabsAfterMenuItem); - flyout.Items().Append(_closeOtherTabsMenuItem); + // Create a sub-menu for our extended close items. + Controls::MenuFlyoutSubItem closeSubMenu; + closeSubMenu.Text(RS_(L"TabCloseSubMenu")); + closeSubMenu.Items().Append(_closeTabsAfterMenuItem); + closeSubMenu.Items().Append(_closeOtherTabsMenuItem); + flyout.Items().Append(closeSubMenu); + flyout.Items().Append(closeTabMenuItem); + + return closeSubMenu; } // Method Description: diff --git a/src/cascadia/TerminalApp/TabBase.h b/src/cascadia/TerminalApp/TabBase.h index 1832ebf16f3..24ac6d2da6f 100644 --- a/src/cascadia/TerminalApp/TabBase.h +++ b/src/cascadia/TerminalApp/TabBase.h @@ -65,7 +65,7 @@ namespace winrt::TerminalApp::implementation virtual void _MakeTabViewItem(); - void _AppendCloseMenuItems(winrt::Windows::UI::Xaml::Controls::MenuFlyout flyout); + winrt::Windows::UI::Xaml::Controls::MenuFlyoutSubItem _AppendCloseMenuItems(winrt::Windows::UI::Xaml::Controls::MenuFlyout flyout); void _EnableCloseMenuItems(); void _CloseTabsAfter(); void _CloseOtherTabs(); diff --git a/src/cascadia/TerminalApp/TerminalTab.cpp b/src/cascadia/TerminalApp/TerminalTab.cpp index 1c33431f80c..28f9152794b 100644 --- a/src/cascadia/TerminalApp/TerminalTab.cpp +++ b/src/cascadia/TerminalApp/TerminalTab.cpp @@ -1404,7 +1404,7 @@ namespace winrt::TerminalApp::implementation contextMenuFlyout.Items().Append(renameTabMenuItem); contextMenuFlyout.Items().Append(duplicateTabMenuItem); contextMenuFlyout.Items().Append(splitTabMenuItem); - contextMenuFlyout.Items().Append(closePaneMenuItem); + contextMenuFlyout.Items().Append(exportTabMenuItem); contextMenuFlyout.Items().Append(findMenuItem); contextMenuFlyout.Items().Append(menuSeparator); @@ -1423,7 +1423,9 @@ namespace winrt::TerminalApp::implementation } } }); - _AppendCloseMenuItems(contextMenuFlyout); + auto closeSubMenu = _AppendCloseMenuItems(contextMenuFlyout); + closeSubMenu.Items().Append(closePaneMenuItem); + TabViewItem().ContextFlyout(contextMenuFlyout); }