ravyoli
ravyoli

Reputation: 718

VS2010 Extension - code definition window

I am listening on TextViewCreated from IWpfTextViewCreationListener interface.

How can I use the IWpfTextView I get as a parameter to differentiate between textview belonging to the "code definition window" and the normal text editor?

Thanks!

Upvotes: 2

Views: 282

Answers (1)

JaredPar
JaredPar

Reputation: 755357

Here is the basic code to accomplish this.

static bool IsCodeDefWindow(
    IWpfTextView textView, 
    IVsEditorAdaptersFactoryService editorAdaptersFactoryService, 
    IVsCodeDefView vsCodeDefView)
{
    var vsTextView = editorAdaptersFactoryService.GetViewAdapter(textView);
    if (vsTextView == null)
    {
        // Happens for unshimmed IWpfTextView instances
        return false;
    }

    int isCodeDef;
    return
        ErrorHandler.Succeeded(vsCodeDefView.IsCodeDefView(vsTextView, out isCodeDef)) &&
        isCodeDef != 0;
}

The IVsEditorAdaptersFactoryService is a MEF importable component so it's available via [Import] on your MEF container.

The IVsCodeDefView is an older Visual Studio service. If you have an IServiceProvider it's available via QueryService (be sure to use SVsServiceProvider as the service type and IVsServiceProvider as the interface).

Upvotes: 2

Related Questions