private void Dispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { if ((args.VirtualKey == VirtualKey.Enter || args.VirtualKey == VirtualKey.Tab) && args.EventType == CoreAcceleratorKeyEventType.KeyDown && FocusState != FocusState.Unfocused) { // Check if CTRL or Shift is also pressed in addition to Enter key. var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control); var shift = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift); var key = Window.Current.CoreWindow.GetKeyState(VirtualKey.Enter); if (Autocomplete != null && View.Autocomplete != null) { var send = key.HasFlag(CoreVirtualKeyStates.Down) && !ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down); if (send || args.VirtualKey == VirtualKey.Tab) { AcceptsReturn = false; var container = Autocomplete.ContainerFromIndex(Math.Max(0, Autocomplete.SelectedIndex)) as ListViewItem; if (container != null) { var peer = new ListViewItemAutomationPeer(container); var invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider; invokeProv.Invoke(); } } else { AcceptsReturn = true; } return; } // If there is text and CTRL/Shift is not pressed, send message. Else allow new row. if (ViewModel.Settings.IsSendByEnterEnabled) { var send = key.HasFlag(CoreVirtualKeyStates.Down) && !ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down); if (send) { View?.Accept(); AcceptsReturn = false; } else { AcceptsReturn = true; } } else { var send = key.HasFlag(CoreVirtualKeyStates.Down) && ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down); if (send) { View?.Accept(); AcceptsReturn = false; } else { AcceptsReturn = true; } } } }
private void txtSearch_KeyDown(object sender, KeyRoutedEventArgs e) { if (DialogsSearchListView.Visibility == Visibility.Collapsed) { return; } if (e.Key == VirtualKey.Up || e.Key == VirtualKey.Down) { var index = e.Key == VirtualKey.Up ? -1 : 1; var next = DialogsSearchListView.SelectedIndex + index; if (next >= 0 && next < SearchResults.View.Count) { DialogsSearchListView.SelectedIndex = next; DialogsSearchListView.ScrollIntoView(DialogsSearchListView.SelectedItem); } //var index = Math.Max(DialogsSearchListView.SelectedIndex, 0); //var container = DialogsSearchListView.ContainerFromIndex(index) as ListViewItem; //if (container != null) //{ // DialogsSearchListView.SelectedIndex = index; // container.Focus(FocusState.Keyboard); //} e.Handled = true; } else if (e.Key == VirtualKey.Enter) { var index = Math.Max(DialogsSearchListView.SelectedIndex, 0); var container = DialogsSearchListView.ContainerFromIndex(index) as ListViewItem; if (container != null) { var peer = new ListViewItemAutomationPeer(container); var invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider; invokeProv.Invoke(); } e.Handled = true; } }
private void Search_KeyDown(object sender, KeyRoutedEventArgs e) { var activePanel = rpMasterTitlebar.SelectedIndex == 0 ? DialogsPanel : ContactsPanel; var activeList = rpMasterTitlebar.SelectedIndex == 0 ? DialogsSearchListView : ContactsSearchListView; var activeResults = rpMasterTitlebar.SelectedIndex == 0 ? DialogsResults : ContactsResults; if (activePanel.Visibility == Visibility.Visible) { return; } if (e.Key == VirtualKey.Up || e.Key == VirtualKey.Down) { var index = e.Key == VirtualKey.Up ? -1 : 1; var next = activeList.SelectedIndex + index; if (next >= 0 && next < activeResults.View.Count) { activeList.SelectedIndex = next; activeList.ScrollIntoView(activeList.SelectedItem); } e.Handled = true; } else if (e.Key == VirtualKey.Enter) { var index = Math.Max(activeList.SelectedIndex, 0); var container = activeList.ContainerFromIndex(index) as ListViewItem; if (container != null) { var peer = new ListViewItemAutomationPeer(container); var invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider; invokeProv.Invoke(); } e.Handled = true; } }
protected override void OnKeyDown(KeyRoutedEventArgs e) { if (e.Key == VirtualKey.Up || e.Key == VirtualKey.Down) { var alt = Window.Current.CoreWindow.GetKeyState(VirtualKey.Menu).HasFlag(CoreVirtualKeyStates.Down); var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down); var shift = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down); if (!alt && !ctrl && !shift) { if (Autocomplete != null && View.Autocomplete != null) { Autocomplete.SelectionMode = ListViewSelectionMode.Single; var index = e.Key == VirtualKey.Up ? -1 : 1; var next = Autocomplete.SelectedIndex + index; if (next >= 0 && next < View.Autocomplete.Count) { Autocomplete.SelectedIndex = next; Autocomplete.ScrollIntoView(Autocomplete.SelectedItem); } e.Handled = true; } } } else if ((e.Key == VirtualKey.Tab || e.Key == VirtualKey.Enter) && Autocomplete != null && Autocomplete.Items.Count > 0 && View.Autocomplete != null && !(View.Autocomplete is SearchStickersCollection)) { var container = Autocomplete.ContainerFromIndex(Math.Max(0, Autocomplete.SelectedIndex)) as ListViewItem; if (container != null) { var peer = new ListViewItemAutomationPeer(container); var provider = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider; provider.Invoke(); } Logs.Logger.Debug(Logs.Target.Chat, "Tab pressed and handled"); e.Handled = true; } else if (e.Key == VirtualKey.Tab) { var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down); if (ctrl) { return; } } else if (e.Key == VirtualKey.Enter) { var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control); var shift = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift); var send = false; if (ViewModel.Settings.IsSendByEnterEnabled) { send = !ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down); } else { send = ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down); } AcceptsReturn = !send; e.Handled = send; if (send) { View?.Accept(); } } if (!e.Handled) { base.OnKeyDown(e); } }
protected override void OnKeyDown(KeyRoutedEventArgs e) { if (e.Key == VirtualKey.Space) { if (Document.Selection.Length > 0) { return; } FormatText(); var clone = Document.Selection.GetClone(); var end = clone.EndOf(TextRangeUnit.CharacterFormat, true); if (clone.EndPosition > Document.Selection.EndPosition && IsEqual(clone.CharacterFormat, Document.Selection.CharacterFormat)) { } else { Document.Selection.CharacterFormat = Document.GetDefaultCharacterFormat(); } } else if (e.Key == VirtualKey.Up || e.Key == VirtualKey.Down) { var alt = Window.Current.CoreWindow.GetKeyState(VirtualKey.Menu).HasFlag(CoreVirtualKeyStates.Down); var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down); var shift = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down); if (e.Key == VirtualKey.Up && !alt && !ctrl && !shift && IsEmpty) { ViewModel.MessageEditLastCommand.Execute(); e.Handled = true; } else if (e.Key == VirtualKey.Up && ctrl) { ViewModel.MessageReplyPreviousCommand.Execute(); e.Handled = true; } else if (e.Key == VirtualKey.Down && ctrl) { ViewModel.MessageReplyNextCommand.Execute(); e.Handled = true; } else if (e.Key == VirtualKey.Up || e.Key == VirtualKey.Down) { if (Autocomplete != null && ViewModel.Autocomplete != null) { Autocomplete.SelectionMode = ListViewSelectionMode.Single; var index = e.Key == VirtualKey.Up ? -1 : 1; var next = Autocomplete.SelectedIndex + index; if (next >= 0 && next < ViewModel.Autocomplete.Count) { Autocomplete.SelectedIndex = next; Autocomplete.ScrollIntoView(Autocomplete.SelectedItem); } e.Handled = true; } } } else if ((e.Key == VirtualKey.Tab || e.Key == VirtualKey.Enter) && Autocomplete != null && Autocomplete.Items.Count > 0 && ViewModel.Autocomplete != null) { var container = Autocomplete.ContainerFromIndex(Math.Max(0, Autocomplete.SelectedIndex)) as ListViewItem; if (container != null) { var peer = new ListViewItemAutomationPeer(container); var provider = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider; provider.Invoke(); } Logs.Logger.Debug(Logs.Target.Chat, "Tab pressed and handled"); e.Handled = true; } else if (e.Key == VirtualKey.Tab) { var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down); if (ctrl) { return; } } else if (e.Key == VirtualKey.Enter) { var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control); var shift = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift); var send = false; if (ViewModel.Settings.IsSendByEnterEnabled) { send = !ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down); } else { send = ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down); } AcceptsReturn = !send; e.Handled = send; if (send) { _ = SendAsync(); } } else if (e.Key == VirtualKey.X && Math.Abs(Document.Selection.Length) == 4) { var alt = Window.Current.CoreWindow.GetKeyState(VirtualKey.Menu).HasFlag(CoreVirtualKeyStates.Down); if (alt) { Document.Selection.GetText(TextGetOptions.NoHidden, out string hex); if (int.TryParse(hex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int result)) { Document.Selection.SetText(TextSetOptions.None, new string((char)result, 1)); } } } if (!e.Handled) { base.OnKeyDown(e); } }
//protected override async void OnKeyDown(KeyRoutedEventArgs e) //{ // if (e.Key == VirtualKey.Enter) // { // // Check if CTRL or Shift is also pressed in addition to Enter key. // var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control); // var shift = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift); // // If there is text and CTRL/Shift is not pressed, send message. Else allow new row. // if (!ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down) && !IsEmpty) // { // e.Handled = true; // await SendAsync(); // } // } // base.OnKeyDown(e); //} private async void Dispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { if (args.VirtualKey == VirtualKey.Enter && FocusState != FocusState.Unfocused) { // Check if CTRL or Shift is also pressed in addition to Enter key. var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control); var shift = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift); var key = Window.Current.CoreWindow.GetKeyState(args.VirtualKey); if (UsernameHints != null && ViewModel.UsernameHints != null) { var send = key.HasFlag(CoreVirtualKeyStates.Down) && !ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down); if (send) { AcceptsReturn = false; var container = UsernameHints.ContainerFromIndex(Math.Max(0, UsernameHints.SelectedIndex)) as ListViewItem; if (container != null) { var peer = new ListViewItemAutomationPeer(container); var invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider; invokeProv.Invoke(); } } else { AcceptsReturn = true; } return; } if (BotCommands != null && ViewModel.BotCommands != null) { var send = key.HasFlag(CoreVirtualKeyStates.Down) && !ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down); if (send) { AcceptsReturn = false; var container = BotCommands.ContainerFromIndex(Math.Max(0, BotCommands.SelectedIndex)) as ListViewItem; if (container != null) { var peer = new ListViewItemAutomationPeer(container); var invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider; invokeProv.Invoke(); } } else { AcceptsReturn = true; } return; } // If there is text and CTRL/Shift is not pressed, send message. Else allow new row. if (ApplicationSettings.Current.IsSendByEnterEnabled) { var send = key.HasFlag(CoreVirtualKeyStates.Down) && !ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down); if (send) { AcceptsReturn = false; await SendAsync(); } else { AcceptsReturn = true; } } else { var send = key.HasFlag(CoreVirtualKeyStates.Down) && ctrl.HasFlag(CoreVirtualKeyStates.Down) && !shift.HasFlag(CoreVirtualKeyStates.Down); if (send) { AcceptsReturn = false; await SendAsync(); } else { AcceptsReturn = true; } } } }