Я пишу системный трей, размер которого определяется во время выполнения (и, возможно, может быть изменен из-за изменения размера), и я хотел бы изменить размеры значков в трее, чтобы они расширялись до размера объекта контейнера, в котором они находятсяпоместил.
Я фактически заставил это работать следующим образом, регистрируя для сигнала, выделенного размера для виджета gtk_image, и назначая ему pixbuf с размером, который соответствует высоте, назначенной этому виджету изображения в предоставленнойфункция обратного вызова.
Единственная проблема с этим подходом состоит в том, что это, кажется, не вызывает изменение размера виджета изображения (даже если я явно вызываю widget_set_size_request), что приводит к этой проблеме:
Вызовы widget_queue_draw или widget_queue_resize как для изображения, так и для содержащего его поля ничего не делают для исправления этой проблемы, но вызов устаревшей функции gtk_container_resize_children
НЕ решает проблему: ![enter image description here](https://i.stack.imgur.com/fp5Pu.png)
Мои вопросы
- Почему gtk_container_resize_childrenустарел?
- Мой подход заключается в том, чтобы фактически устанавливать pixbuf для изображения только тогда, когда получен сигнал распределения размера, или есть лучший способ сделать это?
- Почему нет widget_queue_drawили здесь работать?
Здесь вы можете найти реальный код, о котором идет речь, но он написан на haskell, поэтому его может быть сложно понять, если вы не знакомы с языком:
https://github.com/IvanMalison/gtk-sni-tray/blob/4e7750b2893dc3c6c0091355f3c9b42ab35dcdf2/src/StatusNotifier/Tray.hs#L166