title: "Allocating size to..." GTK Warning when using Gtk.TreeView inside Gtk.ScrolledWindow
body: <p>I'm receiving the following warnings in my GTK 3 application:</p>
  
  <blockquote>
    <p>Gtk-WARNING **: Allocating size to <code>__main__+MCVEWindow 0000000004e93b30</code> without calling gtk_widget_get_preferred_width/height(). How does the code know the size to allocate?</p>
  </blockquote>
  
  <p>The warnings occurs when <code>Gtk.ScrolledWindow</code> containing <code>Gtk.TreeView</code> is attached to the grid, the grid itself is attached to the <code>gtk.ApplicationWindow</code> and there are enough elements for the scrollbar to actually appear. If there aren't enough elements to make it scrollable, the warning doesn't appear.</p>
  
  <pre><code>import gi
  gi.require_version("Gtk", "3.0")
  from gi.repository import Gtk as gtk
  
  
  class MCVEWindow(gtk.ApplicationWindow):
      def __init__(self, *args, **kwargs):
          super().__init__(*args, **kwargs)
  
          self._tree_view = gtk.TreeView()
          self._tree_view.set_hexpand(True)
          self._tree_view.set_vexpand(True)
  
          self.populate_tree_view()  # populate tree view with fake items
  
          window_column = gtk.TreeViewColumn(
              "Window", gtk.CellRendererText(),
              text=0
          )
          window_column.set_resizable(True)
          handle_column = gtk.TreeViewColumn(
              "Handle", gtk.CellRendererText(),
              text=1
          )
          class_column = gtk.TreeViewColumn(
              "Class name", gtk.CellRendererText(),
              text=2
          )
          self._tree_view.append_column(window_column)
          self._tree_view.append_column(handle_column)
          self._tree_view.append_column(class_column)
  
          scrolled_tree_view = gtk.ScrolledWindow()
          scrolled_tree_view.add(self._tree_view)
  
          toolbar = gtk.Toolbar()
  
          expand_tree_view_button = gtk.ToolButton(icon_name="list-add")
          expand_tree_view_button.connect(
              "clicked",
              lambda e: self._tree_view.expand_all()
          )
          collapse_tree_view_button = gtk.ToolButton(icon_name="list-remove")
          collapse_tree_view_button.connect(
              "clicked",
              lambda e: self._tree_view.collapse_all()
          )
          toolbar.insert(expand_tree_view_button, -1)
          toolbar.insert(collapse_tree_view_button, -1)
  
          status_bar = gtk.Statusbar()
          status_bar.push(
              status_bar.get_context_id("Status message"),
              "A status message."
          )
  
          self._master_grid = gtk.Grid()
          self._master_grid.attach(toolbar, 0, 0, 1, 1)
          self._master_grid.attach(scrolled_tree_view, 0, 1, 1, 1)
          self._master_grid.attach(status_bar, 0, 2, 1, 1)
          self.add(self._master_grid)
  
          self.connect("delete-event", gtk.main_quit)
  
          self.show_all()
  
      def populate_tree_view(self):
          tree_store = gtk.TreeStore(str, str, str)
          # Warnings don't occur when there are less than 100 "root" items
          for i in range(100):
              item1 = tree_store.append(
                  None,
                  ["Window " + str(i + 1), "12345678", "ClassName"]
              )
              for j in range(3):
                  item2 = tree_store.append(
                      item1,
                      ["Window " + str(i + 1) + str(i + 2),
                       "12345678",
                       "ClassName"]
                  )
                  for k in range(5):
                      tree_store.append(
                          item2,
                          ["Window " + str(i + 1) + str(j + 1) + str(k + 1),
                           "12345678",
                           "ClassName"]
                      )
  
          self._tree_view.set_model(tree_store)
  
  
  class MCVEApp(gtk.Application):
      def __init__(self, *args, **kwargs):
          super().__init__(*args, **kwargs)
  
      def do_activate(self):
          MCVEWindow()
          gtk.main()
  
  
  if __name__ == "__main__":
      MCVEApp().run()
  </code></pre>
  
  <p>You should be able to copy, paste and run this code if you have environment set up.</p>
  
  <p>The warnings don't follow any specific pattern, sometimes there is one warning, sometimes two or more. The warrnings also pop up whenever I expand all tree items.</p>
  
  <p>GTK version is <code>3.22.18</code></p>
  
  <p>What could cause these warnings?</p>