Я хотел бы перехватить сообщение WM_DELETE_WINDOW
, которое отправлено на определенный выбор окон, которые приложение, которое я пишу (AllTray), чтобы я мог воздействовать на него, а не на приложение, получающее его. В настоящее время я стараюсь попробовать это на уровне GDK первая ничего не делает но создайте окно и зарегистрируйтесь, что он знает о WM_DELETE_WINDOW
, а второй пытается поймать это сообщение, но, похоже, это не срабатывает; похоже, ничего не делает. Я понимаю, что документация не соответствует этому, или есть что-то дополнительное, что мне нужно делать (или мне нужно вообще не использовать GDK для этого)?
Предполагается, что до моего повторного написания AllTray, как это было бы, нужно попытаться перехватить щелчок мышью по самой кнопке X. Для некоторых оконных менеджеров это работало правильно, для других это вообще не работало, а для других пользователю приходилось настраивать его вручную и инструктировать AllTray, где была кнопка закрытия окна. То, что я ищу, - это решение, которое не связано с LD_LIBRARY_PRELOAD
и будет работать для любой комбинации оконных менеджеров и приложений, которая соответствует текущим стандартам и отправляет WM_DELETE_WINDOW
ClientMessage при закрытии окна.
UPDATE. Я все еще ищу ответ. Маршрут, который я принимаю на данный момент, - это попытаться восстановить окно и управлять им самостоятельно, но я просто не могу заставить его работать. После репарации я, похоже, не могу ее вернуть. Возможно, мне не хватает чего-то очень фундаментального, но я не могу понять, как на самом деле заставить его снова появиться в моем собственном окне, чтобы вернуть его на экран.
ОБНОВЛЕНИЕ 2: Хорошо, поэтому я ударил еще одну кирпичную стену. Документация X-сервера говорит, чтобы установить StructureNotifyMask в маске окна события, чтобы получать как события MapNotify, так и ReparentNotify. Я бы тоже хотел получить. Мое нынешнее мышление состояло в том, чтобы создать окно, которое служило как приемник событий, а затем, когда я получаю события для интересных вещей, действуйте на них, создавая и репарируя. Однако это просто не работает. Единственными событиями, которые я действительно получаю, являются события PropertyNotify. Таким образом, этот маршрут, похоже, тоже не очень хорош.