[gtkmm] Gdk, Gtk: Update for the latest gtk4 (remove Gtk::Bin and Container, etc.)



commit ca6714467041fa2014c153863ba25957f8f939bc
Author: Kjell Ahlstedt <kjellahlstedt gmail com>
Date:   Thu May 14 16:41:06 2020 +0200

    Gdk, Gtk: Update for the latest gtk4 (remove Gtk::Bin and Container, etc.)
    
    The removal of GtkBin and GtkContainer has required changes in all classes
    that inherited from those classes. There are no longer Container::add() and
    Container::remove() methods. Each type of container widget has its own
    methods for adding and removing children.
    
    gtk_dialog_run() has been removed, which affects most uses of Gtk::Dialog
    and its cubclasses.
    
    There are problems with this patch. At the time of writing everything
    compiles and links. But many test programs and demo programs crash, or
    misbehave in other ways. Gtk::Dialog::run() has not been correctly
    replaced everywhere.

 .gitignore                                        |   4 -
 demos/gtk-demo/demowindow.cc                      |  10 +-
 demos/gtk-demo/example_appwindow.cc               |   9 +-
 demos/gtk-demo/example_builder.cc                 |  14 +-
 demos/gtk-demo/example_builder.ui                 |   1 +
 demos/gtk-demo/example_colorsel.cc                |  35 ++-
 demos/gtk-demo/example_dialog.cc                  |  45 ++--
 demos/gtk-demo/example_drawingarea.cc             |  24 +-
 demos/gtk-demo/example_flowbox.cc                 |   8 +-
 demos/gtk-demo/example_gestures.cc                |   2 +-
 demos/gtk-demo/example_glarea.cc                  |  14 +-
 demos/gtk-demo/example_headerbar.cc               |  11 +-
 demos/gtk-demo/example_iconbrowser.cc             |  24 +-
 demos/gtk-demo/example_iconview.cc                |  12 +-
 demos/gtk-demo/example_images.cc                  |  54 ++--
 demos/gtk-demo/example_overlay.cc                 |   6 +-
 demos/gtk-demo/example_panes.cc                   |  32 +--
 demos/gtk-demo/example_pixbufs.cc                 |   4 +-
 demos/gtk-demo/example_sizegroup.cc               |  12 +-
 demos/gtk-demo/example_stack.cc                   |   2 +-
 demos/gtk-demo/example_stacksidebar.cc            |   8 +-
 demos/gtk-demo/example_textview.cc                |  16 +-
 demos/gtk-demo/example_treeview_editable_cells.cc |  16 +-
 demos/gtk-demo/example_treeview_liststore.cc      |   8 +-
 demos/gtk-demo/example_treeview_treestore.cc      |   9 +-
 demos/gtk-demo/textwidget.cc                      |   2 +-
 gdk/src/event.ccg                                 |   8 +
 gdk/src/event.hg                                  |   8 +-
 gtk/gtkmm.h                                       |   2 -
 gtk/src/actionbar.hg                              |   9 +-
 gtk/src/aspectframe.ccg                           |  10 +
 gtk/src/aspectframe.hg                            |  13 +-
 gtk/src/bin.ccg                                   |  62 -----
 gtk/src/bin.hg                                    | 114 --------
 gtk/src/box.hg                                    |  21 +-
 gtk/src/button.ccg                                |   5 +
 gtk/src/button.hg                                 |  14 +-
 gtk/src/combobox.ccg                              |  11 +-
 gtk/src/combobox.hg                               |  20 +-
 gtk/src/container.ccg                             | 300 ----------------------
 gtk/src/container.hg                              | 152 -----------
 gtk/src/dialog.hg                                 |  57 +---
 gtk/src/dragicon.hg                               |   8 +-
 gtk/src/drawingarea.hg                            |   2 +
 gtk/src/expander.ccg                              |   6 +-
 gtk/src/expander.hg                               |  23 +-
 gtk/src/filelist.am                               |   2 -
 gtk/src/fixed.hg                                  |  10 +-
 gtk/src/flowbox.hg                                |  15 +-
 gtk/src/flowboxchild.ccg                          |   6 +
 gtk/src/flowboxchild.hg                           |  14 +-
 gtk/src/frame.ccg                                 |   6 +-
 gtk/src/frame.hg                                  |  16 +-
 gtk/src/gestureclick.ccg                          |  10 -
 gtk/src/gestureclick.hg                           |  14 -
 gtk/src/grid.hg                                   |  18 +-
 gtk/src/headerbar.hg                              |  31 +--
 gtk/src/iconview.hg                               |   9 +-
 gtk/src/infobar.hg                                |  14 +-
 gtk/src/listbox.hg                                |  18 +-
 gtk/src/listboxrow.ccg                            |   5 +
 gtk/src/listboxrow.hg                             |  14 +-
 gtk/src/nativedialog.hg                           |   6 -
 gtk/src/notebook.hg                               |  10 +-
 gtk/src/overlay.ccg                               |   7 +-
 gtk/src/overlay.hg                                |  16 +-
 gtk/src/paned.hg                                  |  53 ++--
 gtk/src/popover.ccg                               |  10 +
 gtk/src/popover.hg                                |  16 +-
 gtk/src/revealer.ccg                              |   7 +-
 gtk/src/revealer.hg                               |  16 +-
 gtk/src/scrolledwindow.ccg                        |   5 +
 gtk/src/scrolledwindow.hg                         |  14 +-
 gtk/src/searchbar.ccg                             |   5 +
 gtk/src/searchbar.hg                              |  15 +-
 gtk/src/stack.hg                                  |  14 +-
 gtk/src/stackpage.hg                              |   1 +
 gtk/src/stylecontext.hg                           |   3 -
 gtk/src/textchildanchor.ccg                       |  22 ++
 gtk/src/textchildanchor.hg                        |  19 +-
 gtk/src/textview.hg                               |  10 +-
 gtk/src/treeview.hg                               |   8 +-
 gtk/src/viewport.ccg                              |  10 +
 gtk/src/viewport.hg                               |  14 +-
 gtk/src/widget.ccg                                |  23 +-
 gtk/src/widget.hg                                 |  29 +--
 gtk/src/window.ccg                                |  20 +-
 gtk/src/window.hg                                 |  21 +-
 tests/child_widget/testwindow.cc                  |   2 +-
 tests/child_widget2/main.cc                       |   4 +-
 tests/child_widget_managed/main.cc                |   2 +-
 tests/delete_cpp_child/main.cc                    |   6 +-
 tests/dialog_deletethis/main.cc                   |  11 +-
 tests/property_notification/main.cc               |   3 +-
 tests/refcount_dialog/main.cc                     |  10 +-
 tests/scrolledwindow/main.cc                      |   2 +-
 tools/m4/convert_gtk.m4                           |   2 -
 97 files changed, 666 insertions(+), 1179 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 86d5ec38..1c6194b2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -165,8 +165,6 @@ gtk/gtkmm/assistant.cc
 gtk/gtkmm/assistant.h
 gtk/gtkmm/assistantpage.cc
 gtk/gtkmm/assistantpage.h
-gtk/gtkmm/bin.cc
-gtk/gtkmm/bin.h
 gtk/gtkmm/binlayout.cc
 gtk/gtkmm/binlayout.h
 gtk/gtkmm/border.cc
@@ -237,8 +235,6 @@ gtk/gtkmm/constraintlayout.cc
 gtk/gtkmm/constraintlayout.h
 gtk/gtkmm/constrainttarget.cc
 gtk/gtkmm/constrainttarget.h
-gtk/gtkmm/container.cc
-gtk/gtkmm/container.h
 gtk/gtkmm/csslocation.cc
 gtk/gtkmm/csslocation.h
 gtk/gtkmm/cssprovider.cc
diff --git a/demos/gtk-demo/demowindow.cc b/demos/gtk-demo/demowindow.cc
index cfb5cbdf..e96a6020 100644
--- a/demos/gtk-demo/demowindow.cc
+++ b/demos/gtk-demo/demowindow.cc
@@ -75,7 +75,7 @@ DemoWindow::DemoWindow()
 
   configure_header_bar();
 
-  add(m_HBox);
+  set_child(m_HBox);
 
   //Tree:
   m_refTreeStore = Gtk::TreeStore::create(demo_columns());
@@ -93,8 +93,8 @@ DemoWindow::DemoWindow()
   m_SideBar.set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC);
   m_SideBar.get_style_context()->add_class("sidebar");
   m_SideBar.set_hexpand(false);
-  m_SideBar.add(m_TreeView);
-  m_HBox.add(m_SideBar);
+  m_SideBar.set_child(m_TreeView);
+  m_HBox.append(m_SideBar);
 
   //Notebook:
   m_Notebook.popup_enable();
@@ -104,7 +104,7 @@ DemoWindow::DemoWindow()
   m_Notebook.get_page(m_TextWidget_Info)->property_tab_expand() = true;
   m_Notebook.get_page(m_TextWidget_Source)->property_tab_expand() = true;
   m_Notebook.set_expand(true);
-  m_HBox.add(m_Notebook);
+  m_HBox.append(m_Notebook);
   m_HBox.set_vexpand(true);
 
   set_default_size (800, 600);
@@ -232,7 +232,7 @@ void DemoWindow::on_treeselection_changed()
     const auto title = (*iter)[demo_columns().title];
 
     load_file(Glib::filename_from_utf8(filename));
-    m_HeaderBar.set_title(title);
+    set_title(title);
   }
 }
 
diff --git a/demos/gtk-demo/example_appwindow.cc b/demos/gtk-demo/example_appwindow.cc
index 8a4f1600..a32735f2 100644
--- a/demos/gtk-demo/example_appwindow.cc
+++ b/demos/gtk-demo/example_appwindow.cc
@@ -38,7 +38,7 @@ Example_AppWindow::Example_AppWindow()
 {
   set_title("Application Window");
 
-  add(m_Grid);
+  set_child(m_Grid);
 
 /*
   //Menu:
@@ -111,8 +111,7 @@ Example_AppWindow::Example_AppWindow()
 
   set_default_size(200, 200);
 
-  m_ScrolledWindow.add(m_TextView);
-
+  m_ScrolledWindow.set_child(m_TextView);
 
   /* Create statusbar */
   m_Statusbar.set_hexpand();
@@ -133,8 +132,8 @@ Example_AppWindow::~Example_AppWindow()
 void Example_AppWindow::on_menu_item()
 {
   Gtk::MessageDialog dialog(*this, "You selected or toggled the menu item", false,
-                            Gtk::MessageType::INFO, Gtk::ButtonsType::CLOSE);
-  dialog.run();
+                            Gtk::MessageType::INFO, Gtk::ButtonsType::CLOSE, true);
+  dialog.show();
 }
 
 void Example_AppWindow::on_text_changed()
diff --git a/demos/gtk-demo/example_builder.cc b/demos/gtk-demo/example_builder.cc
index facf3d0f..cebb49d7 100644
--- a/demos/gtk-demo/example_builder.cc
+++ b/demos/gtk-demo/example_builder.cc
@@ -78,12 +78,20 @@ void Example_Builder::on_file_quit()
 
 void Example_Builder::on_help_about()
 {
+  static bool firstcall = true;
+
   auto pDialog = m_builder->get_widget<Gtk::AboutDialog>("aboutdialog1");
   if (pDialog)
   {
-    pDialog->set_transient_for(*this);
-    pDialog->run();
-    pDialog->hide();
+    if (firstcall)
+    {
+      // Don't call signal_response().connect() more than once.
+      firstcall = false;
+      pDialog->set_transient_for(*this);
+      pDialog->set_hide_on_close(true);
+      pDialog->signal_response().connect(sigc::hide(sigc::mem_fun(*pDialog, &Gtk::Widget::hide)));
+    }
+    pDialog->show();
   }
 }
 
diff --git a/demos/gtk-demo/example_builder.ui b/demos/gtk-demo/example_builder.ui
index c75df192..a6618116 100644
--- a/demos/gtk-demo/example_builder.ui
+++ b/demos/gtk-demo/example_builder.ui
@@ -94,6 +94,7 @@
   <object class="GtkAboutDialog" id="aboutdialog1">
     <property name="program-name" translatable="yes">Gtk::Builder demo</property>
     <property name="logo-icon-name" translatable="yes">gtk3-demo</property>
+    <property name="modal">True</property>
     <accessibility>
       <relation target="window1" type="subwindow-of"/>
     </accessibility>
diff --git a/demos/gtk-demo/example_colorsel.cc b/demos/gtk-demo/example_colorsel.cc
index dd315d49..7d4ea453 100644
--- a/demos/gtk-demo/example_colorsel.cc
+++ b/demos/gtk-demo/example_colorsel.cc
@@ -13,8 +13,9 @@ public:
   ~Example_ColorSel() override;
 
 protected:
-  //Signal handler:
+  //Signal handlers:
   void on_button_clicked();
+  void on_dialog_response(int response_id);
 
   //Drawing function:
   void on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr, int width, int height);
@@ -25,6 +26,7 @@ protected:
   Gtk::DrawingArea m_DrawingArea;
   Gtk::Button m_Button;
   Gdk::RGBA m_Color;
+  std::unique_ptr<Gtk::ColorChooserDialog> m_pDialog;
 };
 
 //Called by DemoWindow;
@@ -41,11 +43,11 @@ Example_ColorSel::Example_ColorSel()
   set_resizable(false);
 
   m_VBox.set_margin(12);
-  add(m_VBox);
+  set_child(m_VBox);
 
   // Create the color swatch area
   m_Frame.set_expand(true);
-  m_VBox.add(m_Frame);
+  m_VBox.append(m_Frame);
 
   // set a fixed size
   m_DrawingArea.set_content_width(200);
@@ -55,12 +57,12 @@ Example_ColorSel::Example_ColorSel()
   m_Color.set_rgba(0, 0, 1, 1);
   m_DrawingArea.set_draw_func(sigc::mem_fun(*this, &Example_ColorSel::on_drawing_area_draw));
 
-  m_Frame.add(m_DrawingArea);
+  m_Frame.set_child(m_DrawingArea);
 
   m_Button.set_halign(Gtk::Align::END);
   m_Button.set_valign(Gtk::Align::CENTER);
 
-  m_VBox.add(m_Button);
+  m_VBox.append(m_Button);
 
   m_Button.signal_clicked().connect(sigc::mem_fun(*this, &Example_ColorSel::on_button_clicked));
 }
@@ -71,17 +73,26 @@ Example_ColorSel::~Example_ColorSel()
 
 void Example_ColorSel::on_button_clicked()
 {
-  Gtk::ColorChooserDialog dialog("Changing color");
-  dialog.set_transient_for(*this);
-  dialog.set_rgba(m_Color);
-
-  const int response = dialog.run();
+  if (!m_pDialog)
+  {
+    m_pDialog.reset(new Gtk::ColorChooserDialog("Changing color"));
+    m_pDialog->set_transient_for(*this);
+    m_pDialog->set_modal(true);
+    m_pDialog->signal_response().connect(
+      sigc::mem_fun(*this, &Example_ColorSel::on_dialog_response));
+  }
+  m_pDialog->set_rgba(m_Color);
+  m_pDialog->show();
+}
 
-  if(response == Gtk::ResponseType::OK)
+void Example_ColorSel::on_dialog_response(int response_id)
+{
+  if (response_id == Gtk::ResponseType::OK)
   {
-    m_Color = dialog.get_rgba();
+    m_Color = m_pDialog->get_rgba();
     m_DrawingArea.queue_draw();
   }
+  m_pDialog->hide();
 }
 
 void Example_ColorSel::on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr, int, int)
diff --git a/demos/gtk-demo/example_dialog.cc b/demos/gtk-demo/example_dialog.cc
index 5e00f0c0..d3c36ab7 100644
--- a/demos/gtk-demo/example_dialog.cc
+++ b/demos/gtk-demo/example_dialog.cc
@@ -7,6 +7,8 @@
 #include <gtk/gtk.h>
 #include <stdio.h>
 
+class Dialog_Interactive;
+
 class Example_Dialog : public Gtk::Window
 {
 public:
@@ -15,8 +17,9 @@ public:
 
 protected:
   //Signal handlers:
-  virtual void on_button_message();
-  virtual void on_button_interactive();
+  void on_button_message();
+  void on_button_interactive();
+  void on_dialog_response(int response_id, Gtk::Dialog* dialog);
 
   //Member widgets:
   Gtk::Frame m_Frame;
@@ -71,29 +74,29 @@ Example_Dialog::Example_Dialog()
   set_title("Dialogs");
 
   m_Frame.set_margin(8);
-  add(m_Frame);
+  set_child(m_Frame);
 
   m_VBox.set_margin(8);
-  m_Frame.add(m_VBox);
+  m_Frame.set_child(m_VBox);
 
 
   /* Standard message dialog */
-  m_VBox.add(m_HBox);
+  m_VBox.append(m_HBox);
   m_Button_Message.signal_clicked().connect(sigc::mem_fun(*this, &Example_Dialog::on_button_message));
-  m_HBox.add(m_Button_Message);
-  m_VBox.add(*Gtk::make_managed<Gtk::Separator>(Gtk::Orientation::HORIZONTAL));
+  m_HBox.append(m_Button_Message);
+  m_VBox.append(*Gtk::make_managed<Gtk::Separator>(Gtk::Orientation::HORIZONTAL));
 
 
   /* Interactive dialog*/
-  m_VBox.add(m_HBox2);
+  m_VBox.append(m_HBox2);
   m_Button_Interactive.signal_clicked().connect(sigc::mem_fun(*this, 
&Example_Dialog::on_button_interactive));
-  m_HBox2.add(m_VBox2);
-  m_VBox2.add(m_Button_Interactive);
+  m_HBox2.append(m_VBox2);
+  m_VBox2.append(m_Button_Interactive);
 
 
   m_Grid.set_row_spacing(4);
   m_Grid.set_column_spacing(4);
-  m_HBox2.add(m_Grid);
+  m_HBox2.append(m_Grid);
 
   m_Grid.attach(m_Label1, 0, 0);
   m_Grid.attach(m_Entry1, 1, 0);
@@ -117,7 +120,9 @@ void Example_Dialog::on_button_message()
     strMessage += buf.get();
   }
   Gtk::MessageDialog dialog(*this, strMessage, false, Gtk::MessageType::INFO, Gtk::ButtonsType::OK, true); 
//true = modal
-  /*int response =*/ dialog.run();
+  dialog.signal_response().connect(sigc::bind(
+    sigc::mem_fun(*this, &Example_Dialog::on_dialog_response), &dialog));
+  dialog.show();
 
   m_count++;
 }
@@ -125,12 +130,20 @@ void Example_Dialog::on_button_message()
 void Example_Dialog::on_button_interactive()
 {
   Dialog_Interactive* pDialog = new Dialog_Interactive(*this, m_Entry1.get_text(), m_Entry2.get_text());
-  /*int response =*/ pDialog->run();
+  pDialog->set_modal(true);
+  pDialog->signal_response().connect(sigc::bind(
+    sigc::mem_fun(*this, &Example_Dialog::on_dialog_response), pDialog));
+  pDialog->show();
+
   m_Entry1.set_text(pDialog->get_entry1());
   m_Entry2.set_text(pDialog->get_entry2());
   delete pDialog;
 }
 
+void Example_Dialog::on_dialog_response(int /* response_id */, Gtk::Dialog* dialog)
+{
+  dialog->hide();
+}
 
 Dialog_Interactive::Dialog_Interactive(Gtk::Window& parent, const Glib::ustring& entry1, const 
Glib::ustring& entry2)
 : Gtk::Dialog("Interactive Dialog", parent, true),
@@ -143,13 +156,13 @@ Dialog_Interactive::Dialog_Interactive(Gtk::Window& parent, const Glib::ustring&
   add_button("_OK", Gtk::ResponseType::OK);
   add_button("_Cancel", Gtk::ResponseType::CANCEL);
 
-  get_content_area()->add(m_HBox);
-  m_HBox.add(m_Image);
+  get_content_area()->append(m_HBox);
+  m_HBox.append(m_Image);
 
   m_Grid.set_row_spacing(4);
   m_Grid.set_column_spacing(4);
   m_Grid.set_expand(true);
-  m_HBox.add(m_Grid);
+  m_HBox.append(m_Grid);
 
   m_Grid.attach(m_Label1, 0, 0);
   m_Entry1.set_text(entry1);
diff --git a/demos/gtk-demo/example_drawingarea.cc b/demos/gtk-demo/example_drawingarea.cc
index 225cd79d..fef868e5 100644
--- a/demos/gtk-demo/example_drawingarea.cc
+++ b/demos/gtk-demo/example_drawingarea.cc
@@ -27,7 +27,7 @@ protected:
   void on_drawingarea_scribble_draw(const Cairo::RefPtr<Cairo::Context>& cr, int width, int height);
 
   //signal handlers:
-  void on_drawingarea_scribble_size_allocate(int width, int height, int baseline);
+  void on_drawingarea_scribble_resize(int width, int height);
   void on_drawingarea_scribble_drag_begin(double start_x, double start_y);
   void on_drawingarea_scribble_drag_update(double offset_x, double offset_y);
   void on_drawingarea_scribble_drag_end(double offset_x, double offset_y);
@@ -60,21 +60,21 @@ Example_DrawingArea::Example_DrawingArea()
   set_title("Drawing Area");
 
   m_VBox.set_margin(16);
-  add(m_VBox);
+  set_child(m_VBox);
 
   /*
    * Create the checkerboard area
    */
   m_Label_Checkerboard.set_markup("<u>Checkerboard pattern</u>");
-  m_VBox.add(m_Label_Checkerboard);
+  m_VBox.append(m_Label_Checkerboard);
 
   m_Frame_Checkerboard.set_expand(true);
-  m_VBox.add(m_Frame_Checkerboard);
+  m_VBox.append(m_Frame_Checkerboard);
 
   /* set a minimum size */
   m_DrawingArea_Checkerboard.set_content_width(100);
   m_DrawingArea_Checkerboard.set_content_height(100);
-  m_Frame_Checkerboard.add(m_DrawingArea_Checkerboard);
+  m_Frame_Checkerboard.set_child(m_DrawingArea_Checkerboard);
 
   m_DrawingArea_Checkerboard.set_draw_func(
       sigc::mem_fun(*this, &Example_DrawingArea::on_drawingarea_checkerboard_draw));
@@ -83,10 +83,10 @@ Example_DrawingArea::Example_DrawingArea()
    * Create the scribble area
    */
   m_Label_Scribble.set_markup("<u>Scribble area</u>");
-  m_VBox.add(m_Label_Scribble);
+  m_VBox.append(m_Label_Scribble);
 
   m_Frame_Scribble.set_expand(true);
-  m_VBox.add(m_Frame_Scribble);
+  m_VBox.append(m_Frame_Scribble);
 
   m_drag = Gtk::GestureDrag::create();
   m_drag->set_button(GDK_BUTTON_PRIMARY);
@@ -95,14 +95,14 @@ Example_DrawingArea::Example_DrawingArea()
   /* set a minimum size */
   m_DrawingArea_Scribble.set_content_width(100);
   m_DrawingArea_Scribble.set_content_height(100);
-  m_Frame_Scribble.add(m_DrawingArea_Scribble);
+  m_Frame_Scribble.set_child(m_DrawingArea_Scribble);
 
   m_DrawingArea_Scribble.set_draw_func(
       sigc::mem_fun(*this, &Example_DrawingArea::on_drawingarea_scribble_draw));
 
   /* Connect signal handlers */
-  m_DrawingArea_Scribble.signal_size_allocate().connect(
-      sigc::mem_fun(*this, &Example_DrawingArea::on_drawingarea_scribble_size_allocate));
+  m_DrawingArea_Scribble.signal_resize().connect(
+      sigc::mem_fun(*this, &Example_DrawingArea::on_drawingarea_scribble_resize));
 
   m_drag->signal_drag_begin().connect(
       sigc::mem_fun(*this, &Example_DrawingArea::on_drawingarea_scribble_drag_begin));
@@ -177,8 +177,8 @@ void Example_DrawingArea::scribble_create_surface()
   cr->paint();
 }
 
-void Example_DrawingArea::on_drawingarea_scribble_size_allocate(
-  int /* width */, int /* height */, int /* baseline */)
+void Example_DrawingArea::on_drawingarea_scribble_resize(
+  int /* width */, int /* height */)
 {
   scribble_create_surface();
 }
diff --git a/demos/gtk-demo/example_flowbox.cc b/demos/gtk-demo/example_flowbox.cc
index e1327be6..7fcf7443 100644
--- a/demos/gtk-demo/example_flowbox.cc
+++ b/demos/gtk-demo/example_flowbox.cc
@@ -56,12 +56,12 @@ Example_FlowBox::Example_FlowBox()
   for(std::size_t i = 0; i != m_color_names.size(); ++i)
   {
     auto color_swatch = create_color_swatch(i);
-    m_flow_box.add(*color_swatch);
+    m_flow_box.insert(*color_swatch, -1);
   }
 
   // Layout
-  m_scrolled_window.add(m_flow_box);
-  add(m_scrolled_window);
+  m_scrolled_window.set_child(m_flow_box);
+  set_child(m_scrolled_window);
 }
 
 Example_FlowBox::~Example_FlowBox()
@@ -76,7 +76,7 @@ Gtk::Button* Example_FlowBox::create_color_swatch(int swatch_i)
   drawing_area->set_content_width(24);
   drawing_area->set_content_height(24);
 
-  color_swatch->add(*drawing_area);
+  color_swatch->set_child(*drawing_area);
   drawing_area->set_draw_func(sigc::bind(sigc::mem_fun(*this, &Example_FlowBox::on_drawing_area_draw), 
swatch_i));
 
   return color_swatch;
diff --git a/demos/gtk-demo/example_gestures.cc b/demos/gtk-demo/example_gestures.cc
index a5e36ec6..08da4710 100644
--- a/demos/gtk-demo/example_gestures.cc
+++ b/demos/gtk-demo/example_gestures.cc
@@ -49,7 +49,7 @@ Example_Gestures::Example_Gestures()
   set_title("Gestures demo");
   set_default_size(400, 400);
 
-  add(m_DrawingArea);
+  set_child(m_DrawingArea);
   m_DrawingArea.set_draw_func(sigc::mem_fun(*this, &Example_Gestures::on_drawing_area_draw));
 
   // Create gestures.
diff --git a/demos/gtk-demo/example_glarea.cc b/demos/gtk-demo/example_glarea.cc
index 34c5ab5b..49a99add 100644
--- a/demos/gtk-demo/example_glarea.cc
+++ b/demos/gtk-demo/example_glarea.cc
@@ -73,12 +73,12 @@ Example_GLArea::Example_GLArea() : m_RotationAngles(N_AXIS, 0.0f)
 
   m_VBox.set_margin(12);
   m_VBox.set_spacing(6);
-  add(m_VBox);
+  set_child(m_VBox);
 
   m_GLArea.set_hexpand(true);
   m_GLArea.set_vexpand(true);
   m_GLArea.set_auto_render(true);
-  m_VBox.add(m_GLArea);
+  m_VBox.append(m_GLArea);
 
   // Connect gl area signals
   m_GLArea.signal_realize().connect(sigc::mem_fun(*this, &Example_GLArea::realize));
@@ -87,17 +87,17 @@ Example_GLArea::Example_GLArea() : m_RotationAngles(N_AXIS, 0.0f)
   m_GLArea.signal_unrealize().connect(sigc::mem_fun(*this, &Example_GLArea::unrealize), false);
   m_GLArea.signal_render().connect(sigc::mem_fun(*this, &Example_GLArea::render), false);
 
-  m_VBox.add(m_Controls);
+  m_VBox.append(m_Controls);
   m_Controls.set_hexpand(true);
 
   for(int i = 0 ; i < N_AXIS ; ++i)
   {
     auto sliderBox = create_axis_slider_box(i);
-    m_Controls.add(*sliderBox);
+    m_Controls.append(*sliderBox);
   }
 
   m_Button.set_hexpand(true);
-  m_VBox.add(m_Button);
+  m_VBox.append(m_Button);
   // Connect clicked to close of window
   m_Button.signal_clicked().connect(sigc::mem_fun(*this, &Gtk::Window::close));
 }
@@ -202,7 +202,7 @@ Gtk::Box* Example_GLArea::create_axis_slider_box(int axis)
   }
 
   auto label = Gtk::manage(new Gtk::Label{text});
-  box->add(*label);
+  box->append(*label);
   label->show();
 
   auto adj = Gtk::Adjustment::create(0.0, 0.0, 360.0, 1.0, 12.0, 0.0);
@@ -211,7 +211,7 @@ Gtk::Box* Example_GLArea::create_axis_slider_box(int axis)
     sigc::bind(sigc::mem_fun(*this, &Example_GLArea::on_axis_value_change), axis, adj)
                                       );
   auto slider = Gtk::manage(new Gtk::Scale{adj, Gtk::Orientation::HORIZONTAL});
-  box->add(*slider);
+  box->append(*slider);
   slider->set_hexpand(true);
   slider->show();
 
diff --git a/demos/gtk-demo/example_headerbar.cc b/demos/gtk-demo/example_headerbar.cc
index 3a278508..73a2cf2e 100644
--- a/demos/gtk-demo/example_headerbar.cc
+++ b/demos/gtk-demo/example_headerbar.cc
@@ -50,8 +50,7 @@ Example_HeaderBar::Example_HeaderBar()
 
   // Configuration
   m_header_bar.set_show_title_buttons();
-  m_header_bar.set_title("Welcome to Facebook - Log in, sign up or learn more");
-  m_header_bar.set_has_subtitle(false);
+  set_title("Welcome to Facebook - Log in, sign up or learn more");
 
   // Header Bar buttons
   configure_send_receive_button();
@@ -63,7 +62,7 @@ Example_HeaderBar::Example_HeaderBar()
 
   // Layout
   set_titlebar(m_header_bar);
-  add(m_text_view);
+  set_child(m_text_view);
 }
 
 Example_HeaderBar::~Example_HeaderBar()
@@ -75,7 +74,7 @@ void Example_HeaderBar::configure_send_receive_button()
   auto icon = Gio::ThemedIcon::create("mail-send-receive-symbolic", false);
 
   m_send_receive_image.set(icon);
-  m_send_receive_button.add(m_send_receive_image);
+  m_send_receive_button.set_child(m_send_receive_image);
 }
 
 void Example_HeaderBar::configure_arrow_buttons()
@@ -85,6 +84,6 @@ void Example_HeaderBar::configure_arrow_buttons()
   m_left_arrow_button.set_image_from_icon_name("pan-start-symbolic", Gtk::IconSize::INHERIT, true);
   m_right_arrow_button.set_image_from_icon_name("pan-end-symbolic", Gtk::IconSize::INHERIT, true);
 
-  m_arrow_buttons_box.add(m_left_arrow_button);
-  m_arrow_buttons_box.add(m_right_arrow_button);
+  m_arrow_buttons_box.append(m_left_arrow_button);
+  m_arrow_buttons_box.append(m_right_arrow_button);
 }
diff --git a/demos/gtk-demo/example_iconbrowser.cc b/demos/gtk-demo/example_iconbrowser.cc
index 4cdd8601..53fac7c1 100644
--- a/demos/gtk-demo/example_iconbrowser.cc
+++ b/demos/gtk-demo/example_iconbrowser.cc
@@ -193,15 +193,15 @@ Example_IconBrowser::Example_IconBrowser()
 
   // The header bar.
   set_titlebar(m_header);
-  m_header.set_title("Icon Browser");
+  set_title("Icon Browser");
   m_header.set_show_title_buttons(true);
   m_header.pack_end(m_search_button);
   m_search_button.set_image_from_icon_name("edit-find-symbolic");
   m_header.pack_end(m_header_radio_button_box);
   m_normal_radio.set_expand();
-  m_header_radio_button_box.add(m_normal_radio);
+  m_header_radio_button_box.append(m_normal_radio);
   m_symbolic_radio.set_expand();
-  m_header_radio_button_box.add(m_symbolic_radio);
+  m_header_radio_button_box.append(m_symbolic_radio);
   m_normal_radio.set_draw_indicator(false); // Make it look as a normal button
   m_symbolic_radio.set_draw_indicator(false);
   m_symbolic_radio.join_group(m_normal_radio);
@@ -212,23 +212,23 @@ Example_IconBrowser::Example_IconBrowser()
   m_button_size_group->add_widget(m_search_button);
 
   // Main part of the window.
-  add(m_hbox);
-  m_hbox.add(m_context_list);
+  set_child(m_hbox);
+  m_hbox.append(m_context_list);
   m_context_list.set_selection_mode(Gtk::SelectionMode::SINGLE);
-  m_hbox.add(m_vseparator);
+  m_hbox.append(m_vseparator);
   m_vcontent_box.set_expand();
-  m_hbox.add(m_vcontent_box);
-  m_vcontent_box.add(m_search_bar);
-  m_search_bar.add(m_search_entry);
+  m_hbox.append(m_vcontent_box);
+  m_vcontent_box.append(m_search_bar);
+  m_search_bar.set_child(m_search_entry);
   // The search bar is shown when the search toggle button is pressed.
   m_binding_search_button_search_entry = Glib::Binding::bind_property(
     m_search_button.property_active(),
     m_search_bar.property_search_mode_enabled(),
     Glib::Binding::Flags::BIDIRECTIONAL);
   m_scrolled_window.set_expand();
-  m_vcontent_box.add(m_scrolled_window);
+  m_vcontent_box.append(m_scrolled_window);
   m_scrolled_window.set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC);
-  m_scrolled_window.add(m_icon_view);
+  m_scrolled_window.set_child(m_icon_view);
   m_icon_view.set_model(m_filter_model);
   m_icon_view.set_selection_mode(Gtk::SelectionMode::NONE);
   m_icon_view.set_activate_on_single_click(true);
@@ -897,7 +897,7 @@ DetailDialog::DetailDialog(Gtk::Window& parent)
 {
   set_resizable(false);
   auto content_area = get_content_area();
-  content_area->add(m_grid);
+  content_area->append(m_grid);
   m_grid.set_expand();
   m_grid.set_margin(10);
   m_grid.set_row_spacing(10);
diff --git a/demos/gtk-demo/example_iconview.cc b/demos/gtk-demo/example_iconview.cc
index 7ad81851..83942152 100644
--- a/demos/gtk-demo/example_iconview.cc
+++ b/demos/gtk-demo/example_iconview.cc
@@ -80,19 +80,19 @@ Example_IconView::Example_IconView()
     std::cout << error.what() << std::endl;
   }
 
-  m_VBox.add(m_Toolbar);
+  m_VBox.append(m_Toolbar);
 
   m_ButtonUp.set_sensitive();
-  m_Toolbar.add(m_ButtonUp);
+  m_Toolbar.append(m_ButtonUp);
 
   m_ButtonHome.set_sensitive();
-  m_Toolbar.add(m_ButtonHome);
+  m_Toolbar.append(m_ButtonHome);
 
   m_ScrolledWindow.set_has_frame(true);
   m_ScrolledWindow.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
   m_ScrolledWindow.set_expand();
 
-  m_VBox.add(m_ScrolledWindow);
+  m_VBox.append(m_ScrolledWindow);
 
   //Create the data model:
   m_model = Gtk::ListStore::create(m_columns);
@@ -118,11 +118,11 @@ Example_IconView::Example_IconView()
 
   m_IconView.signal_item_activated().connect( sigc::mem_fun(*this, 
&Example_IconView::on_iconview_item_activated) );
 
-  m_ScrolledWindow.add(m_IconView);
+  m_ScrolledWindow.set_child(m_IconView);
 
   m_IconView.grab_focus();
 
-  add(m_VBox);
+  set_child(m_VBox);
 }
 
 int Example_IconView::on_model_sort(const Gtk::TreeModel::const_iterator& a, const 
Gtk::TreeModel::const_iterator& b)
diff --git a/demos/gtk-demo/example_images.cc b/demos/gtk-demo/example_images.cc
index 75730340..f53b91dd 100644
--- a/demos/gtk-demo/example_images.cc
+++ b/demos/gtk-demo/example_images.cc
@@ -72,93 +72,93 @@ Example_Images::Example_Images()
   set_title("Images");
 
   m_BaseVBox.set_margin(16);
-  add(m_BaseVBox);
-  m_BaseVBox.add(m_HBox);
+  set_child(m_BaseVBox);
+  m_BaseVBox.append(m_HBox);
 
   /* Image */
 
   auto pVBox = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 8);
-  m_HBox.add(*pVBox);
+  m_HBox.append(*pVBox);
 
   m_Label_Image.set_markup("<u>Image loaded from a file</u>");
-  pVBox->add(m_Label_Image);
+  pVBox->append(m_Label_Image);
 
   m_Frame_Image.set_halign(Gtk::Align::CENTER);
   m_Frame_Image.set_valign(Gtk::Align::CENTER);
-  pVBox->add(m_Frame_Image);
+  pVBox->append(m_Frame_Image);
 
   auto pImage = Gtk::make_managed<Gtk::Image>();
   pImage->set_from_icon_name("gtk3-demo");
   pImage->set_icon_size(Gtk::IconSize::LARGE);
-  m_Frame_Image.add(*pImage);
+  m_Frame_Image.set_child(*pImage);
 
   /* Animation */
 
   m_Label_Animation.set_markup("<u>Animation loaded from a file</u>");
-  pVBox->add(m_Label_Animation);
+  pVBox->append(m_Label_Animation);
 
   m_Frame_Animation.set_halign(Gtk::Align::CENTER);
   m_Frame_Animation.set_valign(Gtk::Align::CENTER);
-  pVBox->add(m_Frame_Animation);
+  pVBox->append(m_Frame_Animation);
 
   auto pPicture = Gtk::make_managed<Gtk::Picture>();
   pPicture->set_resource("/images/floppybuddy.gif");
-  m_Frame_Animation.add(*pPicture);
+  m_Frame_Animation.set_child(*pPicture);
 
   /* Symbolic themed icon */
 
   m_Label_ThemedIcon.set_markup("<u>Symbolic themed icon</u>");
-  pVBox->add(m_Label_ThemedIcon);
+  pVBox->append(m_Label_ThemedIcon);
 
   m_Frame_ThemedIcon.set_halign(Gtk::Align::CENTER);
   m_Frame_ThemedIcon.set_valign(Gtk::Align::CENTER);
-  pVBox->add(m_Frame_ThemedIcon);
+  pVBox->append(m_Frame_ThemedIcon);
 
   auto icon = Gio::ThemedIcon::create("battery-caution-charging-symbolic", true);
   pImage = Gtk::make_managed<Gtk::Image>(icon);
   pImage->set_icon_size(Gtk::IconSize::LARGE);
-  m_Frame_ThemedIcon.add(*pImage);
+  m_Frame_ThemedIcon.set_child(*pImage);
 
   /* Progressive */
 
   pVBox = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 8);
-  m_HBox.add(*pVBox);
+  m_HBox.append(*pVBox);
 
   m_Label_Progressive.set_markup("<u>Progressive image loading</u>");
-  pVBox->add(m_Label_Progressive);
+  pVBox->append(m_Label_Progressive);
 
   m_Frame_Progressive.set_halign(Gtk::Align::CENTER);
   m_Frame_Progressive.set_valign(Gtk::Align::CENTER);
-  pVBox->add(m_Frame_Progressive);
+  pVBox->append(m_Frame_Progressive);
 
   /* Create an empty image for now; the progressive loader
    * will create the pixbuf and fill it in.
    */
-  m_Frame_Progressive.add(m_Picture_Progressive);
+  m_Frame_Progressive.set_child(m_Picture_Progressive);
 
   start_progressive_loading();
 
   /* Video */
 
   m_Label_Video.set_markup("<u>Displaying video</u>");
-  pVBox->add(m_Label_Video);
+  pVBox->append(m_Label_Video);
 
   m_Frame_Video.set_halign(Gtk::Align::CENTER);
   m_Frame_Video.set_valign(Gtk::Align::CENTER);
-  pVBox->add(m_Frame_Video);
+  pVBox->append(m_Frame_Video);
 
   auto video = Gtk::make_managed<Gtk::Video>();
   video->set_resource("/images/gtk-logo.webm");
   video->get_media_stream()->set_loop();
-  m_Frame_Video.add(*video);
+  m_Frame_Video.set_child(*video);
 
   /* Widget paintable */
 
   pVBox = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 8);
-  m_HBox.add(*pVBox);
+  m_HBox.append(*pVBox);
 
   m_Label_Paintable.set_markup("<u>Gtk::WidgetPaintable</u>");
-  pVBox->add(m_Label_Paintable);
+  pVBox->append(m_Label_Paintable);
 
   pPicture = Gtk::make_managed<Gtk::Picture>();
   auto demo_window = DemoWindow::get_demo_window();
@@ -169,10 +169,10 @@ Example_Images::Example_Images()
   }
   pPicture->set_size_request(100, 100);
   pPicture->set_valign(Gtk::Align::START);
-  pVBox->add(*pPicture);
+  pVBox->append(*pPicture);
 
   /* Sensitivity control */
-  m_BaseVBox.add(m_ToggleButton);
+  m_BaseVBox.append(m_ToggleButton);
   m_ToggleButton.signal_toggled().connect(sigc::mem_fun(*this, &Example_Images::on_toggle_sensitivity));
 }
 
@@ -217,7 +217,7 @@ bool Example_Images::on_timeout()
       strMsg += error.what();
 
       Gtk::MessageDialog dialog(strMsg, false, Gtk::MessageType::ERROR, Gtk::ButtonsType::CLOSE);
-      dialog.run();
+      dialog.show();
 
       m_image_stream.reset();
 
@@ -234,7 +234,7 @@ bool Example_Images::on_timeout()
       strMsg += error.what();
 
       Gtk::MessageDialog dialog(strMsg, false, Gtk::MessageType::ERROR, Gtk::ButtonsType::CLOSE);
-      dialog.run();
+      dialog.show();
 
       m_image_stream.reset();
 
@@ -260,7 +260,7 @@ bool Example_Images::on_timeout()
         strMsg += error.what();
 
         Gtk::MessageDialog dialog(strMsg, false, Gtk::MessageType::ERROR, Gtk::ButtonsType::CLOSE);
-        dialog.run();
+        dialog.show();
 
         m_refPixbufLoader.reset();
 
@@ -282,7 +282,7 @@ bool Example_Images::on_timeout()
       strMsg += error.what();
 
       Gtk::MessageDialog dialog(strMsg, false, Gtk::MessageType::ERROR, Gtk::ButtonsType::CLOSE);
-      dialog.run();
+      dialog.show();
 
       return false; // uninstall the timeout
     }
diff --git a/demos/gtk-demo/example_overlay.cc b/demos/gtk-demo/example_overlay.cc
index 4d7780d4..03216610 100644
--- a/demos/gtk-demo/example_overlay.cc
+++ b/demos/gtk-demo/example_overlay.cc
@@ -40,14 +40,14 @@ Example_Overlay::Example_Overlay()
 
   // Main text view
   m_scrolled_window.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
-  m_scrolled_window.add(m_text_view);
+  m_scrolled_window.set_child(m_text_view);
 
   // Entries and labels
   configure_entries_and_labels();
 
   // Layout
-  m_overlay.add(m_scrolled_window);
-  add(m_overlay);
+  m_overlay.set_child(m_scrolled_window);
+  set_child(m_overlay);
 }
 
 Example_Overlay::~Example_Overlay()
diff --git a/demos/gtk-demo/example_panes.cc b/demos/gtk-demo/example_panes.cc
index 57377ff9..385fd605 100644
--- a/demos/gtk-demo/example_panes.cc
+++ b/demos/gtk-demo/example_panes.cc
@@ -49,32 +49,32 @@ Example_Panes::Example_Panes()
   set_title("Panes");
 
   Gtk::Box *const pVBox = new Gtk::Box(Gtk::Orientation::VERTICAL);
-  add(*Gtk::manage(pVBox));
+  set_child(*Gtk::manage(pVBox));
 
   Gtk::Paned *const pVPaned = new Gtk::Paned(Gtk::Orientation::VERTICAL);
-  pVBox->add(*Gtk::manage(pVPaned));
+  pVBox->append(*Gtk::manage(pVPaned));
   pVPaned->set_margin(5);
   pVPaned->set_expand();
 
   Gtk::Paned *const pHPaned = new Gtk::Paned(Gtk::Orientation::HORIZONTAL);
-  pVPaned->add1(*Gtk::manage(pHPaned));
+  pVPaned->set_start_child(*Gtk::manage(pHPaned));
 
   Gtk::Frame *const pFrame1 = new Gtk::Frame();
-  pHPaned->add1(*Gtk::manage(pFrame1));
+  pHPaned->set_start_child(*Gtk::manage(pFrame1));
   pFrame1->set_size_request(60, 60);
-  pFrame1->add(*Gtk::make_managed<Gtk::Button>("_Hi there", true));
+  pFrame1->set_child(*Gtk::make_managed<Gtk::Button>("_Hi there", true));
 
   Gtk::Frame *const pFrame2 = new Gtk::Frame();
-  pHPaned->add2(*Gtk::manage(pFrame2));
+  pHPaned->set_end_child(*Gtk::manage(pFrame2));
   pFrame2->set_size_request(80, 60);
 
   Gtk::Frame *const pFrame3 = new Gtk::Frame();
-  pVPaned->add2(*Gtk::manage(pFrame3));
+  pVPaned->set_end_child(*Gtk::manage(pFrame3));
   pFrame3->set_size_request(60, 80);
 
   // Now create check buttons to control sizing
-  pVBox->add(*Gtk::make_managed<PaneOptions>(*pHPaned, "Horizontal", "Left", "Right"));
-  pVBox->add(*Gtk::make_managed<PaneOptions>(*pVPaned, "Vertical", "Top", "Bottom"));
+  pVBox->append(*Gtk::make_managed<PaneOptions>(*pHPaned, "Horizontal", "Left", "Right"));
+  pVBox->append(*Gtk::make_managed<PaneOptions>(*pVPaned, "Vertical", "Top", "Bottom"));
 }
 
 Example_Panes::~Example_Panes()
@@ -92,7 +92,7 @@ PaneOptions::PaneOptions(Gtk::Paned& paned, const Glib::ustring& frame_label,
 {
   Gtk::Grid *const pGrid = new Gtk::Grid();
   pGrid->set_margin(4);
-  add(*Gtk::manage(pGrid));
+  set_child(*Gtk::manage(pGrid));
 
   pGrid->attach(*Gtk::make_managed<Gtk::Label>(label1), 0, 0, 1, 1);
   pGrid->attach(*Gtk::make_managed<Gtk::Label>(label2), 1, 0, 1, 1);
@@ -124,18 +124,14 @@ PaneOptions::~PaneOptions()
 
 void PaneOptions::on_checkbutton1()
 {
-  Gtk::Widget *const pChild = m_pPaned->get_child1();
-
-  m_pPaned->remove(*pChild);
-  m_pPaned->pack1(*pChild, m_CheckButton_resize1.get_active(), m_CheckButton_shrink1.get_active());
+  m_pPaned->set_resize_start_child(m_CheckButton_resize1.get_active());
+  m_pPaned->set_shrink_start_child(m_CheckButton_shrink1.get_active());
 }
 
 void PaneOptions::on_checkbutton2()
 {
-  Gtk::Widget *const pChild = m_pPaned->get_child2();
-
-  m_pPaned->remove(*pChild);
-  m_pPaned->pack2(*pChild, m_CheckButton_resize2.get_active(), m_CheckButton_shrink2.get_active());
+  m_pPaned->set_resize_end_child(m_CheckButton_resize2.get_active());
+  m_pPaned->set_shrink_end_child(m_CheckButton_shrink2.get_active());
 }
 
 } // anonymous namespace
diff --git a/demos/gtk-demo/example_pixbufs.cc b/demos/gtk-demo/example_pixbufs.cc
index 29e41647..acc53c6d 100644
--- a/demos/gtk-demo/example_pixbufs.cc
+++ b/demos/gtk-demo/example_pixbufs.cc
@@ -79,7 +79,7 @@ Example_Pixbufs::Example_Pixbufs()
     set_size_request(m_back_width, m_back_height);
     m_refPixbuf = Gdk::Pixbuf::create(Gdk::Colorspace::RGB, false, 8, m_back_width, m_back_height);
     m_DrawingArea.set_draw_func(sigc::mem_fun(*this, &Example_Pixbufs::on_drawingarea_draw));
-    add(m_DrawingArea);
+    set_child(m_DrawingArea);
 
     m_tick_id = m_DrawingArea.add_tick_callback(
         sigc::mem_fun(*this, &Example_Pixbufs::on_tick));
@@ -90,7 +90,7 @@ Example_Pixbufs::Example_Pixbufs()
     strMsg += error.what();
 
     Gtk::MessageDialog dialog(strMsg, false, Gtk::MessageType::ERROR, Gtk::ButtonsType::CLOSE);
-    dialog.run();
+    dialog.show();
   }
 }
 
diff --git a/demos/gtk-demo/example_sizegroup.cc b/demos/gtk-demo/example_sizegroup.cc
index fb298287..40a4db55 100644
--- a/demos/gtk-demo/example_sizegroup.cc
+++ b/demos/gtk-demo/example_sizegroup.cc
@@ -58,7 +58,7 @@ Example_SizeGroup::Example_SizeGroup()
   set_resizable(false);
   add_button("_Close", Gtk::ResponseType::CLOSE);
 
-  get_content_area()->add(m_VBox);
+  get_content_area()->append(m_VBox);
   m_VBox.set_margin(5);
   m_VBox.set_expand();
 
@@ -67,12 +67,12 @@ Example_SizeGroup::Example_SizeGroup()
   /* Create one frame holding color options
    */
   m_Frame_Color.set_expand();
-  m_VBox.add(m_Frame_Color);
+  m_VBox.append(m_Frame_Color);
 
   m_Grid_Color.set_margin(5);
   m_Grid_Color.set_row_spacing(5);
   m_Grid_Color.set_column_spacing(10);
-  m_Frame_Color.add(m_Grid_Color);
+  m_Frame_Color.set_child(m_Grid_Color);
 
   type_listStrings color_options;
   color_options.push_back("Red");
@@ -84,12 +84,12 @@ Example_SizeGroup::Example_SizeGroup()
 
   /* And another frame holding line style options
    */
-  m_VBox.add(m_Frame_Line);
+  m_VBox.append(m_Frame_Line);
 
   m_Grid_Line.set_margin(5);
   m_Grid_Line.set_row_spacing(5);
   m_Grid_Line.set_column_spacing(10);
-  m_Frame_Line.add(m_Grid_Line);
+  m_Frame_Line.set_child(m_Grid_Line);
 
 
   type_listStrings dash_options;
@@ -107,7 +107,7 @@ Example_SizeGroup::Example_SizeGroup()
   add_row(m_Grid_Line, 1, m_refSizeGroup, "_Line ends", end_options);
 
   /* And a check button to turn grouping on and off */
-  m_VBox.add(m_CheckButton);
+  m_VBox.append(m_CheckButton);
   m_CheckButton.set_active();
   m_CheckButton.signal_toggled().connect(sigc::mem_fun(*this, &Example_SizeGroup::on_checkbutton_toggled));
 }
diff --git a/demos/gtk-demo/example_stack.cc b/demos/gtk-demo/example_stack.cc
index 80ec8c1f..afacee9e 100644
--- a/demos/gtk-demo/example_stack.cc
+++ b/demos/gtk-demo/example_stack.cc
@@ -64,7 +64,7 @@ Example_Stack::Example_Stack()
   m_stack_switcher.set_stack(m_stack);
   m_grid.attach(m_stack_switcher, 0, 0, 1, 1);
   m_grid.attach(m_stack, 0, 1, 1, 1);
-  add(m_grid);
+  set_child(m_grid);
 }
 
 Example_Stack::~Example_Stack()
diff --git a/demos/gtk-demo/example_stacksidebar.cc b/demos/gtk-demo/example_stacksidebar.cc
index a55c8580..520213d8 100644
--- a/demos/gtk-demo/example_stacksidebar.cc
+++ b/demos/gtk-demo/example_stacksidebar.cc
@@ -48,11 +48,11 @@ Example_StackSidebar::Example_StackSidebar()
   set_title("Stack Sidebar demo");
   set_default_size(500, 350);
 
-  add(m_Box);
+  set_child(m_Box);
 
-  m_Box.add(m_StackSidebar);
-  m_Box.add(m_Separator);
-  m_Box.add(m_Stack);
+  m_Box.append(m_StackSidebar);
+  m_Box.append(m_Separator);
+  m_Box.append(m_Stack);
   m_Stack.set_expand();
 
   m_Stack.set_transition_type(Gtk::StackTransitionType::SLIDE_UP_DOWN);
diff --git a/demos/gtk-demo/example_textview.cc b/demos/gtk-demo/example_textview.cc
index 0d2dc06f..ecef2409 100644
--- a/demos/gtk-demo/example_textview.cc
+++ b/demos/gtk-demo/example_textview.cc
@@ -68,7 +68,7 @@ Example_TextView::Example_TextView()
   set_title("Text View");
 
   m_VPaned.set_margin(5);
-  add(m_VPaned);
+  set_child(m_VPaned);
 
   /* For convenience, we just use the autocreated buffer from
    * the first text view; you could also create the buffer
@@ -79,12 +79,12 @@ Example_TextView::Example_TextView()
   m_pView2 = Gtk::make_managed<Gtk::TextView>(refBuffer);
 
   m_ScrolledWindow1.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
-  m_VPaned.add1(m_ScrolledWindow1);
-  m_ScrolledWindow1.add(m_View1);
+  m_VPaned.set_start_child(m_ScrolledWindow1);
+  m_ScrolledWindow1.set_child(m_View1);
 
   m_ScrolledWindow2.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
-  m_VPaned.add2(m_ScrolledWindow2);
-  m_ScrolledWindow2.add(*m_pView2);
+  m_VPaned.set_end_child(m_ScrolledWindow2);
+  m_ScrolledWindow2.set_child(*m_pView2);
 
   create_tags(refBuffer);
   insert_text(refBuffer);
@@ -452,8 +452,8 @@ Window_EasterEgg::Window_EasterEgg()
   recursive_attach_view(0, *m_pTextView, refAnchor);
 
   m_ScrolledWindow.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
-  add(m_ScrolledWindow);
-  m_ScrolledWindow.add(*m_pTextView);
+  set_child(m_ScrolledWindow);
+  m_ScrolledWindow.set_child(*m_pTextView);
 
   hide();
 }
@@ -472,7 +472,7 @@ void Window_EasterEgg::recursive_attach_view(int depth, Gtk::TextView& view, Gli
   /* Frame is to add a black border around each child view */
   auto pFrame = Gtk::make_managed<Gtk::Frame>();
 
-  pFrame->add(*pChildView);
+  pFrame->set_child(*pChildView);
 
   view.add_child_at_anchor(*pFrame, refAnchor);
   recursive_attach_view (depth + 1, *pChildView, refAnchor);
diff --git a/demos/gtk-demo/example_treeview_editable_cells.cc 
b/demos/gtk-demo/example_treeview_editable_cells.cc
index f1ce024c..9ab2278a 100644
--- a/demos/gtk-demo/example_treeview_editable_cells.cc
+++ b/demos/gtk-demo/example_treeview_editable_cells.cc
@@ -107,13 +107,13 @@ Example_TreeView_EditableCells::Example_TreeView_EditableCells()
   set_default_size(320, 200);
 
   m_VBox.set_margin(5);
-  add(m_VBox);
-  m_VBox.add(m_Label);
+  set_child(m_VBox);
+  m_VBox.append(m_Label);
 
   m_ScrolledWindow.set_has_frame(true);
   m_ScrolledWindow.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
   m_ScrolledWindow.set_expand();
-  m_VBox.add(m_ScrolledWindow);
+  m_VBox.append(m_ScrolledWindow);
 
   /* create model */
   create_model();
@@ -124,19 +124,19 @@ Example_TreeView_EditableCells::Example_TreeView_EditableCells()
   refTreeSelection->set_mode(Gtk::SelectionMode::SINGLE);
 
   add_columns();
-  m_ScrolledWindow.add(m_TreeView);
+  m_ScrolledWindow.set_child(m_TreeView);
 
   /* some buttons */
-  m_VBox.add(m_HBox);
+  m_VBox.append(m_HBox);
 
   m_Button_Add.set_expand();
-  m_HBox.add(m_Button_Add);
+  m_HBox.append(m_Button_Add);
   m_HBox.set_vexpand(false);
 
   m_Button_Add.signal_clicked().connect(
     sigc::mem_fun(*this, &Example_TreeView_EditableCells::on_button_add_clicked));
 
-  m_HBox.add(m_Button_Remove);
+  m_HBox.append(m_Button_Remove);
   m_Button_Remove.set_expand();
   m_Button_Remove.signal_clicked().connect(
     sigc::mem_fun(*this, &Example_TreeView_EditableCells::on_button_remove_clicked));
@@ -286,8 +286,6 @@ void Example_TreeView_EditableCells::add_columns()
 
     m_TreeView.append_column(*pViewColumn);
   }
-
-
 }
 
 
diff --git a/demos/gtk-demo/example_treeview_liststore.cc b/demos/gtk-demo/example_treeview_liststore.cc
index a88acd54..10bd969d 100644
--- a/demos/gtk-demo/example_treeview_liststore.cc
+++ b/demos/gtk-demo/example_treeview_liststore.cc
@@ -106,13 +106,13 @@ Example_TreeView_ListStore::Example_TreeView_ListStore()
   set_default_size(280, 250);
 
   m_VBox.set_margin(8);
-  add(m_VBox);
-  m_VBox.add(m_Label);
+  set_child(m_VBox);
+  m_VBox.append(m_Label);
 
   m_ScrolledWindow.set_has_frame(true);
   m_ScrolledWindow.set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC);
   m_ScrolledWindow.set_expand();
-  m_VBox.add(m_ScrolledWindow);
+  m_VBox.append(m_ScrolledWindow);
 
   /* create model */
   create_model();
@@ -122,7 +122,7 @@ Example_TreeView_ListStore::Example_TreeView_ListStore()
   m_TreeView.set_search_column(m_columns.description.index());
 
   add_columns();
-  m_ScrolledWindow.add(m_TreeView);
+  m_ScrolledWindow.set_child(m_TreeView);
 }
 
 Example_TreeView_ListStore::~Example_TreeView_ListStore()
diff --git a/demos/gtk-demo/example_treeview_treestore.cc b/demos/gtk-demo/example_treeview_treestore.cc
index db08a1d8..96e94e50 100644
--- a/demos/gtk-demo/example_treeview_treestore.cc
+++ b/demos/gtk-demo/example_treeview_treestore.cc
@@ -152,13 +152,13 @@ Example_TreeView_TreeStore::Example_TreeView_TreeStore()
   set_default_size(650, 400);
 
   m_VBox.set_margin(8);
-  add(m_VBox);
-  m_VBox.add(m_Label);
+  set_child(m_VBox);
+  m_VBox.append(m_Label);
 
   m_ScrolledWindow.set_has_frame(true);
   m_ScrolledWindow.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
   m_ScrolledWindow.set_expand();
-  m_VBox.add(m_ScrolledWindow);
+  m_VBox.append(m_ScrolledWindow);
 
   /* create model */
   create_model();
@@ -168,9 +168,8 @@ Example_TreeView_TreeStore::Example_TreeView_TreeStore()
   auto refTreeSelection = m_TreeView.get_selection();
   refTreeSelection->set_mode(Gtk::SelectionMode::MULTIPLE);
 
-
   add_columns();
-  m_ScrolledWindow.add(m_TreeView);
+  m_ScrolledWindow.set_child(m_TreeView);
 }
 
 Example_TreeView_TreeStore::~Example_TreeView_TreeStore()
diff --git a/demos/gtk-demo/textwidget.cc b/demos/gtk-demo/textwidget.cc
index e03458cd..5f34bbec 100644
--- a/demos/gtk-demo/textwidget.cc
+++ b/demos/gtk-demo/textwidget.cc
@@ -35,7 +35,7 @@ TextWidget::TextWidget(bool is_source)
   m_TextView.set_buffer(m_refTextBuffer);
   m_TextView.set_editable(false);
   m_TextView.set_cursor_visible(false);
-  add(m_TextView);
+  set_child(m_TextView);
 
   if (is_source)
   {
diff --git a/gdk/src/event.ccg b/gdk/src/event.ccg
index f26a7630..846217b9 100644
--- a/gdk/src/event.ccg
+++ b/gdk/src/event.ccg
@@ -36,4 +36,12 @@ std::vector<double> Event::get_axes() const
   return std::vector<double>(axes, axes + n_axes);
 }
 
+std::vector<TimeCoord> Event::get_motion_history() const
+{
+  guint n_coords = 0;
+  GdkTimeCoord* coords = gdk_motion_event_get_history(const_cast<GdkEvent*>(gobj()), &n_coords);
+  return Glib::ArrayHandler<TimeCoord, TimeCoordTraits>::array_to_vector(
+    coords, n_coords, Glib::OWNERSHIP_DEEP);
+}
+
 } // name space Gdk
diff --git a/gdk/src/event.hg b/gdk/src/event.hg
index 05e1a606..27a6dcfe 100644
--- a/gdk/src/event.hg
+++ b/gdk/src/event.hg
@@ -131,8 +131,12 @@ public:
   _WRAP_METHOD(Glib::RefPtr<const Surface> get_grab_broken_grab_surface() const, 
gdk_grab_broken_event_get_grab_surface, refreturn, constversion)
   _WRAP_METHOD(bool get_grab_broken_implicit() const, gdk_grab_broken_event_get_implicit)
 
-#m4 _CONVERSION(`GList*',`std::vector<TimeCoord>',`Glib::ListHandler<TimeCoord, 
TimeCoordPtrTraits>::list_to_vector($3, Glib::OWNERSHIP_SHALLOW)')
-  _WRAP_METHOD(std::vector<TimeCoord> get_motion_history() const, gdk_motion_event_get_history)
+  /** Retrieves the history of the event motion, as a vector of time and coordinates.
+   *
+   * @return A vector of time and coordinates.
+   */
+  std::vector<TimeCoord> get_motion_history() const;
+  _IGNORE(gdk_motion_event_get_history)
 
   _WRAP_METHOD(bool triggers_context_menu() const, gdk_event_triggers_context_menu)
   _WRAP_METHOD(bool get_distance(const Glib::RefPtr<const Event>& event2, double& distance) const, 
gdk_events_get_distance)
diff --git a/gtk/gtkmm.h b/gtk/gtkmm.h
index aaeb3a9c..b0f9df8a 100644
--- a/gtk/gtkmm.h
+++ b/gtk/gtkmm.h
@@ -103,7 +103,6 @@ extern const int gtkmm_micro_version;
 #include <gtkmm/applicationwindow.h>
 #include <gtkmm/aspectframe.h>
 #include <gtkmm/assistant.h>
-#include <gtkmm/bin.h>
 #include <gtkmm/binlayout.h>
 #include <gtkmm/border.h>
 #include <gtkmm/box.h>
@@ -132,7 +131,6 @@ extern const int gtkmm_micro_version;
 #include <gtkmm/combobox.h>
 #include <gtkmm/comboboxtext.h>
 #include <gtkmm/constraintlayout.h>
-#include <gtkmm/container.h>
 #include <gtkmm/cssprovider.h>
 #include <gtkmm/csssection.h>
 #include <gtkmm/dialog.h>
diff --git a/gtk/src/actionbar.hg b/gtk/src/actionbar.hg
index 05c8eade..88ae9b93 100644
--- a/gtk/src/actionbar.hg
+++ b/gtk/src/actionbar.hg
@@ -16,9 +16,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -39,9 +39,9 @@ namespace Gtk
  * @newin{3,12}
  */
 class ActionBar
-  : public Container
+  : public Widget
 {
-  _CLASS_GTKOBJECT(ActionBar, GtkActionBar, GTK_ACTION_BAR, Gtk::Container, GtkContainer)
+  _CLASS_GTKOBJECT(ActionBar, GtkActionBar, GTK_ACTION_BAR, Gtk::Widget, GtkWidget)
 public:
 
   /** Creates a new ActionBar widget.
@@ -50,6 +50,7 @@ public:
 
   _WRAP_METHOD(void pack_start(Gtk::Widget& child), gtk_action_bar_pack_start)
   _WRAP_METHOD(void pack_end(Gtk::Widget& child), gtk_action_bar_pack_end)
+  _WRAP_METHOD(void remove(Gtk::Widget& child), gtk_action_bar_remove)
 
   // transfer none
   _WRAP_METHOD(Widget* get_center_widget(), gtk_action_bar_get_center_widget)
diff --git a/gtk/src/aspectframe.ccg b/gtk/src/aspectframe.ccg
index e6c59e3b..315f1c44 100644
--- a/gtk/src/aspectframe.ccg
+++ b/gtk/src/aspectframe.ccg
@@ -17,3 +17,13 @@
  */
 
 #include <gtk/gtk.h>
+
+namespace Gtk
+{
+
+void AspectFrame::unset_child()
+{
+  gtk_aspect_frame_set_child(gobj(), nullptr);
+}
+
+} // namespace Gtk
diff --git a/gtk/src/aspectframe.hg b/gtk/src/aspectframe.hg
index fc17db45..8dd2053e 100644
--- a/gtk/src/aspectframe.hg
+++ b/gtk/src/aspectframe.hg
@@ -16,9 +16,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -33,9 +33,9 @@ namespace Gtk
  * @ingroup Widgets
  * @ingroup Containers
  */
-class AspectFrame : public Bin
+class AspectFrame : public Widget
 {
-  _CLASS_GTKOBJECT(AspectFrame, GtkAspectFrame, GTK_ASPECT_FRAME, Gtk::Bin, GtkBin)
+  _CLASS_GTKOBJECT(AspectFrame, GtkAspectFrame, GTK_ASPECT_FRAME, Gtk::Widget, GtkWidget)
 
 public:
 
@@ -84,11 +84,16 @@ public:
   _WRAP_METHOD(float get_ratio() const, gtk_aspect_frame_get_ratio)
   _WRAP_METHOD(void set_obey_child(bool obey_child = true), gtk_aspect_frame_set_obey_child)
   _WRAP_METHOD(bool get_obey_child() const, gtk_aspect_frame_get_obey_child)
+  _WRAP_METHOD(void set_child(Widget& child), gtk_aspect_frame_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_aspect_frame_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_aspect_frame_get_child, constversion)
 
   _WRAP_PROPERTY("xalign", float)
   _WRAP_PROPERTY("yalign", float)
   _WRAP_PROPERTY("ratio", float)
   _WRAP_PROPERTY("obey-child", bool)
+  _WRAP_PROPERTY("child", Widget*)
 };
 
 } //namespace Gtk
diff --git a/gtk/src/box.hg b/gtk/src/box.hg
index 4d339f59..c7aac0d4 100644
--- a/gtk/src/box.hg
+++ b/gtk/src/box.hg
@@ -16,9 +16,9 @@
  */
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/orientable.h>
 
 namespace Gtk
@@ -32,10 +32,9 @@ namespace Gtk
  * Gtk::Widget::set_halign() and Gtk::Widget::set_valign() can be used on
  * the children to influence their allocation.
  *
- * Use repeated calls to Gtk::Container::add() to pack widgets into a
- * %Gtk::Box from start to end. Use Gtk::Container::remove() to remove widgets
- * from the %Gtk::Box. insert_child_after() and insert_child_at_start() can be used
- * to add a child at a particular position.
+ * Use repeated calls to append() to pack widgets into a %Gtk::Box
+ * from start to end. Use remove() to remove widgets from the %Gtk::Box.
+ * insert_child_after() can be used to add a child at a particular position.
  *
  * Use set_homogeneous() to specify whether or not all children
  * of the %Gtk::Box are forced to get the same amount of space.
@@ -48,10 +47,10 @@ namespace Gtk
  * a different place in the box.
  */
 class Box
-  : public Container,
+  : public Widget,
     public Orientable
 {
-  _CLASS_GTKOBJECT(Box,GtkBox,GTK_BOX,Gtk::Container,GtkContainer)
+  _CLASS_GTKOBJECT(Box, GtkBox, GTK_BOX, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Orientable)
 public:
 
@@ -71,6 +70,10 @@ public:
   _WRAP_METHOD(void set_baseline_position(BaselinePosition position), gtk_box_set_baseline_position)
   _WRAP_METHOD(BaselinePosition get_baseline_position() const, gtk_box_get_baseline_position)
 
+  _WRAP_METHOD(void append(Gtk::Widget& child), gtk_box_append)
+  _WRAP_METHOD(void prepend(Gtk::Widget& child), gtk_box_prepend)
+  _WRAP_METHOD(void remove(Gtk::Widget& child), gtk_box_remove)
+
   /** Inserts @a child in the position after @a sibling in the list of children.
    *
    * @param child The Gtk::Widget to insert.
@@ -78,7 +81,7 @@ public:
    */
   _WRAP_METHOD(void insert_child_after(Widget& child, const Widget& sibling), gtk_box_insert_child_after)
 
-  /** Inserts @a child in the first position in the list of  children.
+  /** Inserts @a child in the first position in the list of children.
    *
    * @param child The Gtk::Widget to insert.
    */
diff --git a/gtk/src/button.ccg b/gtk/src/button.ccg
index 3037d4fc..32c08145 100644
--- a/gtk/src/button.ccg
+++ b/gtk/src/button.ccg
@@ -46,4 +46,9 @@ void Button::set_image_from_icon_name(const Glib::ustring& icon_name, IconSize s
   }
 }
 
+void Button::unset_child()
+{
+  gtk_button_set_child(gobj(), nullptr);
+}
+
 } // namespace Gtk
diff --git a/gtk/src/button.hg b/gtk/src/button.hg
index b34b7735..387cadd6 100644
--- a/gtk/src/button.hg
+++ b/gtk/src/button.hg
@@ -16,11 +16,11 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/actionable.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -36,10 +36,10 @@ namespace Gtk
  * @ingroup Widgets
  */
 class Button
-  : public Bin,
+  : public Widget,
     public Actionable
 {
-  _CLASS_GTKOBJECT(Button,GtkButton,GTK_BUTTON,Gtk::Bin,GtkBin)
+  _CLASS_GTKOBJECT(Button, GtkButton, GTK_BUTTON, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Actionable)
 public:
 
@@ -94,6 +94,11 @@ public:
   void set_image_from_icon_name(const Glib::ustring& icon_name,
     IconSize size = IconSize::INHERIT, bool use_fallback = false);
 
+  _WRAP_METHOD(void set_child(Widget& child), gtk_button_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_button_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_button_get_child, constversion)
+
   _WRAP_SIGNAL(void clicked(), "clicked")
   _IGNORE_SIGNAL("activate") // Action signal
 
@@ -101,6 +106,7 @@ public:
   _WRAP_PROPERTY("has-frame", bool)
   _WRAP_PROPERTY("use-underline", bool)
   _WRAP_PROPERTY("icon-name", Glib::ustring)
+  _WRAP_PROPERTY("child", Widget*)
 };
 
 /*! A Gtk::Button example.
diff --git a/gtk/src/combobox.ccg b/gtk/src/combobox.ccg
index f81ebd1c..b36f9112 100644
--- a/gtk/src/combobox.ccg
+++ b/gtk/src/combobox.ccg
@@ -94,16 +94,19 @@ void ComboBox::unset_row_separator_func()
   gtk_combo_box_set_row_separator_func(gobj(), nullptr, nullptr, nullptr /* See C docs. */);
 }
 
+void ComboBox::unset_child()
+{
+  gtk_combo_box_set_child(gobj(), nullptr);
+}
+
 Entry* ComboBox::get_entry()
 {
-  auto widget = Glib::wrap(gtk_bin_get_child(GTK_BIN(gobj())));
-  return dynamic_cast<Gtk::Entry*>(widget);
+  return dynamic_cast<Gtk::Entry*>(get_child());
 }
 
 const Entry* ComboBox::get_entry() const
 {
-  const auto widget = Glib::wrap(gtk_bin_get_child(GTK_BIN(gobj())));
-  return dynamic_cast<const Gtk::Entry*>(widget);
+  return dynamic_cast<const Gtk::Entry*>(get_child());
 }
 
 Glib::ustring ComboBox::get_entry_text() const
diff --git a/gtk/src/combobox.hg b/gtk/src/combobox.hg
index 48444405..1c1943ba 100644
--- a/gtk/src/combobox.hg
+++ b/gtk/src/combobox.hg
@@ -16,7 +16,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/celllayout.h>
 #include <gtkmm/celleditable.h>
 #include <gtkmm/entry.h>
@@ -25,7 +25,7 @@
 #include <gtkmm/enums.h> //For SensitivityType.
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gdk
 {
@@ -64,11 +64,11 @@ namespace Gtk
  * @ingroup Widgets
  */
 class ComboBox
-: public Bin,
+: public Widget,
   public CellLayout,
   public CellEditable
 {
-  _CLASS_GTKOBJECT(ComboBox, GtkComboBox, GTK_COMBO_BOX, Gtk::Bin, GtkBin)
+  _CLASS_GTKOBJECT(ComboBox, GtkComboBox, GTK_COMBO_BOX, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(CellLayout)
   _IMPLEMENTS_INTERFACE(CellEditable)
 public:
@@ -179,17 +179,21 @@ public:
    */
   _WRAP_METHOD(bool set_active_id(const Glib::ustring& active_id), gtk_combo_box_set_active_id)
 
-  /** @see Bin::get_child().
+  _WRAP_METHOD(void set_child(Widget& child), gtk_combo_box_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_combo_box_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_combo_box_get_child, constversion)
+
+  /** @see get_child().
    * @newin{2,24}
    */
   Entry* get_entry();
 
-  /** @see Bin::get_child().
+  /** @see get_child().
    * @newin{2,24}
    */
   const Entry* get_entry() const;
 
-
   _WRAP_PROPERTY("model", Glib::RefPtr<TreeModel>)
   _WRAP_PROPERTY("active", int)
   _WRAP_PROPERTY("has-frame", bool)
@@ -200,6 +204,7 @@ public:
   _WRAP_PROPERTY("entry-text-column", int)
   _WRAP_PROPERTY("id-column", int)
   _WRAP_PROPERTY("active-id", Glib::ustring)
+  _WRAP_PROPERTY("child", Widget*)
 
   _WRAP_SIGNAL(void changed(), "changed")
 
@@ -222,5 +227,4 @@ dnl// See bug http://bugzilla.gnome.org/show_bug.cgi?id=168747.
   _IGNORE_SIGNAL("popdown")
 };
 
-
 } // namespace Gtk
diff --git a/gtk/src/dialog.hg b/gtk/src/dialog.hg
index 09f99479..9c96ce97 100644
--- a/gtk/src/dialog.hg
+++ b/gtk/src/dialog.hg
@@ -47,9 +47,9 @@ _WRAP_ENUM(ResponseType, GtkResponseType, CONV_TO_INT)
  * used for packing buttons into the dialog which may perform functions such
  * as cancel, ok, or apply.
  *
- * The dialog can be 'modal' (that is, one which freezes the rest of the
- * application from user input) - this can be specified in the Gtk::Dialog
- * constructor.
+ * A “modal” dialog (that is, one which freezes the rest of the application
+ * from user input), can be created by calling Gtk::Window::set_modal() on the
+ * dialog. It is also possible to set the modal property in the constructor. 
  *
  * When adding buttons using add_button(), clicking the button will emit
  * signal_response() with a "response id" you specified. You are encouraged
@@ -57,11 +57,6 @@ _WRAP_ENUM(ResponseType, GtkResponseType, CONV_TO_INT)
  * the "response" signal will be emitted with a response id of
  * Gtk::ResponseType::DELETE_EVENT.
  *
- * If you want to block waiting for a dialog to return before returning control
- * flow to your code, you can call run(). This function enters a
- * recursive main loop and waits for the user to respond to the dialog, returning
- * the response ID corresponding to the button the user clicked.
- *
  * @ingroup Dialogs
  */
 class Dialog : public Window
@@ -84,52 +79,6 @@ public:
 
   _WRAP_METHOD(void response(int response_id), gtk_dialog_response)
 
-  /** Blocks in a recursive main loop until the dialog either emits the
-   * Gtk::Dialog::signal_response() signal, or is destroyed. If the dialog is
-   * destroyed during the call to run(), run() returns
-   * Gtk::ResponseType::NONE. Otherwise, it returns the response ID from the
-   * signal_response() signal emission.
-   *
-   * Before entering the recursive main loop, run() calls
-   * Gtk::Widget::show() on the dialog for you. Note that you still
-   * need to show any children of the dialog yourself.
-   *
-   * During run(), the default behavior of Gtk::Widget::signal_delete_event()
-   * is disabled; if the dialog receives the signal_delete_event() signal, it will not be
-   * destroyed as windows usually are, and run() will return
-   * Gtk::ResponseType::DELETE_EVENT. Also, during run() the dialog
-   * will be modal. You can force run() to return at any time by
-   * calling response() to emit the signal_response() signal. Destroying
-   * the dialog during run() is a very bad idea, because your
-   * post-run code won’t know whether the dialog was destroyed or not.
-   *
-   * After run() returns, you are responsible for hiding or
-   * destroying the dialog if you wish to do so.
-   *
-   * Typical usage of this function might be:
-   * @code
-   * int result = dialog.run();
-   * switch (result)
-   * {
-   * case Gtk::ResponseType::ACCEPT:
-   *   do_application_specific_something();
-   *   break;
-   * default:
-   *   do_nothing_since_dialog_was_cancelled();
-   *   break;
-   * }
-   * @endcode
-   *
-   * Note that even though the recursive main loop gives the effect of a
-   * modal dialog (it prevents the user from interacting with other
-   * windows in the same window group while the dialog is run), callbacks
-   * such as timeouts, IO channel watches, DnD drops, etc, will
-   * be triggered during a run() call.
-   *
-   * @return Response ID.
-   */
-  _WRAP_METHOD(int run(), gtk_dialog_run)
-
   _WRAP_METHOD(Box* get_content_area(), gtk_dialog_get_content_area)
   _WRAP_METHOD(const Box* get_content_area() const, gtk_dialog_get_content_area, constversion)
 
diff --git a/gtk/src/dragicon.hg b/gtk/src/dragicon.hg
index a5cf9284..82e92c06 100644
--- a/gtk/src/dragicon.hg
+++ b/gtk/src/dragicon.hg
@@ -14,7 +14,7 @@
  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/native.h>
 #include <gtkmm/root.h>
 #include <gdkmm/drag.h>
@@ -22,7 +22,7 @@
 #include <glibmm/value.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -44,9 +44,9 @@ namespace Gtk
  * @ingroup Widgets
  * @newin{3,98}
  */
-class DragIcon : public Container, public Native, public Root
+class DragIcon : public Widget, public Native, public Root
 {
-  _CLASS_GTKOBJECT(DragIcon, GtkDragIcon, GTK_DRAG_ICON, Gtk::Container, GtkContainer)
+  _CLASS_GTKOBJECT(DragIcon, GtkDragIcon, GTK_DRAG_ICON, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Native)
   _IMPLEMENTS_INTERFACE(Root)
   _STRUCT_NOT_HIDDEN
diff --git a/gtk/src/drawingarea.hg b/gtk/src/drawingarea.hg
index 753e013d..355b15f0 100644
--- a/gtk/src/drawingarea.hg
+++ b/gtk/src/drawingarea.hg
@@ -154,6 +154,8 @@ public:
   void set_draw_func(const SlotDraw& slot);
   _IGNORE(gtk_drawing_area_set_draw_func)
 
+  _WRAP_SIGNAL(void resize(int width, int height), "resize")
+
   _WRAP_PROPERTY("content-width", int)
   _WRAP_PROPERTY("content-height", int)
 };
diff --git a/gtk/src/expander.ccg b/gtk/src/expander.ccg
index 3bc1c2a9..9aab9d10 100644
--- a/gtk/src/expander.ccg
+++ b/gtk/src/expander.ccg
@@ -26,5 +26,9 @@ Expander::Expander(const Glib::ustring& label, bool mnemonic)
   _CONSTRUCT("label", label.c_str(), "use_underline", gboolean(mnemonic))
 {}
 
-} // namespace Gtk
+void Expander::unset_child()
+{
+  gtk_expander_set_child(gobj(), nullptr);
+}
 
+} // namespace Gtk
diff --git a/gtk/src/expander.hg b/gtk/src/expander.hg
index c6db480d..5f9a4482 100644
--- a/gtk/src/expander.hg
+++ b/gtk/src/expander.hg
@@ -16,10 +16,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
-
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -29,10 +28,10 @@ namespace Gtk
  * An Expander allows the user to hide or show its child by clicking on an
  * expander triangle similar to the triangles used in a Gtk::TreeView.
  *
- * Normally you use an expander as you would use any other descendant
- * of Gtk::Bin; you create the child widget and use add() to add it to
- * the expander.  When the expander is toggled, it will take care of
- * showing and hiding the child automatically.
+ * Normally you use an expander as you would use a frame; you create
+ * the child widget and use set_child() to add it to the
+ * expander. When the expander is toggled, it will take care of showing
+ * and hiding the child automatically.
  *
  * Special Usage: There are situations in which you may prefer to show and
  * hide the expanded widget yourself, such as when you want to
@@ -50,9 +49,9 @@ namespace Gtk
  * @ingroup Widgets
  * @ingroup Containers
  */
-class Expander : public Container
+class Expander : public Widget
 {
-  _CLASS_GTKOBJECT(Expander, GtkExpander, GTK_EXPANDER, Gtk::Container, GtkContainer)
+  _CLASS_GTKOBJECT(Expander, GtkExpander, GTK_EXPANDER, Gtk::Widget, GtkWidget)
 public:
 
   /** Creates a new Expander.
@@ -98,6 +97,11 @@ public:
   _WRAP_METHOD(void set_resize_toplevel(bool resize_toplevel = true), gtk_expander_set_resize_toplevel)
   _WRAP_METHOD(bool get_resize_toplevel() const, gtk_expander_get_resize_toplevel)
 
+  _WRAP_METHOD(void set_child(Widget& child), gtk_expander_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_expander_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_expander_get_child, constversion)
+
   _IGNORE_SIGNAL("activate") //keybinding
 
   _WRAP_PROPERTY("expanded", bool)
@@ -106,6 +110,7 @@ public:
   _WRAP_PROPERTY("use_markup", bool)
   _WRAP_PROPERTY("label_widget", Widget*)
   _WRAP_PROPERTY("resize-toplevel", bool)
+  _WRAP_PROPERTY("child", Widget*)
 };
 
 } // namespace Gtk
diff --git a/gtk/src/filelist.am b/gtk/src/filelist.am
index 142d1a5b..a201cbe8 100644
--- a/gtk/src/filelist.am
+++ b/gtk/src/filelist.am
@@ -25,7 +25,6 @@ gtkmm_files_any_hg =          \
        aspectframe.hg          \
        assistant.hg            \
        assistantpage.hg \
-       bin.hg                  \
        binlayout.hg \
        border.hg               \
        box.hg                  \
@@ -61,7 +60,6 @@ gtkmm_files_any_hg =          \
        constraintguide.hg \
        constraintlayout.hg \
        constrainttarget.hg \
-       container.hg            \
        csslocation.hg          \
        cssprovider.hg          \
        csssection.hg           \
diff --git a/gtk/src/fixed.hg b/gtk/src/fixed.hg
index 6086f7a8..24da564e 100644
--- a/gtk/src/fixed.hg
+++ b/gtk/src/fixed.hg
@@ -16,9 +16,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -37,16 +37,16 @@ namespace Gtk
  * @ingroup Widgets
  * @ingroup Containers
  */
-class Fixed : public Container
+class Fixed : public Widget
 {
-  _CLASS_GTKOBJECT(Fixed,GtkFixed,GTK_FIXED,Gtk::Container,GtkContainer)
+  _CLASS_GTKOBJECT(Fixed, GtkFixed, GTK_FIXED, Gtk::Widget, GtkWidget)
 public:
   _CTOR_DEFAULT
 
   _WRAP_METHOD(void put(Widget& widget, int x, int y), gtk_fixed_put)
+  _WRAP_METHOD(void remove(Widget& widget), gtk_fixed_remove)
   _WRAP_METHOD(void move(Widget& widget, int x, int y), gtk_fixed_move)
   _WRAP_METHOD(void get_child_position(Widget& widget, int& x, int& y) const, gtk_fixed_get_child_position)
 };
 
 } //namespace Gtk
-
diff --git a/gtk/src/flowbox.hg b/gtk/src/flowbox.hg
index 497dd48d..ffc72eb2 100644
--- a/gtk/src/flowbox.hg
+++ b/gtk/src/flowbox.hg
@@ -14,7 +14,7 @@
  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/orientable.h>
 #include <gtkmm/flowboxchild.h>
 #include <giomm/liststore.h>
@@ -23,14 +23,14 @@
 #include <utility> // std::forward
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
 
 /** A container that allows reflowing its children.
  *
- * A FlowBox positions child widgets in sequence according to its
+ * A %FlowBox positions child widgets in sequence according to its
  * orientation.
  *
  * For instance, with the horizontal orientation, the widgets will be
@@ -45,8 +45,8 @@ namespace Gtk
  *
  * The children of a FlowBox can be dynamically sorted and filtered.
  *
- * Although a FlowBox must have only FlowBoxChild children,
- * you can add any kind of widget to it via Container::add(), and
+ * Although a %FlowBox must have only FlowBoxChild children,
+ * you can add any kind of widget to it via insert(), and
  * a FlowBoxChild widget will automatically be inserted between
  * the box and the widget.
  *
@@ -58,10 +58,10 @@ namespace Gtk
  * @newin{3,12}
  */
 class FlowBox
-  : public Container,
+  : public Widget,
     public Orientable
 {
-  _CLASS_GTKOBJECT(FlowBox, GtkFlowBox, GTK_FLOW_BOX, Gtk::Container, GtkContainer)
+  _CLASS_GTKOBJECT(FlowBox, GtkFlowBox, GTK_FLOW_BOX, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Orientable)
 public:
 
@@ -130,6 +130,7 @@ public:
   _WRAP_METHOD(bool get_activate_on_single_click() const, gtk_flow_box_get_activate_on_single_click)
 
   _WRAP_METHOD(void insert(Widget& widget, int position), gtk_flow_box_insert)
+  _WRAP_METHOD(void remove(Widget& widget), gtk_flow_box_remove)
 
   _WRAP_METHOD(FlowBoxChild* get_child_at_index(int idx), gtk_flow_box_get_child_at_index)
   _WRAP_METHOD(const FlowBoxChild* get_child_at_index(int idx) const, gtk_flow_box_get_child_at_index, 
constversion)
diff --git a/gtk/src/flowboxchild.ccg b/gtk/src/flowboxchild.ccg
index c82c7e70..0cb6a754 100644
--- a/gtk/src/flowboxchild.ccg
+++ b/gtk/src/flowboxchild.ccg
@@ -18,4 +18,10 @@
 
 namespace Gtk
 {
+
+void FlowBoxChild::unset_child()
+{
+  gtk_flow_box_child_set_child(gobj(), nullptr);
+}
+
 } // namespace Gtk
diff --git a/gtk/src/flowboxchild.hg b/gtk/src/flowboxchild.hg
index 0b7583ad..5d749945 100644
--- a/gtk/src/flowboxchild.hg
+++ b/gtk/src/flowboxchild.hg
@@ -14,10 +14,10 @@
  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -30,20 +30,26 @@ namespace Gtk
  * @newin{3,12}
  */
 class FlowBoxChild
-  : public Bin
+  : public Widget
 {
-  _CLASS_GTKOBJECT(FlowBoxChild, GtkFlowBoxChild, GTK_FLOW_BOX_CHILD, Gtk::Bin, GtkBin)
+  _CLASS_GTKOBJECT(FlowBoxChild, GtkFlowBoxChild, GTK_FLOW_BOX_CHILD, Gtk::Widget, GtkWidget)
 public:
 
   /** Creates a new FlowBoxChild, to be used as a child of a FlowBox.
    */
   _CTOR_DEFAULT()
 
+  _WRAP_METHOD(void set_child(Widget& child), gtk_flow_box_child_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_flow_box_child_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_flow_box_child_get_child, constversion)
   _WRAP_METHOD(int get_index() const, gtk_flow_box_child_get_index)
   _WRAP_METHOD(bool is_selected() const, gtk_flow_box_child_is_selected)
   _WRAP_METHOD(void changed(), gtk_flow_box_child_changed)
 
   _WRAP_SIGNAL(void activate(), "activate")
+
+  _WRAP_PROPERTY("child", Widget*)
 };
 
 } // namespace Gtk
diff --git a/gtk/src/frame.ccg b/gtk/src/frame.ccg
index ef3b4631..f6035534 100644
--- a/gtk/src/frame.ccg
+++ b/gtk/src/frame.ccg
@@ -25,5 +25,9 @@ void Frame::unset_label()
   gtk_frame_set_label(gobj(), nullptr);
 }
 
-} // namespace Gtk
+void Frame::unset_child()
+{
+  gtk_frame_set_child(gobj(), nullptr);
+}
 
+} // namespace Gtk
diff --git a/gtk/src/frame.hg b/gtk/src/frame.hg
index 2a07d785..f6a9169d 100644
--- a/gtk/src/frame.hg
+++ b/gtk/src/frame.hg
@@ -17,14 +17,14 @@
  */
 
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
 
-/** A Gtk::Bin with a decorative frame and optional label.
+/** A Gtk::Widget with a decorative frame and optional label.
  *
  * The Frame widget surrounds its single child with a decorative frame and
  * an optional label.  If present, the label is drawn in a gap in the top
@@ -37,9 +37,9 @@ namespace Gtk
  * @ingroup Widgets
  * @ingroup Containers
  */
-class Frame : public Bin
+class Frame : public Widget
 {
-  _CLASS_GTKOBJECT(Frame,GtkFrame,GTK_FRAME,Gtk::Bin,GtkBin)
+  _CLASS_GTKOBJECT(Frame, GtkFrame, GTK_FRAME, Gtk::Widget, GtkWidget)
 public:
 
   _CTOR_DEFAULT()
@@ -70,9 +70,15 @@ public:
 
   _WRAP_METHOD(float get_label_align() const, gtk_frame_get_label_align)
 
+  _WRAP_METHOD(void set_child(Widget& child), gtk_frame_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_frame_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_frame_get_child, constversion)
+
   _WRAP_PROPERTY("label", Glib::ustring)
   _WRAP_PROPERTY("label-xalign", double)
   _WRAP_PROPERTY("label-widget", Widget*)
+  _WRAP_PROPERTY("child", Widget*)
 
 protected:
 #m4 _CONVERSION(`GtkAllocation*',`Allocation&',`($2)(Glib::wrap($3))')
diff --git a/gtk/src/gestureclick.ccg b/gtk/src/gestureclick.ccg
index 62fe724e..17383569 100644
--- a/gtk/src/gestureclick.ccg
+++ b/gtk/src/gestureclick.ccg
@@ -15,13 +15,3 @@
  */
 
 #include <gtk/gtk.h>
-
-namespace Gtk
-{
-
-void GestureClick::unset_area()
-{
-  gtk_gesture_click_set_area(gobj(), nullptr);
-}
-
-} //namespace Gtk
diff --git a/gtk/src/gestureclick.hg b/gtk/src/gestureclick.hg
index e168c3f2..b3e7b97d 100644
--- a/gtk/src/gestureclick.hg
+++ b/gtk/src/gestureclick.hg
@@ -30,11 +30,6 @@ namespace Gtk
  * clicks exceed the GTK+ defaults, signal_stopped() is emitted,
  * and the click counter is reset.
  *
- * Callers may also restrict the area that is considered valid for a >1
- * touch/button press through set_area(), so any
- * click happening outside that area is considered to be a first click of
- * its own.
- *
  * @newin{3,14}
  *
  * @ingroup Gestures
@@ -57,15 +52,6 @@ public:
    */
   _WRAP_CREATE()
 
-  _WRAP_METHOD(bool get_area(Gdk::Rectangle& rect) const, gtk_gesture_click_get_area)
-  _WRAP_METHOD(void set_area(const Gdk::Rectangle& rect), gtk_gesture_click_set_area)
-
-  /** Resets the press area to an unrestricted state.
-   *
-   * @newin{3,14}
-   */
-  void unset_area();
-
   // no_default_handler because GtkGestureClickClass is private.
   _WRAP_SIGNAL(void pressed(int n_press, double x, double y), "pressed", no_default_handler)
   _WRAP_SIGNAL(void released(int n_press, double x, double y), "released", no_default_handler)
diff --git a/gtk/src/grid.hg b/gtk/src/grid.hg
index b17f045f..a1676624 100644
--- a/gtk/src/grid.hg
+++ b/gtk/src/grid.hg
@@ -15,12 +15,12 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/orientable.h>
 #include <gtkmm/enums.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -33,12 +33,9 @@ namespace Gtk
  *
  * Children are added using attach(). They can span multiple
  * rows or columns. It is also possible to add a child next to an
- * existing child, using attach_next_to(). The behaviour of
- * %Grid when several children occupy the same grid cell is undefined.
- *
- * %Grid can be used like a Box by just using Gtk::Container::add(),
- * which will place children next to each other in the direction determined
- * by the orientation property.
+ * existing child, using attach_next_to(). To remove a child
+ * from the grid, use remove(). The behaviour of %Grid when
+ * several children occupy the same grid cell is undefined.
  *
  * @ingroup Widgets
  * @ingroup Containers
@@ -46,10 +43,10 @@ namespace Gtk
  * @newin{3,0}
  */
 class Grid
-  : public Container,
+  : public Widget,
     public Orientable
 {
-  _CLASS_GTKOBJECT(Grid, GtkGrid, GTK_GRID, Gtk::Container, GtkContainer)
+  _CLASS_GTKOBJECT(Grid, GtkGrid, GTK_GRID, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Orientable)
 public:
   _CTOR_DEFAULT
@@ -80,6 +77,7 @@ public:
 
   _WRAP_METHOD(Widget* get_child_at(int left, int top), gtk_grid_get_child_at)
   _WRAP_METHOD(const Widget* get_child_at(int left, int top) const, gtk_grid_get_child_at)
+  _WRAP_METHOD(void remove(Widget& child), gtk_grid_remove)
   _WRAP_METHOD(void insert_row(int position), gtk_grid_insert_row)
   _WRAP_METHOD(void insert_column(int position), gtk_grid_insert_column)
   _WRAP_METHOD(void remove_row(int position), gtk_grid_remove_row)
diff --git a/gtk/src/headerbar.hg b/gtk/src/headerbar.hg
index 3d5e8cdf..80d9be44 100644
--- a/gtk/src/headerbar.hg
+++ b/gtk/src/headerbar.hg
@@ -16,9 +16,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -35,31 +35,22 @@ namespace Gtk
  * @newin{3,10}
  */
 class HeaderBar
-  : public Container
+  : public Widget
 {
-  _CLASS_GTKOBJECT(HeaderBar, GtkHeaderBar, GTK_HEADER_BAR, Gtk::Container, GtkContainer)
+  _CLASS_GTKOBJECT(HeaderBar, GtkHeaderBar, GTK_HEADER_BAR, Gtk::Widget, GtkWidget)
 public:
 
   /** Create a new HeaderBar widget.
    */
   _CTOR_DEFAULT
 
-
-  _WRAP_METHOD(void set_title(const Glib::ustring& title), gtk_header_bar_set_title)
-  _WRAP_METHOD(Glib::ustring get_title() const, gtk_header_bar_get_title)
-
-  _WRAP_METHOD(void set_subtitle(const Glib::ustring& subtitle), gtk_header_bar_set_subtitle)
-  _WRAP_METHOD(Glib::ustring get_subtitle() const, gtk_header_bar_get_subtitle)
-
-  _WRAP_METHOD(void set_has_subtitle(bool setting = true), gtk_header_bar_set_has_subtitle)
-  _WRAP_METHOD(bool get_has_subtitle() const, gtk_header_bar_get_has_subtitle)
-
-  _WRAP_METHOD(void set_custom_title(Gtk::Widget& title_widget), gtk_header_bar_set_custom_title)
-  _WRAP_METHOD(Widget* get_custom_title(), gtk_header_bar_get_custom_title)
-  _WRAP_METHOD(const Widget* get_custom_title() const, gtk_header_bar_get_custom_title, constversion)
+  _WRAP_METHOD(void set_title_widget(Gtk::Widget& title_widget), gtk_header_bar_set_title_widget)
+  _WRAP_METHOD(Widget* get_title_widget(), gtk_header_bar_get_title_widget)
+  _WRAP_METHOD(const Widget* get_title_widget() const, gtk_header_bar_get_title_widget, constversion)
 
   _WRAP_METHOD(void pack_start(Gtk::Widget& child), gtk_header_bar_pack_start)
   _WRAP_METHOD(void pack_end(Gtk::Widget& child), gtk_header_bar_pack_end)
+  _WRAP_METHOD(void remove(Gtk::Widget& child), gtk_header_bar_remove)
 
   _WRAP_METHOD(void set_show_title_buttons(bool setting = true), gtk_header_bar_set_show_title_buttons)
   _WRAP_METHOD(bool get_show_title_buttons() const, gtk_header_bar_get_show_title_buttons)
@@ -73,13 +64,9 @@ public:
 
   _WRAP_METHOD(Glib::ustring get_decoration_layout() const, gtk_header_bar_get_decoration_layout)
 
-  _WRAP_PROPERTY("custom-title", Gtk::Widget*)
+  _WRAP_PROPERTY("title-widget", Gtk::Widget*)
   _WRAP_PROPERTY("show-title-buttons", bool)
-  _WRAP_PROPERTY("subtitle", Glib::ustring)
-  _WRAP_PROPERTY("title", Glib::ustring)
   _WRAP_PROPERTY("decoration-layout", Glib::ustring)
-  _WRAP_PROPERTY("decoration-layout-set", bool)
-  _WRAP_PROPERTY("has-subtitle", bool)
 
   // Gtk::HeaderBar has no signals nor vfuncs as of 3.12.
 };
diff --git a/gtk/src/iconview.hg b/gtk/src/iconview.hg
index e6a0808b..35d0a577 100644
--- a/gtk/src/iconview.hg
+++ b/gtk/src/iconview.hg
@@ -18,7 +18,7 @@
 
 #include <vector>
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/treemodel.h>
 #include <gtkmm/treepath.h>
 #include <gtkmm/celllayout.h>
@@ -28,7 +28,7 @@
 #include <gtkmm/tooltip.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -41,14 +41,13 @@ namespace Gtk
  * rubberband selection, by dragging the pointer.
  *
  * @ingroup Widgets
- * @ingroup Containers
  */
 class IconView
- : public Container,
+ : public Widget,
    public CellLayout,
    public Scrollable
 {
-  _CLASS_GTKOBJECT(IconView, GtkIconView, GTK_ICON_VIEW, Gtk::Container, GtkContainer)
+  _CLASS_GTKOBJECT(IconView, GtkIconView, GTK_ICON_VIEW, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(CellLayout)
   _IMPLEMENTS_INTERFACE(Scrollable)
 
diff --git a/gtk/src/infobar.hg b/gtk/src/infobar.hg
index 582b1b2f..86aa95b2 100644
--- a/gtk/src/infobar.hg
+++ b/gtk/src/infobar.hg
@@ -15,12 +15,12 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/button.h>
 #include <gtkmm/enums.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -33,7 +33,7 @@ namespace Gtk
  * The API is very similar to Dialog, allowing you to add buttons to the action
  * area with add_button(). The sensitivity of action widgets can be controlled
  * with set_response_sensitive(). To add widgets to the main content area, use
- * get_content_area() and add your widgets to the container.
+ * add_child().
  *
  * Similar to MessageDialog, the contents can by classified as error message,
  * warning, informational message, etc, by using set_message_type(). This
@@ -46,18 +46,22 @@ namespace Gtk
  *
  * @ingroup Widgets
  */
-class InfoBar : public Container
+class InfoBar : public Widget
 {
-  _CLASS_GTKOBJECT(InfoBar, GtkInfoBar, GTK_INFO_BAR, Gtk::Container, GtkContainer)
+  _CLASS_GTKOBJECT(InfoBar, GtkInfoBar, GTK_INFO_BAR, Gtk::Widget, GtkWidget)
 public:
 
   _CTOR_DEFAULT
   _IGNORE(gtk_info_bar_new, gtk_info_bar_new_with_buttons)
 
   _WRAP_METHOD(void add_action_widget(Widget& child, int response_id), gtk_info_bar_add_action_widget)
+  _WRAP_METHOD(void remove_action_widget(Widget& widget), gtk_info_bar_remove_action_widget)
 
   _WRAP_METHOD(Button* add_button(const Glib::ustring& button_text, int response_id), 
gtk_info_bar_add_button)
 
+  _WRAP_METHOD(void add_child(Widget& widget), gtk_info_bar_add_child)
+  _WRAP_METHOD(void remove_child(Widget& widget), gtk_info_bar_remove_child)
+
   _IGNORE(gtk_info_bar_add_buttons)
   _WRAP_METHOD(void set_response_sensitive(int response_id, bool setting = true), 
gtk_info_bar_set_response_sensitive)
   _WRAP_METHOD(void set_default_response(int response_id), gtk_info_bar_set_default_response)
diff --git a/gtk/src/listbox.hg b/gtk/src/listbox.hg
index 89d71339..ab8b6870 100644
--- a/gtk/src/listbox.hg
+++ b/gtk/src/listbox.hg
@@ -14,7 +14,7 @@
  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/listboxrow.h>
 #include <gtkmm/enums.h>
 #include <giomm/liststore.h>
@@ -23,7 +23,7 @@
 #include <utility> // std::forward
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -41,7 +41,7 @@ class Adjustment;
  * button).
  *
  * Although a ListBox must have only ListBoxRow children you can
- * add any kind of widget to it via Container::add(), and a ListBoxRow
+ * add any kind of widget to it via prepend() or insert(), and a ListBoxRow
  * widget will automatically be inserted between the list and the widget.
  *
  * Also see FlowBox.
@@ -54,9 +54,9 @@ class Adjustment;
  *
  * @newin{3,10}
  */
-class ListBox : public Container
+class ListBox : public Widget
 {
-  _CLASS_GTKOBJECT(ListBox, GtkListBox, GTK_LIST_BOX, Gtk::Container, GtkContainer)
+  _CLASS_GTKOBJECT(ListBox, GtkListBox, GTK_LIST_BOX, Gtk::Widget, GtkWidget)
 public:
   _CTOR_DEFAULT
 
@@ -101,12 +101,12 @@ public:
 
   _WRAP_METHOD(void prepend(Widget& child), gtk_list_box_prepend)
   _WRAP_METHOD(void insert(Widget& child, int position), gtk_list_box_insert)
+  _WRAP_METHOD(void remove(Widget& child), gtk_list_box_remove)
 
   //We added this in the gtkmm API, because this is clearer than the magic -1 value for position with 
insert().
   //The C API developers disagree: https://bugzilla.gnome.org/show_bug.cgi?id=705558#c12
   /** Append a widget to the list. If a sort function is set, the widget will
-   * actually be inserted at the calculated position and this function has the
-   * same effect of Gtk::Container::add().
+   * actually be inserted at the calculated position.
    *
    * @newin{3,10}
    *
@@ -276,7 +276,7 @@ public:
    * If @a model is an empty Glib::RefPtr, the ListBox is left empty.
    *
    * It is undefined to add or remove widgets directly (for example, with
-   * insert() or Gtk::Container::add()) while the ListBox is bound to a model.
+   * insert()) while the ListBox is bound to a model.
    *
    * Note that using a model is incompatible with the filtering and sorting
    * functionality in ListBox. When using a model, filtering and sorting
@@ -303,7 +303,7 @@ public:
    * If @a store is an empty Glib::RefPtr, the ListBox is left empty.
    *
    * It is undefined to add or remove widgets directly (for example, with
-   * insert() or Gtk::Container::add()) while the ListBox is bound to a model.
+   * insert()) while the ListBox is bound to a model.
    *
    * Note that using a model is incompatible with the filtering and sorting
    * functionality in ListBox. When using a model, filtering and sorting
diff --git a/gtk/src/listboxrow.ccg b/gtk/src/listboxrow.ccg
index 04e100d6..d3345121 100644
--- a/gtk/src/listboxrow.ccg
+++ b/gtk/src/listboxrow.ccg
@@ -24,4 +24,9 @@ void ListBoxRow::unset_header()
   gtk_list_box_row_set_header(gobj(), nullptr);
 }
 
+void ListBoxRow::unset_child()
+{
+  gtk_list_box_row_set_child(gobj(), nullptr);
+}
+
 } // namespace Gtk
diff --git a/gtk/src/listboxrow.hg b/gtk/src/listboxrow.hg
index 0df998c0..c6a8d415 100644
--- a/gtk/src/listboxrow.hg
+++ b/gtk/src/listboxrow.hg
@@ -14,11 +14,11 @@
  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/actionable.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -30,13 +30,18 @@ namespace Gtk
  *
  * @newin{3,10}
  */
-class ListBoxRow : public Bin, public Actionable
+class ListBoxRow : public Widget, public Actionable
 {
-  _CLASS_GTKOBJECT(ListBoxRow, GtkListBoxRow, GTK_LIST_BOX_ROW, Gtk::Bin, GtkBin)
+  _CLASS_GTKOBJECT(ListBoxRow, GtkListBoxRow, GTK_LIST_BOX_ROW, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Actionable)
 public:
   _CTOR_DEFAULT()
 
+  _WRAP_METHOD(void set_child(Widget& child), gtk_list_box_row_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_list_box_row_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_list_box_row_get_child, constversion)
+
   /** Sets the current header of the ListBoxRow. This is only allowed to be called
    * from a ListBox::SlotUpdateHeader. It will replace any existing
    * header in the row, and be shown in front of the row in the ListBox.
@@ -87,6 +92,7 @@ public:
 
   _WRAP_PROPERTY("selectable", bool)
   _WRAP_PROPERTY("activatable", bool)
+  _WRAP_PROPERTY("child", Widget*)
 
   _IGNORE_SIGNAL(activate) // Action signal
 };
diff --git a/gtk/src/nativedialog.hg b/gtk/src/nativedialog.hg
index 20b86a99..0344ac1b 100644
--- a/gtk/src/nativedialog.hg
+++ b/gtk/src/nativedialog.hg
@@ -36,10 +36,6 @@ class Window;
  * various common properties on the dialog, as well as show and hide
  * it and get a response signal when the user finished with the dialog.
  *
- * There is also a run() helper that makes it easy
- * to run any native dialog in a modal way with a recursive mainloop,
- * similar to Dialog::run().
- *
  * @see Gtk::FileChooserNative, Gtk::Dialog
  * @newin{3,24}
  */
@@ -76,8 +72,6 @@ public:
   _WRAP_METHOD(Window* get_transient_for(), gtk_native_dialog_get_transient_for, newin "3,24")
   _WRAP_METHOD(const Window* get_transient_for() const, gtk_native_dialog_get_transient_for, constversion, 
newin "3,24")
 
-  _WRAP_METHOD(int run(), gtk_native_dialog_run, newin "3,24")
-
   _WRAP_PROPERTY("title", Glib::ustring, newin "3,24")
   _WRAP_PROPERTY("modal", bool, newin "3,24")
   _WRAP_PROPERTY("visible", bool, newin "3,24")
diff --git a/gtk/src/notebook.hg b/gtk/src/notebook.hg
index 07862fbc..1cc3bf02 100644
--- a/gtk/src/notebook.hg
+++ b/gtk/src/notebook.hg
@@ -19,12 +19,12 @@
 _CONFIGINCLUDE(gtkmmconfig.h)
 
 #include <giomm/listmodel.h>
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/label.h>
 #include <gtkmm/notebookpage.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 #m4 _CONVERSION(guint,PositionType,`$2($3)')
 
 namespace Gtk
@@ -34,7 +34,7 @@ _CC_INCLUDE(gtk/gtk.h)
 
 /** Container which shows one of its children at a time, in tabbed windows.
  *
- * The Gtk::Notebook widget is a Gtk::Container whose children are pages that
+ * The Gtk::Notebook widget is a container whose children are pages that
  * can be switched between using tab labels along one edge.
  *
  * A Notebook widget looks like this:
@@ -43,9 +43,9 @@ _CC_INCLUDE(gtk/gtk.h)
  * @ingroup Widgets
  * @ingroup Containers
  */
-class Notebook : public Container
+class Notebook : public Widget
 {
-  _CLASS_GTKOBJECT(Notebook,GtkNotebook,GTK_NOTEBOOK,Gtk::Container,GtkContainer)
+  _CLASS_GTKOBJECT(Notebook, GtkNotebook, GTK_NOTEBOOK, Gtk::Widget, GtkWidget)
 
 public:
 
diff --git a/gtk/src/overlay.ccg b/gtk/src/overlay.ccg
index 8bbc6236..ce897d4c 100644
--- a/gtk/src/overlay.ccg
+++ b/gtk/src/overlay.ccg
@@ -21,5 +21,10 @@
 
 namespace Gtk
 {
-} // namespace Gtk
 
+void Overlay::unset_child()
+{
+  gtk_overlay_set_child(gobj(), nullptr);
+}
+
+} // namespace Gtk
diff --git a/gtk/src/overlay.hg b/gtk/src/overlay.hg
index a60f63f5..b171d257 100644
--- a/gtk/src/overlay.hg
+++ b/gtk/src/overlay.hg
@@ -16,9 +16,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -47,9 +47,9 @@ namespace Gtk
  */
 
 class Overlay
-  : public Bin
+  : public Widget
 {
-  _CLASS_GTKOBJECT(Overlay, GtkOverlay, GTK_OVERLAY, Gtk::Bin, GtkBin)
+  _CLASS_GTKOBJECT(Overlay, GtkOverlay, GTK_OVERLAY, Gtk::Widget, GtkWidget)
 public:
 
   /** Creates a new Overlay.
@@ -57,6 +57,12 @@ public:
   _CTOR_DEFAULT
 
   _WRAP_METHOD(void add_overlay(Gtk::Widget& widget), gtk_overlay_add_overlay)
+  _WRAP_METHOD(void remove_overlay(Gtk::Widget& widget), gtk_overlay_remove_overlay)
+
+  _WRAP_METHOD(void set_child(Widget& child), gtk_overlay_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_overlay_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_overlay_get_child, constversion)
 
   _WRAP_METHOD(bool get_measure_overlay(Widget& widget) const, gtk_overlay_get_measure_overlay)
   _WRAP_METHOD(void set_measure_overlay(Widget& widget, bool measure = true), 
gtk_overlay_set_measure_overlay)
@@ -67,6 +73,8 @@ public:
 #m4 _CONVERSION(`GdkRectangle*',`Gdk::Rectangle&',`Glib::wrap($3)')
   _WRAP_SIGNAL(bool get_child_position(Gtk::Widget* widget, Gdk::Rectangle& allocation),
     "get-child-position", no_default_handler)
+
+  _WRAP_PROPERTY("child", Widget*)
 };
 
 } // namespace Gtk
diff --git a/gtk/src/paned.hg b/gtk/src/paned.hg
index a3a23f22..373aeb0a 100644
--- a/gtk/src/paned.hg
+++ b/gtk/src/paned.hg
@@ -16,12 +16,12 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/orientable.h>
 #include <gtkmm/enums.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -32,9 +32,10 @@ namespace Gtk
  * horizontally or vertically. The division between
  * the two panes is adjustable by the user by dragging
  * a handle.
-
- * Child widgets are added to the panes of the widget with pack1() and pack2().
- * The division beween the two children is set by default from the size
+ *
+ * Child widgets are added to the panes of the widget with
+ * set_start_child() and set_end_child().
+ * The division between the two children is set by default from the size
  * requests of the children, but it can be adjusted by the user.
  *
  * A paned widget draws a separator between the two child widgets and a small
@@ -58,10 +59,10 @@ namespace Gtk
  * @ingroup Containers
  */
 class Paned
- : public Container,
+ : public Widget,
    public Orientable
 {
-  _CLASS_GTKOBJECT(Paned,GtkPaned,GTK_PANED,Gtk::Container,GtkContainer)
+  _CLASS_GTKOBJECT(Paned, GtkPaned, GTK_PANED, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Orientable)
 
 public:
@@ -69,22 +70,25 @@ public:
   //Note that we try to use the same defaul parameter value as the default property value.
   _WRAP_CTOR(Paned(Orientation orientation = Orientation::HORIZONTAL), gtk_paned_new)
 
-  _WRAP_METHOD(void add1(Widget& child), gtk_paned_add1)
-  _WRAP_METHOD(void add2(Widget& child), gtk_paned_add2)
-
-  _WRAP_METHOD(void pack1(Widget& child, bool resize, bool shrink), gtk_paned_pack1)
-
-  _WRAP_METHOD(void pack2(Widget& child, bool resize, bool shrink), gtk_paned_pack2)
+  _WRAP_METHOD(void set_start_child(Widget& child), gtk_paned_set_start_child)
+  _WRAP_METHOD(Widget* get_start_child(), gtk_paned_get_start_child)
+  _WRAP_METHOD(const Widget* get_start_child() const, gtk_paned_get_start_child, constversion)
+  _WRAP_METHOD(void set_resize_start_child(bool resize = true), gtk_paned_set_resize_start_child)
+  _WRAP_METHOD(bool get_resize_start_child() const, gtk_paned_get_resize_start_child)
+  _WRAP_METHOD(void set_shrink_start_child(bool resize = true), gtk_paned_set_shrink_start_child)
+  _WRAP_METHOD(bool get_shrink_start_child() const, gtk_paned_get_shrink_start_child)
+
+  _WRAP_METHOD(void set_end_child(Widget& child), gtk_paned_set_end_child)
+  _WRAP_METHOD(Widget* get_end_child(), gtk_paned_get_end_child)
+  _WRAP_METHOD(const Widget* get_end_child() const, gtk_paned_get_end_child, constversion)
+  _WRAP_METHOD(void set_resize_end_child(bool resize = true), gtk_paned_set_resize_end_child)
+  _WRAP_METHOD(bool get_resize_end_child() const, gtk_paned_get_resize_end_child)
+  _WRAP_METHOD(void set_shrink_end_child(bool resize = true), gtk_paned_set_shrink_end_child)
+  _WRAP_METHOD(bool get_shrink_end_child() const, gtk_paned_get_shrink_end_child)
 
   _WRAP_METHOD(int get_position() const, gtk_paned_get_position)
   _WRAP_METHOD(void set_position(int position), gtk_paned_set_position)
 
-  _WRAP_METHOD(Widget* get_child1(), gtk_paned_get_child1)
-  _WRAP_METHOD(const Widget* get_child1() const, gtk_paned_get_child1, constversion)
-
-  _WRAP_METHOD(Widget* get_child2(), gtk_paned_get_child2)
-  _WRAP_METHOD(const Widget* get_child2() const, gtk_paned_get_child2, constversion)
-
   _WRAP_METHOD(void set_wide_handle(bool wide = true), gtk_paned_set_wide_handle)
   _WRAP_METHOD(bool get_wide_handle() const, gtk_paned_get_wide_handle)
 
@@ -96,16 +100,17 @@ public:
   _IGNORE_SIGNAL("cancel_position")
   _IGNORE_SIGNAL("cycle_child_focus")
 
-
   _WRAP_PROPERTY("position", int)
   _WRAP_PROPERTY("position-set", bool)
   _WRAP_PROPERTY("min-position", int)
   _WRAP_PROPERTY("max-position", int)
   _WRAP_PROPERTY("wide-handle", bool)
-  _WRAP_PROPERTY("resize-child1", bool)
-  _WRAP_PROPERTY("resize-child2", bool)
-  _WRAP_PROPERTY("shrink-child1", bool)
-  _WRAP_PROPERTY("shrink-child2", bool)
+  _WRAP_PROPERTY("resize-start-child", bool)
+  _WRAP_PROPERTY("resize-end-child", bool)
+  _WRAP_PROPERTY("shrink-start-child", bool)
+  _WRAP_PROPERTY("shrink-end-child", bool)
+  _WRAP_PROPERTY("start-child", Widget*)
+  _WRAP_PROPERTY("end-child", Widget*)
 };
 
 } // namespace Gtk
diff --git a/gtk/src/popover.ccg b/gtk/src/popover.ccg
index 9ed39357..5213b1e5 100644
--- a/gtk/src/popover.ccg
+++ b/gtk/src/popover.ccg
@@ -19,3 +19,13 @@
 #include <gtk/gtk.h>
 
 using Constraint = Gtk::Popover::Constraint;
+
+namespace Gtk
+{
+
+void Popover::unset_child()
+{
+  gtk_popover_set_child(gobj(), nullptr);
+}
+
+} // namespace Gtk
diff --git a/gtk/src/popover.hg b/gtk/src/popover.hg
index 976c2111..277d67e2 100644
--- a/gtk/src/popover.hg
+++ b/gtk/src/popover.hg
@@ -16,11 +16,11 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/native.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -46,15 +46,22 @@ namespace Gtk
  * @ingroup Widgets
  * @newin{3,12}
  */
-class Popover : public Bin, public Native
+class Popover : public Widget, public Native
 {
-  _CLASS_GTKOBJECT(Popover, GtkPopover, GTK_POPOVER, Gtk::Bin, GtkBin)
+  _CLASS_GTKOBJECT(Popover, GtkPopover, GTK_POPOVER, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Native)
+  // GtkPopover also implements GtkShortcutManager, but that interface is not
+  // (yet) wrapped in a C++ class.
 public:
   _WRAP_ENUM(Constraint, GtkPopoverConstraint)
 
   _CTOR_DEFAULT
 
+  _WRAP_METHOD(void set_child(Widget& child), gtk_popover_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_popover_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_popover_get_child, constversion)
+
   //This cannot take NULL to mean unset.
 #m4 _CONVERSION(`const GdkRectangle*',`const Gdk::Rectangle&',`Glib::wrap($3)')
   _WRAP_METHOD(void set_pointing_to(const Gdk::Rectangle& rect), gtk_popover_set_pointing_to)
@@ -84,6 +91,7 @@ public:
   _WRAP_PROPERTY("has-arrow", bool)
   _WRAP_PROPERTY("default-widget", Widget*)
   _WRAP_PROPERTY("mnemonics-visible", bool)
+  _WRAP_PROPERTY("child", Widget*)
 
   _WRAP_SIGNAL(void closed(), "closed")
   _IGNORE_SIGNAL("activate-default")dnl// action signal
diff --git a/gtk/src/revealer.ccg b/gtk/src/revealer.ccg
index 0b15ffe3..5a02a35e 100644
--- a/gtk/src/revealer.ccg
+++ b/gtk/src/revealer.ccg
@@ -21,5 +21,10 @@
 
 namespace Gtk
 {
-} // namespace Gtk
 
+void Revealer::unset_child()
+{
+  gtk_revealer_set_child(gobj(), nullptr);
+}
+
+} // namespace Gtk
diff --git a/gtk/src/revealer.hg b/gtk/src/revealer.hg
index 23ec570e..452a3f60 100644
--- a/gtk/src/revealer.hg
+++ b/gtk/src/revealer.hg
@@ -16,9 +16,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -35,18 +35,15 @@ namespace Gtk
  * @newin{3,10}
  */
 class Revealer
-  : public Bin
+  : public Widget
 {
-  _CLASS_GTKOBJECT(Revealer, GtkRevealer, GTK_REVEALER, Gtk::Bin, GtkBin)
+  _CLASS_GTKOBJECT(Revealer, GtkRevealer, GTK_REVEALER, Gtk::Widget, GtkWidget)
 public:
 
   /** Create Gtk::Revealer widget.
-   *
-   *
    */
   _CTOR_DEFAULT
 
-
   _WRAP_METHOD(bool get_reveal_child() const, gtk_revealer_get_reveal_child)
   _WRAP_METHOD(void set_reveal_child(bool reveal_child = true), gtk_revealer_set_reveal_child)
 
@@ -58,11 +55,16 @@ public:
   _WRAP_METHOD(RevealerTransitionType get_transition_type() const, gtk_revealer_get_transition_type)
   _WRAP_METHOD(void set_transition_type(RevealerTransitionType transition), gtk_revealer_set_transition_type)
 
+  _WRAP_METHOD(void set_child(Widget& child), gtk_revealer_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_revealer_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_revealer_get_child, constversion)
 
   _WRAP_PROPERTY("transition-type", RevealerTransitionType)
   _WRAP_PROPERTY("transition-duration", guint)
   _WRAP_PROPERTY("reveal-child", bool)
   _WRAP_PROPERTY("child-revealed", bool)
+  _WRAP_PROPERTY("child", Widget*)
 
   // Gtk::Revealer has no signals nor vfuncs as of 3.10.
 };
diff --git a/gtk/src/scrolledwindow.ccg b/gtk/src/scrolledwindow.ccg
index 1e7ba54c..59586d27 100644
--- a/gtk/src/scrolledwindow.ccg
+++ b/gtk/src/scrolledwindow.ccg
@@ -23,4 +23,9 @@
 namespace Gtk
 {
 
+void ScrolledWindow::unset_child()
+{
+  gtk_scrolled_window_set_child(gobj(), nullptr);
+}
+
 } //namespace Gtk
diff --git a/gtk/src/scrolledwindow.hg b/gtk/src/scrolledwindow.hg
index 70dcfa52..1f7c4ff1 100644
--- a/gtk/src/scrolledwindow.hg
+++ b/gtk/src/scrolledwindow.hg
@@ -16,9 +16,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -45,9 +45,9 @@ class Scrollbar;
  * @ingroup Widgets
  * @ingroup Containers
  */
-class ScrolledWindow : public Bin
+class ScrolledWindow : public Widget
 {
-  _CLASS_GTKOBJECT(ScrolledWindow,GtkScrolledWindow,GTK_SCROLLED_WINDOW,Gtk::Bin,GtkBin)
+  _CLASS_GTKOBJECT(ScrolledWindow, GtkScrolledWindow, GTK_SCROLLED_WINDOW, Gtk::Widget, GtkWidget)
 
 public:
   _CTOR_DEFAULT
@@ -105,6 +105,11 @@ public:
   _WRAP_METHOD(void set_propagate_natural_height(bool propagate = true), 
gtk_scrolled_window_set_propagate_natural_height)
   _WRAP_METHOD(bool get_propagate_natural_height() const, gtk_scrolled_window_get_propagate_natural_height)
 
+  _WRAP_METHOD(void set_child(Widget& child), gtk_scrolled_window_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_scrolled_window_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_scrolled_window_get_child, constversion)
+
   //Keybinding signals:
   _IGNORE_SIGNAL("scroll_child")
   _IGNORE_SIGNAL("move_focus_out")
@@ -127,6 +132,7 @@ public:
   _WRAP_PROPERTY("max-content-height", int)
   _WRAP_PROPERTY("propagate-natural-width", bool)
   _WRAP_PROPERTY("propagate-natural-height", bool)
+  _WRAP_PROPERTY("child", Widget*)
 };
 
 } //namespace Gtk
diff --git a/gtk/src/searchbar.ccg b/gtk/src/searchbar.ccg
index 73c4b5a1..8d515366 100644
--- a/gtk/src/searchbar.ccg
+++ b/gtk/src/searchbar.ccg
@@ -26,4 +26,9 @@ void SearchBar::unset_key_capture_widget()
   gtk_search_bar_set_key_capture_widget(gobj(), nullptr);
 }
 
+void SearchBar::unset_child()
+{
+  gtk_search_bar_set_child(gobj(), nullptr);
+}
+
 } // namespace Gtk
diff --git a/gtk/src/searchbar.hg b/gtk/src/searchbar.hg
index c13ffa85..11db7e8d 100644
--- a/gtk/src/searchbar.hg
+++ b/gtk/src/searchbar.hg
@@ -16,10 +16,10 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/editable.h>
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -45,9 +45,9 @@ namespace Gtk
  * @newin{3,10}
  */
 class SearchBar
-  : public Bin
+  : public Widget
 {
-  _CLASS_GTKOBJECT(SearchBar, GtkSearchBar, GTK_SEARCH_BAR, Gtk::Bin, GtkBin)
+  _CLASS_GTKOBJECT(SearchBar, GtkSearchBar, GTK_SEARCH_BAR, Gtk::Widget, GtkWidget)
 public:
 
   /** Creates a Gtk::SearchBar.
@@ -57,7 +57,6 @@ public:
    */
   _CTOR_DEFAULT
 
-
   _WRAP_METHOD(void connect_entry(Editable& entry), gtk_search_bar_connect_entry)
 
   _WRAP_METHOD(bool get_search_mode() const, gtk_search_bar_get_search_mode)
@@ -71,8 +70,14 @@ public:
   _WRAP_METHOD(const Widget* get_key_capture_widget() const, gtk_search_bar_get_key_capture_widget, 
constversion)
   void unset_key_capture_widget();
 
+  _WRAP_METHOD(void set_child(Widget& child), gtk_search_bar_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_search_bar_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_search_bar_get_child, constversion)
+
   _WRAP_PROPERTY("search-mode-enabled", bool)
   _WRAP_PROPERTY("show-close-button", bool)
+  _WRAP_PROPERTY("child", Widget*)
 
   // Gtk::SearchBar has no signals nor vfuncs as of 3.10.
 };
diff --git a/gtk/src/stack.hg b/gtk/src/stack.hg
index 6ea268cd..28425f37 100644
--- a/gtk/src/stack.hg
+++ b/gtk/src/stack.hg
@@ -16,13 +16,13 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/stackpage.h>
 #include <gtkmm/enums.h>
 #include <gtkmm/selectionmodel.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -43,9 +43,9 @@ _CC_INCLUDE(gtk/gtk.h)
  * @newin{3,10}
  */
 class Stack
-  : public Container
+  : public Widget
 {
-  _CLASS_GTKOBJECT(Stack,GtkStack,GTK_STACK,Gtk::Container,GtkContainer)
+  _CLASS_GTKOBJECT(Stack, GtkStack, GTK_STACK, Gtk::Widget, GtkWidget)
 public:
   _CTOR_DEFAULT
 
@@ -59,6 +59,8 @@ public:
   _WRAP_METHOD(Glib::RefPtr<const StackPage> add(Widget& child, const Glib::ustring& name,
     const Glib::ustring& title) const, gtk_stack_add_titled, refreturn, constversion)
 
+  _WRAP_METHOD(void remove(Widget& child), gtk_stack_remove)
+
   _WRAP_METHOD(Glib::RefPtr<StackPage> get_page(Widget& child), gtk_stack_get_page, refreturn)
   _WRAP_METHOD(Glib::RefPtr<const StackPage> get_page(const Widget& child) const, gtk_stack_get_page, 
refreturn, constversion)
 
@@ -70,9 +72,6 @@ public:
   _WRAP_METHOD(void set_visible_child(const Glib::ustring& name, StackTransitionType transition), 
gtk_stack_set_visible_child_full)
   _WRAP_METHOD(Glib::ustring get_visible_child_name() const, gtk_stack_get_visible_child_name)
 
-  _WRAP_METHOD(void set_homogeneous(bool homogeneous = true), gtk_stack_set_homogeneous)
-  _WRAP_METHOD(bool get_homogeneous() const, gtk_stack_get_homogeneous)
-
   _WRAP_METHOD(void set_hhomogeneous(bool hhomogeneous = true), gtk_stack_set_hhomogeneous)
   _WRAP_METHOD(bool get_hhomogeneous() const, gtk_stack_get_hhomogeneous)
 
@@ -96,7 +95,6 @@ public:
   _WRAP_METHOD(Glib::RefPtr<SelectionModel> get_pages(), gtk_stack_get_pages)
   _WRAP_METHOD(Glib::RefPtr<const SelectionModel> get_pages() const, gtk_stack_get_pages, constversion)
 
-  _WRAP_PROPERTY("homogeneous", bool)
   _WRAP_PROPERTY("hhomogeneous", bool)
   _WRAP_PROPERTY("transition-duration", unsigned int)
   _WRAP_PROPERTY("transition-running", bool)
diff --git a/gtk/src/stackpage.hg b/gtk/src/stackpage.hg
index 073d4c66..d4588e67 100644
--- a/gtk/src/stackpage.hg
+++ b/gtk/src/stackpage.hg
@@ -48,6 +48,7 @@ public:
   _WRAP_PROPERTY("icon-name", Glib::ustring)
   _WRAP_PROPERTY("needs-attention", bool)
   _WRAP_PROPERTY("visible", bool)
+  _WRAP_PROPERTY("use-underline", bool)
 
   // There are no signals or vfuncs.
 };
diff --git a/gtk/src/stylecontext.hg b/gtk/src/stylecontext.hg
index 8f4d1338..0ca69876 100644
--- a/gtk/src/stylecontext.hg
+++ b/gtk/src/stylecontext.hg
@@ -112,9 +112,6 @@ public:
   _WRAP_METHOD(void set_scale(int scale), gtk_style_context_set_scale)
   _WRAP_METHOD(int get_scale() const, gtk_style_context_get_scale)
 
-#m4 _CONVERSION(`GList*',`std::vector<Glib::ustring>',`Glib::ListHandler<Glib::ustring>::list_to_vector($3, 
Glib::OWNERSHIP_SHALLOW)')
-  _WRAP_METHOD(std::vector<Glib::ustring> list_classes() const, gtk_style_context_list_classes)
-
   _WRAP_METHOD(void add_class(const Glib::ustring& class_name), gtk_style_context_add_class)
   _WRAP_METHOD(void remove_class(const Glib::ustring& class_name), gtk_style_context_remove_class)
   _WRAP_METHOD(bool has_class(const Glib::ustring& class_name), gtk_style_context_has_class)
diff --git a/gtk/src/textchildanchor.ccg b/gtk/src/textchildanchor.ccg
index 66ca849c..fb090c69 100644
--- a/gtk/src/textchildanchor.ccg
+++ b/gtk/src/textchildanchor.ccg
@@ -19,3 +19,25 @@
 #include <glibmm/vectorutils.h>
 
 #include <gtk/gtk.h>
+
+namespace Gtk
+{
+
+std::vector<Widget*> TextChildAnchor::get_widgets()
+{
+  guint len = 0;
+  GtkWidget** widgets = gtk_text_child_anchor_get_widgets(gobj(), &len);
+  return Glib::ArrayHandler<Widget*>::array_to_vector(
+    widgets, len, Glib::OWNERSHIP_SHALLOW);
+}
+
+std::vector<const Widget*> TextChildAnchor::get_widgets() const
+{
+  guint len = 0;
+  GtkWidget** widgets = gtk_text_child_anchor_get_widgets(
+    const_cast<GtkTextChildAnchor*>(gobj()), &len);
+  return Glib::ArrayHandler<const Widget*>::array_to_vector(
+    widgets, len, Glib::OWNERSHIP_SHALLOW);
+}
+
+} // namespace Gtk
diff --git a/gtk/src/textchildanchor.hg b/gtk/src/textchildanchor.hg
index 3e45380e..f97fd116 100644
--- a/gtk/src/textchildanchor.hg
+++ b/gtk/src/textchildanchor.hg
@@ -26,7 +26,7 @@ _PINCLUDE(glibmm/private/object_p.h)
 namespace Gtk
 {
 
-/** A TextChildAnchor is a spot in the buffer where child widgets can be "anchored"
+/** A %TextChildAnchor is a spot in the buffer where child widgets can be "anchored"
  * (inserted inline, as if they were characters). The anchor can have multiple widgets anchored,
  * to allow for multiple views.
  *
@@ -42,10 +42,19 @@ protected:
 public:
   _WRAP_CREATE()
 
-#m4 _CONVERSION(`GList*',`std::vector<Widget*>',`Glib::ListHandler<Widget*>::list_to_vector($3, 
Glib::OWNERSHIP_SHALLOW)')
-  _WRAP_METHOD(std::vector<Widget*> get_widgets(), gtk_text_child_anchor_get_widgets)
-#m4 _CONVERSION(`GList*',`std::vector<const Widget*>',`Glib::ListHandler<const Widget*>::list_to_vector($3, 
Glib::OWNERSHIP_SHALLOW)')
-  _WRAP_METHOD(std::vector<const Widget*> get_widgets() const, gtk_text_child_anchor_get_widgets)
+  /** Gets a list of all widgets anchored at this child anchor.
+   *
+   * @return A vector of widgets anchored at this %TextChildAnchor.
+   */
+  std::vector<Widget*> get_widgets();
+
+  /** Gets a list of all widgets anchored at this child anchor.
+   *
+   * @return A vector of widgets anchored at this %TextChildAnchor.
+   */
+  std::vector<const Widget*> get_widgets() const;
+  _IGNORE(gtk_text_child_anchor_get_widgets)
+
   _WRAP_METHOD(bool get_deleted() const, gtk_text_child_anchor_get_deleted)
 };
 
diff --git a/gtk/src/textview.hg b/gtk/src/textview.hg
index 4052dd92..cb2314a4 100644
--- a/gtk/src/textview.hg
+++ b/gtk/src/textview.hg
@@ -19,14 +19,14 @@
 // the #ifndef GTKMM_DISABLE_DEPRECATED in deprecated classes) is generated:
 _CONFIGINCLUDE(gtkmmconfig.h)
 
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/scrollable.h>
 #include <gtkmm/textbuffer.h>
 #include <gtkmm/textmark.h>
 #include <giomm/menumodel.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk
 {
@@ -49,10 +49,10 @@ _WRAP_ENUM(TextWindowType, GtkTextWindowType)
  * @ingroup TextView
  */
 class TextView
- : public Container,
+ : public Widget,
    public Scrollable
 {
-  _CLASS_GTKOBJECT(TextView, GtkTextView, GTK_TEXT_VIEW, Gtk::Container, GtkContainer)
+  _CLASS_GTKOBJECT(TextView, GtkTextView, GTK_TEXT_VIEW, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Scrollable)
 public:
   _CTOR_DEFAULT()
@@ -170,6 +170,8 @@ public:
 
   _WRAP_METHOD(void move_overlay(Widget& child, int xpos, int ypos), gtk_text_view_move_overlay)
 
+  _WRAP_METHOD(void remove(Widget& child), gtk_text_view_remove)
+
   _WRAP_METHOD(void set_wrap_mode(WrapMode wrap_mode), gtk_text_view_set_wrap_mode)
   _WRAP_METHOD(WrapMode get_wrap_mode() const, gtk_text_view_get_wrap_mode)
   _WRAP_METHOD(void set_editable(bool setting = true), gtk_text_view_set_editable)
diff --git a/gtk/src/treeview.hg b/gtk/src/treeview.hg
index 12813511..27b59813 100644
--- a/gtk/src/treeview.hg
+++ b/gtk/src/treeview.hg
@@ -21,7 +21,7 @@ _CONFIGINCLUDE(gtkmmconfig.h)
 
 #include <vector>
 #include <cstdlib> // std::strto*()
-#include <gtkmm/container.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/treeviewcolumn.h>
 #include <gtkmm/treeselection.h>
 #include <gtkmm/treemodelcolumn.h>
@@ -31,7 +31,7 @@ _CONFIGINCLUDE(gtkmmconfig.h)
 #include <gtkmm/tooltip.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/container_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gdk
 {
@@ -101,10 +101,10 @@ class TreeModel;
  * @ingroup TreeView
  */
 class TreeView
- : public Container,
+ : public Widget,
    public Scrollable
 {
-  _CLASS_GTKOBJECT(TreeView, GtkTreeView, GTK_TREE_VIEW, Gtk::Container, GtkContainer)
+  _CLASS_GTKOBJECT(TreeView, GtkTreeView, GTK_TREE_VIEW, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Scrollable)
   _IGNORE(gtk_tree_view_get_path_at_pos, gtk_tree_view_get_cursor,
           gtk_tree_view_insert_column_with_data_func, gtk_tree_view_get_drag_dest_row, 
gtk_tree_view_get_dest_row_at_pos)
diff --git a/gtk/src/viewport.ccg b/gtk/src/viewport.ccg
index f743a9c7..25e54e19 100644
--- a/gtk/src/viewport.ccg
+++ b/gtk/src/viewport.ccg
@@ -19,3 +19,13 @@
 #include <gtkmm/viewport.h>
 #include <gtkmm/adjustment.h>
 #include <gtk/gtk.h>
+
+namespace Gtk
+{
+
+void Viewport::unset_child()
+{
+  gtk_viewport_set_child(gobj(), nullptr);
+}
+
+} // namespace Gtk
diff --git a/gtk/src/viewport.hg b/gtk/src/viewport.hg
index 1d807834..2e442123 100644
--- a/gtk/src/viewport.hg
+++ b/gtk/src/viewport.hg
@@ -16,11 +16,11 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/scrollable.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gtk {
 
@@ -30,10 +30,10 @@ namespace Gtk {
  * @ingroup Containers
  */
 class Viewport
- : public Bin,
+ : public Widget,
    public Scrollable
 {
-  _CLASS_GTKOBJECT(Viewport,GtkViewport,GTK_VIEWPORT,Gtk::Bin,GtkBin)
+  _CLASS_GTKOBJECT(Viewport, GtkViewport, GTK_VIEWPORT, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Scrollable)
 public:
 
@@ -42,7 +42,13 @@ public:
   _WRAP_METHOD(void set_scroll_to_focus(bool scroll_to_focus = true), gtk_viewport_set_scroll_to_focus)
   _WRAP_METHOD(bool get_scroll_to_focus() const, gtk_viewport_get_scroll_to_focus)
 
+  _WRAP_METHOD(void set_child(Widget& child), gtk_viewport_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_viewport_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_viewport_get_child, constversion)
+
   _WRAP_PROPERTY("scroll-to-focus", bool)
+  _WRAP_PROPERTY("child", Widget*)
 };
 
 }  //namespace Gtk
diff --git a/gtk/src/widget.ccg b/gtk/src/widget.ccg
index 1bac06ca..6bd3447b 100644
--- a/gtk/src/widget.ccg
+++ b/gtk/src/widget.ccg
@@ -25,7 +25,6 @@
 #include <gtkmm/root.h>
 #include <gtkmm/native.h>
 #include <gtkmm/settings.h>
-#include <gtkmm/container.h>
 #include <gtkmm/eventcontroller.h>
 #include <gtkmm/tooltip.h>
 #include <gtkmm/snapshot.h>
@@ -254,20 +253,6 @@ Glib::RefPtr<const ConstraintTarget> Widget::make_refptr_constrainttarget() cons
   return const_cast<Widget*>(this)->make_refptr_constrainttarget();
 }
 
-void Widget::reparent(Container& new_parent)
-{
-  auto old_parent = get_parent();
-  g_return_if_fail(old_parent != nullptr); // if the widget is not in a Container
-
-  if (old_parent != &new_parent)
-  {
-    reference();
-    old_parent->remove(*this);
-    new_parent.add(*this);
-    unreference();
-  }
-}
-
 void Widget::set_layout_manager(const Glib::RefPtr<LayoutManager>& layout_manager)
 {
   // gtk_widget_set_layout_manager() does not take a ref.
@@ -328,7 +313,7 @@ void Widget_Class::dispose_vfunc_callback(GObject* self)
 
     // Abort dispose if the widget isn't managed, in order to prevent
     // the nasty self-destroying behaviour of GTK+.  This applies to
-    // any widget inside a GtkContainer on gtk_container_destroy()
+    // any widget inside a container on gtk_container_destroy()
     // See also Window_Class::dispose_vfunc_callback().
 
     if(obj->referenced_) //Not managed
@@ -340,15 +325,15 @@ void Widget_Class::dispose_vfunc_callback(GObject* self)
       if(parent)
       {
         // Normally, we would have to ref the child widget because
-        // gtk_container_remove() unrefs it.  But since we only remove
+        // gtk_widget_unparent() unrefs it.  But since we only remove
         // non-managed objects here, the container just releases the
-        // reference it has acquired before in gtk_container_add().
+        // reference it has acquired before in gtk_widget_set_parent().
 
         #ifdef GLIBMM_DEBUG_REFCOUNTING
         g_warning("Widget_Class::dispose_vfunc_callback(): removing gobject_: %p from parent: %p", 
(void*)self, (void*)parent);
         #endif
 
-        gtk_container_remove(GTK_CONTAINER(parent), pWidget);
+        gtk_widget_unparent(pWidget);
 
         #ifdef GLIBMM_DEBUG_REFCOUNTING
         g_warning("Widget_Class::dispose_vfunc_callback(): after removing from parent.");
diff --git a/gtk/src/widget.hg b/gtk/src/widget.hg
index eb0231be..ce6e0b11 100644
--- a/gtk/src/widget.hg
+++ b/gtk/src/widget.hg
@@ -64,7 +64,6 @@ class Adjustment;
 class Window;
 class Root;
 class Native;
-class Container;
 class EventController;
 class LayoutManager;
 class Settings;
@@ -78,6 +77,10 @@ typedef Gdk::Rectangle Allocation;
 /** @defgroup Widgets Widgets
  */
 
+/** @defgroup Containers Container Widgets
+ * These widgets can be used to group other widgets together.
+ */
+
 //TODO: Deal with the GtkObject->GObject change:
 /** Abstract Widget (Base class for all widgets)
  *
@@ -108,7 +111,6 @@ class Widget
   _IMPLEMENTS_INTERFACE(ConstraintTarget)
   _IMPLEMENTS_INTERFACE(Atk::Implementor, ifdef GTKMM_ATKMM_ENABLED)
 
-  _IGNORE(gtk_widget_destroy, gtk_widget_destroyed)
   _IGNORE(gtk_widget_paintable_new)
 
 public:
@@ -155,16 +157,10 @@ public:
 
   _WRAP_METHOD(bool activate(), gtk_widget_activate)
 
-  // gtk_widget_reparent() has been removed, but we want to keep Gtk::Widget::reparent().
-  /** Moves a widget from one Gtk::Container to another, handling reference
-   * count issues to avoid destroying the widget.
-   *
-   * @param new_parent A Gtk::Container to move the widget into.
-   */
-  void reparent(Container& new_parent);
-
   _WRAP_METHOD(void set_can_focus(bool can_focus = true), gtk_widget_set_can_focus)
   _WRAP_METHOD(bool get_can_focus() const, gtk_widget_get_can_focus)
+  _WRAP_METHOD(void set_focusable(bool focusable = true), gtk_widget_set_focusable)
+  _WRAP_METHOD(bool get_focusable() const, gtk_widget_get_focusable)
   _WRAP_METHOD(bool has_focus() const, gtk_widget_has_focus)
 
   _WRAP_METHOD(bool is_focus() const, gtk_widget_is_focus)
@@ -224,8 +220,8 @@ public:
   _WRAP_METHOD(int get_width() const, gtk_widget_get_width)
   _WRAP_METHOD(int get_height() const, gtk_widget_get_height)
 
-  _WRAP_METHOD(Container* get_parent(), gtk_widget_get_parent)
-  _WRAP_METHOD(const Container* get_parent() const, gtk_widget_get_parent, constversion)
+  _WRAP_METHOD(Widget* get_parent(), gtk_widget_get_parent)
+  _WRAP_METHOD(const Widget* get_parent() const, gtk_widget_get_parent, constversion)
 
   _WRAP_METHOD(Root* get_root(), gtk_widget_get_root)
   _WRAP_METHOD(const Root* get_root() const, gtk_widget_get_root, constversion)
@@ -574,8 +570,6 @@ public:
   //_WRAP(meth|sig|impl,void unrealize_(),gtk_widget_unrealize,"unrealize")
   _WRAP_SIGNAL(void unrealize(),"unrealize")
 
-  _WRAP_SIGNAL(void size_allocate(int width, int height, int baseline), "size_allocate")
-
   _WRAP_SIGNAL(void state_flags_changed(Gtk::StateFlags previous_state_flags), "state-flags-changed")
 
   _WRAP_SIGNAL(void direction_changed(TextDirection direction), "direction_changed")
@@ -605,7 +599,7 @@ dnl
   _WRAP_SIGNAL(bool query_tooltip(int x, int y, bool keyboard_tooltip, const Glib::RefPtr<Tooltip>& 
tooltip), "query_tooltip")
 
   _WRAP_PROPERTY("name", Glib::ustring)
-  _WRAP_PROPERTY("parent", Container*)
+  _WRAP_PROPERTY("parent", Widget*)
   _WRAP_PROPERTY("root", Root*)
   _WRAP_PROPERTY("width_request", int)
   _WRAP_PROPERTY("height_request", int)
@@ -615,6 +609,7 @@ dnl
   _WRAP_PROPERTY("has_focus", bool)
   _WRAP_PROPERTY("can_target", bool)
   _WRAP_PROPERTY("focus_on_click", bool)
+  _WRAP_PROPERTY("focusable", bool)
   _WRAP_PROPERTY("has_default", bool)
   _WRAP_PROPERTY("receives_default", bool)
   _WRAP_PROPERTY("cursor", Glib::RefPtr<Gdk::Cursor>)
@@ -640,14 +635,14 @@ dnl
   _WRAP_PROPERTY("layout-manager", Glib::RefPtr<LayoutManager>)
 
 protected:
-
   _WRAP_VFUNC(void root(), root)
   _WRAP_VFUNC(void unroot(), unroot)
+  _WRAP_VFUNC(void size_allocate(int width, int height, int baseline), size_allocate)
   _WRAP_VFUNC(SizeRequestMode get_request_mode() const, get_request_mode)
   _WRAP_VFUNC(void measure(Orientation orientation, int for_size, int& minimum, int& natural,
     int& minimum_baseline, int& natural_baseline) const, measure, custom_vfunc_callback)
   _WRAP_VFUNC(bool grab_focus(), grab_focus)
-  /** Sets the focused child of container.
+  /** Sets the focused child of widget.
    *
    * @param child The child widget.
    */
diff --git a/gtk/src/window.ccg b/gtk/src/window.ccg
index bf30075f..225c154e 100644
--- a/gtk/src/window.ccg
+++ b/gtk/src/window.ccg
@@ -28,20 +28,20 @@ namespace Gtk
 // that removes the window from its application when the window is closed (hidden).
 Window::Window(const Glib::ConstructParams& construct_params)
 :
-  Gtk::Bin(construct_params)
+  Gtk::Widget(construct_params)
 {
   signal_hide().connect(sigc::mem_fun(*this, &Window::on_window_hide));
 }
 
 Window::Window(GtkWindow* castitem)
 :
-  Gtk::Bin((GtkBin*)castitem)
+  Gtk::Widget((GtkWidget*)castitem)
 {
   signal_hide().connect(sigc::mem_fun(*this, &Window::on_window_hide));
 }
 
 Window::Window(Window&& src) noexcept
-: Gtk::Bin(std::move(src))
+: Gtk::Widget(std::move(src))
   , Native(std::move(src))
   , Root(std::move(src))
 {
@@ -61,7 +61,7 @@ Window::Window(Window&& src) noexcept
 // _CUSTOM_MOVE_OPERATIONS() suppresses both move contructor and move assignment. 
 Window& Window::operator=(Window&& src) noexcept
 {
-  Gtk::Bin::operator=(std::move(src));
+  Gtk::Widget::operator=(std::move(src));
   Native::operator=(std::move(src));
   Root::operator=(std::move(src));
   return *this;
@@ -120,7 +120,7 @@ void Window::destroy_()
 void Window::_release_c_instance()
 {
   //We override this, (though it's not virtual - we just call it from this class),
-  //because top-level windows can only be destroyed with gtk_widget_destroy, according to Owen Taylor. 
murrayc.
+  //because top-level windows can only be destroyed with gtk_window_destroy, according to Owen Taylor. 
murrayc.
   #ifdef GLIBMM_DEBUG_REFCOUNTING
   g_warning("Gtk::Window::_release_c_instance() gobject_=%p\n", (void*) gobject_);
   #endif
@@ -128,11 +128,10 @@ void Window::_release_c_instance()
   cpp_destruction_in_progress_ = true;
 
   // remove our hook.
-  GtkWidget* object = GTK_WIDGET(gobj());
-  if (object)
+  if (gobj())
   {
     //Windows can not be unrefed. They are "self-owning".
-    gtk_widget_destroy(object);
+    gtk_window_destroy(gobj());
 
     //If the GObject still exists, disconnect the C++ wrapper from it.
     //The C++ wrapper is being deleted right now.
@@ -229,6 +228,11 @@ void Window::unset_transient_for()
   gtk_window_set_transient_for(gobj(), nullptr /* See GTK+ docs */);
 }
 
+void Window::unset_child()
+{
+  gtk_window_set_child(gobj(), nullptr);
+}
+
 void Window::unset_application()
 {
   gtk_window_set_application(gobj(), nullptr /* See GTK+ docs */);
diff --git a/gtk/src/window.hg b/gtk/src/window.hg
index c8bd3279..84b0716a 100644
--- a/gtk/src/window.hg
+++ b/gtk/src/window.hg
@@ -21,14 +21,14 @@
 #include <glibmm/object.h>
 #include <gdkmm/surface.h>
 #include <gdkmm/texture.h>
-#include <gtkmm/bin.h>
+#include <gtkmm/widget.h>
 #include <gtkmm/native.h>
 #include <gtkmm/root.h>
 #include <gtkmm/application.h>
 #include <gtkmm/windowgroup.h>
 
 _DEFS(gtkmm,gtk)
-_PINCLUDE(gtkmm/private/bin_p.h)
+_PINCLUDE(gtkmm/private/widget_p.h)
 
 namespace Gio
 {
@@ -54,13 +54,16 @@ class WindowGroup;
  *
  * @ingroup Widgets
  */
-class Window : public Bin, public Native, public Root
+class Window : public Widget, public Native, public Root
 {
-  _CLASS_GTKOBJECT(Window,GtkWindow,GTK_WINDOW,Gtk::Bin,GtkBin)
+  _CLASS_GTKOBJECT(Window, GtkWindow, GTK_WINDOW, Gtk::Widget, GtkWidget)
   _IMPLEMENTS_INTERFACE(Native)
   _IMPLEMENTS_INTERFACE(Root)
   _UNMANAGEABLE
-  _IGNORE(gtk_window_set_has_user_ref_count, gtk_window_set_destroy_with_parent)
+  _IGNORE(gtk_window_destroy, gtk_window_set_destroy_with_parent)
+
+  // GtkWindow also implements GtkShortcutManager, but that interface is not
+  // (yet) wrapped in a C++ class.
 
   //TODO: Use gtk_window_set_destroy_with_parent() to allow use of Gtk::manage() with top-level windows, 
using the transient-parent?
 
@@ -100,6 +103,7 @@ public:
   _WRAP_PROPERTY("is-maximized", bool)
   _WRAP_PROPERTY("default-widget", Widget*)
   _WRAP_PROPERTY("focus-widget", Widget*)
+  _WRAP_PROPERTY("child", Widget*)
 
   _WRAP_SIGNAL(void keys_changed(), "keys_changed")
   _WRAP_SIGNAL(bool close_request(), "close-request")
@@ -121,7 +125,6 @@ dnl
   _POP()
 #m4end
 
-
   _WRAP_METHOD(void set_title(const Glib::ustring& title),
                gtk_window_set_title)
 
@@ -189,7 +192,6 @@ dnl
   _WRAP_METHOD(static void set_auto_startup_notification(bool setting = true), 
gtk_window_set_auto_startup_notification)
 
   _WRAP_METHOD(void set_modal(bool modal = true), gtk_window_set_modal)
-
   _WRAP_METHOD(bool get_modal() const, gtk_window_get_modal)
 
   _WRAP_METHOD(static Glib::RefPtr<Gio::ListModel> get_toplevels(), gtk_window_get_toplevels, refreturn)
@@ -253,6 +255,11 @@ dnl
    */
   void unset_application();
 
+  _WRAP_METHOD(void set_child(Widget& child), gtk_window_set_child)
+  void unset_child();
+  _WRAP_METHOD(Widget* get_child(), gtk_window_get_child)
+  _WRAP_METHOD(const Widget* get_child() const, gtk_window_get_child, constversion)
+
   _WRAP_METHOD(void set_titlebar(Widget& titlebar), gtk_window_set_titlebar)
 
   /** Unsets the titlebar.
diff --git a/tests/child_widget/testwindow.cc b/tests/child_widget/testwindow.cc
index 6c06596c..69b25ad6 100644
--- a/tests/child_widget/testwindow.cc
+++ b/tests/child_widget/testwindow.cc
@@ -19,7 +19,7 @@
 TestWindow::TestWindow()
 : m_Button("test")
 {
-  add(m_Button);
+  set_child(m_Button);
 
   //This seems to be 2, and then 3 during destruction. Looks like unref-ing isn't enough - we'll have to 
gtk_object_destroy() it instead of just unrefing.
   g_warning("m_Button -> refcount = %d\n", G_OBJECT(m_Button.gobj())->ref_count);
diff --git a/tests/child_widget2/main.cc b/tests/child_widget2/main.cc
index 2212d8bb..a6f2f6c2 100644
--- a/tests/child_widget2/main.cc
+++ b/tests/child_widget2/main.cc
@@ -13,9 +13,9 @@ MyWindow::MyWindow() :
   b("hello"),
   vbox(Gtk::Orientation::VERTICAL)
 {
-  add(vbox);
+  set_child(vbox);
   b.set_expand(true);
-  vbox.add(b);
+  vbox.append(b);
 }
 
 int main (int argc, char *argv[])
diff --git a/tests/child_widget_managed/main.cc b/tests/child_widget_managed/main.cc
index ae795d63..692b2729 100644
--- a/tests/child_widget_managed/main.cc
+++ b/tests/child_widget_managed/main.cc
@@ -32,7 +32,7 @@ ExampleWindow::ExampleWindow()
     set_default_size(150, 150);
 
     m_button = Gtk::make_managed<MyButton>();
-    add(*m_button);
+    set_child(*m_button);
 }
 
 ExampleWindow::~ExampleWindow()
diff --git a/tests/delete_cpp_child/main.cc b/tests/delete_cpp_child/main.cc
index 55aa3e0f..bd4e76ab 100644
--- a/tests/delete_cpp_child/main.cc
+++ b/tests/delete_cpp_child/main.cc
@@ -20,15 +20,15 @@ AppWindow::AppWindow()
     : m_label (nullptr)
 {
     auto vbox = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 5);
-    add(*vbox);
+    set_child(*vbox);
 
     auto button = Gtk::make_managed<Gtk::Button>("Delete Label");
-    vbox->add(*button);
+    vbox->append(*button);
 
     //m_label = Gtk::make_managed<Gtk::Label>("test");
     m_label = new Gtk::Label("test");
     g_warning("m_label -> ref_count: %d\n", G_OBJECT(m_label->gobj())->ref_count);
-    vbox->add(*m_label);
+    vbox->append(*m_label);
     g_warning("m_label -> ref_count: %d\n", G_OBJECT(m_label->gobj())->ref_count);
 
     button->signal_clicked().connect( sigc::mem_fun(*this, &AppWindow::on_button_clicked));
diff --git a/tests/dialog_deletethis/main.cc b/tests/dialog_deletethis/main.cc
index ebab7993..fc02ae5c 100644
--- a/tests/dialog_deletethis/main.cc
+++ b/tests/dialog_deletethis/main.cc
@@ -13,7 +13,7 @@ class Dlg : public sigc::trackable
       auto btn = Gtk::make_managed<Gtk::Button>("ClickMe");
       btn->signal_clicked().connect(sigc::mem_fun(*this, &Dlg::on_button_clicked));
       btn->set_expand(true);
-      dlg_->get_content_area()->add(*btn);
+      dlg_->get_content_area()->append(*btn);
       dlg_->add_button("_OK", Gtk::ResponseType::OK);
       dlg_->signal_response().connect(sigc::mem_fun(*this, &Dlg::on_response));
       dlg_->show();
@@ -30,18 +30,19 @@ class Dlg : public sigc::trackable
     }
 
     void on_response(int id)
-   {
+    {
       if (id == Gtk::ResponseType::OK || id == Gtk::ResponseType::DELETE_EVENT)
         quit();
     }
 
-    void quit() {
+    void quit()
+    {
       delete this; //This is _not_ a good example of coding with gtkmm.
       app->quit();
     }
 
   private:
-    Gtk::Dialog *dlg_;
+    Gtk::Dialog* dlg_;
 };
 
 int main (int argc, char **argv)
@@ -53,5 +54,3 @@ int main (int argc, char **argv)
   app->hold();
   return app->run(argc, argv);
 }
-
-
diff --git a/tests/property_notification/main.cc b/tests/property_notification/main.cc
index b67cc111..69f8ef13 100644
--- a/tests/property_notification/main.cc
+++ b/tests/property_notification/main.cc
@@ -32,8 +32,7 @@ int main (int argc, char **argv)
 
   button.connect_property_changed("name", sigc::ptr_fun(&on_property_name_changed));
 
-
-  window.add(button);
+  window.set_child(button);
 
   return app->run(window, argc, argv);
 }
diff --git a/tests/refcount_dialog/main.cc b/tests/refcount_dialog/main.cc
index 0cedf4b5..9924021f 100644
--- a/tests/refcount_dialog/main.cc
+++ b/tests/refcount_dialog/main.cc
@@ -32,16 +32,18 @@ MyWindow::MyWindow()
 
   m_Button.signal_clicked().connect( sigc::mem_fun(*this, &MyWindow::on_button_clicked) );
   m_Button.set_expand(true);
-  m_Box.add(m_Button);
-  add(m_Box);
+  m_Box.append(m_Button);
+  set_child(m_Box);
 }
 
 void MyWindow::on_button_clicked()
 {
   {
     MyDialog d;
-    d.run();
-    std::cout << "After d.run()" << std::endl;
+    d.set_transient_for(*this);
+    d.set_modal();
+    d.show();
+    std::cout << "After d.show()" << std::endl;
   }
 
   std::cout << "before list_toplevel" << std::endl;
diff --git a/tests/scrolledwindow/main.cc b/tests/scrolledwindow/main.cc
index 4462a372..151b4533 100644
--- a/tests/scrolledwindow/main.cc
+++ b/tests/scrolledwindow/main.cc
@@ -33,7 +33,7 @@ public:
   Instance()
   {
     //m_pLabel = new DerivedLabel();
-    m_ScrolledWindow.add( m_pLabel );
+    m_ScrolledWindow.set_child( m_pLabel );
 
     g_signal_connect (G_OBJECT(m_ScrolledWindow.get_child()->gobj()), "destroy", 
G_CALLBACK(on_viewport_destroyed), NULL);
 
diff --git a/tools/m4/convert_gtk.m4 b/tools/m4/convert_gtk.m4
index 0035e97f..22cf17e8 100644
--- a/tools/m4/convert_gtk.m4
+++ b/tools/m4/convert_gtk.m4
@@ -195,7 +195,6 @@ _CONVERSION(`Window*',`GtkWindow*',__FP2P)
 _CONVERSION(`GtkWidget*',`Button*',`Glib::wrap((GtkButton*)($3))')
 _CONVERSION(`GtkWidget*',`Box*',`Glib::wrap((GtkBox*)($3))')
 _CONVERSION(`GtkWidget*',`Gtk::CheckButton*',__RP2PD)
-_CONVERSION(`GtkWidget*',`Container*',`Glib::wrap((GtkContainer*)($3))')
 _CONVERSION(`GtkWidget*',`Entry*',`Glib::wrap((GtkEntry*)($3))')
 _CONVERSION(`GtkWidget*',`HeaderBar*',`Glib::wrap((GtkHeaderBar*)($3))')
 _CONVERSION(`GtkWidget*',`Label*',`Glib::wrap((GtkLabel*)($3))')
@@ -214,7 +213,6 @@ _CONVERSION(`GtkWidget*',`DragIcon*',`Glib::wrap((GtkDragIcon*)($3))')
 _CONVERSION(`GtkWidget*',`const Button*',`Glib::wrap((GtkButton*)($3))')
 _CONVERSION(`GtkWidget*',`const Box*',`Glib::wrap((GtkBox*)($3))')
 _CONVERSION(`GtkWidget*',`const Gtk::CheckButton*',__RP2CPD)
-_CONVERSION(`GtkWidget*',`const Container*',`Glib::wrap((GtkContainer*)($3))')
 _CONVERSION(`GtkWidget*',`const Entry*',`Glib::wrap((GtkEntry*)($3))')
 _CONVERSION(`GtkWidget*',`const Label*',`Glib::wrap((GtkLabel*)($3))')
 _CONVERSION(`GtkWidget*',`const Popover*',`Glib::wrap((GtkPopover*)($3))')


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]