public bool PreProcessKeyEvent(KeyDescriptor descriptor)
{
if (descriptor.SpecialKey == SpecialKey.Escape)
{
CompletionWindowManager.HideWindow();
return(true);
}
KeyActions ka = KeyActions.None;
bool keyHandled = false;
if (CompletionDataList != null)
{
foreach (ICompletionKeyHandler handler in CompletionDataList.KeyHandler)
{
if (handler.PreProcessKey(facade, descriptor, out ka))
{
keyHandled = true;
break;
}
}
}
if (!keyHandled)
{
ka = PreProcessKey(descriptor);
}
if ((ka & KeyActions.Complete) != 0)
{
CompleteWord(ref ka, descriptor);
}
if ((ka & KeyActions.CloseWindow) != 0)
{
CompletionWindowManager.HideWindow();
OnWindowClosed(EventArgs.Empty);
}
if ((ka & KeyActions.Ignore) != 0)
{
return(true);
}
if ((ka & KeyActions.Process) != 0)
{
if (descriptor.SpecialKey == SpecialKey.Left || descriptor.SpecialKey == SpecialKey.Right)
{
// Close if there's a modifier active EXCEPT lock keys and Modifiers
// Makes an exception for Mod1Mask (usually alt), shift, control, meta and super
// This prevents the window from closing if the num/scroll/caps lock are active
// FIXME: modifier mappings depend on X server settings
// if ((modifier & ~(Gdk.ModifierType.LockMask | (Gdk.ModifierType.ModifierMask & ~(Gdk.ModifierType.ShiftMask | Gdk.ModifierType.Mod1Mask | Gdk.ModifierType.ControlMask | Gdk.ModifierType.MetaMask | Gdk.ModifierType.SuperMask)))) != 0) {
// this version doesn't work for my system - seems that I've a modifier active
// that gdk doesn't know about. How about the 2nd version - should close on left/rigt + shift/mod1/control/meta/super
if ((descriptor.ModifierKeys & (ModifierKeys.Shift | ModifierKeys.Alt | ModifierKeys.Control | ModifierKeys.Command)) != 0)
{
CompletionWindowManager.HideWindow();
OnWindowClosed(EventArgs.Empty);
return(false);
}
if (declarationviewwindow != null && declarationviewwindow.Multiple)
{
if (descriptor.SpecialKey == SpecialKey.Left)
{
declarationviewwindow.OverloadLeft();
}
else
{
declarationviewwindow.OverloadRight();
}
}
else
{
CompletionWindowManager.HideWindow();
OnWindowClosed(EventArgs.Empty);
return(false);
}
return(true);
}
if (completionDataList != null && completionDataList.CompletionSelectionMode == CompletionSelectionMode.OwnTextField)
{
return(true);
}
}
return(false);
}