Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit a1aebe8

Browse files
fix #285: Method Insight tooltip is invisible and only appears after scrolling
and related bug: Method Insight tooltip is not refreshed after caret moves to different parameter
1 parent 8a733d9 commit a1aebe8

5 files changed

Lines changed: 58 additions & 5 deletions

File tree

src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpInsightItem.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
33

44
using System;
5+
using System.ComponentModel;
56
using System.IO;
67
using System.Text;
78
using System.Windows;
89
using System.Windows.Controls;
910

10-
using ICSharpCode.AvalonEdit.Highlighting;
1111
using ICSharpCode.NRefactory.CSharp;
1212
using ICSharpCode.NRefactory.TypeSystem;
1313
using ICSharpCode.NRefactory.Xml;
@@ -31,6 +31,7 @@ public object Header {
3131
get {
3232
if (header == null) {
3333
header = GenerateHeader();
34+
OnPropertyChanged("Header");
3435
}
3536
return header;
3637
}
@@ -45,6 +46,8 @@ public void HighlightParameter(int parameterIndex)
4546
this.highlightedParameterIndex = parameterIndex;
4647
if (header != null)
4748
header = GenerateHeader();
49+
OnPropertyChanged("Header");
50+
OnPropertyChanged("Content");
4851
}
4952

5053
FlowDocumentScrollViewer GenerateHeader()
@@ -94,6 +97,7 @@ public object Content {
9497
get {
9598
if (content == null) {
9699
GenerateHeader();
100+
OnPropertyChanged("Content");
97101
}
98102
return content;
99103
}
@@ -132,5 +136,14 @@ public override void EndNode(AstNode node)
132136
}
133137
}
134138
}
139+
140+
public event PropertyChangedEventHandler PropertyChanged;
141+
142+
void OnPropertyChanged(string propertyName)
143+
{
144+
var handler = PropertyChanged;
145+
if (handler != null)
146+
handler(this, new PropertyChangedEventArgs(propertyName));
147+
}
135148
}
136149
}

src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItem.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,15 @@ public object Header {
210210
public object Content {
211211
get { return ctor.Documentation; }
212212
}
213+
214+
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
215+
216+
protected virtual void OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs e)
217+
{
218+
var handler = PropertyChanged;
219+
if (handler != null)
220+
handler(this, e);
221+
}
213222
}
214223

215224
class MemberInsightItem : IInsightItem
@@ -237,5 +246,14 @@ public object Header {
237246
public object Content {
238247
get { return member.Documentation; }
239248
}
249+
250+
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
251+
252+
protected virtual void OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs e)
253+
{
254+
var handler = PropertyChanged;
255+
if (handler != null)
256+
handler(this, e);
257+
}
240258
}
241259
}

src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopInsightWindow.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ void insightWindow_items_CollectionChanged(object sender, NotifyCollectionChange
3737
OnPropertyChanged("CurrentHeader");
3838
OnPropertyChanged("CurrentContent");
3939
OnPropertyChanged("CurrentIndexText");
40+
insightWindow.OnSelectedItemChanged(EventArgs.Empty);
4041
}
4142

4243
public event PropertyChangedEventHandler PropertyChanged;
@@ -78,7 +79,7 @@ public object CurrentContent {
7879
}
7980
}
8081

81-
void OnPropertyChanged(string propertyName)
82+
internal void OnPropertyChanged(string propertyName)
8283
{
8384
if (PropertyChanged != null) {
8485
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
@@ -119,6 +120,7 @@ public IInsightItem SelectedItem {
119120

120121
TextDocument document;
121122
Caret caret;
123+
IInsightItem oldSelectedItem;
122124

123125
void AttachEvents()
124126
{
@@ -157,11 +159,30 @@ void document_Changed(object sender, DocumentChangeEventArgs e)
157159

158160
protected virtual void OnSelectedItemChanged(EventArgs e)
159161
{
162+
if (oldSelectedItem != null)
163+
oldSelectedItem.PropertyChanged -= SelectedItemPropertyChanged;
164+
oldSelectedItem = SelectedItem;
165+
if (oldSelectedItem != null)
166+
oldSelectedItem.PropertyChanged += SelectedItemPropertyChanged;
160167
if (SelectedItemChanged != null) {
161168
SelectedItemChanged(this, e);
162169
}
163170
}
164171

172+
void SelectedItemPropertyChanged(object sender, PropertyChangedEventArgs e)
173+
{
174+
var provider = Provider as SDItemProvider;
175+
if (provider == null) return;
176+
switch (e.PropertyName) {
177+
case "Header":
178+
provider.OnPropertyChanged("CurrentHeader");
179+
break;
180+
case "Content":
181+
provider.OnPropertyChanged("CurrentContent");
182+
break;
183+
}
184+
}
185+
165186
public event EventHandler CaretPositionChanged;
166187

167188
protected virtual void OnCaretPositionChanged(EventArgs e)

src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/InsightWindow.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ public InsightWindow(TextArea textArea) : base(textArea)
3434
/// <inheritdoc/>
3535
protected override void OnSourceInitialized(EventArgs e)
3636
{
37-
base.OnSourceInitialized(e);
38-
3937
Rect caret = this.TextArea.Caret.CalculateCaretRectangle();
4038
Point pointOnScreen = this.TextArea.TextView.PointToScreen(caret.Location - this.TextArea.TextView.ScrollOffset);
4139
Rect workingArea = System.Windows.Forms.Screen.FromPoint(pointOnScreen.ToSystemDrawing()).WorkingArea.ToWpf().TransformFromDevice(this);
4240

4341
MaxHeight = workingArea.Height;
4442
MaxWidth = Math.Min(workingArea.Width, Math.Max(1000, workingArea.Width * 0.6));
43+
44+
base.OnSourceInitialized(e);
4545
}
4646

4747
/// <summary>

src/Main/Base/Project/Editor/CodeCompletion/IInsightItem.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
33

44
using System;
5+
using System.ComponentModel;
56

67
namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
78
{
89
/// <summary>
910
/// An item in the insight window.
1011
/// </summary>
11-
public interface IInsightItem
12+
public interface IInsightItem : INotifyPropertyChanged
1213
{
1314
object Header { get; }
1415
object Content { get; }

0 commit comments

Comments
 (0)