void _ResetUp() { _upTrigger = null; _upArgs = null; _upEvent = 0; _upMod = 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); }