自动调整容器的子元素大小(为什么不推荐使用container_resize_children)

时间:2018-04-25 19:54:04

标签: haskell gtk gtk3 deprecation-warning

我正在编写一个系统托盘,其大小在运行时确定(并且可能因调整大小而更改),我想调整托盘图标的大小,以便它们扩展到容器对象的大小他们被安置了。

我实际上已经按照以下方式使用这个方法来注册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 :(得分:0)

查看implementation of gtk_container_resize_children,您似乎应该能够通过调用gtk_widget_get_allocated_sizegtk_widget_allocate_with_baseline来替换它,而这些调用在GTK + 3中均未被弃用。