Browse Source

Fixed SD2-768: Context menu location when opened via Shift+F10

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1332 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
3f5b19ca38
  1. 22
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaControl.cs
  2. 29
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControl.cs
  3. 3
      src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs
  4. 4
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs

22
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaControl.cs

@ -112,7 +112,6 @@ namespace ICSharpCode.TextEditor
ResizeRedraw = true; ResizeRedraw = true;
Document.DocumentChanged += new DocumentEventHandler(AdjustScrollBars); Document.DocumentChanged += new DocumentEventHandler(AdjustScrollBars);
SetStyle(ControlStyles.Selectable, true);
} }
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
@ -322,5 +321,26 @@ namespace ICSharpCode.TextEditor
textArea.SetDesiredColumn(); textArea.SetDesiredColumn();
ScrollToCaret(); 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);
}
} }
} }

29
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControl.cs

@ -51,16 +51,30 @@ namespace ICSharpCode.TextEditor
} }
} }
TextAreaControl activeTextAreaControl;
public override TextAreaControl ActiveTextAreaControl { public override TextAreaControl ActiveTextAreaControl {
get { 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() public TextEditorControl()
{ {
SetStyle(ControlStyles.ContainerControl, true); SetStyle(ControlStyles.ContainerControl, true);
SetStyle(ControlStyles.Selectable, true);
textAreaPanel.Dock = DockStyle.Fill; textAreaPanel.Dock = DockStyle.Fill;
@ -68,6 +82,10 @@ namespace ICSharpCode.TextEditor
Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy(); Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy();
primaryTextArea = new TextAreaControl(this); primaryTextArea = new TextAreaControl(this);
activeTextAreaControl = primaryTextArea;
primaryTextArea.TextArea.GotFocus += delegate {
SetActiveTextAreaControl(primaryTextArea);
};
primaryTextArea.Dock = DockStyle.Fill; primaryTextArea.Dock = DockStyle.Fill;
textAreaPanel.Controls.Add(primaryTextArea); textAreaPanel.Controls.Add(primaryTextArea);
InitializeTextAreaControl(primaryTextArea); InitializeTextAreaControl(primaryTextArea);
@ -95,6 +113,11 @@ namespace ICSharpCode.TextEditor
secondaryTextArea = new TextAreaControl(this); secondaryTextArea = new TextAreaControl(this);
secondaryTextArea.Dock = DockStyle.Bottom; secondaryTextArea.Dock = DockStyle.Bottom;
secondaryTextArea.Height = Height / 2; secondaryTextArea.Height = Height / 2;
secondaryTextArea.TextArea.GotFocus += delegate {
SetActiveTextAreaControl(secondaryTextArea);
};
textAreaSplitter = new Splitter(); textAreaSplitter = new Splitter();
textAreaSplitter.BorderStyle = BorderStyle.FixedSingle ; textAreaSplitter.BorderStyle = BorderStyle.FixedSingle ;
textAreaSplitter.Height = 8; textAreaSplitter.Height = 8;
@ -104,6 +127,8 @@ namespace ICSharpCode.TextEditor
InitializeTextAreaControl(secondaryTextArea); InitializeTextAreaControl(secondaryTextArea);
secondaryTextArea.OptionsChanged(); secondaryTextArea.OptionsChanged();
} else { } else {
SetActiveTextAreaControl(primaryTextArea);
textAreaPanel.Controls.Remove(secondaryTextArea); textAreaPanel.Controls.Remove(secondaryTextArea);
textAreaPanel.Controls.Remove(textAreaSplitter); textAreaPanel.Controls.Remove(textAreaSplitter);

3
src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs

@ -259,7 +259,6 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} else { } else {
SelectedNode = null; SelectedNode = null;
this.ContextMenuStrip = null;
} }
} }
@ -270,7 +269,7 @@ namespace ICSharpCode.SharpDevelop.Gui
base.OnBeforeSelect(e); base.OnBeforeSelect(e);
ExtTreeNode node = e.Node as ExtTreeNode; ExtTreeNode node = e.Node as ExtTreeNode;
if (node != null) { if (node != null) {
this.ContextMenuStrip = MenuService.CreateContextMenu(e.Node, node.ContextmenuAddinTreePath); node.ContextMenuStrip = MenuService.CreateContextMenu(e.Node, node.ContextmenuAddinTreePath);
} }
} }

4
src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs

@ -73,7 +73,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
{ {
base.InitializeTextAreaControl(newControl); 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.TextArea.KeyEventHandler += new ICSharpCode.TextEditor.KeyEventHandler(HandleKeyPress);
newControl.Caret.PositionChanged += new EventHandler(CaretPositionChanged); newControl.Caret.PositionChanged += new EventHandler(CaretPositionChanged);
newControl.TextArea.ClipboardHandler.CopyText += new CopyTextEventHandler(ClipboardHandlerCopyText); newControl.TextArea.ClipboardHandler.CopyText += new CopyTextEventHandler(ClipboardHandlerCopyText);

Loading…
Cancel
Save