IT-lexicon › Programmeren › WM_TAKE_FOCUS

WM_TAKE_FOCUS

Programmeren Svenska → Bijgewerkt: 2026-10-09

Het ICCCM-protocol dat samen met één vlag in WM_HINTS vier verschillende antwoorden geeft op de vraag wie bepaalt waar de toetsenbordfocus heen gaat: de applicatie, de window manager of niemand.

Toetsenbordfocus in X is één enkel venster, en XSetInputFocus kan door iedereen worden aangeroepen. ICCCM moest regelen wie dat doet wanneer de gebruiker op een venster klikt, en het antwoord werd een matrix. Het veld input in WM_HINTS zegt of de applicatie wil dat de window manager haar de focus geeft; WM_TAKE_FOCUS opnemen in WM_PROTOCOLS zegt of ze het bericht wil ontvangen. Vier combinaties: No Input, voor xclock en xload, die nooit het toetsenbord willen; Passive, waarbij de window manager eenvoudig de focus op het toplevel-venster zet en de applicatie tevreden is, zoals xterm; Locally Active, waarbij de window manager de focus zet en bovendien het bericht stuurt, zodat de applicatie de focus kan doorgeven aan het juiste tekstveld onder haar eigen subvensters; en Globally Active, waarbij de window manager de focus nooit aanraakt maar alleen het bericht stuurt en de applicatie zelf laat beslissen.

Het bericht bevat een tijdstempel, en de applicatie moet die gebruiken in plaats van CurrentTime in haar eigen aanroep, anders kan een oudere klik een nieuwere verslaan. De modellen verklaren een heel genre bugrapporten. Motif- en Xt-programma's zijn Locally Active, net als GTK en Qt. Java's AWT koos voor Globally Active en pakt de focus via een eigen proxyvenster, een van de redenen dat Javaprogramma's jarenlang moeite hadden het toetsenbord te krijgen in tiling window managers als dwm en xmonad. Window managers die de matrix negeren en gewoon de focus zetten, werken meestal — tot ze een programma tegenkomen dat ICCCM serieus nam.

← Terug naar het lexicon