Skip to content

Commit

Permalink
Default to XamlRoot when unable to find focused object (#15189)
Browse files Browse the repository at this point in the history
Default to XamlRoot when unable to find a focused object in
DirectKeyEvents

This may not be the most appropriate "fix" for this. Certainly open to
criticism and feedback. We are trapping the alt+space key chord on the
win32 side and forwarding it to the xaml side. There we try to find a
focused object by walking the xaml tree. If we are unable to find a
focused object we return false and do nothing. I suspect that the area
that has focus that prevents this from working normally is on the win32
side. Since we want to handle the system menu anyway and are explicitly
trapping that key combo and forwarding it on I thought this was the best
approach. If we cant find a focused object default to the xaml root.

## Validation Steps Performed
System menu opens as it should.

Closes #14397
  • Loading branch information
jamespack authored Apr 20, 2023
1 parent 2aefb30 commit 210414e
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/cascadia/TerminalApp/TerminalWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -900,6 +900,12 @@ namespace winrt::TerminalApp::implementation
if (!focusedObject)
{
focusedObject = winrt::Windows::UI::Xaml::Media::VisualTreeHelper::GetParent(focusedElement);

// We were unable to find a focused object. Default to the xaml root so that the alt+space menu still works.
if (!focusedObject)
{
focusedObject = _root.try_as<IInspectable>();
}
}
}
else
Expand All @@ -908,6 +914,7 @@ namespace winrt::TerminalApp::implementation
}
} while (focusedObject);
}

return false;
}

Expand Down

0 comments on commit 210414e

Please sign in to comment.