Jestem nowy w programowaniu X.org. Chcę zbudować małą aplikację, która reaguje na przełącznik układu klawiatury X. Szukałem, ale nie znalazłem, które zdarzenie jest uruchamiane, gdy włączony jest układ kb. Proszę, wskaż mi właściwe wydarzenie. DziękiKtóre zdarzenie jest uruchamiane podczas przełączania układu kb na X.org
Odpowiedz
Istnieje typ zdarzenia XkbStateNotify
, który jest częścią X Keyboard Extension. Można chwycić język układ z nim tak:
void x11Events(XEvent* evt)
{
if(evt->type == xkbEventType) {
XkbEvent* xkbevt = (XkbEvent*)evt;
if (xkbevt->any.xkb_type == XkbStateNotify) {
int lang = xkbevt->state.group;
// Some code using lang here.
}
}
}
Aby uzyskać xkbEventType
wywołać funkcję XkbQueryExtension()
(zadeklarowanego w XKBlib.h
).
Jednak XkbStateNotify
jest uruchamiany nie tylko przy zmianie układu. To jest od specyfikacji wskazanej powyżej:
Zmiany zgłaszane obejmują zmiany w dowolnym aspekcie stanu klawiatury : kiedy modyfikator jest ustawiony lub wyłączony, gdy prąd Grupa zmiany, lub po naciśnięciu wskaźnik jest wciśnięty lub wydany.
Z tego powodu, będziesz musiał zapisać wartość lang
gdzieś, a potem, gdy przychodzi nowy event, porównaj nową wartość lang
do jednego zapisanego wcześniej.
NB. Istnieje również zdarzenie XkbMapNotifyEvent
, które nie informuje o przełączaniu układu jako takiego, ale o zmianie mapowania klawiatury. Możesz także zajrzeć do tego.
Uwaga dla programistów może być wskazówką, jak uzyskać to zdarzenie za pomocą nowoczesnego zestawu narzędzi, takiego jak GTK. – user4815162342
W GTK zwykle nie ma potrzeby przetwarzania surowych 'XEvents'ów (przynajmniej w celu wykrycia zmiany układu), ponieważ istnieją [zdarzenia gdk] (https://developer.gnome.org/pygtk/stable/class- gdkevent.html), który może być użyty do pobrania bieżącej grupy klawiszy. Ponadto wtrącanie w przetwarzanie zdarzeń X w aplikacjach gtk może podważyć zestaw narzędzi, ponieważ ma swoją własną pętlę przetwarzania zdarzeń. Niewiele o Qt, ale podejrzewam, że tam są podobne. – shakurov
To jest dokładnie to, co miałem na myśli - kod równoważny powyższym, ale używanie zdarzeń GDK. Musi być możliwe uzyskanie dostępu do zdarzenia przełącznika układu Xkb z GTK/GDK, ponieważ przynajmniej aplety wskaźników klawiatury muszą wykryć przełącznik. – user4815162342
- 1. Zdarzenie uruchamiane podczas DataGridViewComboBoxColumn SelectedIndexChanged
- 2. Zdarzenie niestandardowe nie jest uruchamiane
- 3. backbone.js: Zdarzenie modelujące, które jest uruchamiane podczas ustawiania atrybutów do istniejących wartości?
- 4. Dlaczego to zdarzenie onpaste nie jest uruchamiane?
- 5. Zdarzenie "przewijanie" nie jest uruchamiane w CompositeView
- 6. Zdarzenie LoadControl i Page_Load nie jest uruchamiane
- 7. Zdarzenie wejściowe zmiany wejścia nie jest uruchamiane na jquery
- 8. Zdarzenie kliknięcia jQuery na przycisku radiowym nie jest uruchamiane
- 9. Jakie jest pierwsze zdarzenie uruchamiane przez dokument HTML?
- 10. Czy zdarzenie jest uruchamiane, gdy powiązanie zostało ustawione dla właściwości?
- 11. Zdarzenie KeyDown nie jest uruchamiane przy użyciu programu .NET WinForms?
- 12. Angular JS: Dlaczego moje zdarzenie kliknięcia jest uruchamiane dwa razy?
- 13. Czy zdarzenie TextChanged jest uruchamiane, jeśli tekst się nie zmienił?
- 14. Dlaczego zdarzenie przesyłania formularza nie jest uruchamiane (jQuery)?
- 15. Zdarzenie Safari image.onload nie jest uruchamiane z adresem Blob
- 16. Korzystanie z bootboxa zdarzenie show nie jest uruchamiane
- 17. JQuery - Zdarzenie checkbox-change nie jest uruchamiane, jeśli jest zaznaczone przy użyciu JQuery
- 18. NotImplementedError podczas przełączania do Poltergeist
- 19. Jakie zdarzenie jest uruchamiane, gdy element na liście wyboru/rozwijania HTML jest zaznaczony?
- 20. Dlaczego wydarzenie jest uruchamiane podczas kompilacji aplikacji VB6?
- 21. Lista zdarzeń, które są uruchamiane w DOM
- 22. Stuknij w zdarzenie uruchamiane po taflinie jQuery Mobile 1.1.1
- 23. Serwer RStudio - zawiesza się podczas przełączania projektów
- 24. Zdarzenie postępu XHR nie jest uruchamiane, dopóki nie zakończy się przesyłanie?
- 25. Podczas przełączania między działaniami wyświetlany jest biały ekran
- 26. Pole wyboru nie jest sprawdzane podczas przełączania jquery
- 27. Zdarzenie kliknięcia szkieletu nie uruchamiane w widoku dynamicznym
- 28. Kiedy dokładnie jest uruchamiane `componentDidMount`?
- 29. Zapobieganie przewijaniu strony podczas przełączania ostrości
- 30. Wideo View na Viewpager, zatrzymywanie wideo podczas przełączania strony
Co robisz, aby zmienić układ klawiatury? Czy używasz klienta GUI? Lub edytując plik konfiguracyjny? Kiedy zmiana wejdzie w życie? Są to wskazówki, które mogą pomóc nam dowiedzieć się, gdzie szukać. –
Przełączanie między układem językowym (en, cs, ...). Klient GUI, który nasłuchuje przełącznika kb (np. Skonfigurowałem obie zmiany, aby zmienić układ klawiatury, a ten przełącznik generuje zdarzenie, które chcę przechwycić i wykonać pewną operację). Powinien to być kod c/C++. – Pat
Czy możesz napisać jakiś kod? – JoRouss