From bcb1fd10b988da40eff3e7059b930dc692b9d394 Mon Sep 17 00:00:00 2001 From: Sergej Andrejev Date: Fri, 26 Jun 2009 10:38:26 +0000 Subject: [PATCH] Save user defined gestures git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/shortcuts@4356 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- AddIns/ICSharpCode.SharpDevelop.addin | 6 +- .../AvalonEdit.AddIn/Src/CodeEditor.cs | 78 +++-- .../ShortcutsManagement.suo | Bin 96768 -> 97792 bytes .../Resources/StringResources.resx | 9 +- .../ShortcutsManagement.csproj | 2 - .../Converters/GesturesCollectionConverter.cs | 7 +- .../Src/Converters/InputGestureConverter.cs | 12 +- .../ShortcutsManagement/Src/Data/Shortcut.cs | 7 +- .../Src/Data/ShortcutsFinder.cs | 25 +- .../Src/Dialogs/MultiKeyGestureTextBox.xaml | 4 +- .../Dialogs/MultiKeyGestureTextBox.xaml.cs | 17 +- .../Src/Dialogs/ShortcutManagementWindow.xaml | 28 +- .../Dialogs/ShortcutManagementWindow.xaml.cs | 38 ++- .../ShortcutsManagementOptionsPanel.xaml | 7 +- .../ShortcutsManagementOptionsPanel.xaml.cs | 10 +- .../Src/Dialogs/ShortcutsTreeView.xaml | 4 +- .../Src/Dialogs/ShortcutsTreeView.xaml.cs | 6 +- .../ShortcutsManagement/Window1.xaml.cs | 89 +++--- .../Project/Src/Commands/MenuItemBuilders.cs | 53 ++-- .../Src/Commands/NavigationCommands.cs | 2 +- .../Project/Src/Commands/ToolsCommands.cs | 3 +- .../Gui/Dialogs/TreeViewOptionsDialog.xaml | 48 +-- .../Gui/Workbench/Layouts/AvalonPadContent.cs | 3 +- .../Layouts/AvalonWorkbenchWindow.cs | 9 +- .../Project/Src/Gui/Workbench/WpfWorkbench.cs | 7 +- .../Command/CommandBindingDescriptor.cs | 5 + .../Command/InputBindingDescriptor.cs | 5 + .../CommandsService/CommandBindingInfo.cs | 279 +++++++++++++----- ...{CommandsRegistry.cs => CommandManager.cs} | 165 ++++++++--- .../CommandsService/CommandsService.cs | 53 +++- .../CommandsService/InputBindingCategory.cs | 2 +- .../CommandsService/InputBindingInfo.cs | 168 ++++++++--- .../InputGestureCollectionConverter.cs | 10 +- .../InputGestureCollectionExtensions.cs | 17 +- .../InputGestureExtensions.cs} | 100 +++++-- .../CommandsService/ManagedCommandBinding.cs | 35 --- .../CommandsService/ManagedInputBinding.cs | 24 -- .../CommandsService/MultiKeyGesture.cs | 33 ++- .../MultiKeyGestureConverter.cs | 4 +- .../CommandsService/PartialKeyGesture.cs | 28 +- .../UserDefinedGesturesManager.cs | 87 ++++++ .../ICSharpCode.Core.Presentation.csproj | 7 +- .../Menu/MenuCommand.cs | 56 ++-- .../ToolBar/ToolBarButton.cs | 24 +- src/SharpDevelop.sln | 278 ++++++++--------- 45 files changed, 1186 insertions(+), 668 deletions(-) rename src/Main/ICSharpCode.Core.Presentation/CommandsService/{CommandsRegistry.cs => CommandManager.cs} (84%) rename src/{AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Extensions/PartialKeyGestureExtensions.cs => Main/ICSharpCode.Core.Presentation/CommandsService/InputGestureExtensions.cs} (63%) delete mode 100644 src/Main/ICSharpCode.Core.Presentation/CommandsService/ManagedCommandBinding.cs delete mode 100644 src/Main/ICSharpCode.Core.Presentation/CommandsService/ManagedInputBinding.cs create mode 100644 src/Main/ICSharpCode.Core.Presentation/CommandsService/UserDefinedGesturesManager.cs diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index 16badf5479..f104f709ad 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -129,7 +129,7 @@ diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs index 5e739fe083..8389e353af 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs @@ -25,9 +25,11 @@ using ICSharpCode.AvalonEdit.Rendering; using ICSharpCode.Core; using ICSharpCode.Core.Presentation; using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Bookmarks; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Editor; +using CommandManager=ICSharpCode.Core.Presentation.CommandManager; namespace ICSharpCode.AvalonEdit.AddIn { @@ -115,18 +117,21 @@ namespace ICSharpCode.AvalonEdit.AddIn } } - public CodeEditor() + static CodeEditor() { - var contextName = this.GetType().FullName; - var commandBindingInfo = new CommandBindingInfo(); - commandBindingInfo.OwnerInstance = this; + commandBindingInfo.OwnerTypeName = CommandManager.DefaultContextName; commandBindingInfo.RoutedCommandName = "SDWindowCommands.SplitView"; commandBindingInfo.ExecutedEventHandler = OnSplitView; - commandBindingInfo.CanExecutedEventHandler = OnCanSplitView; - CommandsRegistry.RegisterCommandBinding(commandBindingInfo); + commandBindingInfo.CanExecuteEventHandler = OnCanSplitView; + commandBindingInfo.Name = "CodeEditorCommandBinding"; + CommandManager.RegisterCommandBinding(commandBindingInfo); + } + + public CodeEditor() + { textMarkerService = new TextMarkerService(this); iconBarManager = new IconBarManager(); @@ -206,33 +211,56 @@ namespace ICSharpCode.AvalonEdit.AddIn primaryTextEditor.Save(stream); } - void OnCanSplitView(object sender, CanExecuteRoutedEventArgs e) + static void OnCanSplitView(object sender, CanExecuteRoutedEventArgs e) { - e.CanExecute = true; + var avalonEditViewContent = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ActiveViewContent as AvalonEditViewContent; + if(avalonEditViewContent == null) { + e.CanExecute = false; + return; + } + + var codeEditor = avalonEditViewContent.CodeEditor as CodeEditor; + if(codeEditor == null) { + e.CanExecute = false; + return; + } + + e.CanExecute = (codeEditor.ActiveTextEditor == codeEditor.PrimaryTextEditor); } - void OnSplitView(object sender, ExecutedRoutedEventArgs e) + + static void OnSplitView(object sender, ExecutedRoutedEventArgs e) { - if (secondaryTextEditor == null) { + var avalonEditViewContent = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ActiveViewContent as AvalonEditViewContent; + if(avalonEditViewContent == null) { + return; + } + + var codeEditor = avalonEditViewContent.CodeEditor as CodeEditor; + if(codeEditor == null) { + return; + } + + if (codeEditor.secondaryTextEditor == null) { // create secondary editor - this.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); - secondaryTextEditor = CreateTextEditor(); - secondaryTextEditorAdapter = (CodeEditorAdapter)secondaryTextEditor.TextArea.GetService(typeof(ITextEditor)); - Debug.Assert(primaryTextEditorAdapter != null); + codeEditor.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); + codeEditor.secondaryTextEditor = codeEditor.CreateTextEditor(); + codeEditor.secondaryTextEditorAdapter = (CodeEditorAdapter)codeEditor.secondaryTextEditor.TextArea.GetService(typeof(ITextEditor)); + Debug.Assert(codeEditor.primaryTextEditorAdapter != null); - secondaryTextEditor.SetBinding(TextEditor.DocumentProperty, - new Binding(TextEditor.DocumentProperty.Name) { Source = primaryTextEditor }); - secondaryTextEditor.TextArea.SetBinding(TextArea.IndentationStrategyProperty, - new Binding(TextArea.IndentationStrategyProperty.Name) { Source = primaryTextEditor.TextArea }); - secondaryTextEditor.SyntaxHighlighting = primaryTextEditor.SyntaxHighlighting; + codeEditor.secondaryTextEditor.SetBinding(TextEditor.DocumentProperty, + new Binding(TextEditor.DocumentProperty.Name) { Source = codeEditor.primaryTextEditor }); + codeEditor.secondaryTextEditor.TextArea.SetBinding(TextArea.IndentationStrategyProperty, + new Binding(TextArea.IndentationStrategyProperty.Name) { Source = codeEditor.primaryTextEditor.TextArea }); + codeEditor.secondaryTextEditor.SyntaxHighlighting = codeEditor.primaryTextEditor.SyntaxHighlighting; - SetRow(secondaryTextEditor, 2); - this.Children.Add(secondaryTextEditor); + SetRow(codeEditor.secondaryTextEditor, 2); + codeEditor.Children.Add(codeEditor.secondaryTextEditor); } else { // remove secondary editor - this.Children.Remove(secondaryTextEditor); - secondaryTextEditor = null; - secondaryTextEditorAdapter = null; - this.RowDefinitions.RemoveAt(this.RowDefinitions.Count - 1); + codeEditor.Children.Remove(codeEditor.secondaryTextEditor); + codeEditor.secondaryTextEditor = null; + codeEditor.secondaryTextEditorAdapter = null; + codeEditor.RowDefinitions.RemoveAt(codeEditor.RowDefinitions.Count - 1); } } diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement.suo b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement.suo index ac06e9d1f008f11f8d97b0ace5c6f1aac670325c..5d074f59e97494916c9f23f260b6cc0570598abf 100644 GIT binary patch delta 2938 zcmcJReNa@_6~OO#`*wY>bX^uiT#+oe3OXwSB54$H`4R-wRgf4ph?@FAP{FKY(u}#=*TQPl>IlOsY0IIJHTeCYBnb4l^N^Voa=oo{JGlW}L}CeQ$pE zxlAYBv~74}ISKS>wQvNpe8wmMgfB7xycj9+}f6_9kCB6LE&@LOz~Y(#?VpX5tKSmN-YW5ZyHkzw(8H#^bUfNcRteZvagE ziVe8zSRwFp`VZ*Us^7~1*dGDzdK!yxzB1#`#_9P!?9puq4J7JHZ`+>8I5Kw46mdF@v#7b^+_s*AF~L{tWG$-a1Yd!F5Hox zuKkQ`mm8yRPKUJZW_6(I%dhawgj{S2sFLR$s_Y8C6%DbLiu}ug>Z|aRe(e?LSdf zG-Xz)+HCraN<97*Z|)5F=li;H0bUk&rlDrE$WFQ67hvCgBPW0s@VX4O|a?9_5wAGYGZ)_+P6&0I-*SnxfRBc!byde$h zMBT<^fQu&Cv13_+m|p1v?EHsIcWH1He4Bz*zeS~tWv1q(t;L8p-p6LA6TghIn5xfz zQ1``MVSU}I>fKIIK_tD|qGIgMI_??^NqDt39nX$PLQjbm+Yb9<>|(oK>JQa`O8XYE zmlvse{&)xg3^*9Tm1L-T=!$CzcJbb>w-j|G8QkY`;oY;%gl)CgF(xKd*p8aOcW9PD zeXU`s7Yp7wB0}H2t)k=4TWF+U+;#rt?|&y!B>BjuJ5?hwHq+`ikv`db@swo9c{tu5 zF9qW<{WsD_=siIzcQ|PniN3M1i^OaMiK2cW_MYrr1)}Su9n_f8xF}(Jzav08w}|ha z1d(FL#g#_1UMzS#$7`?t7JRLh2E1PG1{a>0IeEtt6|*9%a4(M(%^$gg^j(XoFd8c{23^DbMMt|0gtem+bR_^RO8p%LH%@o^x=w-NB{m;>UK?bfdBV8a%Z2-1 zFc`7+;|vX-dm(CH^IhPTQ=t+xgw0>_HYeCAb4;7(pCwoIqrfTVescio-6~eQD@4Ux zn*mpSH%H95e+X(72#wxGs#}TIi8qKQLWamUsoqWqqK4pZ1-wHZMdVbHJQ_gO-TaaQ zg9ByaIz>peKTz#|e5M%=sG!t8Pr;b(fu1EvA;GV{21#;D71kG6c(d67hr(yx{*7f+-}A zqEYQKE3D!h20`>>Q*Yj6w+$qx<3)|(d7up2(^H}_$|=29!;33S=SxbiiCdUu`&r33)te!-%|BxosqTM1LQ{U8CUv)?|(1hgZO0 z+_~P2m&;5DqvqP5JS@gVg+qYwM7;{G#DLYHT}~_aDpB^2L7gCr6W>Y zt~0@o)-XLR8g2sK_ma7*O?X&p?8zpGbx*Kb+oiK=^-B zF+gs7-JS(YfUmYdI1kT($l5YUhL+xpi`N|?d}A4G;B7W21{*@*8J?dHPI2U4pBNiw zffpd2ugQb0JU$b`vEjCccWybwO<19oIlh&&W&5NXzr^>UoqI_kLy-+Rgcf#v*V7cV|O0@AN>SUbqPM8PQjM1S>s> z82+xDpaNxlB3^0u9fnPE))qsSD$k&O@ksX;!-s&8>vKhJrx$QzZ6sbBAFt=Hgrf>N zG@Cp{@@6lzH?9UZN#;5D#Wj#f?r(eSgm?!yd9e-J-y<*EKcfNs{bgSFbIL+SJCKJ- zQ*Ak9;n{O8)AO_*O@Q}zJ0T7OwFq>ZHPu8aeTJDPkxCfwE9I2eTFT)xH<(}wjMlSF Q&4`W1(M5*;#{K7~KBAyC(#;bKY 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 lAv2T5BPTxCrKQ{tcKX+BN_H diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Resources/StringResources.resx b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Resources/StringResources.resx index 7f6d85f8ed..e4e997af12 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Resources/StringResources.resx +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Resources/StringResources.resx @@ -118,13 +118,13 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Enter key gesture + Add gesture - Registered gestures + Shortcut gestures - Commands with same gestures assigned + Shortcuts with same gestures _Cancel @@ -167,4 +167,7 @@ Gesture added + + Failed to add a gesture. Such gesture already exists in shortcut gestures collections + \ No newline at end of file diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj index 44f9d76e0a..3e4054d68e 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj @@ -148,7 +148,6 @@ Settings.settings True - @@ -166,7 +165,6 @@ ShortcutsTreeView.xaml - diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/GesturesCollectionConverter.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/GesturesCollectionConverter.cs index a9439c878f..a2b8ef2d73 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/GesturesCollectionConverter.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/GesturesCollectionConverter.cs @@ -22,8 +22,9 @@ namespace ICSharpCode.ShortcutsManagement.Converters /// String representing collection of gestures public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { + string converterValue = ""; if (value is InputGestureCollection && (targetType == typeof(string) || targetType.IsSubclassOf(typeof(string)))) { - return new InputGestureCollectionConverter().ConvertToInvariantString(value); + converterValue = new InputGestureCollectionConverter().ConvertToInvariantString(value); } if (value is ObservableCollection && (targetType == typeof(string) || targetType.IsSubclassOf(typeof(string)))) { @@ -31,10 +32,10 @@ namespace ICSharpCode.ShortcutsManagement.Converters foreach (var gesture in (ObservableCollection)value) { inputGestureCollection.Add(gesture); } - return new InputGestureCollectionConverter().ConvertToInvariantString(inputGestureCollection); + converterValue = new InputGestureCollectionConverter().ConvertToInvariantString(inputGestureCollection); } - return value.ToString(); + return converterValue.Replace("+", " + ").Replace(",", ", ").Replace(";", "; "); ; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/InputGestureConverter.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/InputGestureConverter.cs index d8431a8f84..9e9d34d65e 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/InputGestureConverter.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/InputGestureConverter.cs @@ -21,19 +21,15 @@ namespace ICSharpCode.ShortcutsManagement.Converters /// public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - if (value is MultiKeyGesture && targetType == typeof(string)) + if (value is KeyGesture && targetType == typeof(string)) { - return new MultiKeyGestureConverter().ConvertToInvariantString(value).Replace("+", " + "); - } - - if(value is KeyGesture && targetType == typeof(string)) - { - return new KeyGestureConverter().ConvertToInvariantString(value).Replace("+", " + "); + var gestures = new InputGestureCollection(new[] {value}); + return new InputGestureCollectionConverter().ConvertToInvariantString(gestures).Replace("+", " + ").Replace(",", ", "); } if(value is MouseGesture && targetType == typeof(string)) { - return new MouseGestureConverter().ConvertToInvariantString(value).Replace("+", " + "); + return new MouseGestureConverter().ConvertToInvariantString(value); } return ""; diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/Shortcut.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/Shortcut.cs index 6be150bf0b..59234a91ee 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/Shortcut.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/Shortcut.cs @@ -12,7 +12,7 @@ namespace ICSharpCode.ShortcutsManagement.Data public class Shortcut : INotifyPropertyChanged, IShortcutTreeEntry { /// - /// List of input gestures which will invoke this action + /// List of input gestures which invoking this action /// public ObservableCollection Gestures { @@ -42,6 +42,11 @@ namespace ICSharpCode.ShortcutsManagement.Data } } + /// + /// Sort shortcut sub-elements. + /// + /// Does nothing. + /// public void SortSubEntries() { diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/ShortcutsFinder.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/ShortcutsFinder.cs index eedca76483..496b9bc8ae 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/ShortcutsFinder.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/ShortcutsFinder.cs @@ -99,7 +99,7 @@ namespace ICSharpCode.ShortcutsManagement.Data /// /// Gesture template which should match shortcut gesture partly to make it visible /// Filtering mode - public void FilterGesture(InputGesture inputGestureTemplate, GestureFilterMode mode) + public void FilterGesture(InputGesture inputGestureTemplate, GestureCompareMode mode) { FilterGesture(new InputGestureCollection(new[] { inputGestureTemplate }), mode); } @@ -111,7 +111,7 @@ namespace ICSharpCode.ShortcutsManagement.Data /// /// Collection of gesture templates which (atleast one) should match shortcut gesture partly to make it visible /// Filtering mode - public void FilterGesture(InputGestureCollection inputGestureTemplateCollection, GestureFilterMode mode) + public void FilterGesture(InputGestureCollection inputGestureTemplateCollection, GestureCompareMode mode) { Debug.WriteLine("Changed to" + new InputGestureCollectionConverter().ConvertToInvariantString(inputGestureTemplateCollection)); foreach (var entry in RootEntries) @@ -142,7 +142,7 @@ namespace ICSharpCode.ShortcutsManagement.Data if (rootShortcut != null) { rootShortcut.IsVisible = false; foreach (InputGesture template in inputGestureTemplateCollection) { - if (template.MatchesCollection(new InputGestureCollection(rootShortcut.Gestures), mode)) { + if (template.IsTemplateForAny(new InputGestureCollection(rootShortcut.Gestures), mode)) { rootShortcut.IsVisible = true; break; } @@ -158,7 +158,7 @@ namespace ICSharpCode.ShortcutsManagement.Data /// Collection of gesture templates which (atleast one) should match shortcut gesture partly to make it visible /// Filtering mode /// - private static bool FilterGesture(ShortcutCategory category, InputGestureCollection inputGestureTemplateCollection, GestureFilterMode mode) + private static bool FilterGesture(ShortcutCategory category, InputGestureCollection inputGestureTemplateCollection, GestureCompareMode mode) { // Apply filter to sub-categories var isSubElementVisible = false; @@ -171,21 +171,8 @@ namespace ICSharpCode.ShortcutsManagement.Data // Apply filter to shortcuts foreach (var shortcut in category.Shortcuts) { - var gestureMatched = false; - foreach (InputGesture template in inputGestureTemplateCollection) - { - if (shortcut.Gestures.Count > 0 && ((KeyGesture)shortcut.Gestures[0]).Key == Key.F5) - { - - } - - if (template.MatchesCollection(new InputGestureCollection(shortcut.Gestures), mode)) - { - gestureMatched = true; - break; - } - } - + var gestureMatched = inputGestureTemplateCollection.ContainsTemplateForAny(new InputGestureCollection(shortcut.Gestures), mode); + if (gestureMatched) { shortcut.IsVisible = true; isSubElementVisible = true; diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/MultiKeyGestureTextBox.xaml b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/MultiKeyGestureTextBox.xaml index 869f1a22b1..7bafb67fcd 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/MultiKeyGestureTextBox.xaml +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/MultiKeyGestureTextBox.xaml @@ -37,8 +37,8 @@ - - + +