Ничего страшного  в нет в том, что процесс разбит на три части:
"вход в режим", "работа в режиме" и "выход из режима";

Вы посмотрите как реализована обработка:

| USER32.WMLButtonDown, USER32.WMRButtonDown, USER32.WMMButtonDown:
IF wnd # USER32.GetFocus() THEN
res := USER32.SendMessageA(client, USER32.WMMDIActivate, wnd, 0);
res := USER32.SetFocus(wnd)
END;
(*мышь мы захватили, никуда она от нас не денется*)
res := USER32.SetCapture(wnd);
Kernel.Try(HandleMouse, wnd, wParam + 256, lParam);
(*следующую строчку по хорошему убрать*)
IF USER32.GetCapture() = wnd THEN res := USER32.ReleaseCapture() END;
Controllers.ResetCurrentPath();
RETURN 0
потом для view в HandleMouse генерируется:
Controllers.TrackMsg

а у же в обработчике вызываем Input

PROCEDURE (rd: Rider) Input* (OUT x, y: INTEGER; OUT modifiers: SET; OUT isDown: BOOLEAN);
VAR msg: USER32.Message; wnd, mw: USER32.Handle; pt: USER32.Point; res: INTEGER; set: SET;
BEGIN
wnd := rd.port.wnd; mw := USER32.GetCapture();
(*USER32.PeekMessageA тоже можно убрать*)
IF USER32.PeekMessageA(msg, mw, USER32.WMMouseMove, USER32.WMMButtonDblClk, 1) # 0 THEN
mx := (msg.lParam + 32768) MOD 65536 - 32768; my := msg.lParam DIV 65536;
IF (mw # 0) & (wnd # mw) THEN
pt.x := mx; pt.y := my; res := USER32.ClientToScreen(mw, pt);
res := USER32.ScreenToClient(wnd, pt); mx := pt.x; my := pt.y
END;
mb := {};
....
обработали.

Потом так же вызываем Input при движении мыши.

по
| USER32.WMLButtonUp, USER32.WMRButtonUp, USER32.WMMButtonUp:
Kernel.Try(HandleMouse, wnd, wParam, lParam);
(* освобождаем захват*)
IF USER32.GetCapture() = wnd THEN res := USER32.ReleaseCapture() END;
Controllers.ResetCurrentPath();

Все сообщения мы получим и узнаем за пределами окна или нет отпущена мышь, а дальнейшая логика зависит от логики программы.

Зато нет REPEAT f.Input(x, y, m, isDown) UNTIL ~isDown; как-будто какой-то фоновой процесс возьмет да и сопрет мышонка.
Фоновые задачи они и должны выполнять другие функции, а не воровать мышь.

А так получается:
1. Нет нагрузки на процессор.
2. Очередь сообщений работает.
3. Взаимодействие с пользователем проходит нормально.
4. Переносимость от этого не страдает.

Тысячи приложений под Windows (думаю и под Unix все обстоит примерно так же) работают с мышью по схеме
"вход в режим", "работа в режиме" и "выход из режима"
и ничего. Никто у них мышь при этом не вырывает.