From c4ddb7d3518954eda2f66779434ffa5e177e49fd Mon Sep 17 00:00:00 2001 From: Arjun Balgovind <32061677+arjunbalgovind@users.noreply.github.com> Date: Fri, 24 Jul 2020 13:34:49 -0700 Subject: [PATCH] [PT Run] Resolve text alignment issues for RTL input languages (not for mixed strings) (#5170) * Added logic to switch TextBox/TextBlock flow direction on language change * Move event handler to separate method * Moved code to function --- .../PowerLauncher/LauncherControl.xaml | 2 +- .../launcher/PowerLauncher/MainWindow.xaml.cs | 18 ++++++++++++++++++ .../PowerLauncher/ViewModel/MainViewModel.cs | 15 ++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/modules/launcher/PowerLauncher/LauncherControl.xaml b/src/modules/launcher/PowerLauncher/LauncherControl.xaml index ea69796404..a87d55c596 100644 --- a/src/modules/launcher/PowerLauncher/LauncherControl.xaml +++ b/src/modules/launcher/PowerLauncher/LauncherControl.xaml @@ -80,7 +80,7 @@ x:FieldModifier="public" Opacity="0.6" Canvas.ZIndex="0" - Margin="24, 0, 0, 0" + Margin="24, 0, 14, 0" VerticalAlignment="Center" FontSize="24" Foreground="{DynamicResource TextControlPlaceholderForeground}" diff --git a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs index 2a89ff1d1e..5fcdeeefa8 100644 --- a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs +++ b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs @@ -83,6 +83,13 @@ namespace PowerLauncher SearchBox.QueryTextBox.DataContext = _viewModel; SearchBox.QueryTextBox.PreviewKeyDown += _launcher_KeyDown; SearchBox.QueryTextBox.TextChanged += QueryTextBox_TextChanged; + + // Set initial language flow direction + SearchBox_UpdateFlowDirection(); + + // Register language changed event + InputLanguageManager.Current.InputLanguageChanged += SearchBox_InputLanguageChanged; + SearchBox.QueryTextBox.Focus(); ListBox.DataContext = _viewModel; @@ -395,6 +402,17 @@ namespace PowerLauncher Hide(); } + private void SearchBox_UpdateFlowDirection() + { + SearchBox.QueryTextBox.FlowDirection = MainViewModel.GetLanguageFlowDirection(); + SearchBox.AutoCompleteTextBlock.FlowDirection = MainViewModel.GetLanguageFlowDirection(); + } + + private void SearchBox_InputLanguageChanged(object sender, InputLanguageEventArgs e) + { + SearchBox_UpdateFlowDirection(); + } + protected virtual void Dispose(bool disposing) { if (!disposedValue) diff --git a/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs b/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs index 49d42c2152..a44e0a4623 100644 --- a/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs +++ b/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs @@ -273,7 +273,6 @@ namespace PowerLauncher.ViewModel public string QueryText { get; set; } = String.Empty; - /// /// we need move cursor to end when we manually changed query /// but we don't want to move cursor to end when query is updated from TextBox. @@ -794,6 +793,20 @@ namespace PowerLauncher.ViewModel return string.Empty; } + public static FlowDirection GetLanguageFlowDirection() + { + bool isCurrentLanguageRightToLeft = System.Windows.Input.InputLanguageManager.Current.CurrentInputLanguage.TextInfo.IsRightToLeft; + + if (isCurrentLanguageRightToLeft) + { + return FlowDirection.RightToLeft; + } + else + { + return FlowDirection.LeftToRight; + } + } + protected virtual void Dispose(bool disposing) { if (!_disposed)