Определение размеров дочерних элементов контейнера автоматически (почему не рекомендуется container_resize_children) - PullRequest
0 голосов
/ 25 апреля 2018

Я пишу системный трей, размер которого определяется во время выполнения (и, возможно, может быть изменен из-за изменения размера), и я хотел бы изменить размеры значков в трее, чтобы они расширялись до размера объекта контейнера, в котором они находятсяпоместил.

Я фактически заставил это работать следующим образом, регистрируя для сигнала, выделенного размера для виджета gtk_image, и назначая ему pixbuf с размером, который соответствует высоте, назначенной этому виджету изображения в предоставленнойфункция обратного вызова.

Единственная проблема с этим подходом состоит в том, что это, кажется, не вызывает изменение размера виджета изображения (даже если я явно вызываю widget_set_size_request), что приводит к этой проблеме: tray images overlap Вызовы widget_queue_draw или widget_queue_resize как для изображения, так и для содержащего его поля ничего не делают для исправления этой проблемы, но вызов устаревшей функции gtk_container_resize_children НЕ решает проблему: enter image description here

Мои вопросы

  • Почему gtk_container_resize_childrenустарел?
  • Мой подход заключается в том, чтобы фактически устанавливать pixbuf для изображения только тогда, когда получен сигнал распределения размера, или есть лучший способ сделать это?
  • Почему нет widget_queue_drawили здесь работать?

Здесь вы можете найти реальный код, о котором идет речь, но он написан на haskell, поэтому его может быть сложно понять, если вы не знакомы с языком:

https://github.com/IvanMalison/gtk-sni-tray/blob/4e7750b2893dc3c6c0091355f3c9b42ab35dcdf2/src/StatusNotifier/Tray.hs#L166

1 Ответ

0 голосов
/ 26 апреля 2018

Глядя на реализацию gtk_container_resize_children, кажется, что вы сможете заменить ее вызовами gtk_widget_get_allocated_size и gtk_widget_allocate_with_baseline,ни один из которых не рекомендуется в GTK + 3.

...