From 18b8b6c7c24ab5eca73decbdf663dacddc54f3e3 Mon Sep 17 00:00:00 2001 From: Pankaj Bhojwani Date: Wed, 3 Sep 2025 13:37:59 -0700 Subject: [PATCH 1/6] init --- .../QueryExtension/ExtensionPalette.cpp | 59 +++++++++---------- .../QueryExtension/ExtensionPalette.h | 4 +- .../QueryExtension/ExtensionPalette.xaml | 12 ++-- .../Resources/en-US/Resources.resw | 4 ++ src/cascadia/TerminalApp/TerminalPage.xaml | 8 ++- 5 files changed, 49 insertions(+), 38 deletions(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.cpp b/src/cascadia/QueryExtension/ExtensionPalette.cpp index ee693299d00..935d1226710 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.cpp +++ b/src/cascadia/QueryExtension/ExtensionPalette.cpp @@ -54,7 +54,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation // Only let this succeed once. _loadedRevoker.revoke(); - _setFocusAndPlaceholderTextHelper(); + _setFocusAndPlaceholderTextHelper(nullptr, nullptr); const auto lmProviderName = _lmProvider ? _lmProvider.BrandingData().Name() : winrt::hstring{}; TraceLoggingWrite( @@ -75,7 +75,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation // Force immediate binding update so we can select an item Bindings->Update(); - _setFocusAndPlaceholderTextHelper(); + _setFocusAndPlaceholderTextHelper(nullptr, nullptr); const auto lmProviderName = _lmProvider ? _lmProvider.BrandingData().Name() : winrt::hstring{}; TraceLoggingWrite( @@ -214,7 +214,6 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation pos += 1; // Move past the replaced character } _InputSuggestionRequestedHandlers(*this, winrt::to_hstring(suggestion)); - _close(); const auto lmProviderName = _lmProvider ? _lmProvider.BrandingData().Name() : winrt::hstring{}; TraceLoggingWrite( @@ -244,21 +243,31 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation TelemetryPrivacyDataTag(PDT_ProductAndServiceUsage)); } - void ExtensionPalette::_setFocusAndPlaceholderTextHelper() + void ExtensionPalette::_setFocusAndPlaceholderTextHelper(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::RoutedEventArgs& args) { - // We are visible, set the placeholder text so the user knows what the shell context is - _ActiveControlInfoRequestedHandlers(nullptr, nullptr); - - // Now that we have the context, make sure the lmProvider knows it too - if (_lmProvider) - { - const auto context = winrt::make(_ActiveCommandline); - _lmProvider.SetContext(std::move(context)); - _queryBox().Focus(FocusState::Programmatic); - } - else + // There are 2 ways this function is called - internally when the palette is loaded/set to visible, + // or from a GotFocus event + // If called internally, args is set to nullptr and we always want to send the focus to the query box + // If called from a GotFocus event, there is the possibility that the original source of the event is + // not the extension palette itself but one of the controls within the palette (for example, one of the + // buttons). This is because GotFocus is a bubbled event that eventually reaches the parent object (the + // palette). We only want to handle this if the original source is the palette iself. + if (!args || (args && args.OriginalSource().try_as())) { - SetUpProviderButton().Focus(FocusState::Programmatic); + // We are visible, set the placeholder text so the user knows what the shell context is + _ActiveControlInfoRequestedHandlers(nullptr, nullptr); + + // Now that we have the context, make sure the lmProvider knows it too + if (_lmProvider) + { + const auto context = winrt::make(_ActiveCommandline); + _lmProvider.SetContext(std::move(context)); + _queryBox().Focus(FocusState::Programmatic); + } + else + { + SetUpProviderButton().Focus(FocusState::Programmatic); + } } } @@ -300,26 +309,16 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation } } - // Method Description: - // - This event is triggered when someone clicks anywhere in the bounds of - // the window that's _not_ the query palette UI. When that happens, - // we'll want to dismiss the palette. - // Arguments: - // - - // Return Value: - // - - void ExtensionPalette::_rootPointerPressed(const Windows::Foundation::IInspectable& /*sender*/, - const Windows::UI::Xaml::Input::PointerRoutedEventArgs& /*e*/) + void ExtensionPalette::_closeChat(const Windows::Foundation::IInspectable& /*sender*/, + const Windows::UI::Xaml::RoutedEventArgs& /*args*/) { - if (Visibility() != Visibility::Collapsed) - { - _close(); - } + _close(); } void ExtensionPalette::_backdropPointerPressed(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::Input::PointerRoutedEventArgs& e) { + _setFocusAndPlaceholderTextHelper(nullptr, nullptr); e.Handled(true); } diff --git a/src/cascadia/QueryExtension/ExtensionPalette.h b/src/cascadia/QueryExtension/ExtensionPalette.h index 0b4abee122f..3d6ec6571be 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.h +++ b/src/cascadia/QueryExtension/ExtensionPalette.h @@ -46,11 +46,11 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation winrt::hstring _getCurrentLocalTimeHelper(); void _splitResponseAndAddToChatHelper(const winrt::Microsoft::Terminal::Query::Extension::IResponse response); - void _setFocusAndPlaceholderTextHelper(); + void _setFocusAndPlaceholderTextHelper(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void _clearAndInitializeMessages(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void _exportMessagesToFile(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); - void _rootPointerPressed(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::Input::PointerRoutedEventArgs& e); + void _closeChat(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void _backdropPointerPressed(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::Input::PointerRoutedEventArgs& e); void _lostFocusHandler(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void _previewKeyDownHandler(const Windows::Foundation::IInspectable& sender, diff --git a/src/cascadia/QueryExtension/ExtensionPalette.xaml b/src/cascadia/QueryExtension/ExtensionPalette.xaml index 1cf33725200..e67c7dadc45 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.xaml +++ b/src/cascadia/QueryExtension/ExtensionPalette.xaml @@ -14,8 +14,6 @@ AllowFocusOnInteraction="True" AutomationProperties.Name="{x:Bind ControlName, Mode=OneWay}" IsTabStop="True" - LostFocus="_lostFocusHandler" - PointerPressed="_rootPointerPressed" PreviewKeyDown="_previewKeyDownHandler" TabNavigation="Cycle" mc:Ignorable="d"> @@ -178,14 +176,11 @@ @@ -341,6 +336,13 @@ Glyph="" /> + Export the message history to a text file Tooltip for the button that allows the user to export the message history. + + Close the chat pane + Tooltip for the button that allows the user to close the chat pane. + Take command of your Terminal. Ask Terminal Chat for assistance right in your terminal. Subheader of the AI chat box control. diff --git a/src/cascadia/TerminalApp/TerminalPage.xaml b/src/cascadia/TerminalApp/TerminalPage.xaml index a2d8ea85686..579ef0ce5ce 100644 --- a/src/cascadia/TerminalApp/TerminalPage.xaml +++ b/src/cascadia/TerminalApp/TerminalPage.xaml @@ -20,6 +20,10 @@ + + + + From 2aaaa541a96c3aea4629e1e675032e635e53bde2 Mon Sep 17 00:00:00 2001 From: Pankaj Bhojwani Date: Mon, 8 Sep 2025 13:43:33 -0700 Subject: [PATCH 2/6] context now updates correctly when query box is clicked directly --- .../QueryExtension/ExtensionPalette.cpp | 43 +++++++++---------- .../QueryExtension/ExtensionPalette.h | 1 + .../QueryExtension/ExtensionPalette.xaml | 1 + 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.cpp b/src/cascadia/QueryExtension/ExtensionPalette.cpp index 935d1226710..23d4828cb2a 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.cpp +++ b/src/cascadia/QueryExtension/ExtensionPalette.cpp @@ -243,31 +243,20 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation TelemetryPrivacyDataTag(PDT_ProductAndServiceUsage)); } - void ExtensionPalette::_setFocusAndPlaceholderTextHelper(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::RoutedEventArgs& args) + void ExtensionPalette::_setFocusAndPlaceholderTextHelper(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::RoutedEventArgs& /*args*/) { - // There are 2 ways this function is called - internally when the palette is loaded/set to visible, - // or from a GotFocus event - // If called internally, args is set to nullptr and we always want to send the focus to the query box - // If called from a GotFocus event, there is the possibility that the original source of the event is - // not the extension palette itself but one of the controls within the palette (for example, one of the - // buttons). This is because GotFocus is a bubbled event that eventually reaches the parent object (the - // palette). We only want to handle this if the original source is the palette iself. - if (!args || (args && args.OriginalSource().try_as())) - { - // We are visible, set the placeholder text so the user knows what the shell context is - _ActiveControlInfoRequestedHandlers(nullptr, nullptr); + _ActiveControlInfoRequestedHandlers(nullptr, nullptr); - // Now that we have the context, make sure the lmProvider knows it too - if (_lmProvider) - { - const auto context = winrt::make(_ActiveCommandline); - _lmProvider.SetContext(std::move(context)); - _queryBox().Focus(FocusState::Programmatic); - } - else - { - SetUpProviderButton().Focus(FocusState::Programmatic); - } + // Now that we have the context, make sure the lmProvider knows it too + if (_lmProvider) + { + const auto context = winrt::make(_ActiveCommandline); + _lmProvider.SetContext(std::move(context)); + _queryBox().Focus(FocusState::Programmatic); + } + else + { + SetUpProviderButton().Focus(FocusState::Programmatic); } } @@ -322,6 +311,14 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation e.Handled(true); } + void ExtensionPalette::_queryBoxGotFocusHandler(const Windows::Foundation::IInspectable& /*sender*/, + const Windows::UI::Xaml::RoutedEventArgs& /*args*/) + { + _ActiveControlInfoRequestedHandlers(nullptr, nullptr); + const auto context = winrt::make(_ActiveCommandline); + _lmProvider.SetContext(std::move(context)); + } + // Method Description: // - The purpose of this event handler is to hide the palette if it loses focus. // We say we lost focus if our root element and all its descendants lost focus. diff --git a/src/cascadia/QueryExtension/ExtensionPalette.h b/src/cascadia/QueryExtension/ExtensionPalette.h index 3d6ec6571be..3e5b0ea28dd 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.h +++ b/src/cascadia/QueryExtension/ExtensionPalette.h @@ -52,6 +52,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation void _exportMessagesToFile(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void _closeChat(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void _backdropPointerPressed(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::Input::PointerRoutedEventArgs& e); + void _queryBoxGotFocusHandler(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void _lostFocusHandler(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void _previewKeyDownHandler(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::Input::KeyRoutedEventArgs& e); diff --git a/src/cascadia/QueryExtension/ExtensionPalette.xaml b/src/cascadia/QueryExtension/ExtensionPalette.xaml index e67c7dadc45..10d13f3b0de 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.xaml +++ b/src/cascadia/QueryExtension/ExtensionPalette.xaml @@ -364,6 +364,7 @@ Margin="16,0,16,4" Padding="18,8,8,8" AcceptsReturn="True" + GotFocus="_queryBoxGotFocusHandler" IsSpellCheckEnabled="False" PlaceholderText="{x:Bind QueryBoxPlaceholderText}" Text="" From dcaffb5ab8c8c50ba865d60b98bcba90de3de169 Mon Sep 17 00:00:00 2001 From: Pankaj Bhojwani Date: Mon, 8 Sep 2025 14:15:15 -0700 Subject: [PATCH 3/6] undo this --- src/cascadia/QueryExtension/ExtensionPalette.cpp | 8 ++++---- src/cascadia/QueryExtension/ExtensionPalette.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.cpp b/src/cascadia/QueryExtension/ExtensionPalette.cpp index 23d4828cb2a..3fe5be5b889 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.cpp +++ b/src/cascadia/QueryExtension/ExtensionPalette.cpp @@ -54,7 +54,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation // Only let this succeed once. _loadedRevoker.revoke(); - _setFocusAndPlaceholderTextHelper(nullptr, nullptr); + _setFocusAndPlaceholderTextHelper(); const auto lmProviderName = _lmProvider ? _lmProvider.BrandingData().Name() : winrt::hstring{}; TraceLoggingWrite( @@ -75,7 +75,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation // Force immediate binding update so we can select an item Bindings->Update(); - _setFocusAndPlaceholderTextHelper(nullptr, nullptr); + _setFocusAndPlaceholderTextHelper(); const auto lmProviderName = _lmProvider ? _lmProvider.BrandingData().Name() : winrt::hstring{}; TraceLoggingWrite( @@ -243,7 +243,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation TelemetryPrivacyDataTag(PDT_ProductAndServiceUsage)); } - void ExtensionPalette::_setFocusAndPlaceholderTextHelper(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::RoutedEventArgs& /*args*/) + void ExtensionPalette::_setFocusAndPlaceholderTextHelper() { _ActiveControlInfoRequestedHandlers(nullptr, nullptr); @@ -307,7 +307,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation void ExtensionPalette::_backdropPointerPressed(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::Input::PointerRoutedEventArgs& e) { - _setFocusAndPlaceholderTextHelper(nullptr, nullptr); + _setFocusAndPlaceholderTextHelper(); e.Handled(true); } diff --git a/src/cascadia/QueryExtension/ExtensionPalette.h b/src/cascadia/QueryExtension/ExtensionPalette.h index 3e5b0ea28dd..c5cc93723c9 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.h +++ b/src/cascadia/QueryExtension/ExtensionPalette.h @@ -46,7 +46,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation winrt::hstring _getCurrentLocalTimeHelper(); void _splitResponseAndAddToChatHelper(const winrt::Microsoft::Terminal::Query::Extension::IResponse response); - void _setFocusAndPlaceholderTextHelper(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); + void _setFocusAndPlaceholderTextHelper(); void _clearAndInitializeMessages(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void _exportMessagesToFile(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); From ac5a399a63bffd2c48a7c9874700f012abf2ccdc Mon Sep 17 00:00:00 2001 From: Pankaj Bhojwani Date: Mon, 8 Sep 2025 14:25:08 -0700 Subject: [PATCH 4/6] bit more cleanup --- .../QueryExtension/ExtensionPalette.cpp | 68 ++----------------- .../QueryExtension/ExtensionPalette.h | 3 - 2 files changed, 4 insertions(+), 67 deletions(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.cpp b/src/cascadia/QueryExtension/ExtensionPalette.cpp index 3fe5be5b889..9a8932b5ba6 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.cpp +++ b/src/cascadia/QueryExtension/ExtensionPalette.cpp @@ -89,7 +89,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation } else { - _close(); + _closeChat(nullptr, nullptr); } }); } @@ -301,7 +301,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation void ExtensionPalette::_closeChat(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::RoutedEventArgs& /*args*/) { - _close(); + Visibility(Visibility::Collapsed); } void ExtensionPalette::_backdropPointerPressed(const Windows::Foundation::IInspectable& /*sender*/, @@ -319,53 +319,6 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation _lmProvider.SetContext(std::move(context)); } - // Method Description: - // - The purpose of this event handler is to hide the palette if it loses focus. - // We say we lost focus if our root element and all its descendants lost focus. - // This handler is invoked when our root element or some descendant loses focus. - // At this point we need to learn if the newly focused element belongs to this palette. - // To achieve this: - // - We start with the newly focused element and traverse its visual ancestors up to the Xaml root. - // - If one of the ancestors is this ExtensionPalette, then by our definition the focus is not lost - // - If we reach the Xaml root without meeting this ExtensionPalette, - // then the focus is not contained in it anymore and it should be dismissed - // Arguments: - // - - // Return Value: - // - - void ExtensionPalette::_lostFocusHandler(const Windows::Foundation::IInspectable& /*sender*/, - const Windows::UI::Xaml::RoutedEventArgs& /*args*/) - { - const auto flyout = _queryBox().ContextFlyout(); - if (flyout && flyout.IsOpen()) - { - return; - } - - auto root = this->XamlRoot(); - if (!root) - { - return; - } - - auto focusedElementOrAncestor = Input::FocusManager::GetFocusedElement(root).try_as(); - while (focusedElementOrAncestor) - { - if (focusedElementOrAncestor == *this) - { - // This palette is the focused element or an ancestor of the focused element. No need to dismiss. - return; - } - - // Go up to the next ancestor - focusedElementOrAncestor = winrt::Windows::UI::Xaml::Media::VisualTreeHelper::GetParent(focusedElementOrAncestor); - } - - // We got to the root (the element with no parent) and didn't meet this palette on the path. - // It means that it lost the focus and needs to be dismissed. - _close(); - } - void ExtensionPalette::_previewKeyDownHandler(const IInspectable& /*sender*/, const Windows::UI::Xaml::Input::KeyRoutedEventArgs& e) { @@ -379,7 +332,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation // Dismiss the palette if the text is empty if (_queryBox().Text().empty()) { - _close(); + _closeChat(nullptr, nullptr); } e.Handled(true); @@ -414,20 +367,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation const Windows::UI::Xaml::RoutedEventArgs& /*args*/) { _SetUpProviderInSettingsRequestedHandlers(nullptr, nullptr); - _close(); - } - - // Method Description: - // - Dismiss the query palette. This will: - // * clear all the current text in the input box - // * set our visibility to Collapsed - // Arguments: - // - - // Return Value: - // - - void ExtensionPalette::_close() - { - Visibility(Visibility::Collapsed); + _closeChat(nullptr, nullptr); } ChatMessage::ChatMessage(winrt::hstring content, bool isQuery) : diff --git a/src/cascadia/QueryExtension/ExtensionPalette.h b/src/cascadia/QueryExtension/ExtensionPalette.h index c5cc93723c9..57e1db8368d 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.h +++ b/src/cascadia/QueryExtension/ExtensionPalette.h @@ -53,12 +53,9 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation void _closeChat(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void _backdropPointerPressed(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::Input::PointerRoutedEventArgs& e); void _queryBoxGotFocusHandler(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); - void _lostFocusHandler(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void _previewKeyDownHandler(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::Input::KeyRoutedEventArgs& e); void _setUpAIProviderInSettings(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); - - void _close(); }; struct ChatMessage : ChatMessageT From cf49768b5e3fe8c2ab244ab568f0a62a2efb3779 Mon Sep 17 00:00:00 2001 From: Pankaj Bhojwani Date: Mon, 8 Sep 2025 14:45:40 -0700 Subject: [PATCH 5/6] add an accent border --- src/cascadia/QueryExtension/ExtensionPalette.xaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.xaml b/src/cascadia/QueryExtension/ExtensionPalette.xaml index 10d13f3b0de..320616802ca 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.xaml +++ b/src/cascadia/QueryExtension/ExtensionPalette.xaml @@ -180,7 +180,8 @@ HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{ThemeResource BackdropBackground}" - BorderBrush="{ThemeResource FlyoutBorderThemeBrush}" + BorderBrush="{ThemeResource SystemControlHighlightAccentRevealBorderBrush}" + BorderThickness="2,0,0,0" PointerPressed="_backdropPointerPressed" Shadow="{StaticResource SharedShadow}" Translation="0,0,32"> From 4867038e3e08da23d593d8a24b492f23d11b592b Mon Sep 17 00:00:00 2001 From: Pankaj Bhojwani Date: Mon, 8 Sep 2025 14:57:53 -0700 Subject: [PATCH 6/6] this brush instead --- src/cascadia/QueryExtension/ExtensionPalette.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.xaml b/src/cascadia/QueryExtension/ExtensionPalette.xaml index 320616802ca..209dace5311 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.xaml +++ b/src/cascadia/QueryExtension/ExtensionPalette.xaml @@ -180,7 +180,7 @@ HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{ThemeResource BackdropBackground}" - BorderBrush="{ThemeResource SystemControlHighlightAccentRevealBorderBrush}" + BorderBrush="{ThemeResource TabViewBackground}" BorderThickness="2,0,0,0" PointerPressed="_backdropPointerPressed" Shadow="{StaticResource SharedShadow}"