Przechwycić WM_DELETE_WINDOW na X11?
Chciałbym przechwycić wiadomość
WM_DELETE_WINDOWwysyłaną do określonego wyboru systemu Windows, który piszę (
AllTray
http://alltray.trausch.us/), abym mógł działać na jej podstawie, zamiast otrzymywać ją od wniosku. Obecnie rozważam wypróbowanie tego na poziomie GDK
przez
gdk_display_add_client_message_filterhttp://library.gnome.org/devel ... ilter
jeśli to możliwe, ale byłbym zadowolony z rozwiązania Xlib, gdyby takie też istniało; wydaje się
jest to możliwe, ale po prostu nie rozumiem, jak mogę to zrobić z powodzeniem.
Obecnie mam dwa programy (napisane w C), których próbuję użyć do rozwiązania tego problemu: pierwszy nie robi nic poza utworzeniem okna i zarejestrowaniem, że wie o
WM_DELETE_WINDOW, a drugi próbuje złapać ta wiadomość, ale wydaje się, że tego nie robi; wydaje się, że nic nie robi. Czy dobrze rozumiem dokumentację dotyczącą tego problemu, czy jest jeszcze coś, co muszę zrobić (lub czy muszę całkowicie unikać korzystania z GDK w tym celu)?
Tło jest takie: zanim przepisałem AllTray, najwyraźniej próbował przechwycić kliknięcie myszą samego przycisku X. W przypadku niektórych menedżerów okien działało to dobrze, dla innych w ogóle nie działało, a dla innych użytkownik musiał to skonfigurować ręcznie i powiedz AllTray, gdzie znajduje się przycisk zamykania okna. To, czego szukam, to rozwiązanie, które nie zawiera
LD_LIBRARY_PRELOADi będzie działać dla dowolnej kombinacji menedżera okien/aplikacji, która spełnia aktualne standardy i wysyła
WM_DELETE_WINDOWClientMessage., Gdy okno zamknięte.
UPDATE
: Nadal szukam odpowiedzi. Trasa, którą obecnie wybieram, polega na próbie zmiany koloru okna i samodzielnego kontrolowania go, ale po prostu nie mogę go uruchomić. Po odrodzeniu wydaje mi się, że nie jestem w stanie go odzyskać. Być może brakuje mi czegoś bardzo podstawowego, ale nie mogę dowiedzieć się, jak sprawić, by pojawiło się ponownie w moim własnym oknie, aby przywrócić je na ekranie.
UPDATE 2
OK, więc natknąłem się na kolejną ceglaną ścianę. Dokumentacja serwera X mówi, aby ustawić StructureNotifyMask w masce zdarzeń okna, aby odbierać zdarzenia MapNotify i ReparentNotify. Byłbym zainteresowany, aby uzyskać oba. Moim obecnym zamysłem było stworzenie okna, które służyłoby po prostu jako odbiornik wydarzeń, a kiedy otrzymuję zdarzenia dla interesujących rzeczy, działam na nich, tworząc i przerysowując. Jednak to po prostu nie działa. Jedyne zdarzenia, które faktycznie otrzymuję, to zdarzenia PropertyNotify. Więc ta trasa też nie wydaje się zbyt przydatna.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
4 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
„Hooking X11”
http://www.google.com/search%3 ... UTF-8
jako słowa kluczowe. Znaleziony
17k-MarkMail
http://markmail.org/download.x ... r%3D3
i
mplayer-commits r154-trunk/libvo
https://garage.maemo.org/piper ... ml... W obu przypadkach robią to samo.
wewnątrz ,
następnie w ramach ,
Widzieć
XInternAtom
http://tronche.com/gui/x/xlib/ ... .html
,
XSetWMProtocols
http://tronche.com/gui/x/xlib/ ... .html
i
XNextEvent
http://tronche.com/gui/x/xlib/ ... .html
.
Po tym, jak napisałem powyżej, znalazłem to
okno przetwarzania zamknij w aplikacji
http://linuxsoftware.co.nz/blo ... indow
X11 :
Chcemy, aby użytkownik kliknął przycisk Zamknij
[x]
w naszej aplikacji X11otworzył okno dialogowe z pytaniem „czy ty?
naprawdę chcesz rzucić? ”. To proste
Dodatek X. Brak wyszukanych widżetów GTK lub
QT tu nie ma. Jak więc złapać komunikat „okno jest
being closed”?
Odpowiedź brzmi: powiedz oknu
Manager nas tym interesuje
zdarzenie, wywołując i
rejestrując w nim wiadomość . Wtedy będziemy mieć klienta
wiadomość od menedżera okien, jeśli
ktoś spróbuje zamknąć okno i
nie zamknie się, zostawi to sobie ... Oto przykład ....
Anonimowy użytkownik
Potwierdzenie od:
[/*]
[*]
Zaimplementuj rozszerzenie do X Window System. Nie do przenoszenia wśród implementacji X11, skomplikowane i zawiłe i całkowicie wykluczone.
[/*]
[*]
Wstaw rozszerzenia lub wtyczki do menedżerów okien. Jest tyle menedżerów okien, ilu jest opinii na temat menedżerów okien, a zatem jest to całkowicie niemożliwe.
[/*]
[/list]
Ostatecznie udało mi się w końcu osiągnąć swój cel za pomocą zupełnie odrębnego mechanizmu; wszyscy zainteresowani powinni zapoznać się z obsługą Close-to-Tray w AllTray 0.7.5.1dev i nowszych, w tym
gałąź git master dostępna na github
https://github.com/mbt/alltray/
.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
XEmbed
http://standards.freedesktop.o ... ml... Przynajmniej może dać ci kilka pomysłów do wypróbowania.
W przeciwnym razie przyjrzałbym się, jak inne podobne oprogramowanie (takie jak wmdock lub sposób implementacji GtkPlug/GtkSocket) może działać, chociaż uważam, że oba te przypadki wymagają wyraźnego wsparcia w aplikacjach.
Mam nadzieję, że to będzie bardziej pomocne.