{"record":{"id":"009dc24275cf84cf","repo":"tui-cs/Terminal.Gui","slug":"mouseholdrepeat-only-accepts-null-pressed-releas","errorCode":null,"errorMessage":"MouseHoldRepeat only accepts null, Pressed, Released or Clicked mouse flags.","messagePattern":"MouseHoldRepeat only accepts null, Pressed, Released or Clicked mouse flags\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Terminal.Gui/ViewBase/Mouse/View.Mouse.cs","lineNumber":333,"sourceCode":"            {\n                bool isPressed = (value.Value & (MouseFlags.LeftButtonPressed | MouseFlags.MiddleButtonPressed | MouseFlags.RightButtonPressed)) != 0;\n                bool isReleased = (value.Value & (MouseFlags.LeftButtonReleased | MouseFlags.MiddleButtonReleased | MouseFlags.RightButtonReleased)) != 0;\n\n                bool isClicked = (value.Value\n                                  & (MouseFlags.LeftButtonClicked\n                                     | MouseFlags.MiddleButtonClicked\n                                     | MouseFlags.RightButtonClicked\n                                     | MouseFlags.LeftButtonDoubleClicked\n                                     | MouseFlags.MiddleButtonDoubleClicked\n                                     | MouseFlags.RightButtonDoubleClicked\n                                     | MouseFlags.LeftButtonTripleClicked\n                                     | MouseFlags.MiddleButtonTripleClicked\n                                     | MouseFlags.RightButtonTripleClicked))\n                                 != 0;\n\n                if (!isReleased && !isPressed && !isClicked)\n                {\n                    throw new ArgumentException (@\"MouseHoldRepeat only accepts null, Pressed, Released or Clicked mouse flags.\", nameof (value));\n                }\n            }\n\n            CWPPropertyHelper.ChangeProperty (this,\n                                              ref field,\n                                              value,\n                                              OnMouseHoldRepeatChanging,\n                                              MouseHoldRepeatChanging,\n                                              DoWork,\n                                              OnMouseHoldRepeatChanged,\n                                              MouseHoldRepeatChanged,\n                                              out _);\n\n            return;\n\n            void DoWork (MouseFlags? newValue)\n            {\n                if (newValue.HasValue)","sourceCodeStart":315,"sourceCodeEnd":351,"githubUrl":"https://github.com/tui-cs/Terminal.Gui/blob/2e47b11478db083499917f2ad27c34d30efb0df1/Terminal.Gui/ViewBase/Mouse/View.Mouse.cs#L315-L351","documentation":"The MouseHoldRepeat property enables auto-repeat behavior for a mouse button held down. It only accepts null (disabled), or a single MouseFlags value from the Pressed, Released, or Clicked families (Left/Middle/Right variants of each). Any value outside these four families (e.g. wheel, button4, or a bare modifier flag) is rejected because the repeat timer can only fire on a concrete button-press lifecycle event.","triggerScenarios":"Setting view.MouseHoldRepeat to MouseFlags.WheeledUp, MouseFlags.WheeledDown, MouseFlags.Button1Clicked combined with a bare flag like MouseFlags.ButtonShift, or any MouseFlags value that does not include at least one of LeftButtonPressed/Released/Clicked (or the Middle/Right equivalents).","commonSituations":"Porting a v1 scroll handler that used wheel events for auto-repeat; passing a flags enum built by OR-ing multiple button families; forgetting the property models a single hold gesture, not an arbitrary binding.","solutions":["Use a single Clicked or Pressed flag from one button family, e.g. MouseFlags.LeftButtonClicked.","Pass null to disable the repeat timer entirely.","If you need wheel-based scrolling, bind a mouse handler via MouseBindings instead of MouseHoldRepeat."],"exampleFix":"// before\nview.MouseHoldRepeat = MouseFlags.WheeledUp;\n// after\nview.MouseHoldRepeat = MouseFlags.LeftButtonPressed;","handlingStrategy":"validation","validationCode":"static MouseFlags? ValidHoldRepeat (MouseFlags? f) =>\n    f is null || (((int)f.Value & 0b111) != 0) ? f : null;\n// then: view.MouseHoldRepeat = ValidHoldRepeat(myFlags) ?? throw new ArgumentException(\"bad flags\");","typeGuard":"static bool IsValidMouseHoldRepeat (MouseFlags? f) =>\n    f is null || (f.Value & (MouseFlags.LeftButtonPressed | MouseFlags.MiddleButtonPressed |\n        MouseFlags.RightButtonPressed | MouseFlags.LeftButtonReleased | MouseFlags.MiddleButtonReleased |\n        MouseFlags.RightButtonReleased | MouseFlags.LeftButtonClicked | MouseFlags.MiddleButtonClicked |\n        MouseFlags.RightButtonClicked | MouseFlags.LeftButtonDoubleClicked | MouseFlags.MiddleButtonDoubleClicked |\n        MouseFlags.RightButtonDoubleClicked | MouseFlags.LeftButtonTripleClicked | MouseFlags.MiddleButtonTripleClicked |\n        MouseFlags.RightButtonTripleClicked)) != 0;","tryCatchPattern":null,"preventionTips":["Only use single Pressed/Released/Clicked flags from one button family.","Use null to disable, not an arbitrary flag.","Reserve wheel events for MouseBindings, not MouseHoldRepeat."],"tags":["mouse","mouseholdrepeat","input","validation"],"backgroundTag":null,"analyzedSha":"2e47b11478db083499917f2ad27c34d30efb0df1","analyzedAt":"2026-08-13T19:20:08.826Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}