Abfangen WM_DELETE_WINDOW auf X11?

Möchte ich abfangen der WM_DELETE_WINDOW - Nachricht wird gebucht, um eine bestimmte Auswahl von windows, eine Anwendung, die ich Schreibe (AllTray), so dass ich Tat es, anstatt von der Anwendung empfangen. Ich bin derzeit auf der Suche bei dem Versuch diese an die GDK-Ebene über gdk_display_add_client_message_filter, wenn möglich, aber ich würde gerne mit ein Xlib-Lösung, wenn es auch; es scheint möglich sein, aber ich weiß einfach nicht scheinen zu verstehen, wie ich bin, um es erfolgreich zu tun.

Derzeit habe ich zwei Programme (in C geschrieben), die ich versuche zu nutzen, um diese herausgefunden, der erste nichts tut, sondern ein Fenster erstellen und registrieren, dass es weiß, über WM_DELETE_WINDOW, und die zweite versuche, zu fangen, die Nachricht, aber scheint nicht das zu tun; es scheint zu tun genau nichts. Verstehe ich die Dokumentation falsch oder ist es etwas zusätzliches, das ich tun müssen (oder brauche ich, um zu vermeiden, mit GDK ausschließlich für diese)?

Der hintergrund: Vor meiner re-schreiben von AllTray, wie Sie Dinge tun, zu sein scheint, zu versuchen, Sie abzufangen ein Maus-klicken Sie auf die X-Taste selbst. Für einige window-Manager, das funktioniert, für den anderen ist es überhaupt nicht arbeiten, und für die anderen, musste der Benutzer manuell konfigurieren, und weisen AllTray, wo der Knopf zum schließen des Fensters war. Was ich Suche ist eine Lösung, die nicht die eine LD_LIBRARY_PRELOAD und funktioniert für alle window-manager/application Kombination entspricht den aktuellen Normen und sendet eine WM_DELETE_WINDOW ClientMessage, wenn das Fenster geschlossen ist.

UPDATE: ich bin noch auf der Suche nach einer Antwort. Die route, die ich nehme im moment ist es zu versuchen, reparent die Fenster und verwalten Sie es selber, aber ich kann einfach nicht damit es funktioniert. Nach der übernahme, ich bin anscheinend nicht in der Lage sein, um es wieder in irgendeiner Weise. Ich kann fehlen, etwas sehr grundlegendes, aber ich kann nicht herausfinden, wie man tatsächlich machen es erscheinen Sie, meine eigenen Fenster erneut, um es wieder auf dem Bildschirm.

UPDATE 2: Okay, also ich habe hit " another brick Wand. Die X-server-Dokumentation sagt, um die StructureNotifyMask auf das Fenster Ereignis-Maske zu erhalten, sowohl MapNotify und ReparentNotify Veranstaltungen. Mich würde interessieren, erhalten entweder. Meine aktuelle überlegung war, ein Fenster zu erstellen, die diente nur als event-Empfänger, und dann, wenn ich Ereignisse, die für interessante Dinge, die auf Sie einwirken, indem Sie die Schaffung und übernahme. Jedoch, diese einfach nicht zu funktionieren scheint. Die einzigen Ereignisse, die ich tatsächlich erhalten sind PropertyNotify Veranstaltungen. So, diese route scheint es nicht zu sein, tut sehr viel gutes, entweder.

  • Ich denke, es könnte möglich sein, durch übernahme-die Fenster in Ihre eigene toplevel, und filtern, welche Ereignisse Sie weitergeben? Ich glaube nicht, dass die Art und Weise, die Sie derzeit versuchen arbeiten können.
  • Gibt es irgendwelche Nachteile dabei? Das heißt, ist es alles in allem dazu führen würde, dass das zu stören Dinge wie XDND oder was auch immer? Ist es eine tragbare Idee (wie in, es wird nicht brechen, Anwendungen und window-Manager)? Ich scheine in der Lage zu finden, sehr wenig Informationen über das. Ich gehe davon aus, dass es auch bedeutet, dass ich hätte, um eine zu erstellen neuen "Eltern" - Fenster für jede neue client-Fenster, richtig?
Schreibe einen Kommentar