В моем проекте
MyTetra есть застарелый баг: иногда невозможен выход из системы (KDE4), если работает MyTetra. При этом выводится сообщение что MyTetra заблокировала выход из системы. Для выхода приходится вручную закрыть программу MyTetra, после чего можно выйти.
Это могло бы происходить из-за открытых файлов. Но в MyTetra специально сделано так, что все файлы всегда держатся закрытыми. Открываются на запись только при изменении и снова закрываются. Однако в MyTetra используется QtSingleApplication, и сдается мне, что именно эта обертка держит открытыми какие-то свои файлы, и из-за нее нельзя иногда выйти из системы (закономерность до сих пор не ясна, strace показывает только на файлы в /tmp, создаваемые не моим кодом).
Самый очевидный путь решения проблемы - выходить из MyTetra при обнаружении выхода из Иксов или выхода из DE. Однако, я не могу отследить это событие. Такое впечатление, что его просто нет. Я делаю логирование всех событий (отладочный вывод в eventFilter() главного окна). И при действиях с панелью (нажатие на кнопку K-меню), и даже при выходе из KDE4, в MyTetra никаких событий не прилетает.
Видео (10 Мб): http://rghost.ru/58633355Вопрос: как обнаружить выход из DE или из Иксов, чтобы корректно завершить приложение?