Esempio n. 1
0
 void _ResetUp()
 {
     _upTrigger = null;
     _upArgs    = null;
     _upEvent   = 0;
     _upMod     = 0;
 }
Esempio n. 2
0
        bool _HookProc2(TriggerHookContext thc, bool isEdgeMove, ESubtype subtype, HookData.MouseEvent mEvent, POINT pt, byte data, byte dataAnyPart)
        {
            var mod = TrigUtil.GetModLR(out var modL, out var modR) | _eatMod;
            MouseTriggerArgs args = null;

g1:
            if (_d.TryGetValue(_DictKey(subtype, data), out var v))
            {
                if (!isEdgeMove)
                {
                    thc.UseWndFromPoint(pt);
                }
                for (; v != null; v = v.next)
                {
                    var x = v as MouseTrigger;
                    if ((mod & x.modMask) != x.modMasked)
                    {
                        continue;
                    }

                    switch (x.flags & (TMFlags.LeftMod | TMFlags.RightMod))
                    {
                    case TMFlags.LeftMod: if (modL != mod)
                        {
                            continue;
                        }
                        break;

                    case TMFlags.RightMod: if (modR != mod)
                        {
                            continue;
                        }
                        break;
                    }

                    if (isEdgeMove && x.screenIndex != TMScreen.Any)
                    {
                        var screen = x.screenIndex == TMScreen.OfActiveWindow
                                                        ? AScreen.Of(AWnd.Active)
                                                        : AScreen.Index((int)x.screenIndex);
                        if (!screen.Bounds.Contains(pt))
                        {
                            continue;
                        }
                    }

                    if (v.DisabledThisOrAll)
                    {
                        continue;
                    }

                    if (args == null)
                    {
                        thc.args = args = new MouseTriggerArgs(x, thc.Window, mod);                                  //may need for scope callbacks too
                    }
                    else
                    {
                        args.Trigger = x;
                    }

                    if (!x.MatchScopeWindowAndFunc(thc))
                    {
                        continue;
                    }

                    if (x.action == null)
                    {
                        _ResetUp();
                    }
                    else if (0 != (x.flags & TMFlags.ButtonModUp) && (mod != 0 || subtype == ESubtype.Click))
                    {
                        _upTrigger = x;
                        _upArgs    = args;
                        _upEvent   = subtype == ESubtype.Click ? mEvent : 0;
                        _upMod     = mod;
                    }
                    else
                    {
                        thc.trigger = x;
                        _ResetUp();
                    }

                    _eatMod = mod;
                    if (mod != 0)
                    {
                        _SetTempKeybHook();
                        if (thc.trigger != null)
                        {
                            thc.muteMod = TriggerActionThreads.c_modRelease;
                        }
                        else
                        {
                            ThreadPool.QueueUserWorkItem(_ => AKeys.Internal_.ReleaseModAndDisableModMenu());
                        }
                    }

                    //AOutput.Write(mEvent, pt, mod);
                    if (isEdgeMove || 0 != (x.flags & TMFlags.ShareEvent))
                    {
                        return(false);
                    }
                    if (subtype == ESubtype.Click)
                    {
                        _eatUp = mEvent;
                    }
                    return(true);
                }
            }
            if (dataAnyPart != 0)
            {
                data        = dataAnyPart;
                dataAnyPart = 0;
                goto g1;
            }
            return(false);
        }