Вот порядок инициализации:
Перед стартом создается окно с сокет-виджетом, изначально нулевого размера.
После старта (пока использую таймаут с нулевым интервалом, и срабатывающий только один раз):
1. Добавляется внешнее окно с помощью gtk_socket_add_id ()
2. Размер сокет-виджета устанавливается равным размеру захваченного окна. Сам размер всегда правильный.
3. Последующий сигнал об изменении размера окна (не виджета) используется для обновления некоторых не относящихся к делу данных (таких, как положение панели в скрытом состоянии). И вот тут с помощью gdb выясняется следующее:
- Под одним пользователем (ну, под которым я все изначально делал) никаких проблем; WM - fluxbox;
- Под остальными пробовал как KDE, так и fluxbox...
* Если создать новое окно, то при первом запуске окно изчезает (ну так и долно быть), однако размер виджета, полученный из сигнала о ресайзе, оказывается не тем - вместо 122x80 (точно не помню, в общем это dclock) всего 5x5.
* В половине случаев размер угадывается правильно, но захваченное окно все-равно не отображается в сокет-виджете.
* Так как закрытие докера пока не приводит к уничтожению окна (вообще-то хочется реализовать это как обратное превращение - в плавающее, но как вернуть окну видимость не представляю), то можно еще и еще раз запускать докер без изменений в параметрах. Последующие запуски проходят без проблем, как у меня самого - размер угадывается, окно вставляется в заданную рамку.
* В половине случаев размер угадывается правильно, но захваченное окно все-равно не отображается в сокет-виджете.
* Так как закрытие докера пока не приводит к уничтожению окна (вообще-то хочется реализовать это как обратное превращение - в плавающее, но как вернуть окну видимость не представляю), то можно еще и еще раз запускать докер без изменений в параметрах. Последующие запуски проходят без проблем, как у меня самого - размер угадывается, окно вставляется в заданную рамку.
P.S. gtk 2.20.1, как обычно