diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaControl.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaControl.cs index 34595b2a09..6c2d5ec521 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaControl.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaControl.cs @@ -112,7 +112,6 @@ namespace ICSharpCode.TextEditor ResizeRedraw = true; Document.DocumentChanged += new DocumentEventHandler(AdjustScrollBars); - SetStyle(ControlStyles.Selectable, true); } protected override void Dispose(bool disposing) @@ -322,5 +321,26 @@ namespace ICSharpCode.TextEditor textArea.SetDesiredColumn(); ScrollToCaret(); } + + public event MouseEventHandler ShowContextMenu; + + protected override void WndProc(ref Message m) + { + if (m.Msg == 0x007B) { // handle WM_CONTEXTMENU + if (ShowContextMenu != null) { + long lParam = m.LParam.ToInt64(); + int x = unchecked((short)(lParam & 0xffff)); + int y = unchecked((short)((lParam & 0xffff0000) >> 16)); + if (x == -1 && y == -1) { + Point pos = Caret.ScreenPosition; + ShowContextMenu(this, new MouseEventArgs(MouseButtons.None, 0, pos.X, pos.Y + textArea.TextView.FontHeight, 0)); + } else { + Point pos = PointToClient(new Point(x, y)); + ShowContextMenu(this, new MouseEventArgs(MouseButtons.Right, 1, pos.X, pos.Y, 0)); + } + } + } + base.WndProc(ref m); + } } } diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControl.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControl.cs index 44888f16c7..21f90ef19d 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControl.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControl.cs @@ -51,16 +51,30 @@ namespace ICSharpCode.TextEditor } } + TextAreaControl activeTextAreaControl; + public override TextAreaControl ActiveTextAreaControl { get { - return primaryTextArea; + return activeTextAreaControl; } } + protected void SetActiveTextAreaControl(TextAreaControl value) + { + if (activeTextAreaControl != value) { + activeTextAreaControl = value; + + if (ActiveTextAreaControlChanged != null) { + ActiveTextAreaControlChanged(this, EventArgs.Empty); + } + } + } + + public event EventHandler ActiveTextAreaControlChanged; + public TextEditorControl() { SetStyle(ControlStyles.ContainerControl, true); - SetStyle(ControlStyles.Selectable, true); textAreaPanel.Dock = DockStyle.Fill; @@ -68,6 +82,10 @@ namespace ICSharpCode.TextEditor Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy(); primaryTextArea = new TextAreaControl(this); + activeTextAreaControl = primaryTextArea; + primaryTextArea.TextArea.GotFocus += delegate { + SetActiveTextAreaControl(primaryTextArea); + }; primaryTextArea.Dock = DockStyle.Fill; textAreaPanel.Controls.Add(primaryTextArea); InitializeTextAreaControl(primaryTextArea); @@ -95,6 +113,11 @@ namespace ICSharpCode.TextEditor secondaryTextArea = new TextAreaControl(this); secondaryTextArea.Dock = DockStyle.Bottom; secondaryTextArea.Height = Height / 2; + + secondaryTextArea.TextArea.GotFocus += delegate { + SetActiveTextAreaControl(secondaryTextArea); + }; + textAreaSplitter = new Splitter(); textAreaSplitter.BorderStyle = BorderStyle.FixedSingle ; textAreaSplitter.Height = 8; @@ -104,6 +127,8 @@ namespace ICSharpCode.TextEditor InitializeTextAreaControl(secondaryTextArea); secondaryTextArea.OptionsChanged(); } else { + SetActiveTextAreaControl(primaryTextArea); + textAreaPanel.Controls.Remove(secondaryTextArea); textAreaPanel.Controls.Remove(textAreaSplitter); diff --git a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs index c810653a2e..a5562c803c 100644 --- a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs +++ b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs @@ -259,7 +259,6 @@ namespace ICSharpCode.SharpDevelop.Gui } } else { SelectedNode = null; - this.ContextMenuStrip = null; } } @@ -270,7 +269,7 @@ namespace ICSharpCode.SharpDevelop.Gui base.OnBeforeSelect(e); ExtTreeNode node = e.Node as ExtTreeNode; if (node != null) { - this.ContextMenuStrip = MenuService.CreateContextMenu(e.Node, node.ContextmenuAddinTreePath); + node.ContextMenuStrip = MenuService.CreateContextMenu(e.Node, node.ContextmenuAddinTreePath); } } diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs index 18d9218c27..2c324f1f43 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs @@ -73,7 +73,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor { base.InitializeTextAreaControl(newControl); - newControl.ContextMenuStrip = MenuService.CreateContextMenu(this, contextMenuPath); + newControl.ShowContextMenu += delegate(object sender, MouseEventArgs e) { + MenuService.ShowContextMenu(this, contextMenuPath, (Control)sender, e.X, e.Y); + }; newControl.TextArea.KeyEventHandler += new ICSharpCode.TextEditor.KeyEventHandler(HandleKeyPress); newControl.Caret.PositionChanged += new EventHandler(CaretPositionChanged); newControl.TextArea.ClipboardHandler.CopyText += new CopyTextEventHandler(ClipboardHandlerCopyText);