Created
September 30, 2016 20:52
-
-
Save nathanielcook/5ed019bb523187794c2b7c50d7a51138 to your computer and use it in GitHub Desktop.
NoCmdClickTextEditorExtension.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class NoCmdClickTextEditorExtension : TextEditorExtension | |
{ | |
static PropertyInfo textEditorExtensionChainProperty; | |
static PropertyInfo nextProperty; | |
static PropertyInfo linksShownProperty; | |
static NoCmdClickTextEditorExtension() | |
{ | |
textEditorExtensionChainProperty = typeof(TextEditor).GetProperty("TextEditorExtensionChain", BindingFlags.NonPublic | BindingFlags.Instance); | |
nextProperty = typeof(TextEditorExtension).GetProperty("Next", BindingFlags.NonPublic | BindingFlags.Instance); | |
linksShownProperty = typeof(AbstractNavigationExtension).GetProperty("LinksShown", BindingFlags.NonPublic | BindingFlags.Static); | |
Gtk.Key.SnooperInstall(KeySnooper); | |
} | |
static int KeySnooper(Gtk.Widget widget, Gdk.EventKey evnt) | |
{ | |
if (evnt != null && evnt.Type == Gdk.EventType.KeyPress && evnt.Key == Gdk.Key.Meta_L || evnt.Key == Gdk.Key.Meta_R) | |
{ | |
SetLinksShownToFalse(); | |
} | |
return 0; // false, continue processing this event | |
} | |
protected override void Initialize() | |
{ | |
this.Editor.MouseMoved += Editor_MouseMoved; | |
} | |
void Editor_MouseMoved(object sender, MouseMovedEventArgs e) | |
{ | |
SetLinksShownToFalse(); | |
} | |
public override void Dispose() | |
{ | |
this.Editor.MouseMoved -= Editor_MouseMoved; | |
base.Dispose(); | |
} | |
static void SetLinksShownToFalse() | |
{ | |
var editor = IdeApp.Workbench.ActiveDocument.Editor; | |
if (editor != null) | |
{ | |
var firstExtension = GetTextEditorExtensionChain(editor); | |
TextEditorExtension nextExtension = firstExtension; | |
do | |
{ | |
var nextExtensionType = nextExtension.GetType(); | |
if (nextExtensionType.Name == "CSharpNavigationTextEditorExtension") | |
{ | |
linksShownProperty.SetValue(nextExtension, false); | |
break; | |
} | |
} while ((nextExtension = GetNextExtension(nextExtension)) != null); | |
} | |
} | |
static TextEditorExtension GetTextEditorExtensionChain(TextEditor editor) | |
{ | |
return (TextEditorExtension)textEditorExtensionChainProperty.GetValue(editor); | |
} | |
static TextEditorExtension GetNextExtension(TextEditorExtension thisExtension) | |
{ | |
return (TextEditorExtension)nextProperty.GetValue(thisExtension); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment