[nemerle] r8425 committed - Fix WpfHint behavior. 1. The conflict between WpfHint and smart tag el...

6 views
Skip to first unread message

codesite...@google.com

unread,
Nov 4, 2009, 2:52:10 AM11/4/09
to nemer...@googlegroups.com
Revision: 8425
Author: v...@rsdn.ru
Date: Tue Nov 3 23:51:04 2009
Log: Fix WpfHint behavior. 1. The conflict between WpfHint and smart tag
eliminated. 2. WM_-messages now translated before unsubclass window is done.
http://code.google.com/p/nemerle/source/detail?r=8425

Modified:
/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/GUI/WpfHint/HintSource.cs

/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/LanguageService/NemerleLanguageService.cs

/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/LanguageService/NemerleSource.cs

/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/LanguageService/SmatrTegs/NemerleSmartTagData.cs

=======================================
---
/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/GUI/WpfHint/HintSource.cs
Mon Nov 2 13:36:32 2009
+++
/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/GUI/WpfHint/HintSource.cs
Tue Nov 3 23:51:04 2009
@@ -67,8 +67,10 @@

private int WndProc(IntPtr hwnd, int msg, int wParam, int lParam)
{
- if ((msg == Win32.WM_KEYDOWN || msg == Win32.WM_MOUSEWHEEL) &&
Activate != null)
- Activate();
+ int result = Win32.CallWindowProc(_oldOwner, hwnd, msg, wParam, lParam);
+
+ if ((msg == Win32.WM_KEYDOWN || msg == Win32.WM_MOUSEWHEEL) &&
Activate != null)
+ Activate();

if ((msg == Win32.WM_LBUTTONDOWN || msg == Win32.WM_RBUTTONDOWN) &&
Activate != null)
Activate();
@@ -79,15 +81,17 @@
if (msg == Win32.WM_MOUSELEAVE && MouseLeave != null)
MouseLeave();

- return Win32.CallWindowProc(_oldOwner, hwnd, msg, wParam, lParam);
+ return result;
}

private int RootWndProc(IntPtr hwnd, int msg, int wParam, int lParam)
{
+ int result = Win32.CallWindowProc(_oldRoot, hwnd, msg, wParam, lParam);
+
if ((msg == Win32.WM_ACTIVATE || msg == Win32.WM_ACTIVATEAPP) &&
Activate != null)
Activate();

- return Win32.CallWindowProc(_oldRoot, hwnd, msg, wParam, lParam);
+ return result;
}

#region Implementation of IDisposable
=======================================
---
/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/LanguageService/NemerleLanguageService.cs
Mon Nov 2 09:09:59 2009
+++
/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/LanguageService/NemerleLanguageService.cs
Tue Nov 3 23:51:04 2009
@@ -40,6 +40,7 @@
{
#region Fields

+ public bool IsSmartTagActive { get; private set; }
public static Engine DefaultEngine { get; private set; }
public bool IsDisposed { get; private set; }
IVsStatusbar _statusbar;
@@ -113,13 +114,16 @@
var endPos = source.GetPositionOfLineIndex(loc.EndLine, loc.EndColumn);
var length = endPos - pos;

- var smartTagData = new NemerleSmartTagData(pos, length, cmdSet, exec,
queryStatus);
+ var smartTagData = new NemerleSmartTagData(pos, length, cmdSet, exec,
queryStatus,
+ () => IsSmartTagActive = false);
ErrorHelper.ThrowOnFailure(smartTagWin.SetSmartTagData(smartTagData));

var shouContextMenu = showMenu ?
(uint)TipWindowFlags2.UTW_EXPANDED : 0;

var viewEx = (IVsTextViewEx)textView;
ErrorHelper.ThrowOnFailure(viewEx.UpdateSmartTagWindow(smartTagWin,
shouContextMenu));
+
+ IsSmartTagActive = true;
}

internal void ShowSmartTag(IVsTextView textView, bool showMenu, Location
loc, MenuCmd.CmdId contextMenuId, Action<MenuCmd.CmdId> exec,
Func<MenuCmd.CmdId, uint> queryStatus)
@@ -149,7 +153,7 @@
Type typeSTagWin = typeof(VsSmartTagTipWindowClass);
Guid clsidSTagWin = typeSTagWin.GUID;
Guid iidSTagWin = typeof(IVsSmartTagTipWindow).GUID;
- _smartTagWin = pkg.CreateInstance(ref clsidSTagWin, ref
iidSTagWin, typeSTagWin) as IVsSmartTagTipWindow;
+ _smartTagWin = (IVsSmartTagTipWindow)pkg.CreateInstance(ref
clsidSTagWin, ref iidSTagWin, typeSTagWin);
Debug.Assert(_smartTagWin != null);
}

=======================================
---
/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/LanguageService/NemerleSource.cs
Mon Nov 2 09:09:59 2009
+++
/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/LanguageService/NemerleSource.cs
Tue Nov 3 23:51:04 2009
@@ -1487,6 +1487,10 @@
internal int GetDataTipText(IVsTextView view, TextSpan[] textSpan, out
string hintText)
{
hintText = null;
+
+ if (Service.IsSmartTagActive)
+ return (int)TipSuccesses2.TIP_S_NODEFAULTTIP;
+
var loc = Utils.LocationFromSpan(FileIndex, textSpan[0]);

if (_tipAsyncRequest == null || _tipAsyncRequest.Line != loc.Line ||
_tipAsyncRequest.Column != loc.Column)
=======================================
---
/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/LanguageService/SmatrTegs/NemerleSmartTagData.cs
Mon Oct 19 04:51:16 2009
+++
/nemerle/trunk/VsIntegration/Nemerle.VisualStudio/LanguageService/SmatrTegs/NemerleSmartTagData.cs
Tue Nov 3 23:51:04 2009
@@ -13,16 +13,23 @@
namespace Nemerle.VisualStudio.LanguageService
{
class NemerleSmartTagData : IVsSmartTagData, IOleCommandTarget
- {
- readonly Guid _cmdSet;
- readonly int _pos;
+ {
+ readonly Guid _cmdSet;
+ readonly int _pos;
readonly int _length;
readonly Action<T> _exec;
- readonly Func<T, uint> _queryStatus;
+ readonly Func<T, uint> _queryStatus;
+ readonly Action _onDismiss;


- public NemerleSmartTagData(int pos, int length, Guid cmdSet, Action<T>
exec, Func<T, uint> queryStatus)
- {
+ public NemerleSmartTagData(
+ int pos,
+ int length,
+ Guid cmdSet,
+ Action<T> exec,
+ Func<T, uint> queryStatus,
+ Action onDismiss)
+ {
ErrorHelper.ThrowIsNull(cmdSet, "cmdSet");

_cmdSet = cmdSet;
@@ -30,67 +37,70 @@
_length = length;
_exec = exec;
_queryStatus = queryStatus;
- }
-
- #region IVsSmartTagData Members
-
- int IVsSmartTagData.GetContextMenuInfo(out Guid guidID, out int
nMenuID, out IOleCommandTarget pCmdTarget)
- {
- guidID = MenuCmd.guidNemerleProjectCmdSet;
- nMenuID = (int)MenuCmd.CmdId.SmartTagContextMenu;
- pCmdTarget = this;
-
- return VSConstants.S_OK;
- }
-
- int IVsSmartTagData.GetContextStream(out int pos, out int length)
- {
- pos = _pos;
- length = _length;
-
- return VSConstants.S_OK;
- }
-
- int IVsSmartTagData.GetImageIndex(out int piIndex)
- {
- piIndex = 2;
- return VSConstants.S_OK;
- }
-
- int IVsSmartTagData.GetTimerInterval(out int time)
- {
- time = 0;
- return VSConstants.S_OK;
- }
-
- int IVsSmartTagData.GetTipText(out string pbstrTipText)
- {
- pbstrTipText = "pbstrTipText!!!";
- return VSConstants.S_OK;
- }
-
- int IVsSmartTagData.IsLeftJustified(out int pfIsLeftJustified)
- {
- pfIsLeftJustified = 1;
- return VSConstants.S_OK;
- }
-
- int IVsSmartTagData.OnDismiss()
- {
- return VSConstants.S_OK;
- }
-
- int IVsSmartTagData.OnInvocation()
- {
- return VSConstants.E_NOTIMPL;
- }
-
- int IVsSmartTagData.UpdateView()
- {
- return VSConstants.E_NOTIMPL;
- }
-
- #endregion
+ _onDismiss = onDismiss;
+ }
+
+ #region IVsSmartTagData Members
+
+ int IVsSmartTagData.GetContextMenuInfo(out Guid guidID, out int nMenuID,
out IOleCommandTarget pCmdTarget)
+ {
+ guidID = MenuCmd.guidNemerleProjectCmdSet;
+ nMenuID = (int)MenuCmd.CmdId.SmartTagContextMenu;
+ pCmdTarget = this;
+
+ return VSConstants.S_OK;
+ }
+
+ int IVsSmartTagData.GetContextStream(out int pos, out int length)
+ {
+ pos = _pos;
+ length = _length;
+
+ return VSConstants.S_OK;
+ }
+
+ int IVsSmartTagData.GetImageIndex(out int piIndex)
+ {
+ piIndex = 2;
+ return VSConstants.S_OK;
+ }
+
+ int IVsSmartTagData.GetTimerInterval(out int time)
+ {
+ time = 0;
+ return VSConstants.S_OK;
+ }
+
+ int IVsSmartTagData.GetTipText(out string pbstrTipText)
+ {
+ pbstrTipText = "pbstrTipText!!!";
+ return VSConstants.S_OK;
+ }
+
+ int IVsSmartTagData.IsLeftJustified(out int pfIsLeftJustified)
+ {
+ pfIsLeftJustified = 1;
+ return VSConstants.S_OK;
+ }
+
+ int IVsSmartTagData.OnDismiss()
+ {
+ if (_onDismiss != null)
+ _onDismiss();
+ return VSConstants.S_OK;
+ }
+
+ int IVsSmartTagData.OnInvocation()
+ {
+ return VSConstants.E_NOTIMPL;
+ }
+
+ int IVsSmartTagData.UpdateView()
+ {
+ return VSConstants.E_NOTIMPL;
+ }
+
+ #endregion

#region IOleCommandTarget Members

Reply all
Reply to author
Forward
0 new messages