Leksykon IT › Infrastruktura › Zapobieganie kradzieży fokusu

Zapobieganie kradzieży fokusu

Infrastruktura Svenska → Zaktualizowano: 2026-10-09

Reguły menedżera okien, które powstrzymują świeżo otwarte okno przed przejęciem fokusu klawiatury, gdy piszesz w innym — na podstawie znaczników czasu rozstrzyga, czy okno z przodu chciał użytkownik, czy program.

Problem zna każdy, kto wpisał hasło w niewłaściwe pole: program wolno się uruchamia, pojawia się w połowie zdania i przechwytuje resztę zdania oraz Enter, który z zamiłowaniem potwierdza okna dialogowe. Windows ograniczył SetForegroundWindow już w Windows 98 i 2000, tak że pierwszy plan może przejąć tylko proces, który go ma, lub ten, któremu go przekazał; reszta musi zadowolić się migającym przyciskiem na pasku zadań dzięki FlashWindowEx. macOS od początku pozwalał programom zwracać na siebie uwagę podskakiwaniem w Docku zamiast wskakiwaniem na wierzch.

W X11 fokus przez długi czas mógł zabrać każdy klient jednym wywołaniem. KWin dostał poziomy „focus stealing prevention” w KDE 3.2 w 2004 roku, a mechanizm za nimi ustandaryzowano w EWMH 1.3 rok później: to właściwość _NET_WM_USER_TIME, w której program znakuje okno czasem serwera ostatniego naciśnięcia klawisza lub kliknięcia użytkownika. Jeśli nowe okno ma znacznik starszy niż ostatnia interakcja w oknie aktywnym, użytkownik najwyraźniej zajął się czymś innym, więc menedżer okien otwiera je z tyłu z _NET_WM_STATE_DEMANDS_ATTENTION zamiast z fokusem. Startup notification przekazuje znacznik z kliknięcia w launcher, żeby wolny start wciąż liczył się jako chciany, a żądanie _NET_ACTIVE_WINDOW niesie pole źródła, które odróżnia natręctwo programu od kliknięcia na pasku zadań. Całość zależy od tego, czy programy uczciwie prowadzą swoje znaczniki, dlatego niektóre stare aplikacje Motif nadal wskakują na wierzch, kiedy mają ochotę.

← Wróć do leksykonu