diff --git a/src/modules/powerdisplay/PowerDisplay/PowerDisplayXAML/MainWindow.xaml b/src/modules/powerdisplay/PowerDisplay/PowerDisplayXAML/MainWindow.xaml index bd81debf9e..c35bdad329 100644 --- a/src/modules/powerdisplay/PowerDisplay/PowerDisplayXAML/MainWindow.xaml +++ b/src/modules/powerdisplay/PowerDisplay/PowerDisplayXAML/MainWindow.xaml @@ -121,11 +121,15 @@ HorizontalAlignment="Right" Content="{ui:FontIcon Glyph=, FontSize=16}" - Style="{StaticResource SubtleButtonStyle}"> + Style="{StaticResource SubtleButtonStyle}" + Visibility="{x:Bind ConvertBoolToVisibility(SupportsInputSource), Mode=OneWay}"> - + - - - + + + + + + + + + + + + diff --git a/src/modules/powerdisplay/PowerDisplay/PowerDisplayXAML/MainWindow.xaml.cs b/src/modules/powerdisplay/PowerDisplay/PowerDisplayXAML/MainWindow.xaml.cs index a601387461..bd866d76f7 100644 --- a/src/modules/powerdisplay/PowerDisplay/PowerDisplayXAML/MainWindow.xaml.cs +++ b/src/modules/powerdisplay/PowerDisplay/PowerDisplayXAML/MainWindow.xaml.cs @@ -738,6 +738,49 @@ namespace PowerDisplay Logger.LogInfo("[UI] InputSourceItem_Click: SetInputSourceAsync completed"); } + /// + /// Input source ListView selection changed handler - switches the monitor input source + /// + private async void InputSourceListView_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (sender is not ListView listView) + { + return; + } + + // Get the selected input source item + var selectedItem = listView.SelectedItem as InputSourceItem; + if (selectedItem == null) + { + return; + } + + Logger.LogInfo($"[UI] InputSourceListView_SelectionChanged: Selected {selectedItem.Name} (0x{selectedItem.Value:X2}) for monitor {selectedItem.MonitorId}"); + + // Find the monitor by ID + MonitorViewModel? monitorVm = null; + if (!string.IsNullOrEmpty(selectedItem.MonitorId) && _viewModel != null) + { + monitorVm = _viewModel.Monitors.FirstOrDefault(m => m.Id == selectedItem.MonitorId); + } + + if (monitorVm == null) + { + Logger.LogWarning("[UI] InputSourceListView_SelectionChanged: Could not find MonitorViewModel"); + return; + } + + // Set the input source + await monitorVm.SetInputSourceAsync(selectedItem.Value); + + // Close the flyout after selection + if (listView.Parent is StackPanel stackPanel && + stackPanel.Parent is Flyout flyout) + { + flyout.Hide(); + } + } + public void Dispose() { _viewModel?.Dispose();