[glom/gtkmm4v4] gtkmm4: Adapt to new-style enums.



commit 73dcf05f189290f52e1e9137eb4c930357783e55
Author: Murray Cumming <murrayc murrayc com>
Date:   Sat Apr 15 16:08:08 2017 +0200

    gtkmm4: Adapt to new-style enums.

 glom/application.cc                                |    8 +-
 glom/appwindow.cc                                  |   78 +++++++-------
 glom/bakery/busy_cursor.h                          |    4 +-
 glom/bakery/dialog_offersave.cc                    |    2 +-
 glom/base_db.cc                                    |   18 ++--
 glom/base_db_table_data.cc                         |    8 +-
 glom/box_reports.cc                                |    2 +-
 glom/box_withbuttons.cc                            |    8 +-
 glom/dialog_existing_or_new.cc                     |   22 ++--
 glom/dialog_invalid_data.cc                        |    2 +-
 glom/filechooser_export.cc                         |   10 +-
 glom/frame_glom.cc                                 |  108 ++++++++++----------
 glom/frame_glom.h                                  |    2 +-
 glom/glom_create_from_example.cc                   |    6 +-
 glom/glom_export_po.cc                             |    2 +-
 glom/glom_export_po_all.cc                         |    4 +-
 glom/glom_import_po_all.cc                         |    6 +-
 glom/import_csv/dialog_import_csv.cc               |   10 +-
 glom/import_csv/dialog_import_csv_progress.cc      |   10 +-
 glom/libglom/connectionpool_backends/mysql.cc      |    6 +-
 glom/libglom/connectionpool_backends/postgres.cc   |    6 +-
 glom/libglom/connectionpool_backends/sqlite.cc     |    4 +-
 glom/libglom/data_structure/glomconversions.cc     |    6 +-
 glom/libglom/db_utils.cc                           |    8 +-
 glom/libglom/document/bakery/document.cc           |    2 +-
 glom/libglom/file_utils.cc                         |    2 +-
 glom/libglom/spawn_with_feedback.cc                |   18 ++--
 glom/libglom/test_avahi_publisher.cc               |    2 +-
 glom/libglom/translations_po.cc                    |    2 +-
 glom/main.cc                                       |   30 +++---
 glom/mode_data/box_data.cc                         |    4 +-
 glom/mode_data/box_data_calendar_related.cc        |    6 +-
 glom/mode_data/box_data_details.cc                 |   30 +++---
 glom/mode_data/box_data_portal.cc                  |    4 +-
 glom/mode_data/buttonglom.cc                       |    2 +-
 glom/mode_data/datawidget/cellcreation.cc          |    2 +-
 .../datawidget/cellrenderer_buttonimage.cc         |    2 +-
 .../datawidget/cellrenderer_buttontext.cc          |    2 +-
 .../mode_data/datawidget/combo_as_radio_buttons.cc |    2 +-
 glom/mode_data/datawidget/datawidget.cc            |   28 +++---
 glom/mode_data/datawidget/dialog_choose_date.cc    |    2 +-
 glom/mode_data/datawidget/dialog_choose_id.cc      |    6 +-
 glom/mode_data/datawidget/label.cc                 |    4 +-
 glom/mode_data/datawidget/textview.cc              |    8 +-
 glom/mode_data/datawidget/treemodel_db.cc          |    2 +-
 glom/mode_data/db_adddel/db_adddel.cc              |   14 ++--
 glom/mode_data/db_adddel/db_adddel_withbuttons.cc  |   12 +-
 glom/mode_data/flowtablewithfields.cc              |   48 +++++-----
 glom/mode_design/dialog_database_preferences.cc    |    2 +-
 glom/mode_design/dialog_initial_password.cc        |    6 +-
 glom/mode_design/fields/box_db_table_definition.cc |   26 +++---
 glom/mode_design/fields/dialog_fieldcalculation.cc |    4 +-
 glom/mode_design/fields/dialog_fielddefinition.cc  |    8 +-
 glom/mode_design/layout/dialog_choose_field.cc     |    8 +-
 glom/mode_design/layout/dialog_layout_details.cc   |    4 +-
 glom/mode_design/layout/dialog_layout_export.cc    |    2 +-
 .../layout/dialog_layout_list_related.cc           |    6 +-
 .../layout/layout_item_dialogs/box_formatting.cc   |   10 +-
 .../layout_item_dialogs/dialog_buttonscript.cc     |    2 +-
 .../layout_item_dialogs/dialog_fieldslist.cc       |    2 +-
 .../layout_item_dialogs/dialog_formatting.cc       |    4 +-
 .../layout/layout_item_dialogs/dialog_group_by.cc  |    4 +-
 .../layout_item_dialogs/dialog_sortfields.cc       |    2 +-
 .../mode_design/print_layouts/box_print_layouts.cc |    8 +-
 .../print_layouts/print_layout_toolbar_button.cc   |    4 +-
 .../print_layouts/window_print_layout_edit.cc      |   36 ++++----
 .../relationships_overview/canvas_group_dbtable.cc |    4 +-
 .../window_relationships_overview.cc               |    6 +-
 .../report_layout/dialog_layout_report.cc          |    6 +-
 .../script_library/dialog_script_library.cc        |   10 +-
 glom/mode_design/translation/combobox_locale.cc    |    2 +-
 .../mode_design/translation/window_translations.cc |   20 ++--
 glom/mode_design/users/dialog_groups_list.cc       |    6 +-
 glom/mode_design/users/dialog_user.cc              |    4 +-
 glom/mode_design/users/dialog_users_list.cc        |   22 ++--
 glom/mode_find/box_data_details_find.cc            |    2 +-
 glom/mode_find/box_data_list_find.cc               |    6 +-
 glom/navigation/box_tables.cc                      |   22 ++--
 glom/print_layout/canvas_layout_item.cc            |    8 +-
 glom/print_layout/canvas_print_layout.cc           |   10 +-
 glom/print_layout/print_layout_utils.cc            |    6 +-
 glom/print_layout/printoperation_printlayout.cc    |    2 +-
 glom/utility_widgets/adddel/adddel.cc              |   10 +-
 glom/utility_widgets/adddel/adddel_withbuttons.cc  |   16 ++--
 glom/utility_widgets/canvas/canvas_group_grid.cc   |    6 +-
 .../canvas/canvas_group_resizable.cc               |   54 +++++-----
 .../utility_widgets/canvas/canvas_image_movable.cc |    2 +-
 glom/utility_widgets/canvas/canvas_item_movable.cc |   10 +-
 glom/utility_widgets/canvas/canvas_text_movable.h  |    4 +-
 glom/utility_widgets/dialog_image_load_progress.cc |    8 +-
 glom/utility_widgets/dialog_image_save_progress.cc |   12 +-
 .../eggspreadtablemm/test_spreadtablednd.cc        |   34 +++---
 .../filechooserdialog_saveextras.cc                |   20 ++--
 .../utility_widgets/filechooserdialog_saveextras.h |    4 +-
 glom/utility_widgets/flowtable.cc                  |   10 +-
 glom/utility_widgets/imageglom.cc                  |   28 +++---
 glom/utility_widgets/layouttoolbarbutton.cc        |    4 +-
 glom/utility_widgets/layoutwidgetbase.cc           |   28 +++++-
 glom/utility_widgets/notebook_noframe.cc           |   16 ++--
 glom/utility_widgets/notebooklabelglom.cc          |    8 +-
 glom/utility_widgets/placeholder.cc                |    2 +-
 glom/utils_ui.cc                                   |   20 ++--
 glom/variablesmap.cc                               |    2 +-
 glom/window_boxholder.cc                           |    2 +-
 104 files changed, 585 insertions(+), 563 deletions(-)
---
diff --git a/glom/application.cc b/glom/application.cc
index f8795a5..97bab39 100644
--- a/glom/application.cc
+++ b/glom/application.cc
@@ -30,11 +30,11 @@
 namespace Glom
 {
 
-// We use Gio::APPLICATION_NON_UNIQUE because we have some singletons and other static data,
+// We use Gio::ApplicationFlags::NON_UNIQUE because we have some singletons and other static data,
 // to simplify our code.
 // We also want to prevent all instances from crashing when one instance crashes.
 Application::Application()
-: Gtk::Application("org.glom.Glom", Gio::APPLICATION_HANDLES_OPEN | Gio::APPLICATION_HANDLES_COMMAND_LINE | 
Gio::APPLICATION_NON_UNIQUE)
+: Gtk::Application("org.glom.Glom", Gio::ApplicationFlags::HANDLES_OPEN | 
Gio::ApplicationFlags::HANDLES_COMMAND_LINE | Gio::ApplicationFlags::NON_UNIQUE)
 {
 }
 
@@ -146,7 +146,7 @@ int Application::on_command_line(const Glib::RefPtr<Gio::ApplicationCommandLine>
 
   //Note that these options should really be parsed in main(),
   //but we do it here because of glib bug: https://bugzilla.gnome.org/show_bug.cgi?id=634990#c6
-  //Handling the two groups together here is possible due to our use of Gio::APPLICATION_NON_UNIQUE .
+  //Handling the two groups together here is possible due to our use of Gio::ApplicationFlags::NON_UNIQUE .
   LocalOptionGroup local_group;
   context.add_group(local_group);
 
@@ -206,7 +206,7 @@ int Application::on_command_line(const Glib::RefPtr<Gio::ApplicationCommandLine>
     }
 
     const auto file_type = file->query_file_type();
-    if(file_type == Gio::FILE_TYPE_DIRECTORY)
+    if(file_type == Gio::FileType::DIRECTORY)
     {
       std::cerr << _("Glom: The file path is a directory instead of a file.") << std::endl;
 
diff --git a/glom/appwindow.cc b/glom/appwindow.cc
index b596c6f..97bc526 100644
--- a/glom/appwindow.cc
+++ b/glom/appwindow.cc
@@ -87,7 +87,7 @@ AppWindow::AppWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>&
   Gtk::ApplicationWindow(cobject),
   m_builder(builder),
   m_vbox(nullptr),
-  m_vbox_placeHolder(Gtk::ORIENTATION_VERTICAL),
+  m_vbox_placeHolder(Gtk::Orientation::VERTICAL),
   m_box_top(nullptr),
   m_frame(nullptr),
   m_about_shown(false),
@@ -120,7 +120,7 @@ AppWindow::AppWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>&
 
   m_menubar = std::make_unique<Gtk::MenuBar>(gmenu);
   m_menubar->show();
-  m_box_top->pack_start(*m_menubar, Gtk::PACK_SHRINK);
+  m_box_top->pack_start(*m_menubar, Gtk::PackOptions::PACK_SHRINK);
 
   //TODO: Remove our use of add_accelerator() in application.cc,
   //if there is ever an easier way to make the 'accel's from the .glade file just work.
@@ -173,7 +173,7 @@ void AppWindow::on_connection_avahi_begin()
   delete m_avahi_progress_dialog;
   m_avahi_progress_dialog = nullptr;
 
-  m_avahi_progress_dialog = new Gtk::MessageDialog(UiUtils::bold_message(_("Glom: Generating Encryption 
Certificates")), true, Gtk::MESSAGE_INFO);
+  m_avahi_progress_dialog = new Gtk::MessageDialog(UiUtils::bold_message(_("Glom: Generating Encryption 
Certificates")), true, Gtk::MessageType::INFO);
   m_avahi_progress_dialog->set_secondary_text(_("Please wait while Glom prepares your system for publishing 
over the network."));
   m_avahi_progress_dialog->set_transient_for(*this);
   m_avahi_progress_dialog->show();
@@ -204,7 +204,7 @@ bool AppWindow::init_with_document(const Glib::ustring& document_uri, bool resto
 {
   init(); //calls init_menus()
 
-  //m_frame->set_shadow_type(Gtk::SHADOW_IN);
+  //m_frame->set_shadow_type(Gtk::ShadowType::IN);
 
   if(document_uri.empty())
   {
@@ -611,7 +611,7 @@ void AppWindow::open_browsed_document(const EpcServiceInfo* server, const Glib::
     dialog_connection->set_database_name(service_name);
     const auto response = Glom::UiUtils::dialog_run_with_help(dialog_connection);
     dialog_connection->hide();
-    if(response != Gtk::RESPONSE_OK)
+    if(response != Gtk::ResponseType::OK)
       keep_trying = false;
     else
     {
@@ -636,7 +636,7 @@ void AppWindow::open_browsed_document(const EpcServiceInfo* server, const Glib::
         {
           //std::cout << "   SOUP_STATUS_FORBIDDEN or SOUP_STATUS_UNAUTHORIZED\n";
 
-          UiUtils::show_ok_dialog(_("Connection Failed"), _("Glom could not connect to the database server. 
Maybe you entered an incorrect user name or password, or maybe the postgres database server is not 
running."), *this, Gtk::MESSAGE_ERROR); //TODO: Add help button.
+          UiUtils::show_ok_dialog(_("Connection Failed"), _("Glom could not connect to the database server. 
Maybe you entered an incorrect user name or password, or maybe the postgres database server is not 
running."), *this, Gtk::MessageType::ERROR); //TODO: Add help button.
         }
       }
       else
@@ -843,7 +843,7 @@ bool AppWindow::check_document_hosting_mode_is_supported(const std::shared_ptr<D
     return true;
 
   //Warn the user.
-  Frame_Glom::show_ok_dialog(_("File Uses Unsupported Database Backend"), error_message, *this, 
Gtk::MESSAGE_ERROR);
+  Frame_Glom::show_ok_dialog(_("File Uses Unsupported Database Backend"), error_message, *this, 
Gtk::MessageType::ERROR);
   return false;
 }
 
@@ -976,15 +976,15 @@ bool AppWindow::on_document_load()
     const auto userlevel = document->get_userlevel(reason);
     if( (userlevel == AppState::userlevels::OPERATOR) && (reason == 
Document::userLevelReason::FILE_READ_ONLY) )
     {
-      Gtk::MessageDialog dialog(UiUtils::bold_message(_("Opening Read-Only File.")), true,  
Gtk::MESSAGE_INFO, Gtk::BUTTONS_NONE);
+      Gtk::MessageDialog dialog(UiUtils::bold_message(_("Opening Read-Only File.")), true,  
Gtk::MessageType::INFO, Gtk::ButtonsType::NONE);
       dialog.set_secondary_text(_("This file is read only, so you will not be able to enter Developer mode 
to make design changes."));
       dialog.set_transient_for(*this);
-      dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-      dialog.add_button(_("Continue without Developer Mode"), Gtk::RESPONSE_OK); //arbitrary response code.
+      dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+      dialog.add_button(_("Continue without Developer Mode"), Gtk::ResponseType::OK); //arbitrary response 
code.
 
       const auto response = dialog.run();
       dialog.hide();
-      if((response == Gtk::RESPONSE_CANCEL)  || (response == Gtk::RESPONSE_DELETE_EVENT))
+      if((response == Gtk::ResponseType::CANCEL)  || (response == Gtk::ResponseType::DELETE_EVENT))
         return false;
     }
 #endif // !GLOM_ENABLE_CLIENT_ONLY
@@ -1039,7 +1039,7 @@ bool AppWindow::on_document_load()
           if(!is_example)
           {
             //The connection to the server is OK, but the database is not there yet.
-            Frame_Glom::show_ok_dialog(_("Database Not Found On Server"), _("The database could not be found 
on the server. Please consult your system administrator."), *this, Gtk::MESSAGE_ERROR);
+            Frame_Glom::show_ok_dialog(_("Database Not Found On Server"), _("The database could not be found 
on the server. Please consult your system administrator."), *this, Gtk::MessageType::ERROR);
           }
           else
           #endif // !GLOM_ENABLE_CLIENT_ONLY
@@ -1049,7 +1049,7 @@ bool AppWindow::on_document_load()
         {
           //std::cerr might show some hints, but we don't want to confront the user with them:
           //TODO: Actually complain about specific stuff such as missing data, because the user might really 
play with the file system.
-          Frame_Glom::show_ok_dialog(_("Problem Loading Document"), _("Glom could not load the document."), 
*this, Gtk::MESSAGE_ERROR);
+          Frame_Glom::show_ok_dialog(_("Problem Loading Document"), _("Glom could not load the document."), 
*this, Gtk::MessageType::ERROR);
           std::cerr << G_STRFUNC << ": unexpected error.\n";
         }
       }
@@ -1304,7 +1304,7 @@ bool AppWindow::offer_new_or_existing()
     const auto response_id = UiUtils::dialog_run_with_help(dialog_raw);
     dialog->hide();
 
-    if(response_id == Gtk::RESPONSE_ACCEPT)
+    if(response_id == Gtk::ResponseType::ACCEPT)
     {
       switch(dialog->get_action())
       {
@@ -1340,11 +1340,11 @@ bool AppWindow::offer_new_or_existing()
       if(!document->get_file_uri().empty() || (document->get_opened_from_browse()))
         ask_again = false;
     }
-    else if((response_id == Gtk::RESPONSE_CLOSE)  || (response_id == Gtk::RESPONSE_DELETE_EVENT))
+    else if((response_id == Gtk::ResponseType::CLOSE)  || (response_id == Gtk::ResponseType::DELETE_EVENT))
     {
       return false; //close the window to close the application, because they need to choose a new or 
existing document.
     }
-    else if((response_id == Gtk::RESPONSE_NONE)
+    else if((response_id == Gtk::ResponseType::NONE)
      || (response_id == 0))
     {
        //For instance, the file-open dialog was cancelled after Dialog_ExistingOrNew opened it,
@@ -1696,7 +1696,7 @@ bool AppWindow::recreate_database_from_backup(const std::string& backup_data_fil
 
 
     const auto message = _("Glom could not create the new database. Maybe you do not have the necessary 
access rights. Please contact your system administrator.");
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Database Creation Failed")), true, Gtk::MESSAGE_ERROR 
);
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Database Creation Failed")), true, 
Gtk::MessageType::ERROR );
     dialog.set_secondary_text(message);
     dialog.set_transient_for(*this);
 
@@ -2089,12 +2089,12 @@ Glib::ustring AppWindow::ui_file_select_save(const Glib::ustring& old_file_uri)
   //Create the appropriate dialog, depending on how the caller set m_ui_save_extra_showextras:
   if(m_ui_save_extra_showextras)
   {
-    fileChooser_SaveExtras = new Glom::FileChooserDialog_SaveExtras(_("Save Document"), 
Gtk::FILE_CHOOSER_ACTION_SAVE);
+    fileChooser_SaveExtras = new Glom::FileChooserDialog_SaveExtras(_("Save Document"), 
Gtk::FileChooserAction::SAVE);
     fileChooser_Save.reset(fileChooser_SaveExtras);
   }
   else
   {
-    fileChooser_Save.reset(new Gtk::FileChooserDialog(gettext("Save Document"), 
Gtk::FILE_CHOOSER_ACTION_SAVE));
+    fileChooser_Save.reset(new Gtk::FileChooserDialog(gettext("Save Document"), 
Gtk::FileChooserAction::SAVE));
   }
 
   fileChooser_Save->set_do_overwrite_confirmation(); //Ask the user if the file already exists.
@@ -2102,10 +2102,10 @@ Glib::ustring AppWindow::ui_file_select_save(const Glib::ustring& old_file_uri)
   if(auto pWindow = dynamic_cast<Gtk::Window*>(&app))
     fileChooser_Save->set_transient_for(*pWindow);
 
-  fileChooser_Save->add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  fileChooser_Save->add_button(_("_Save"), Gtk::RESPONSE_OK);
+  fileChooser_Save->add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  fileChooser_Save->add_button(_("_Save"), Gtk::ResponseType::OK);
 
-  fileChooser_Save->set_default_response(Gtk::RESPONSE_OK);
+  fileChooser_Save->set_default_response(Gtk::ResponseType::OK);
 
   //This is the reason that we override this method:
   if(!m_ui_save_extra_title.empty())
@@ -2159,7 +2159,7 @@ Glib::ustring AppWindow::ui_file_select_save(const Glib::ustring& old_file_uri)
 
     const auto response_id = fileChooser_Save->run();
     fileChooser_Save->hide();
-    if((response_id != Gtk::RESPONSE_CANCEL) && (response_id != Gtk::RESPONSE_DELETE_EVENT))
+    if((response_id != Gtk::ResponseType::CANCEL) && (response_id != Gtk::ResponseType::DELETE_EVENT))
     {
       const auto uri_chosen = fileChooser_Save->get_uri();
 
@@ -2211,7 +2211,7 @@ Glib::ustring AppWindow::ui_file_select_save(const Glib::ustring& old_file_uri)
 
         if(m_ui_save_extra_newdb_title.empty())
         {
-          Frame_Glom::show_ok_dialog(_("Database Title missing"), _("You must specify a title for the new 
database."), *this, Gtk::MESSAGE_ERROR);
+          Frame_Glom::show_ok_dialog(_("Database Title missing"), _("You must specify a title for the new 
database."), *this, Gtk::MessageType::ERROR);
 
           try_again = true;
           continue;
@@ -2310,7 +2310,7 @@ void AppWindow::on_menu_developer_changelanguage()
   const auto response = Glom::UiUtils::dialog_run_with_help(dialog);
   dialog->hide();
 
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     AppWindow::set_current_locale(dialog->get_locale());
 
@@ -2380,14 +2380,14 @@ void AppWindow::on_menu_developer_export_backup()
   starting_name = Utils::string_replace(starting_name, ":", "-");
 
   // This actually creates the directory:
-  Gtk::FileChooserDialog dialog(*this, _("Save Backup"), Gtk::FILE_CHOOSER_ACTION_CREATE_FOLDER);
-  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  dialog.add_button(_("_Save"), Gtk::RESPONSE_ACCEPT);
+  Gtk::FileChooserDialog dialog(*this, _("Save Backup"), Gtk::FileChooserAction::CREATE_FOLDER);
+  dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  dialog.add_button(_("_Save"), Gtk::ResponseType::ACCEPT);
   dialog.set_local_only(); //Because pg_dump, pg_restore and tar can't use URIs.
   dialog.set_current_name(starting_name);
   const auto result = dialog.run();
   dialog.hide();
-  if(result != Gtk::RESPONSE_ACCEPT)
+  if(result != Gtk::ResponseType::ACCEPT)
     return;
 
   //Get the path to the directory in which the .glom and data files will be created.
@@ -2408,7 +2408,7 @@ void AppWindow::on_menu_developer_export_backup()
 
 void AppWindow::on_menu_developer_restore_backup()
 {
-  Gtk::FileChooserDialog file_dlg(_("Choose a backup file"), Gtk::FILE_CHOOSER_ACTION_OPEN);
+  Gtk::FileChooserDialog file_dlg(_("Choose a backup file"), Gtk::FileChooserAction::OPEN);
   file_dlg.set_transient_for(*this);
   file_dlg.set_local_only(); //Because we can't untar remote files.
 
@@ -2418,12 +2418,12 @@ void AppWindow::on_menu_developer_restore_backup()
   filter->add_pattern("*.tgz");
   file_dlg.add_filter(filter);
 
-  file_dlg.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  file_dlg.add_button(_("Restore"), Gtk::RESPONSE_OK);
+  file_dlg.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  file_dlg.add_button(_("Restore"), Gtk::ResponseType::OK);
 
   const auto result = file_dlg.run();
   file_dlg.hide();
-  if(result != Gtk::RESPONSE_OK)
+  if(result != Gtk::ResponseType::OK)
     return;
 
   const auto uri_tarball = file_dlg.get_uri();
@@ -2771,7 +2771,7 @@ void AppWindow::ui_warning(const Glib::ustring& text, const Glib::ustring& secon
 {
   Gtk::Window* pWindow = this;
 
-  Gtk::MessageDialog dialog(AppWindow::util_bold_message(text), true /* use markup */, Gtk::MESSAGE_WARNING);
+  Gtk::MessageDialog dialog(AppWindow::util_bold_message(text), true /* use markup */, 
Gtk::MessageType::WARNING);
   dialog.set_secondary_text(secondary_text);
 
   dialog.set_title(""); //The HIG says that alert dialogs should not have titles. The default comes from the 
message type.
@@ -2792,10 +2792,10 @@ Glib::ustring AppWindow::ui_file_select_open(const Glib::ustring& starting_folde
 {
   Gtk::Window* pWindow = this;
 
-  Gtk::FileChooserDialog fileChooser_Open(_("Open Document"), Gtk::FILE_CHOOSER_ACTION_OPEN);
-  fileChooser_Open.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  fileChooser_Open.add_button(_("_Open"), Gtk::RESPONSE_OK);
-  fileChooser_Open.set_default_response(Gtk::RESPONSE_OK);
+  Gtk::FileChooserDialog fileChooser_Open(_("Open Document"), Gtk::FileChooserAction::OPEN);
+  fileChooser_Open.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  fileChooser_Open.add_button(_("_Open"), Gtk::ResponseType::OK);
+  fileChooser_Open.set_default_response(Gtk::ResponseType::OK);
 
   if(pWindow)
     fileChooser_Open.set_transient_for(*pWindow);
@@ -2805,7 +2805,7 @@ Glib::ustring AppWindow::ui_file_select_open(const Glib::ustring& starting_folde
 
   const auto response_id = fileChooser_Open.run();
   fileChooser_Open.hide();
-  if(response_id != Gtk::RESPONSE_CANCEL)
+  if(response_id != Gtk::ResponseType::CANCEL)
   {
     return fileChooser_Open.get_uri();
   }
diff --git a/glom/bakery/busy_cursor.h b/glom/bakery/busy_cursor.h
index 06342a9..7dde794 100644
--- a/glom/bakery/busy_cursor.h
+++ b/glom/bakery/busy_cursor.h
@@ -34,11 +34,11 @@ class BusyCursor
 public:
   /** Associate a busy cursor with the window, for the lifetime of this object.
    */
-  explicit BusyCursor(Gtk::Window& window, Gdk::CursorType cursor_type = Gdk::WATCH);
+  explicit BusyCursor(Gtk::Window& window, Gdk::CursorType cursor_type = Gdk::CursorType::WATCH);
 
   /**  Associate a busy cursor with the window, for the lifetime of this object, if window is not 0.
    */
-  explicit BusyCursor(Gtk::Window* window, Gdk::CursorType cursor_type = Gdk::WATCH);
+  explicit BusyCursor(Gtk::Window* window, Gdk::CursorType cursor_type = Gdk::CursorType::WATCH);
 
   virtual ~BusyCursor();
 
diff --git a/glom/bakery/dialog_offersave.cc b/glom/bakery/dialog_offersave.cc
index 63d50be..ab8526e 100644
--- a/glom/bakery/dialog_offersave.cc
+++ b/glom/bakery/dialog_offersave.cc
@@ -47,7 +47,7 @@ namespace GlomBakery
 
 
 Dialog_OfferSave::Dialog_OfferSave(const Glib::ustring& file_uri)
-: Gtk::MessageDialog( Glom::AppWindow::util_bold_message(_("Close without Saving")), true /* use markup */, 
Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_NONE)
+: Gtk::MessageDialog( Glom::AppWindow::util_bold_message(_("Close without Saving")), true /* use markup */, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::NONE)
 {
   set_title(""); //The HIG says that alert dialogs should not have titles. The default comes from the 
message type.
 
diff --git a/glom/base_db.cc b/glom/base_db.cc
index 178dfa7..2e8ccab 100644
--- a/glom/base_db.cc
+++ b/glom/base_db.cc
@@ -102,7 +102,7 @@ void Base_DB::handle_error(const Glib::Exception& ex, Gtk::Window* parent)
 {
   std::cerr << G_STRFUNC << ": Internal Error (Base_DB::handle_error()): exception type=" << 
typeid(ex).name() << ", ex.what()=" << ex.what() << std::endl;
 
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Internal error")), true, Gtk::MESSAGE_WARNING );
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Internal error")), true, Gtk::MessageType::WARNING );
   dialog.set_secondary_text(ex.what());
 
   if(parent)
@@ -115,7 +115,7 @@ void Base_DB::handle_error(const std::exception& ex, Gtk::Window* parent)
 {
   std::cerr << G_STRFUNC << ": Internal Error (Base_DB::handle_error()): exception type=" << 
typeid(ex).name() << ", ex.what()=" << ex.what() << std::endl;
 
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Internal error")), true, Gtk::MESSAGE_WARNING );
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Internal error")), true, Gtk::MessageType::WARNING );
   dialog.set_secondary_text(ex.what());
 
   if(parent)
@@ -286,7 +286,7 @@ bool Base_DB::change_columns(const Glib::ustring& table_name, const type_vec_con
   catch(const Glib::Error& ex)
   {
     handle_error(ex, parent_window);
-//    Gtk::MessageDialog window(*parent_window, UiUtils::bold_message(ex.what()), true, Gtk::MESSAGE_ERROR, 
Gtk::BUTTONS_OK);
+//    Gtk::MessageDialog window(*parent_window, UiUtils::bold_message(ex.what()), true, 
Gtk::MessageType::ERROR, Gtk::ButtonsType::OK);
 //    window.run();
     return false;
   }
@@ -342,7 +342,7 @@ std::shared_ptr<LayoutItem_Field> Base_DB::offer_field_list_select_one_field(con
 
     dialog->set_document(get_document(), table_name, start_field);
     const auto response = dialog->run();
-    if(response == Gtk::RESPONSE_OK)
+    if(response == Gtk::ResponseType::OK)
     {
       //Get the chosen field:
       result = dialog->get_field_chosen();
@@ -372,7 +372,7 @@ Base_DB::type_list_field_items Base_DB::offer_field_list(const Glib::ustring& ta
 
     dialog->set_document(get_document(), table_name);
     const auto response = dialog->run();
-    if(response == Gtk::RESPONSE_OK)
+    if(response == Gtk::ResponseType::OK)
     {
       //Get the chosen field:
       result = dialog->get_fields_chosen();
@@ -397,7 +397,7 @@ bool Base_DB::offer_non_field_item_formatting(const std::shared_ptr<LayoutItem_W
   dialog.set_item(layout_item, false);
 
   const auto response = dialog.run();
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     //Get the chosen formatting:
      dialog.use_item_chosen(layout_item);
@@ -427,7 +427,7 @@ std::shared_ptr<LayoutItem_Field> Base_DB::offer_field_formatting(const std::sha
   dialog->set_field(start_field, table_name, show_editable_options);
 
   const auto response = dialog->run();
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     //Get the chosen field:
     result = dialog->get_field_chosen();
@@ -456,7 +456,7 @@ std::shared_ptr<LayoutItem_Text> Base_DB::offer_textobject(const std::shared_ptr
   dialog->set_textobject(start_textobject, Glib::ustring(), show_title);
   const auto response = Glom::UiUtils::dialog_run_with_help(dialog);
   dialog->hide();
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     //Get the chosen relationship:
     result = dialog->get_textobject();
@@ -482,7 +482,7 @@ std::shared_ptr<LayoutItem_Image> Base_DB::offer_imageobject(const std::shared_p
   dialog->set_imageobject(start_imageobject, Glib::ustring(), show_title);
   const auto response = Glom::UiUtils::dialog_run_with_help(dialog);
   dialog->hide();
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     //Get the chosen relationship:
     result = dialog->get_imageobject();
diff --git a/glom/base_db_table_data.cc b/glom/base_db_table_data.cc
index 0476dbb..f79131b 100644
--- a/glom/base_db_table_data.cc
+++ b/glom/base_db_table_data.cc
@@ -372,14 +372,14 @@ bool Base_DB_Table_Data::confirm_delete_record()
 {
   //Ask the user for confirmation:
   const Glib::ustring message = _("Are you sure that you would like to delete this record? The data in this 
record will then be permanently lost.");
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Delete record")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Delete record")), true, Gtk::MessageType::QUESTION, 
Gtk::ButtonsType::NONE);
   dialog.set_secondary_text(message);
   dialog.set_transient_for(*AppWindow::get_appwindow());
-  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  dialog.add_button(_("_Delete"), Gtk::RESPONSE_OK);
+  dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  dialog.add_button(_("_Delete"), Gtk::ResponseType::OK);
 
   const int response = dialog.run();
-  return (response == Gtk::RESPONSE_OK);
+  return (response == Gtk::ResponseType::OK);
 }
 
 bool Base_DB_Table_Data::record_delete(const Gnome::Gda::Value& primary_key_value)
diff --git a/glom/box_reports.cc b/glom/box_reports.cc
index 5bd0aef..f86a6fa 100644
--- a/glom/box_reports.cc
+++ b/glom/box_reports.cc
@@ -235,7 +235,7 @@ void Box_Reports::on_adddel_changed(const Gtk::TreeModel::iterator& row, guint c
           int iButtonClicked = dialog.run();
 
           //Rename the report:
-          if(iButtonClicked == Gtk::RESPONSE_OK)
+          if(iButtonClicked == Gtk::ResponseType::OK)
           {
             m_AddDel.set_value_key(row, report_name_new);
 
diff --git a/glom/box_withbuttons.cc b/glom/box_withbuttons.cc
index 3e8a2c5..9c537c6 100644
--- a/glom/box_withbuttons.cc
+++ b/glom/box_withbuttons.cc
@@ -32,8 +32,8 @@ namespace Glom
 {
 
 Box_WithButtons::Box_WithButtons()
-: Gtk::Box(Gtk::ORIENTATION_VERTICAL),
-  m_Box_Buttons(Gtk::ORIENTATION_HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
+: Gtk::Box(Gtk::Orientation::VERTICAL),
+  m_Box_Buttons(Gtk::Orientation::HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
   m_Button_Cancel(_("_Cancel"))
 {
   //m_document = nullptr;
@@ -47,7 +47,7 @@ Box_WithButtons::Box_WithButtons()
 
 Box_WithButtons::Box_WithButtons(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& /* builder */)
 : Gtk::Box(cobject),
-  m_Box_Buttons(Gtk::ORIENTATION_HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
+  m_Box_Buttons(Gtk::Orientation::HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
   m_Button_Cancel(_("_Cancel"))
 {
   //m_document = nullptr;
@@ -61,7 +61,7 @@ Box_WithButtons::Box_WithButtons(BaseObjectType* cobject, const Glib::RefPtr<Gtk
 
 Box_WithButtons::Box_WithButtons(BaseObjectType* cobject)
 : Gtk::Box(cobject),
-  m_Box_Buttons(Gtk::ORIENTATION_HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
+  m_Box_Buttons(Gtk::Orientation::HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
   m_Button_Cancel(_("_Cancel"))
 {
 }
diff --git a/glom/dialog_existing_or_new.cc b/glom/dialog_existing_or_new.cc
index 8605ac5..9f2406a 100644
--- a/glom/dialog_existing_or_new.cc
+++ b/glom/dialog_existing_or_new.cc
@@ -129,7 +129,7 @@ Dialog_ExistingOrNew::Dialog_ExistingOrNew(BaseObjectType* cobject, const Glib::
     throw std::runtime_error("Glade file does not contain the notebook or the select button for 
ExistingOrNew dialog.");
 
   m_existing_model = Gtk::TreeStore::create(m_existing_columns);
-  m_existing_model->set_sort_column(m_existing_columns.m_col_time, Gtk::SORT_DESCENDING);
+  m_existing_model->set_sort_column(m_existing_columns.m_col_time, Gtk::SortType::DESCENDING);
   m_existing_view->set_model(m_existing_model);
 
 
@@ -452,14 +452,14 @@ void Dialog_ExistingOrNew::existing_icon_data_func(Gtk::CellRenderer* renderer,
   if(!pixbuf_renderer)
     throw std::logic_error("Renderer not a pixbuf renderer in existing_icon_data_func");
 
-  pixbuf_renderer->property_stock_size() = Gtk::ICON_SIZE_BUTTON;
+  pixbuf_renderer->property_stock_size() = static_cast<guint>(Gtk::BuiltinIconSize::BUTTON);
   pixbuf_renderer->property_icon_name() = "";
   pixbuf_renderer->property_pixbuf() = Glib::RefPtr<Gdk::Pixbuf>();
 
   if(iter == m_iter_existing_recent)
     pixbuf_renderer->property_icon_name() = "folder";
 
-  pixbuf_renderer->property_stock_size() = Gtk::ICON_SIZE_BUTTON;
+  pixbuf_renderer->property_stock_size() = static_cast<guint>(Gtk::BuiltinIconSize::BUTTON);
   pixbuf_renderer->property_icon_name() = std::string();
   pixbuf_renderer->property_pixbuf() = Glib::RefPtr<Gdk::Pixbuf>();
 
@@ -482,7 +482,7 @@ void Dialog_ExistingOrNew::existing_icon_data_func(Gtk::CellRenderer* renderer,
     if(m_existing_model->is_ancestor(m_iter_existing_recent, iter))
     {
       //Glib::RefPtr<Gtk::RecentInfo> info = (*iter)[m_existing_columns.m_col_recent_info];
-      //pixbuf_renderer->property_pixbuf() = (*info)->get_icon(Gtk::ICON_SIZE_BUTTON);
+      //pixbuf_renderer->property_pixbuf() = (*info)->get_icon(Gtk::BuiltinIconSize::BUTTON);
       pixbuf_renderer->property_icon_name() = Glib::ustring("glom");
     }
 #ifndef G_OS_WIN32
@@ -529,7 +529,7 @@ void Dialog_ExistingOrNew::new_icon_data_func(Gtk::CellRenderer* renderer, const
   if(!pixbuf_renderer)
     throw std::logic_error("Renderer not a pixbuf renderer in new_icon_data_func");
 
-  pixbuf_renderer->property_stock_size() = Gtk::ICON_SIZE_BUTTON;
+  pixbuf_renderer->property_stock_size() = static_cast<guint>(Gtk::BuiltinIconSize::BUTTON);
   pixbuf_renderer->property_icon_name() = "";
   pixbuf_renderer->property_pixbuf() = Glib::RefPtr<Gdk::Pixbuf>();
 
@@ -783,9 +783,9 @@ void Dialog_ExistingOrNew::on_select_clicked()
   if(action == Action::OPEN_URI && iter == m_iter_existing_other)
   {
     Gtk::FileChooserDialog dialog(*this, "Open Glom File");
-    dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-    dialog.add_button(_("_Open"), Gtk::RESPONSE_OK);
-    dialog.set_default_response(Gtk::RESPONSE_OK);
+    dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+    dialog.add_button(_("_Open"), Gtk::ResponseType::OK);
+    dialog.set_default_response(Gtk::ResponseType::OK);
 
     auto filter = Gtk::FileFilter::create();
     filter->add_mime_type("application/x-glom");
@@ -793,15 +793,15 @@ void Dialog_ExistingOrNew::on_select_clicked()
     dialog.add_filter(filter);
 
     const auto response_id = dialog.run();
-    if(response_id == Gtk::RESPONSE_OK)
+    if(response_id == Gtk::ResponseType::OK)
     {
       m_chosen_uri = dialog.get_uri();
-      response(Gtk::RESPONSE_ACCEPT);
+      response(Gtk::ResponseType::ACCEPT);
     }
   }
   else
   {
-    response(Gtk::RESPONSE_ACCEPT);
+    response(Gtk::ResponseType::ACCEPT);
   }
 }
 
diff --git a/glom/dialog_invalid_data.cc b/glom/dialog_invalid_data.cc
index 0fb7baf..04836c3 100644
--- a/glom/dialog_invalid_data.cc
+++ b/glom/dialog_invalid_data.cc
@@ -61,7 +61,7 @@ void Dialog_InvalidData::set_example_data(Field::glom_field_type glom_type)
   {
     case(Field::glom_field_type::DATE):
     {
-      Glib::Date date(31, Glib::Date::JANUARY, 2005);
+      Glib::Date date(31, Glib::Date::Month::JANUARY, 2005);
       example_text = Conversions::get_text_for_gda_value(glom_type, Gnome::Gda::Value(date));
       break;
     }
diff --git a/glom/filechooser_export.cc b/glom/filechooser_export.cc
index 1b7e340..a20bd28 100644
--- a/glom/filechooser_export.cc
+++ b/glom/filechooser_export.cc
@@ -29,18 +29,18 @@ namespace Glom
 {
 
 FileChooser_Export::FileChooser_Export()
-: Gtk::FileChooserDialog(_("Export to File"), Gtk::FILE_CHOOSER_ACTION_SAVE),
-  m_extra_widget(Gtk::ORIENTATION_HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
+: Gtk::FileChooserDialog(_("Export to File"), Gtk::FileChooserAction::SAVE),
+  m_extra_widget(Gtk::Orientation::HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
 #ifndef GLOM_ENABLE_CLIENT_ONLY
   m_button_format(_("Define Data _Format"), true /* use mnenomic */),
   m_dialog_layout(nullptr),
 #endif //GLOM_ENABLE_CLIENT_ONLY
   m_document(nullptr)
 {
-  add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  add_button(_("_Export"), Gtk::RESPONSE_OK);
+  add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  add_button(_("_Export"), Gtk::ResponseType::OK);
 
-  m_extra_widget.pack_start(m_button_format, Gtk::PACK_SHRINK);
+  m_extra_widget.pack_start(m_button_format, Gtk::PackOptions::PACK_SHRINK);
 
 #ifndef GLOM_ENABLE_CLIENT_ONLY
   m_button_format.signal_clicked().connect(
diff --git a/glom/frame_glom.cc b/glom/frame_glom.cc
index 8e7d926..c1e97a4 100644
--- a/glom/frame_glom.cc
+++ b/glom/frame_glom.cc
@@ -79,7 +79,7 @@ Frame_Glom::Frame_Glom(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 : PlaceHolder(cobject, builder),
   m_label_table_data_mode(nullptr),
   m_label_table_find_mode(nullptr),
-  m_box_records_count(Gtk::ORIENTATION_HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
+  m_box_records_count(Gtk::Orientation::HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
   m_button_find_all(_("Find All")),
   m_stack_mode(nullptr),
   m_box_tables(nullptr),
@@ -102,17 +102,17 @@ Frame_Glom::Frame_Glom(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 {
   m_label_table_data_mode = Gtk::manage(new Gtk::Label(_("No Table Selected")));
   m_label_table_data_mode->show();
-  m_notebook_data.set_action_widget(m_label_table_data_mode, Gtk::PACK_START);
+  m_notebook_data.set_action_widget(m_label_table_data_mode, Gtk::PackType::START);
 
   m_label_table_find_mode = Gtk::manage(new Gtk::Label(_("No Table Selected")));
   m_label_table_find_mode->show();
-  m_notebook_find.set_action_widget(m_label_table_find_mode, Gtk::PACK_START);
+  m_notebook_find.set_action_widget(m_label_table_find_mode, Gtk::PackType::START);
 
   //QuickFind widgets:
   //We don't use Glade for these, so it easier to modify them for the Maemo port.
-  m_box_quick_find = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 
Utils::to_utype(UiUtils::DefaultSpacings::SMALL)));
+  m_box_quick_find = Gtk::manage(new Gtk::Box(Gtk::Orientation::HORIZONTAL, 
Utils::to_utype(UiUtils::DefaultSpacings::SMALL)));
   auto label = Gtk::manage(new Gtk::Label(_("Quick _search:"), true));
-  m_box_quick_find->pack_start(*label, Gtk::PACK_SHRINK);
+  m_box_quick_find->pack_start(*label, Gtk::PackOptions::PACK_SHRINK);
 
   m_entry_quick_find = Gtk::manage(new Gtk::Entry());
 
@@ -121,11 +121,11 @@ Frame_Glom::Frame_Glom(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 
   label->set_mnemonic_widget(*m_entry_quick_find);
 
-  m_box_quick_find->pack_start(*m_entry_quick_find, Gtk::PACK_EXPAND_WIDGET);
+  m_box_quick_find->pack_start(*m_entry_quick_find, Gtk::PackOptions::PACK_EXPAND_WIDGET);
   m_button_quick_find = Gtk::manage(new Gtk::Button(_("_Find"), true));
   m_button_quick_find->signal_clicked().connect(
     sigc::mem_fun(*this, &Frame_Glom::on_button_quickfind) );
-  m_box_quick_find->pack_start(*m_button_quick_find, Gtk::PACK_SHRINK);
+  m_box_quick_find->pack_start(*m_button_quick_find, Gtk::PackOptions::PACK_SHRINK);
   m_box_quick_find->hide();
 
   PlaceHolder* placeholder_quickfind = nullptr;
@@ -135,13 +135,13 @@ Frame_Glom::Frame_Glom(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 
   //Add the Records/Found widgets at the right of the notebook tabs:
   m_box_records_count.pack_start(
-    *Gtk::manage(new Gtk::Label(_("Records:"))), Gtk::PACK_SHRINK);
-  m_box_records_count.pack_start(m_label_records_count, Gtk::PACK_SHRINK);
+    *Gtk::manage(new Gtk::Label(_("Records:"))), Gtk::PackOptions::PACK_SHRINK);
+  m_box_records_count.pack_start(m_label_records_count, Gtk::PackOptions::PACK_SHRINK);
   m_box_records_count.pack_start(
-    *Gtk::manage(new Gtk::Label(_("Found:"))), Gtk::PACK_SHRINK);
-  m_box_records_count.pack_start(m_label_found_count, Gtk::PACK_SHRINK);
-  m_box_records_count.pack_start(m_button_find_all, Gtk::PACK_SHRINK);
-  m_notebook_data.set_action_widget(&m_box_records_count, Gtk::PACK_END);
+    *Gtk::manage(new Gtk::Label(_("Found:"))), Gtk::PackOptions::PACK_SHRINK);
+  m_box_records_count.pack_start(m_label_found_count, Gtk::PackOptions::PACK_SHRINK);
+  m_box_records_count.pack_start(m_button_find_all, Gtk::PackOptions::PACK_SHRINK);
+  m_notebook_data.set_action_widget(&m_box_records_count, Gtk::PackType::END);
   m_button_find_all.signal_clicked().connect(
     sigc::mem_fun(*this, &Frame_Glom::on_button_find_all) );
 
@@ -318,7 +318,7 @@ void Frame_Glom::alert_no_table()
   {
     //TODO: Obviously this document should have been deleted when the database-creation was cancelled.
     /* Note that "canceled" is the correct US spelling. */
-    show_ok_dialog(_("No table"), _("This database has no tables yet."), *pWindowApp, Gtk::MESSAGE_WARNING);
+    show_ok_dialog(_("No table"), _("This database has no tables yet."), *pWindowApp, 
Gtk::MessageType::WARNING);
   }
 }
 
@@ -490,14 +490,14 @@ bool Frame_Glom::attempt_change_usermode_to_developer()
     if(document->get_opened_from_browse())
     {
       //TODO: Obviously this could be possible but it would require a network protocol and some work:
-      Gtk::MessageDialog dialog(UiUtils::bold_message(_("Developer mode not available.")), true, 
Gtk::MESSAGE_WARNING);
+      Gtk::MessageDialog dialog(UiUtils::bold_message(_("Developer mode not available.")), true, 
Gtk::MessageType::WARNING);
       dialog.set_secondary_text(_("Developer mode is not available because the file was opened over the 
network from a running Glom. Only the original file may be edited."));
       dialog.set_transient_for(*get_app_window());
       dialog.run();
     }
     else
     {
-      Gtk::MessageDialog dialog(UiUtils::bold_message(_("Developer mode not available")), true, 
Gtk::MESSAGE_WARNING);
+      Gtk::MessageDialog dialog(UiUtils::bold_message(_("Developer mode not available")), true, 
Gtk::MessageType::WARNING);
       dialog.set_secondary_text(_("Developer mode is not available. Check that you have sufficient database 
access rights and that the glom file is not read-only."));
       dialog.set_transient_for(*get_app_window());
       dialog.run();
@@ -505,13 +505,13 @@ bool Frame_Glom::attempt_change_usermode_to_developer()
   }
   else if(document->get_document_format_version() < Document::get_latest_known_document_format_version())
   {
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Saving in new document format")), true, 
Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_NONE);
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Saving in new document format")), true, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::NONE);
     dialog.set_secondary_text(_("The document was created by an earlier version of the application. Making 
changes to the document will mean that the document cannot be opened by some earlier versions of the 
application."));
     dialog.set_transient_for(*get_app_window());
-    dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-    dialog.add_button(_("Continue"), Gtk::RESPONSE_OK);
+    dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+    dialog.add_button(_("Continue"), Gtk::ResponseType::OK);
     const int response = dialog.run();
-    test = (response == Gtk::RESPONSE_OK);
+    test = (response == Gtk::ResponseType::OK);
   }
 
   return test;
@@ -545,7 +545,7 @@ void Frame_Glom::on_menu_file_export()
   Privileges table_privs = Privs::get_current_privs(m_table_name);
   if(!table_privs.m_view)
   {
-    show_ok_dialog(_("Export Not Allowed."), _("You do not have permission to view the data in this table, 
so you may not export the data."), *pWindowApp, Gtk::MESSAGE_ERROR);
+    show_ok_dialog(_("Export Not Allowed."), _("You do not have permission to view the data in this table, 
so you may not export the data."), *pWindowApp, Gtk::MessageType::ERROR);
     return;
   }
 
@@ -559,7 +559,7 @@ void Frame_Glom::on_menu_file_export()
   const int response = dialog.run();
   dialog.hide();
 
-  if((response == Gtk::RESPONSE_CANCEL) || (response == Gtk::RESPONSE_DELETE_EVENT))
+  if((response == Gtk::ResponseType::CANCEL) || (response == Gtk::ResponseType::DELETE_EVENT))
     return;
 
   std::string filepath = dialog.get_filename();
@@ -578,7 +578,7 @@ void Frame_Glom::on_menu_file_export()
   std::fstream the_stream(filepath, std::ios_base::out | std::ios_base::trunc);
   if(!the_stream)
   {
-    show_ok_dialog(_("Could Not Create File."), _("Glom could not create the specified file."), *pWindowApp, 
Gtk::MESSAGE_ERROR);
+    show_ok_dialog(_("Could Not Create File."), _("Glom could not create the specified file."), *pWindowApp, 
Gtk::MessageType::ERROR);
     return;
   }
 
@@ -589,13 +589,13 @@ void Frame_Glom::on_menu_file_import()
 {
   if(m_table_name.empty())
   {
-    UiUtils::show_ok_dialog(_("No Table"), _("There is no table in to which data could be imported."), 
*get_app_window(), Gtk::MESSAGE_ERROR);
+    UiUtils::show_ok_dialog(_("No Table"), _("There is no table in to which data could be imported."), 
*get_app_window(), Gtk::MessageType::ERROR);
   }
   else
   {
-    Gtk::FileChooserDialog file_chooser(*get_app_window(), _("Open CSV Document"), 
Gtk::FILE_CHOOSER_ACTION_OPEN);
-    file_chooser.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-    file_chooser.add_button(_("_Open"), Gtk::RESPONSE_ACCEPT);
+    Gtk::FileChooserDialog file_chooser(*get_app_window(), _("Open CSV Document"), 
Gtk::FileChooserAction::OPEN);
+    file_chooser.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+    file_chooser.add_button(_("_Open"), Gtk::ResponseType::ACCEPT);
     auto filter_csv = Gtk::FileFilter::create();
     filter_csv->set_name(_("CSV files"));
     filter_csv->add_mime_type("text/csv");
@@ -605,7 +605,7 @@ void Frame_Glom::on_menu_file_import()
     filter_any->add_pattern("*");
     file_chooser.add_filter(filter_any);
 
-    if(file_chooser.run() == Gtk::RESPONSE_ACCEPT)
+    if(file_chooser.run() == Gtk::ResponseType::ACCEPT)
     {
       file_chooser.hide();
 
@@ -617,13 +617,13 @@ void Frame_Glom::on_menu_file_import()
       add_view(dialog);
 
       dialog->import(file_chooser.get_uri(), m_table_name);
-      while(Glom::UiUtils::dialog_run_with_help(dialog) == Gtk::RESPONSE_ACCEPT)
+      while(Glom::UiUtils::dialog_run_with_help(dialog) == Gtk::ResponseType::ACCEPT)
       {
         dialog->hide();
 
         Dialog_Import_CSV_Progress* progress_dialog = nullptr;
         Glom::Utils::get_glade_widget_derived_with_warning(progress_dialog);
-        int response = Gtk::RESPONSE_OK;
+        int response = static_cast<int>(Gtk::ResponseType::OK);
         if(!progress_dialog)
         {
           std::cerr << G_STRFUNC << ": progress_dialog was null.\n";
@@ -645,7 +645,7 @@ void Frame_Glom::on_menu_file_import()
 
           // Re-show chooser dialog when an error occured or when the user
           // cancelled.
-          if(response == Gtk::RESPONSE_OK)
+          if(response == Gtk::ResponseType::OK)
             break;
         }
       }
@@ -678,15 +678,15 @@ bool Frame_Glom::attempt_toggle_shared(bool shared)
   //TODO: Warn that this will be saved as the default if doing this in developer mode?
   if(shared)
   {
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Share on the network")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE);
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Share on the network")), true, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::NONE);
     dialog.set_secondary_text(_("This will allow other users on the network to use this database."));
     dialog.set_transient_for(*get_app_window());
-    dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-    dialog.add_button(_("_Share"), Gtk::RESPONSE_OK);
+    dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+    dialog.add_button(_("_Share"), Gtk::ResponseType::OK);
 
     const auto response = dialog.run();
     dialog.hide();
-    if(response == Gtk::RESPONSE_OK)
+    if(response == Gtk::ResponseType::OK)
     {
       shared = true;
 
@@ -784,15 +784,15 @@ bool Frame_Glom::attempt_toggle_shared(bool shared)
   else //not shared:
   {
     //TODO: Warn about connected users if possible.
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Stop sharing on the network")), true, 
Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_NONE);
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Stop sharing on the network")), true, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::NONE);
     dialog.set_secondary_text(_("This will prevent other users on the network from using this database."));
     dialog.set_transient_for(*get_app_window());
-    dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-    dialog.add_button(_("_Stop Sharing"), Gtk::RESPONSE_OK);
+    dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+    dialog.add_button(_("_Stop Sharing"), Gtk::ResponseType::OK);
 
     const auto response = dialog.run();
     dialog.hide();
-    if(response == Gtk::RESPONSE_OK)
+    if(response == Gtk::ResponseType::OK)
     {
       shared = false;
 
@@ -989,7 +989,7 @@ void Frame_Glom::on_dialog_add_related_table_response(int response)
 
   m_dialog_addrelatedtable->hide();
 
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     bool stop_trying = false;
 
@@ -1002,15 +1002,15 @@ void Frame_Glom::on_dialog_add_related_table_response(int response)
     //but I don't think we can stop the response from being returned. murrayc
     if(DbUtils::get_table_exists_in_database(table_name))
     {
-      Frame_Glom::show_ok_dialog(_("Table Exists Already"), _("A table with this name already exists in the 
database. Please choose a different table name."), *parent, Gtk::MESSAGE_ERROR);
+      Frame_Glom::show_ok_dialog(_("Table Exists Already"), _("A table with this name already exists in the 
database. Please choose a different table name."), *parent, Gtk::MessageType::ERROR);
     }
     else if(get_relationship_exists(m_table_name, relationship_name))
     {
-      Frame_Glom::show_ok_dialog(_("Relationship Exists Already"), _("A relationship with this name already 
exists for this table. Please choose a different relationship name."), *parent, Gtk::MESSAGE_ERROR);
+      Frame_Glom::show_ok_dialog(_("Relationship Exists Already"), _("A relationship with this name already 
exists for this table. Please choose a different relationship name."), *parent, Gtk::MessageType::ERROR);
     }
     else if(table_name.empty() || relationship_name.empty())
     {
-      Frame_Glom::show_ok_dialog(_("More information needed"), _("You must specify a field, a table name, 
and a relationship name."), *parent, Gtk::MESSAGE_ERROR);
+      Frame_Glom::show_ok_dialog(_("More information needed"), _("You must specify a field, a table name, 
and a relationship name."), *parent, Gtk::MessageType::ERROR);
     }
     else
     {
@@ -1063,7 +1063,7 @@ void Frame_Glom::on_dialog_add_related_table_response(int response)
       on_dialog_tables_hide(); //Update the menu.
 
       if(parent)
-        show_ok_dialog(_("Related Table Created"), _("The new related table has been created."), *parent, 
Gtk::MESSAGE_INFO);
+        show_ok_dialog(_("Related Table Created"), _("The new related table has been created."), *parent, 
Gtk::MessageType::INFO);
     }
   }
 }
@@ -1190,7 +1190,7 @@ void Frame_Glom::on_notebook_find_criteria(const Gnome::Gda::SqlExpr& where_clau
   {
     const Glib::ustring message = _("You have not entered any find criteria. Try entering information in the 
fields.");
 
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("No Find Criteria")), true, Gtk::MESSAGE_WARNING );
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("No Find Criteria")), true, Gtk::MessageType::WARNING 
);
     dialog.set_secondary_text(message);
     dialog.set_transient_for(*app);
     dialog.run();
@@ -1773,7 +1773,7 @@ bool Frame_Glom::handle_connection_initialize_errors(ConnectionPool::InitErrors
     message = _("There was an error when attempting to start the database server.");
   }
 
-  UiUtils::show_ok_dialog(title, message, *get_app_window(), Gtk::MESSAGE_ERROR);
+  UiUtils::show_ok_dialog(title, message, *get_app_window(), Gtk::MessageType::ERROR);
 
   return false;
 }
@@ -1802,14 +1802,14 @@ bool Frame_Glom::connection_request_initial_password(Glib::ustring& user, Glib::
   add_view(dialog);
 
 
-  int response = Gtk::RESPONSE_OK;
+  int response = static_cast<int>(Gtk::ResponseType::OK);
   bool keep_trying = true;
   while(keep_trying)
   {
     response = UiUtils::dialog_run_with_help(dialog);
 
     //Check the password is acceptable:
-    if(response == Gtk::RESPONSE_OK)
+    if(response == Gtk::ResponseType::OK)
     {
       const auto password_ok = dialog->check_password();
       if(password_ok)
@@ -1832,7 +1832,7 @@ bool Frame_Glom::connection_request_initial_password(Glib::ustring& user, Glib::
   delete dialog;
   dialog = nullptr;
 
-  return (response == Gtk::RESPONSE_OK);
+  return (response == Gtk::ResponseType::OK);
 }
 
 void Frame_Glom::instantiate_dialog_connection()
@@ -1919,7 +1919,7 @@ bool Frame_Glom::connection_request_password_and_choose_new_database_name()
         m_dialog_connection->hide();
         password_requested = true; //So we can ask again if it didn't work.
 
-        if(response == Gtk::RESPONSE_OK)
+        if(response == Gtk::ResponseType::OK)
         {
           // We are not self-hosting, but we also call initialize() for
           // consistency (the backend will ignore it anyway).
@@ -1983,7 +1983,7 @@ bool Frame_Glom::connection_request_password_and_choose_new_database_name()
     {
       //This can only happen if we couldn't connect to the server at all.
       //Warn the user, and let him try again:
-      UiUtils::show_ok_dialog(_("Connection Failed"), _("Glom could not connect to the database server. 
Maybe you entered an incorrect user name or password, or maybe the postgres database server is not 
running."), *(get_app_window()), Gtk::MESSAGE_ERROR); //TODO: Add help button.
+      UiUtils::show_ok_dialog(_("Connection Failed"), _("Glom could not connect to the database server. 
Maybe you entered an incorrect user name or password, or maybe the postgres database server is not 
running."), *(get_app_window()), Gtk::MessageType::ERROR); //TODO: Add help button.
 
       //If we didn't ask the user for a password then there's nothing for us to try again.
       //Otherwise let the while() loop try again.
@@ -2052,7 +2052,7 @@ bool Frame_Glom::handle_request_password_connection_error(bool asked_for_passwor
   if(asked_for_password && ex.get_failure_type() == ExceptionConnection::failure_type::NO_SERVER)
   {
     //Warn the user, and let him try again:
-    UiUtils::show_ok_dialog(_("Connection Failed"), _("Glom could not connect to the database server. Maybe 
you entered an incorrect user name or password, or maybe the postgres database server is not running."), 
*(get_app_window()), Gtk::MESSAGE_ERROR); //TODO: Add help button.
+    UiUtils::show_ok_dialog(_("Connection Failed"), _("Glom could not connect to the database server. Maybe 
you entered an incorrect user name or password, or maybe the postgres database server is not running."), 
*(get_app_window()), Gtk::MessageType::ERROR); //TODO: Add help button.
     return true;
   }
   else if(ex.get_failure_type() == ExceptionConnection::failure_type::NO_DATABASE)
@@ -2138,7 +2138,7 @@ bool Frame_Glom::connection_request_password_and_attempt(bool& database_not_foun
   while(true) //Loop until a return
   {
     //Only show the dialog if we don't know the correct username/password yet:
-    int response = Gtk::RESPONSE_OK;
+    int response = static_cast<int>(Gtk::ResponseType::OK);
 
     if(m_dialog_connection)
     {
@@ -2147,7 +2147,7 @@ bool Frame_Glom::connection_request_password_and_attempt(bool& database_not_foun
     }
 
     //Try to use the entered username/password:
-    if(response == Gtk::RESPONSE_OK)
+    if(response == Gtk::ResponseType::OK)
     {
       std::shared_ptr<SharedConnection> sharedconnection;
 
diff --git a/glom/frame_glom.h b/glom/frame_glom.h
index 94e6d67..38de73e 100644
--- a/glom/frame_glom.h
+++ b/glom/frame_glom.h
@@ -148,7 +148,7 @@ public:
   enumModes m_Mode;
   enumModes m_Mode_Previous; // see comments in set_mode_widget().
 
-  static void show_ok_dialog(const Glib::ustring& title, const Glib::ustring& message, Gtk::Window& parent, 
Gtk::MessageType message_type = Gtk::MESSAGE_INFO);
+  static void show_ok_dialog(const Glib::ustring& title, const Glib::ustring& message, Gtk::Window& parent, 
Gtk::MessageType message_type = Gtk::MessageType::INFO);
 
   /** Show the dialog to request the password, and check whether it works.
    *
diff --git a/glom/glom_create_from_example.cc b/glom/glom_create_from_example.cc
index 6146b9f..6b917e7 100644
--- a/glom/glom_create_from_example.cc
+++ b/glom/glom_create_from_example.cc
@@ -161,7 +161,7 @@ static bool delete_directory(const Glib::RefPtr<Gio::File>& directory)
   {
     auto child = directory->get_child(info->get_name());
     bool removed_child = false;
-    if(child->query_file_type() == Gio::FILE_TYPE_DIRECTORY)
+    if(child->query_file_type() == Gio::FileType::DIRECTORY)
       removed_child = delete_directory(child);
     else
       removed_child = child->remove();
@@ -300,7 +300,7 @@ int main(int argc, char* argv[])
     }
 
     const auto file_type = file->query_file_type();
-    if(file_type == Gio::FILE_TYPE_DIRECTORY)
+    if(file_type == Gio::FileType::DIRECTORY)
     {
       std::cerr << _("Glom: The file path is a directory instead of a file.") << std::endl;
       std::cerr << std::endl << context.get_help() << std::endl;
@@ -341,7 +341,7 @@ int main(int argc, char* argv[])
     }
 
     const auto file_type = file->query_file_type();
-    if(file_type != Gio::FILE_TYPE_DIRECTORY)
+    if(file_type != Gio::FileType::DIRECTORY)
     {
       std::cerr << _("Glom: The output path is not a directory.") << std::endl;
       std::cerr << std::endl << context.get_help() << std::endl;
diff --git a/glom/glom_export_po.cc b/glom/glom_export_po.cc
index e4b73ee..38fd7f3 100644
--- a/glom/glom_export_po.cc
+++ b/glom/glom_export_po.cc
@@ -167,7 +167,7 @@ int main(int argc, char* argv[])
   }
 
   const auto file_type = file_input->query_file_type();
-  if(file_type == Gio::FILE_TYPE_DIRECTORY)
+  if(file_type == Gio::FileType::DIRECTORY)
   {
     std::cerr << _("Glom: The file path is a directory instead of a file.") << std::endl;
     std::cerr << std::endl << context.get_help() << std::endl;
diff --git a/glom/glom_export_po_all.cc b/glom/glom_export_po_all.cc
index 5d9bff8..50b7984 100644
--- a/glom/glom_export_po_all.cc
+++ b/glom/glom_export_po_all.cc
@@ -148,7 +148,7 @@ int main(int argc, char* argv[])
   }
 
   Gio::FileType file_type = file_input->query_file_type();
-  if(file_type == Gio::FILE_TYPE_DIRECTORY)
+  if(file_type == Gio::FileType::DIRECTORY)
   {
     std::cerr << _("The Glom file path is a directory instead of a file.") << std::endl;
     std::cerr << std::endl << context.get_help() << std::endl;
@@ -177,7 +177,7 @@ int main(int argc, char* argv[])
   }
 
   file_type = file_output->query_file_type();
-  if(file_type != Gio::FILE_TYPE_DIRECTORY)
+  if(file_type != Gio::FileType::DIRECTORY)
   {
     std::cerr << _("Glom: The output file path is not a directory.") << std::endl;
     std::cerr << std::endl << context.get_help() << std::endl;
diff --git a/glom/glom_import_po_all.cc b/glom/glom_import_po_all.cc
index 6dd20a5..d79c06b 100644
--- a/glom/glom_import_po_all.cc
+++ b/glom/glom_import_po_all.cc
@@ -150,7 +150,7 @@ int main(int argc, char* argv[])
   }
 
   Gio::FileType file_type = file_input->query_file_type();
-  if(file_type == Gio::FILE_TYPE_DIRECTORY)
+  if(file_type == Gio::FileType::DIRECTORY)
   {
     std::cerr << _("The Glom file path is a directory instead of a file.") << std::endl;
     std::cerr << std::endl << context.get_help() << std::endl;
@@ -169,7 +169,7 @@ int main(int argc, char* argv[])
   auto file_output = Gio::File::create_for_commandline_arg(group.m_arg_filepath_po_input);
 
   file_type = file_output->query_file_type();
-  if(file_type != Gio::FILE_TYPE_DIRECTORY)
+  if(file_type != Gio::FileType::DIRECTORY)
   {
     std::cerr << _("Glom: The po files directory path is not a directory.") << std::endl;
     std::cerr << std::endl << context.get_help() << std::endl;
@@ -196,7 +196,7 @@ int main(int argc, char* argv[])
   while( (info = enumerator->next_file()) )
   {
     auto child = file_output->get_child(info->get_name());
-    if(child->query_file_type() == Gio::FILE_TYPE_DIRECTORY)
+    if(child->query_file_type() == Gio::FileType::DIRECTORY)
       continue;
 
     //Check that it has the .po file extension:
diff --git a/glom/import_csv/dialog_import_csv.cc b/glom/import_csv/dialog_import_csv.cc
index 6ae9287..66ae26e 100644
--- a/glom/import_csv/dialog_import_csv.cc
+++ b/glom/import_csv/dialog_import_csv.cc
@@ -216,7 +216,7 @@ void Dialog_Import_CSV::import(const Glib::ustring& uri, const Glib::ustring& in
     // Create the sorted version of this model,
     // so the user sees the fields in alphabetical order:
     m_field_model_sorted = Gtk::TreeModelSort::create(m_field_model);
-    m_field_model_sorted->set_sort_column(m_field_columns.m_col_field_name, Gtk::SORT_ASCENDING);
+    m_field_model_sorted->set_sort_column(m_field_columns.m_col_field_name, Gtk::SortType::ASCENDING);
 
     m_file_uri = uri;
     m_parser->set_file_and_start_parsing(uri);
@@ -272,7 +272,7 @@ void Dialog_Import_CSV::clear()
 void Dialog_Import_CSV::show_error_dialog(const Glib::ustring&, const Glib::ustring& secondary)
 {
   UiUtils::show_ok_dialog(_("Error Importing CSV File"),
-     secondary, *this, Gtk::MESSAGE_ERROR);
+     secondary, *this, Gtk::MessageType::ERROR);
 }
 
 void Dialog_Import_CSV::encoding_data_func(const Gtk::TreeModel::const_iterator& iter, 
Gtk::CellRendererText& renderer)
@@ -531,7 +531,7 @@ std::unique_ptr<Gtk::TreeViewColumn> Dialog_Import_CSV::create_sample_column(con
   auto cell = create_sample_cell(index);
   col->pack_start(*Gtk::manage(cell.release()), true);
   col->set_cell_data_func(*cell, sigc::bind(sigc::mem_fun(*this, &Dialog_Import_CSV::field_data_func), 
index));
-  col->set_sizing(Gtk::TREE_VIEW_COLUMN_AUTOSIZE);
+  col->set_sizing(Gtk::TreeViewColumnSizing::AUTOSIZE);
   return col;
 }
 
@@ -681,7 +681,7 @@ void Dialog_Import_CSV::validate_primary_key()
    || get_parser_state() == CsvParser::State::ENCODING_ERROR)
   {
     m_error_label->hide();
-    set_response_sensitive(Gtk::RESPONSE_ACCEPT, false);
+    set_response_sensitive(Gtk::ResponseType::ACCEPT, false);
   }
   else
   {
@@ -718,7 +718,7 @@ void Dialog_Import_CSV::validate_primary_key()
       primary_key_selected = true;
     }
 
-    set_response_sensitive(Gtk::RESPONSE_ACCEPT, primary_key_selected);
+    set_response_sensitive(Gtk::ResponseType::ACCEPT, primary_key_selected);
     if(primary_key_selected)
       m_error_label->hide();
     else
diff --git a/glom/import_csv/dialog_import_csv_progress.cc b/glom/import_csv/dialog_import_csv_progress.cc
index 69fa1c5..be40fc3 100644
--- a/glom/import_csv/dialog_import_csv_progress.cc
+++ b/glom/import_csv/dialog_import_csv_progress.cc
@@ -96,8 +96,8 @@ void Dialog_Import_CSV_Progress::import(Dialog_Import_CSV& data_source)
     break;
   }
 
-  set_response_sensitive(Gtk::RESPONSE_CANCEL, true);
-  set_response_sensitive(Gtk::RESPONSE_OK, false);
+  set_response_sensitive(Gtk::ResponseType::CANCEL, true);
+  set_response_sensitive(Gtk::ResponseType::OK, false);
 }
 
 void Dialog_Import_CSV_Progress::clear()
@@ -130,7 +130,7 @@ void Dialog_Import_CSV_Progress::on_data_source_state_changed()
   {
   case CsvParser::State::ENCODING_ERROR:
     // Cancel on error
-    response(Gtk::RESPONSE_CANCEL);
+    response(Gtk::ResponseType::CANCEL);
     break;
   case CsvParser::State::PARSED:
     // Begin importing when fully parsed
@@ -171,8 +171,8 @@ bool Dialog_Import_CSV_Progress::on_idle_import()
   {
     // Don't do the response immediately, so the user has a chance to read the
     // warnings and errors, if any.
-    set_response_sensitive(Gtk::RESPONSE_CANCEL, false);
-    set_response_sensitive(Gtk::RESPONSE_OK, true);
+    set_response_sensitive(Gtk::ResponseType::CANCEL, false);
+    set_response_sensitive(Gtk::ResponseType::OK, true);
     add_text(_("Import complete\n"));
     return false;
   }
diff --git a/glom/libglom/connectionpool_backends/mysql.cc b/glom/libglom/connectionpool_backends/mysql.cc
index bb34490..68d5168 100644
--- a/glom/libglom/connectionpool_backends/mysql.cc
+++ b/glom/libglom/connectionpool_backends/mysql.cc
@@ -774,7 +774,7 @@ bool MySQL::create_text_file(const std::string& file_uri, const std::string& con
     {
       if(current_user_only)
       {
-        stream = file->replace(std::string() /* etag */, false /* make_backup */, Gio::FILE_CREATE_PRIVATE); 
//Instead of append_to().
+        stream = file->replace(std::string() /* etag */, false /* make_backup */, 
Gio::FileCreateFlags::PRIVATE); //Instead of append_to().
       }
       else
       {
@@ -783,11 +783,11 @@ bool MySQL::create_text_file(const std::string& file_uri, const std::string& con
     }
     else
     {
-      //By default files created are generally readable by everyone, but if we pass FILE_CREATE_PRIVATE in 
flags the file will be made readable only to the current user, to the level that is supported on the target 
filesystem.
+      //By default files created are generally readable by everyone, but if we pass FileCreateFlags::PRIVATE 
in flags the file will be made readable only to the current user, to the level that is supported on the 
target filesystem.
       if(current_user_only)
       {
       //TODO: Do we want to specify 0660 exactly? (means "this user and his group can read and write this 
non-executable file".)
-        stream = file->create_file(Gio::FILE_CREATE_PRIVATE);
+        stream = file->create_file(Gio::FileCreateFlags::PRIVATE);
       }
       else
       {
diff --git a/glom/libglom/connectionpool_backends/postgres.cc 
b/glom/libglom/connectionpool_backends/postgres.cc
index 7c63799..a4a095d 100644
--- a/glom/libglom/connectionpool_backends/postgres.cc
+++ b/glom/libglom/connectionpool_backends/postgres.cc
@@ -878,7 +878,7 @@ bool Postgres::create_text_file(const std::string& file_uri, const std::string&
     {
       if(current_user_only)
       {
-        stream = file->replace(std::string() /* etag */, false /* make_backup */, Gio::FILE_CREATE_PRIVATE); 
//Instead of append_to().
+        stream = file->replace(std::string() /* etag */, false /* make_backup */, 
Gio::FileCreateFlags::PRIVATE); //Instead of append_to().
       }
       else
       {
@@ -887,11 +887,11 @@ bool Postgres::create_text_file(const std::string& file_uri, const std::string&
     }
     else
     {
-      //By default files created are generally readable by everyone, but if we pass FILE_CREATE_PRIVATE in 
flags the file will be made readable only to the current user, to the level that is supported on the target 
filesystem.
+      //By default files created are generally readable by everyone, but if we pass FileCreateFlags::PRIVATE 
in flags the file will be made readable only to the current user, to the level that is supported on the 
target filesystem.
       if(current_user_only)
       {
       //TODO: Do we want to specify 0660 exactly? (means "this user and his group can read and write this 
non-executable file".)
-        stream = file->create_file(Gio::FILE_CREATE_PRIVATE);
+        stream = file->create_file(Gio::FileCreateFlags::PRIVATE);
       }
       else
       {
diff --git a/glom/libglom/connectionpool_backends/sqlite.cc b/glom/libglom/connectionpool_backends/sqlite.cc
index b51ecb6..eccce9f 100644
--- a/glom/libglom/connectionpool_backends/sqlite.cc
+++ b/glom/libglom/connectionpool_backends/sqlite.cc
@@ -62,7 +62,7 @@ Glib::RefPtr<Gnome::Gda::Connection> Sqlite::connect(const Glib::ustring& databa
   }
   else
   {
-    if(db_file->query_file_type() != Gio::FILE_TYPE_REGULAR)
+    if(db_file->query_file_type() != Gio::FileType::REGULAR)
     {
       std::cerr << G_STRFUNC << ": The db file is not a regular file at path: " << db_file->get_uri() << 
std::endl;
     }
@@ -96,7 +96,7 @@ Glib::RefPtr<Gnome::Gda::Connection> Sqlite::connect(const Glib::ustring& databa
     // If the database directory is valid, then only the database (file) is
     // missing, otherwise we pretend the "server" is not running.
     if(Glom::FileUtils::file_exists(db_dir) &&
-      (db_dir->query_file_type() == Gio::FILE_TYPE_DIRECTORY))
+      (db_dir->query_file_type() == Gio::FileType::DIRECTORY))
     {
       throw ExceptionConnection(ExceptionConnection::failure_type::NO_DATABASE);
     }
diff --git a/glom/libglom/data_structure/glomconversions.cc b/glom/libglom/data_structure/glomconversions.cc
index e834919..c13429c 100644
--- a/glom/libglom/data_structure/glomconversions.cc
+++ b/glom/libglom/data_structure/glomconversions.cc
@@ -428,7 +428,7 @@ Glib::ustring Conversions::get_text_for_gda_value(Field::glom_field_type glom_ty
       //tm the_c_time = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
       the_c_time.tm_year = gda_date.get_year() - 1900; //C years start are the AD year - 1900. So, 01 is 
1901.
-      the_c_time.tm_mon = gda_date.get_month() - 1; //C months start at 0.
+      the_c_time.tm_mon = static_cast<int>(gda_date.get_month()) - 1; //C months start at 0.
       the_c_time.tm_mday = gda_date.get_day(); //starts at 1
     }
     else
@@ -797,8 +797,8 @@ tm Conversions::parse_date(const Glib::ustring& text, const std::locale& locale,
       if(date.get_year() != Glib::Date::BAD_YEAR)
         the_c_time.tm_year = date.get_year() - 1900; //C years start are the AD year - 1900. So, 01 is 1901.
 
-      if(date.get_month() != Glib::Date::BAD_MONTH)
-        the_c_time.tm_mon = date.get_month() - 1; //C months start at 0.
+      if(date.get_month() != Glib::Date::Month::BAD_MONTH)
+        the_c_time.tm_mon = static_cast<int>(date.get_month()) - 1; //C months start at 0.
 
       if(date.get_day() != Glib::Date::BAD_DAY)
         the_c_time.tm_mday = date.get_day(); //starts at 1
diff --git a/glom/libglom/db_utils.cc b/glom/libglom/db_utils.cc
index f5c95d1..52106b5 100644
--- a/glom/libglom/db_utils.cc
+++ b/glom/libglom/db_utils.cc
@@ -781,7 +781,7 @@ void handle_error(const Glib::Exception& ex)
   std::cerr << G_STRFUNC << ": Internal Error (handle_error()): exception type=" << typeid(ex).name() << ", 
ex.what()=" << ex.what() << std::endl;
 
   //TODO_Moved:
-  //Gtk::MessageDialog dialog(UiUtils::bold_message(_("Internal error")), true, Gtk::MESSAGE_WARNING );
+  //Gtk::MessageDialog dialog(UiUtils::bold_message(_("Internal error")), true, Gtk::MessageType::WARNING );
   //dialog.set_secondary_text(ex.what());
   //TODO: dialog.set_transient_for(*get_appwindow());
   //dialog.run();
@@ -792,7 +792,7 @@ void handle_error(const std::exception& ex)
   std::cerr << G_STRFUNC << ": Internal Error (handle_error()): exception type=" << typeid(ex).name() << ", 
ex.what()=" << ex.what() << std::endl;
 
  //TODO_Moved:
-  //Gtk::MessageDialog dialog(UiUtils::bold_message(_("Internal error")), true, Gtk::MESSAGE_WARNING );
+  //Gtk::MessageDialog dialog(UiUtils::bold_message(_("Internal error")), true, Gtk::MessageType::WARNING );
   //dialog.set_secondary_text(ex.what());
   //TODO: dialog.set_transient_for(*get_appwindow());
   //dialog.run();
@@ -1334,7 +1334,7 @@ bool add_column(const Glib::ustring& table_name, const std::shared_ptr<const Fie
   catch(const Glib::Error& ex)
   {
     handle_error(ex);
-//    Gtk::MessageDialog window(*parent_window, UiUtils::bold_message(ex.what()), true, Gtk::MESSAGE_ERROR, 
Gtk::BUTTONS_OK);
+//    Gtk::MessageDialog window(*parent_window, UiUtils::bold_message(ex.what()), true, 
Gtk::MessageType::ERROR, Gtk::ButtonsType::OK);
 //    window.run();
     return false;
   }
@@ -1353,7 +1353,7 @@ bool drop_column(const Glib::ustring& table_name, const Glib::ustring& field_nam
   catch(const Glib::Error& ex)
   {
     handle_error(ex);
-//    Gtk::MessageDialog window(*parent_window, UiUtils::bold_message(ex.what()), true, Gtk::MESSAGE_ERROR, 
Gtk::BUTTONS_OK);
+//    Gtk::MessageDialog window(*parent_window, UiUtils::bold_message(ex.what()), true, 
Gtk::MessageType::ERROR, Gtk::ButtonsType::OK);
 //    window.run();
     return false;
   }
diff --git a/glom/libglom/document/bakery/document.cc b/glom/libglom/document/bakery/document.cc
index d39aee6..33d78ae 100644
--- a/glom/libglom/document/bakery/document.cc
+++ b/glom/libglom/document/bakery/document.cc
@@ -305,7 +305,7 @@ bool Document::write_to_disk()
         //Otherwise something unexpected happened.
         if(ex.code() == Gio::Error::EXISTS)
         {
-          if(parent->query_file_type() != Gio::FILE_TYPE_DIRECTORY)
+          if(parent->query_file_type() != Gio::FileType::DIRECTORY)
           {
             std::cerr << G_STRFUNC << ": This part of the URI is not a directory: " << parent->get_uri() <<  
std::endl;
             std::cerr << G_STRFUNC << ":   using m_file_uri = " << m_file_uri << std::endl;
diff --git a/glom/libglom/file_utils.cc b/glom/libglom/file_utils.cc
index 5f025a2..dc1f740 100644
--- a/glom/libglom/file_utils.cc
+++ b/glom/libglom/file_utils.cc
@@ -60,7 +60,7 @@ bool file_exists(const Glib::RefPtr<Gio::File>& file)
 bool delete_file(const std::string& uri)
 {
   auto file = Gio::File::create_for_uri(uri);
-  if(file->query_file_type() == Gio::FILE_TYPE_DIRECTORY)
+  if(file->query_file_type() == Gio::FileType::DIRECTORY)
   {
     std::cerr << G_STRFUNC << ": The file is a directory.\n";
     return false;
diff --git a/glom/libglom/spawn_with_feedback.cc b/glom/libglom/spawn_with_feedback.cc
index 5adf566..2af05db 100644
--- a/glom/libglom/spawn_with_feedback.cc
+++ b/glom/libglom/spawn_with_feedback.cc
@@ -102,7 +102,7 @@ private:
 #else // G_OS_WIN32
   bool on_io(Glib::IOCondition cond, Glib::RefPtr<Glib::IOChannel> channel, std::string& result)
   {
-    if(cond != Glib::IO_IN)
+    if(cond != Glib::IOCondition::IN)
     {
       // Perhaps the pipe was closed or something. Ignore & Disconnect. If the
       // this was because the child exited, then the on_child_watch() callback
@@ -114,7 +114,7 @@ private:
       char buffer[1024 + 1];
       gsize bytes_read;
 
-      Glib::IOStatus status = Glib::IO_STATUS_NORMAL;
+      auto status = Glib::IOStatus::NORMAL;
       try
       {
         status = channel->read(buffer, 1024, bytes_read);
@@ -128,19 +128,19 @@ private:
       buffer[bytes_read] = '\0';
       result += buffer;
 
-      return status == Glib::IO_STATUS_NORMAL || status == Glib::IO_STATUS_AGAIN;
+      return status == Glib::IOStatus::NORMAL || status == Glib::IOStatus::AGAIN;
     }
   }
 
   void redirect_to_string(int fd, std::string& string)
   {
     auto channel = Glib::IOChannel::create_from_fd(fd);
-    channel->set_flags(Glib::IO_FLAG_NONBLOCK);
+    channel->set_flags(Glib::IOFlags::NONBLOCK);
 
     channel->set_encoding("");
     channel->set_buffered(false);
 
-    Glib::signal_io().connect(sigc::bind(sigc::mem_fun(*this, &SpawnInfo::on_io), channel, 
std::ref(string)), channel, Glib::IO_IN);
+    Glib::signal_io().connect(sigc::bind(sigc::mem_fun(*this, &SpawnInfo::on_io), channel, 
std::ref(string)), channel, Glib::IOCondition::IN);
   }
 #endif // !G_OS_WIN32
 
@@ -187,7 +187,7 @@ public:
       std::vector<std::string> arguments = Glib::shell_parse_argv(command_line);
       int child_stdout = 0;
       int child_stderr = 0;
-      Glib::spawn_async_with_pipes(Glib::get_current_dir(), arguments, Glib::SPAWN_DO_NOT_REAP_CHILD, 
sigc::slot<void()>(), &pid, nullptr, (redirect & REDIRECT_STDOUT) ? &child_stdout : nullptr, (redirect & 
REDIRECT_STDERR) ? &child_stderr : nullptr);
+      Glib::spawn_async_with_pipes(Glib::get_current_dir(), arguments, Glib::SpawnFlags::DO_NOT_REAP_CHILD, 
sigc::slot<void()>(), &pid, nullptr, (redirect & REDIRECT_STDOUT) ? &child_stdout : nullptr, (redirect & 
REDIRECT_STDERR) ? &child_stderr : nullptr);
       if(redirect & REDIRECT_STDOUT)
         redirect_to_string(child_stdout, stdout_text);
       if(redirect & REDIRECT_STDERR)
@@ -607,15 +607,15 @@ bool execute_command_line_and_wait_until_second_command_returns_success(const st
   else
   {
     // The user either cancelled, or the first command failed, or exited prematurely
-    if(true) //response == Gtk::RESPONSE_REJECT)
+    if(true) //response == Gtk::ResponseType::REJECT)
     {
       /* TODO: Allow the caller to show a dialog?
       // Command failed
       std::shared_ptr<Gtk::MessageDialog> error_dialog;
       if(parent_window)
-        error_dialog.reset(new Gtk::MessageDialog(*parent_window, "Child command failed", false, 
Gtk::MESSAGE_ERROR));
+        error_dialog.reset(new Gtk::MessageDialog(*parent_window, "Child command failed", false, 
Gtk::MessageType::ERROR));
       else
-        error_dialog.reset(new Gtk::MessageDialog("Child command failed", false, Gtk::MESSAGE_ERROR));
+        error_dialog.reset(new Gtk::MessageDialog("Child command failed", false, Gtk::MessageType::ERROR));
 
       // TODO: i18n
       error_dialog->set_secondary_text("The command was:\n\n" + Glib::Markup::escape_text(command) + 
(stderr_text.empty() ? Glib::ustring("") : ("\n\n<small>" + Glib::Markup::escape_text(stderr_text) + 
"</small>")), true);
diff --git a/glom/libglom/test_avahi_publisher.cc b/glom/libglom/test_avahi_publisher.cc
index 2e585f2..10c1313 100644
--- a/glom/libglom/test_avahi_publisher.cc
+++ b/glom/libglom/test_avahi_publisher.cc
@@ -28,7 +28,7 @@ private:
 
 
 TestWindow::TestWindow()
-: m_box(Gtk::ORIENTATION_VERTICAL, Utils::to_utype(Glom::UiUtils::DefaultSpacings::SMALL)),
+: m_box(Gtk::Orientation::VERTICAL, Utils::to_utype(Glom::UiUtils::DefaultSpacings::SMALL)),
   m_button_start("Start"),
   m_button_stop("Stop")
 {
diff --git a/glom/libglom/translations_po.cc b/glom/libglom/translations_po.cc
index cd24d74..814339c 100644
--- a/glom/libglom/translations_po.cc
+++ b/glom/libglom/translations_po.cc
@@ -84,7 +84,7 @@ static void show_gettext_error(int severity, const char* filename, const gchar*
     default:
     {
       //TODO: const auto msg = Glib::ustring(_("Gettext-Error: ")) + ' ' + msg_stream.str();
-      //Gtk::MessageDialog dlg(msg, false, Gtk::MESSAGE_ERROR);
+      //Gtk::MessageDialog dlg(msg, false, Gtk::MessageType::ERROR);
       //dlg.run();
       break;
     }
diff --git a/glom/main.cc b/glom/main.cc
index dd3feea..1309ad4 100644
--- a/glom/main.cc
+++ b/glom/main.cc
@@ -218,7 +218,7 @@ bool check_user_is_not_root_with_warning()
     //Make sure this is on stderr too, in case something goes wrong with the UI:
     std::cerr << message << std::endl;
 
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Running As Root")), true /* use_markup */, 
Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true /* modal */);
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Running As Root")), true /* use_markup */, 
Gtk::MessageType::ERROR, Gtk::ButtonsType::OK, true /* modal */);
     dialog.set_secondary_text(message);
     dialog.run();
 
@@ -261,12 +261,12 @@ bool check_postgres_is_available_with_warning()
 
   //Show message to the user about the broken installation:
   //This is a packaging bug, but it would probably annoy packagers to mention that in the dialog:
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Incomplete Glom Installation")), true /* use_markup */, 
Gtk::MESSAGE_ERROR, Gtk::BUTTONS_NONE, true /* modal */);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Incomplete Glom Installation")), true /* use_markup */, 
Gtk::MessageType::ERROR, Gtk::ButtonsType::NONE, true /* modal */);
   dialog.set_secondary_text(_("Your installation of Glom is not complete, because PostgreSQL is not 
available on your system. PostgreSQL is needed for self-hosting of Glom databases.\n\nYou may now install 
PostgreSQL to complete the Glom installation."));
-  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  dialog.add_button(_("Install PostgreSQL"), Gtk::RESPONSE_OK);
+  dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  dialog.add_button(_("Install PostgreSQL"), Gtk::ResponseType::OK);
   const auto response = dialog.run();
-  if(response != Gtk::RESPONSE_OK)
+  if(response != Gtk::ResponseType::OK)
     return false; //Failure. Glom should now quit.
   else
     return install_postgres(&dialog);
@@ -279,7 +279,7 @@ bool check_postgres_is_available_with_warning()
   //Make sure this is on stderr too, in case something goes wrong with the UI:
   std::cerr << message << std::endl;
 
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Incomplete Glom Installation")), true /* use_markup */, 
Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true /* modal */);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Incomplete Glom Installation")), true /* use_markup */, 
Gtk::MessageType::ERROR, Gtk::ButtonsType::OK, true /* modal */);
   dialog.set_secondary_text(message);
   dialog.run();
   return false;
@@ -317,12 +317,12 @@ bool check_mysql_is_available_with_warning()
   //Show message to the user about the broken installation:
   //This is a packaging bug, but it would probably annoy packagers to mention that in the dialog:
   //Unlike for PostgreSQL, this warning is only shown if MySQL was specified in the build.
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Incomplete Glom Installation")), true /* use_markup */, 
Gtk::MESSAGE_ERROR, Gtk::BUTTONS_NONE, true /* modal */);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Incomplete Glom Installation")), true /* use_markup */, 
Gtk::MessageType::ERROR, Gtk::ButtonsType::NONE, true /* modal */);
   dialog.set_secondary_text(_("Your installation of Glom is not complete, because MySQL is not available on 
your system. MySQL is needed for self-hosting of some Glom databases.\n\nYou may now install MySQL to 
complete the Glom installation."));
-  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  dialog.add_button(_("Install MySQL"), Gtk::RESPONSE_OK);
+  dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  dialog.add_button(_("Install MySQL"), Gtk::ResponseType::OK);
   const auto response = dialog.run();
-  if(response != Gtk::RESPONSE_OK)
+  if(response != Gtk::ResponseType::OK)
     return false; //Failure. Glom should now quit.
   else
     return install_mysql(&dialog);
@@ -330,7 +330,7 @@ bool check_mysql_is_available_with_warning()
   #else  //DISTRO_SPECIFIC_MYSQL_INSTALL_IMPLEMENTED
 
   //Show message to the user about the broken installation:
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Incomplete Glom Installation")), true /* use_markup */, 
Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true /* modal */);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Incomplete Glom Installation")), true /* use_markup */, 
Gtk::MessageType::ERROR, Gtk::ButtonsType::OK, true /* modal */);
   dialog.set_secondary_text(_("Your installation of Glom is not complete, because MySQL is not available on 
your system. MySQL is needed for self-hosting of some Glom databases.\n\nPlease report this bug to your 
vendor, or your system administrator so it can be corrected."));
   dialog.run();
   return false;
@@ -352,7 +352,7 @@ bool check_pyglom_is_available_with_warning()
   //Make sure this is on stderr too, in case something goes wrong with the UI:
   std::cerr << message << std::endl;
 
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Glom Python Module Not Installed")), true /* use_markup 
*/, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true /* modal */);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Glom Python Module Not Installed")), true /* use_markup 
*/, Gtk::MessageType::ERROR, Gtk::ButtonsType::OK, true /* modal */);
   dialog.set_secondary_text(message);
   dialog.run();
 
@@ -370,7 +370,7 @@ bool check_gir_is_available_with_warning()
   //Make sure this is on stderr too, in case something goes wrong with the UI:
   std::cerr << message << std::endl;
 
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("gi.repository Python Module Not Installed")), true /* 
use_markup */, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true /* modal */);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("gi.repository Python Module Not Installed")), true /* 
use_markup */, Gtk::MessageType::ERROR, Gtk::ButtonsType::OK, true /* modal */);
   dialog.set_secondary_text(message);
   dialog.run();
 
@@ -388,7 +388,7 @@ bool check_pygda_is_available_with_warning()
   //Make sure this is on stderr too, in case something goes wrong with the UI:
   std::cerr << message << std::endl;
 
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("gi.repository.Gda Python Module Not Installed")), true 
/* use_markup */, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true /* modal */);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("gi.repository.Gda Python Module Not Installed")), true 
/* use_markup */, Gtk::MessageType::ERROR, Gtk::ButtonsType::OK, true /* modal */);
   dialog.set_secondary_text(message);
   dialog.run();
 
@@ -513,7 +513,7 @@ main(int argc, char* argv[])
       //Make sure this is on stderr too, in case something goes wrong with the UI:
       std::cerr << message << std::endl;
 
-      Gtk::MessageDialog dialog(Glom::UiUtils::bold_message(_("Incomplete Glom Installation")), true /* 
use_markup */, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true /* modal */);
+      Gtk::MessageDialog dialog(Glom::UiUtils::bold_message(_("Incomplete Glom Installation")), true /* 
use_markup */, Gtk::MessageType::ERROR, Gtk::ButtonsType::OK, true /* modal */);
       dialog.set_secondary_text(message);
       dialog.run();
 
diff --git a/glom/mode_data/box_data.cc b/glom/mode_data/box_data.cc
index 966e459..9254406 100644
--- a/glom/mode_data/box_data.cc
+++ b/glom/mode_data/box_data.cc
@@ -188,12 +188,12 @@ bool Box_Data::confirm_discard_unstored_data() const
   {
     const auto message = _("This data cannot be stored in the database because you have not provided a 
primary key.\nDo you really want to discard this data?");
     //Ask user to confirm loss of data:
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("No primary key value")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_OK_CANCEL );
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("No primary key value")), true, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::OK_CANCEL );
     dialog.set_secondary_text(message);
     //TODO: It needs a const. I wonder if it should. murrayc. dialog.set_transient_for(*get_app_window());
     const auto iButton = dialog.run();
 
-    return (iButton == Gtk::RESPONSE_OK);
+    return (iButton == Gtk::ResponseType::OK);
   }
   else
   {
diff --git a/glom/mode_data/box_data_calendar_related.cc b/glom/mode_data/box_data_calendar_related.cc
index a5ff820..8662375 100644
--- a/glom/mode_data/box_data_calendar_related.cc
+++ b/glom/mode_data/box_data_calendar_related.cc
@@ -53,7 +53,7 @@ Box_Data_Calendar_Related::Box_Data_Calendar_Related()
   m_calendar.signal_month_changed().connect( sigc::mem_fun(*this, 
&Box_Data_Calendar_Related::on_calendar_month_changed) );
 
   setup_menu(this);
-  //m_calendar.add_events(Gdk::BUTTON_PRESS_MASK); //Allow us to catch button_press_event and 
button_release_event
+  //m_calendar.add_events(Gdk::EventMask::BUTTON_PRESS_MASK); //Allow us to catch button_press_event and 
button_release_event
   m_calendar.signal_button_press_event().connect_notify( sigc::mem_fun(*this, 
&Box_Data_Calendar_Related::on_calendar_button_press_event) );
 
   //We do not actually use this,
@@ -392,8 +392,8 @@ Glib::ustring Box_Data_Calendar_Related::on_calendar_details(guint year, guint m
 
   //Glib::Date is 1-indexed:
   Glib::Date::Month datemonth = (Glib::Date::Month)(month +1);
-  if(datemonth > Glib::Date::DECEMBER)
-    datemonth = Glib::Date::JANUARY;
+  if(datemonth > Glib::Date::Month::DECEMBER)
+    datemonth = Glib::Date::Month::JANUARY;
   Glib::Date date(day, datemonth, year);
 
   //Examine the cached data:
diff --git a/glom/mode_data/box_data_details.cc b/glom/mode_data/box_data_details.cc
index 3a5ddf1..6e273c5 100644
--- a/glom/mode_data/box_data_details.cc
+++ b/glom/mode_data/box_data_details.cc
@@ -42,9 +42,9 @@ namespace Glom
 {
 
 Box_Data_Details::Box_Data_Details(bool bWithNavButtons /* = true */)
-: m_hbox_content(Gtk::ORIENTATION_HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
+: m_hbox_content(Gtk::Orientation::HORIZONTAL, Utils::to_utype(UiUtils::DefaultSpacings::SMALL)),
   m_show_toolbar(false),
-  m_hbox_buttons(Gtk::ORIENTATION_HORIZONTAL),
+  m_hbox_buttons(Gtk::Orientation::HORIZONTAL),
   m_Button_New(_("_Add"), true),
   m_Button_Del(_("_Delete"), true),
   m_Button_Nav_First(_("_First"), true),
@@ -59,7 +59,7 @@ Box_Data_Details::Box_Data_Details(bool bWithNavButtons /* = true */)
 {
   m_layout_name = "details";
 
-  m_hbox_buttons.set_layout(Gtk::BUTTONBOX_END);
+  m_hbox_buttons.set_layout(Gtk::ButtonBoxStyle::END);
   m_hbox_buttons.set_spacing(Utils::to_utype(UiUtils::DefaultSpacings::SMALL));
 
   add_view(&m_FlowTable); //Allow this to access the document too.
@@ -75,11 +75,11 @@ Box_Data_Details::Box_Data_Details(bool bWithNavButtons /* = true */)
   //m_scrolled_window.set_margin(Utils::to_utype(UiUtils::DefaultSpacings::SMALL));
 
   // Allow vertical scrolling, but never scroll horizontally:
-  m_ScrolledWindow.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
-  m_ScrolledWindow.set_shadow_type(Gtk::SHADOW_NONE); //SHADOW_IN is Recommended by the GNOME HIG, but looks 
odd.
+  m_ScrolledWindow.set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC);
+  m_ScrolledWindow.set_shadow_type(Gtk::ShadowType::NONE); //ShadowType::IN is Recommended by the GNOME HIG, 
but looks odd.
 
 #ifndef GLOM_ENABLE_CLIENT_ONLY
-  m_hbox_content.pack_start(m_Dragbar, Gtk::PACK_SHRINK);
+  m_hbox_content.pack_start(m_Dragbar, Gtk::PackOptions::PACK_SHRINK);
   m_Dragbar.hide();
 #endif
 
@@ -88,7 +88,7 @@ Box_Data_Details::Box_Data_Details(bool bWithNavButtons /* = true */)
   // The FlowTable does not support native scrolling, so gtkmm adds it to a
   // viewport first that also has some shadow we do not want.
   if(auto viewport = dynamic_cast<Gtk::Viewport*>(m_FlowTable.get_parent()))
-    viewport->set_shadow_type(Gtk::SHADOW_NONE);
+    viewport->set_shadow_type(Gtk::ShadowType::NONE);
 
 
   pack_start(m_hbox_content);
@@ -117,8 +117,8 @@ Box_Data_Details::Box_Data_Details(bool bWithNavButtons /* = true */)
   m_Button_Nav_Last.set_tooltip_text(_("View the last record in the list."));
 
   //Add or delete record:
-  m_hbox_buttons.pack_start(m_Button_New, Gtk::PACK_SHRINK);
-  m_hbox_buttons.pack_start(m_Button_Del,  Gtk::PACK_SHRINK);
+  m_hbox_buttons.pack_start(m_Button_New, Gtk::PackOptions::PACK_SHRINK);
+  m_hbox_buttons.pack_start(m_Button_Del,  Gtk::PackOptions::PACK_SHRINK);
 
   m_hbox_buttons.set_child_secondary(m_Button_New, true);
   m_hbox_buttons.set_child_secondary(m_Button_Del, true);
@@ -130,10 +130,10 @@ Box_Data_Details::Box_Data_Details(bool bWithNavButtons /* = true */)
   //Navigation:
   if(bWithNavButtons)
   {
-    m_hbox_buttons.pack_start(m_Button_Nav_First, Gtk::PACK_SHRINK);
-    m_hbox_buttons.pack_start(m_Button_Nav_Prev, Gtk::PACK_SHRINK);
-    m_hbox_buttons.pack_start(m_Button_Nav_Next, Gtk::PACK_SHRINK);
-    m_hbox_buttons.pack_start(m_Button_Nav_Last, Gtk::PACK_SHRINK);
+    m_hbox_buttons.pack_start(m_Button_Nav_First, Gtk::PackOptions::PACK_SHRINK);
+    m_hbox_buttons.pack_start(m_Button_Nav_Prev, Gtk::PackOptions::PACK_SHRINK);
+    m_hbox_buttons.pack_start(m_Button_Nav_Next, Gtk::PackOptions::PACK_SHRINK);
+    m_hbox_buttons.pack_start(m_Button_Nav_Last, Gtk::PackOptions::PACK_SHRINK);
   }
 
   //Link buttons to handlers:
@@ -142,7 +142,7 @@ Box_Data_Details::Box_Data_Details(bool bWithNavButtons /* = true */)
   m_Button_Nav_Next.signal_clicked().connect(sigc::mem_fun(*this, &Box_Data_Details::on_button_nav_next));
   m_Button_Nav_Last.signal_clicked().connect(sigc::mem_fun(*this, &Box_Data_Details::on_button_nav_last));
 
-  pack_start(m_hbox_buttons, Gtk::PACK_SHRINK);
+  pack_start(m_hbox_buttons, Gtk::PackOptions::PACK_SHRINK);
 
   m_ignore_signals = false;
 }
@@ -419,7 +419,7 @@ void Box_Data_Details::on_button_new()
     {
       auto parent_window = get_app_window();
       if(parent_window)
-        UiUtils::show_ok_dialog(_("Layout Contains No Fields"), _("There are no fields on the layout, so 
there is no way to enter data in a new record."), *parent_window, Gtk::MESSAGE_ERROR);
+        UiUtils::show_ok_dialog(_("Layout Contains No Fields"), _("There are no fields on the layout, so 
there is no way to enter data in a new record."), *parent_window, Gtk::MessageType::ERROR);
     }
 
     return;
diff --git a/glom/mode_data/box_data_portal.cc b/glom/mode_data/box_data_portal.cc
index 008ad47..fc7b3f9 100644
--- a/glom/mode_data/box_data_portal.cc
+++ b/glom/mode_data/box_data_portal.cc
@@ -40,7 +40,7 @@ Box_Data_Portal::Box_Data_Portal()
   : m_find_mode(false)
 {
   //m_Frame.set_label_widget(m_Label_Related);
-  m_Frame.set_shadow_type(Gtk::SHADOW_NONE);
+  m_Frame.set_shadow_type(Gtk::ShadowType::NONE);
   m_Frame.show();
 
   m_Frame.set_label_widget(m_Label);
@@ -386,7 +386,7 @@ void Box_Data_Portal::get_suitable_record_to_view_details(const Gnome::Gda::Valu
 
     auto window = const_cast<Gtk::Window*>(get_app_window());
     if(window)
-      Frame_Glom::show_ok_dialog(_("No Corresponding Record Exists"), _("No record with this value exists. 
Therefore navigation to the related record is not possible."), *window, Gtk::MESSAGE_WARNING); //TODO: Make 
it more clear to the user exactly what record, what field, and what value, we are talking about.
+      Frame_Glom::show_ok_dialog(_("No Corresponding Record Exists"), _("No record with this value exists. 
Therefore navigation to the related record is not possible."), *window, Gtk::MessageType::WARNING); //TODO: 
Make it more clear to the user exactly what record, what field, and what value, we are talking about.
   }
 }
 
diff --git a/glom/mode_data/buttonglom.cc b/glom/mode_data/buttonglom.cc
index 69901c0..a0617db 100644
--- a/glom/mode_data/buttonglom.cc
+++ b/glom/mode_data/buttonglom.cc
@@ -68,7 +68,7 @@ void ButtonGlom::on_menu_properties_activate()
   dialog->set_script(layout_item, m_table_name);
   const auto response = Glom::UiUtils::dialog_run_with_help(dialog);
   dialog->hide();
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     dialog->get_script(layout_item);
     signal_layout_changed().emit();
diff --git a/glom/mode_data/datawidget/cellcreation.cc b/glom/mode_data/datawidget/cellcreation.cc
index 6d0840e..37ac970 100644
--- a/glom/mode_data/datawidget/cellcreation.cc
+++ b/glom/mode_data/datawidget/cellcreation.cc
@@ -184,7 +184,7 @@ Gtk::CellRenderer* create_cell(const std::shared_ptr<const LayoutItem>& layout_i
     //Use an ellipze to indicate excessive text,
     //so that similar values do not look equal,
     //and to avoid multi-line comments. TODO: Is there a better way to restrict the height? This doesn't 
actually truncate multilines anyway.
-    cell_text->property_ellipsize() = Pango::ELLIPSIZE_END;
+    cell_text->property_ellipsize() = Pango::EllipsizeMode::END;
 
     //Restrict the height, to prevent multiline text cells,
     //and to allow TreeView performance optimisation:
diff --git a/glom/mode_data/datawidget/cellrenderer_buttonimage.cc 
b/glom/mode_data/datawidget/cellrenderer_buttonimage.cc
index 2bec491..ba52f83 100644
--- a/glom/mode_data/datawidget/cellrenderer_buttonimage.cc
+++ b/glom/mode_data/datawidget/cellrenderer_buttonimage.cc
@@ -29,7 +29,7 @@ GlomCellRenderer_ButtonImage::GlomCellRenderer_ButtonImage():
   property_icon_name() = "document-open"; //A default.
 
   //So that it calls activate_vfunc():
-  property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE;
+  property_mode() = Gtk::CellRendererMode::ACTIVATABLE;
 }
 
 GlomCellRenderer_ButtonImage::type_signal_clicked GlomCellRenderer_ButtonImage::signal_clicked()
diff --git a/glom/mode_data/datawidget/cellrenderer_buttontext.cc 
b/glom/mode_data/datawidget/cellrenderer_buttontext.cc
index 077fea3..4e879aa 100644
--- a/glom/mode_data/datawidget/cellrenderer_buttontext.cc
+++ b/glom/mode_data/datawidget/cellrenderer_buttontext.cc
@@ -29,7 +29,7 @@ GlomCellRenderer_ButtonText::GlomCellRenderer_ButtonText():
   //const Gtk::StockID stock_id = _("_Open"); //A default.
   //property_stock_id() = stock_id.get_string();
 
-  property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; //So that it calls activate_vfunc().
+  property_mode() = Gtk::CellRendererMode::ACTIVATABLE; //So that it calls activate_vfunc().
 }
 
 GlomCellRenderer_ButtonText::type_signal_clicked GlomCellRenderer_ButtonText::signal_clicked()
diff --git a/glom/mode_data/datawidget/combo_as_radio_buttons.cc 
b/glom/mode_data/datawidget/combo_as_radio_buttons.cc
index 3cfedb9..25e4000 100644
--- a/glom/mode_data/datawidget/combo_as_radio_buttons.cc
+++ b/glom/mode_data/datawidget/combo_as_radio_buttons.cc
@@ -33,7 +33,7 @@ namespace DataWidgetChildren
 {
 
 ComboAsRadioButtons::ComboAsRadioButtons()
-: Gtk::Box(Gtk::ORIENTATION_VERTICAL),
+: Gtk::Box(Gtk::Orientation::VERTICAL),
   ComboChoices()
 {
 #ifndef GLOM_ENABLE_CLIENT_ONLY
diff --git a/glom/mode_data/datawidget/datawidget.cc b/glom/mode_data/datawidget/datawidget.cc
index cfcf816..faefaf2 100644
--- a/glom/mode_data/datawidget/datawidget.cc
+++ b/glom/mode_data/datawidget/datawidget.cc
@@ -87,7 +87,7 @@ DataWidget::DataWidget(const std::shared_ptr<LayoutItem_Field>& field, const Gli
     pFieldWidget = checkbutton;
 
     m_label.set_label(title);
-    m_label.set_halign(Gtk::ALIGN_START);
+    m_label.set_halign(Gtk::Align::START);
     m_label.show();
   }
   else if(glom_type == Field::glom_field_type::IMAGE)
@@ -104,13 +104,13 @@ DataWidget::DataWidget(const std::shared_ptr<LayoutItem_Field>& field, const Gli
     pFieldWidget = image;
 
     m_label.set_label(title);
-    m_label.set_halign(Gtk::ALIGN_START);
+    m_label.set_halign(Gtk::Align::START);
     m_label.show();
   }
   else
   {
     m_label.set_label(title);
-    m_label.set_halign(Gtk::ALIGN_START);
+    m_label.set_halign(Gtk::Align::START);
     m_label.show();
 
     //Use a Combo if there is a drop-down of choices (A "value list"), else an Entry:
@@ -195,7 +195,7 @@ DataWidget::DataWidget(const std::shared_ptr<LayoutItem_Field>& field, const Gli
     const bool with_extra_widgets = field_used_in_relationship_to_one || add_open_button || (glom_type == 
Field::glom_field_type::DATE);
     if(with_extra_widgets)
     {
-      hbox_parent = Gtk::manage( new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL) ); //We put the child (and any 
extra stuff) in this:
+      hbox_parent = Gtk::manage( new Gtk::Box(Gtk::Orientation::HORIZONTAL) ); //We put the child (and any 
extra stuff) in this:
       hbox_parent->set_spacing(Utils::to_utype(UiUtils::DefaultSpacings::SMALL));
 
       hbox_parent->pack_start(*m_child);
@@ -211,7 +211,7 @@ DataWidget::DataWidget(const std::shared_ptr<LayoutItem_Field>& field, const Gli
       auto button_date = Gtk::manage(new Gtk::Button(_("..."))); //TODO: A better label/icon for "Choose 
Date".
       button_date->set_tooltip_text(_("Choose a date from an on-screen calendar."));
       button_date->show();
-      hbox_parent->pack_start(*button_date, Gtk::PACK_SHRINK);
+      hbox_parent->pack_start(*button_date, Gtk::PackOptions::PACK_SHRINK);
       button_date->signal_clicked().connect(sigc::mem_fun(*this, &DataWidget::on_button_choose_date));
     }
 
@@ -220,7 +220,7 @@ DataWidget::DataWidget(const std::shared_ptr<LayoutItem_Field>& field, const Gli
       //Add a button for related record navigation:
       m_button_go_to_details = Gtk::manage(new Gtk::Button(_("_Open"), true));
       m_button_go_to_details->set_tooltip_text(_("Open the record identified by this ID, in the other 
table."));
-      hbox_parent->pack_start(*m_button_go_to_details, Gtk::PACK_SHRINK);
+      hbox_parent->pack_start(*m_button_go_to_details, Gtk::PackOptions::PACK_SHRINK);
       m_button_go_to_details->signal_clicked().connect(sigc::mem_fun(*this, 
&DataWidget::on_button_open_details));
 
       //Add an additional button to make it easier to choose an ID for this field.
@@ -230,12 +230,12 @@ DataWidget::DataWidget(const std::shared_ptr<LayoutItem_Field>& field, const Gli
       {
         auto button_select = Gtk::manage(new Gtk::Button(_("_Find"), true));
         button_select->set_tooltip_text(_("Enter search criteria to identify records in the other table, to 
choose an ID for this field."));
-        hbox_parent->pack_start(*button_select, Gtk::PACK_SHRINK);
+        hbox_parent->pack_start(*button_select, Gtk::PackOptions::PACK_SHRINK);
         button_select->signal_clicked().connect(sigc::mem_fun(*this, &DataWidget::on_button_select_id));
 
         auto button_new = Gtk::manage(new Gtk::Button(_("_New"), true));
         button_new->set_tooltip_text(_("Enter details for a new record in the other table, then use its ID 
for this field."));
-        hbox_parent->pack_start(*button_new, Gtk::PACK_SHRINK);
+        hbox_parent->pack_start(*button_new, Gtk::PackOptions::PACK_SHRINK);
         button_new->signal_clicked().connect(sigc::mem_fun(*this, &DataWidget::on_button_new_id));
       }
     }
@@ -248,7 +248,7 @@ DataWidget::DataWidget(const std::shared_ptr<LayoutItem_Field>& field, const Gli
   setup_menu(this);
 #endif // GLOM_ENABLE_CLIENT_ONLY
 
-  set_events(Gdk::BUTTON_PRESS_MASK);
+  set_events(Gdk::EventMask::BUTTON_PRESS_MASK);
 }
 
 void DataWidget::on_widget_edited()
@@ -474,7 +474,7 @@ std::shared_ptr<LayoutItem_Field> DataWidget::offer_field_list(const Glib::ustri
 
     const auto response = dialog->run();
     dialog->hide();
-    if(response == Gtk::RESPONSE_OK)
+    if(response == Gtk::ResponseType::OK)
     {
       //Get the chosen field:
       result = dialog->get_field_chosen();
@@ -504,7 +504,7 @@ std::shared_ptr<LayoutItem_Field> DataWidget::offer_field_layout(const std::shar
 
   const auto response = dialog->run();
   dialog->hide();
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     //Get the chosen field:
     result = dialog->get_field_chosen();
@@ -636,7 +636,7 @@ void DataWidget::on_button_choose_date()
 
     const auto response = Glom::UiUtils::dialog_run_with_help(dialog);
     dialog->hide();
-    if(response == Gtk::RESPONSE_OK)
+    if(response == Gtk::ResponseType::OK)
     {
       //Get the chosen date
       const auto value = dialog->get_date_chosen();
@@ -684,7 +684,7 @@ bool DataWidget::offer_related_record_id_find(Gnome::Gda::Value& chosen_id)
 
     const auto response = dialog->run();
     dialog->hide();
-    if(response == Gtk::RESPONSE_OK)
+    if(response == Gtk::ResponseType::OK)
     {
       //Get the chosen field:
       result = dialog->get_id_chosen(chosen_id);
@@ -733,7 +733,7 @@ bool DataWidget::offer_related_record_id_new(Gnome::Gda::Value& chosen_id)
 
     const auto response = dialog->run();
     dialog->hide();
-    if(response == Gtk::RESPONSE_OK)
+    if(response == Gtk::ResponseType::OK)
     {
       //Get the chosen ID:
       result = dialog->get_id_chosen(chosen_id);
diff --git a/glom/mode_data/datawidget/dialog_choose_date.cc b/glom/mode_data/datawidget/dialog_choose_date.cc
index 8c372b9..76d04ea 100644
--- a/glom/mode_data/datawidget/dialog_choose_date.cc
+++ b/glom/mode_data/datawidget/dialog_choose_date.cc
@@ -77,7 +77,7 @@ Gnome::Gda::Value Dialog_ChooseDate::get_date_chosen() const
 void Dialog_ChooseDate::on_day_selected_double_click()
 {
   //Close the dialog:
-  response(Gtk::RESPONSE_OK);
+  response(Gtk::ResponseType::OK);
 }
 
 } //namespace DataWidetChildren
diff --git a/glom/mode_data/datawidget/dialog_choose_id.cc b/glom/mode_data/datawidget/dialog_choose_id.cc
index 23679db..97889e5 100644
--- a/glom/mode_data/datawidget/dialog_choose_id.cc
+++ b/glom/mode_data/datawidget/dialog_choose_id.cc
@@ -101,7 +101,7 @@ void Dialog_ChooseID::on_button_quickfind()
   if(criteria.empty())
   {
     Glib::ustring message = _("You have not entered any quick find criteria.");
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("No Find Criteria")), true, Gtk::MESSAGE_WARNING );
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("No Find Criteria")), true, Gtk::MessageType::WARNING 
);
     dialog.set_secondary_text(message);
     dialog.set_transient_for(*this);
 
@@ -130,7 +130,7 @@ void Dialog_ChooseID::on_box_find_criteria(const Gnome::Gda::SqlExpr& where_clau
       const auto find_again = UiUtils::show_warning_no_records_found(*this);
 
       if(!find_again)
-        response(Gtk::RESPONSE_CANCEL);
+        response(Gtk::ResponseType::CANCEL);
     }
     else
     {
@@ -143,7 +143,7 @@ void Dialog_ChooseID::on_box_find_criteria(const Gnome::Gda::SqlExpr& where_clau
 void Dialog_ChooseID::on_box_select_selected(const Gnome::Gda::Value& primary_key)
 {
   m_id_chosen = primary_key;
-  response(Gtk::RESPONSE_OK); //Close the dialog.
+  response(Gtk::ResponseType::OK); //Close the dialog.
 }
 
 void Dialog_ChooseID::update_ui_for_stage()
diff --git a/glom/mode_data/datawidget/label.cc b/glom/mode_data/datawidget/label.cc
index 8f695aa..d9020a2 100644
--- a/glom/mode_data/datawidget/label.cc
+++ b/glom/mode_data/datawidget/label.cc
@@ -53,7 +53,7 @@ void Label::init()
 
   add(m_label);
   m_label.show();
-  set_events(Gdk::ALL_EVENTS_MASK);
+  set_events(Gdk::EventMask::ALL_EVENTS_MASK);
   //This would be more efficient if we were only using the (base) EventBox to get events,
   //but we also want to allow changing of the background color, so we don't use it: 
set_visible_window(false);
 
@@ -84,7 +84,7 @@ void Label::on_menu_properties_activate()
   dialog->set_textobject(textobject, m_table_name);
   const auto response = dialog->run();
   dialog->hide();
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     //Get the chosen relationship:
     dialog->get_textobject(textobject);
diff --git a/glom/mode_data/datawidget/textview.cc b/glom/mode_data/datawidget/textview.cc
index d043841..4f6598f 100644
--- a/glom/mode_data/datawidget/textview.cc
+++ b/glom/mode_data/datawidget/textview.cc
@@ -50,15 +50,15 @@ void TextView::init()
   setup_menu(this);
 #endif // !GLOM_ENABLE_CLIENT_ONLY
 
-  set_shadow_type(Gtk::SHADOW_IN);
+  set_shadow_type(Gtk::ShadowType::IN);
 
   m_TextView.show();
   add(m_TextView);
 
   //Wrap text, and allow vertical scrolling:
-  set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
-  set_shadow_type(Gtk::SHADOW_IN);
-  m_TextView.set_wrap_mode(Gtk::WRAP_WORD);
+  set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC);
+  set_shadow_type(Gtk::ShadowType::IN);
+  m_TextView.set_wrap_mode(Gtk::WrapMode::WORD);
 
   //We use connect(slot, false) to connect before the default signal handler, because the default signal 
handler prevents _further_ handling.
   m_TextView.signal_focus_out_event().connect(sigc::mem_fun(*this, &TextView::on_textview_focus_out_event), 
false);
diff --git a/glom/mode_data/datawidget/treemodel_db.cc b/glom/mode_data/datawidget/treemodel_db.cc
index 49ba823..bf4a1d5 100644
--- a/glom/mode_data/datawidget/treemodel_db.cc
+++ b/glom/mode_data/datawidget/treemodel_db.cc
@@ -404,7 +404,7 @@ bool DbTreeModel::refresh_from_database(const FoundSet& found_set)
 
 Gtk::TreeModelFlags DbTreeModel::get_flags_vfunc() const
 {
-   return (Gtk::TreeModelFlags)(Gtk::TREE_MODEL_LIST_ONLY | Gtk::TREE_MODEL_ITERS_PERSIST);
+   return (Gtk::TreeModelFlags)(Gtk::TreeModelFlags::LIST_ONLY | Gtk::TreeModelFlags::ITERS_PERSIST);
 }
 
 int DbTreeModel::get_n_columns_vfunc() const
diff --git a/glom/mode_data/db_adddel/db_adddel.cc b/glom/mode_data/db_adddel/db_adddel.cc
index 6bcb04c..850769d 100644
--- a/glom/mode_data/db_adddel/db_adddel.cc
+++ b/glom/mode_data/db_adddel/db_adddel.cc
@@ -43,7 +43,7 @@ namespace Glom
 {
 
 DbAddDel::DbAddDel()
-: Gtk::Box(Gtk::ORIENTATION_VERTICAL),
+: Gtk::Box(Gtk::Orientation::VERTICAL),
   m_column_is_sorted(false),
   m_column_sorted_direction(false),
   m_column_sorted(0),
@@ -78,8 +78,8 @@ DbAddDel::DbAddDel()
   m_tree_view.get_accessible()->set_name(_("Table Content"));
 #endif
 
-  m_scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
-  m_scrolled_window.set_shadow_type(Gtk::SHADOW_IN);
+  m_scrolled_window.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
+  m_scrolled_window.set_shadow_type(Gtk::ShadowType::IN);
   m_tree_view.set_fixed_height_mode(); //This allows some optimizations.
   m_scrolled_window.add(m_tree_view);
   pack_start(m_scrolled_window);
@@ -89,7 +89,7 @@ DbAddDel::DbAddDel()
   //Make sure that the TreeView doesn't start out only big enough for zero items.
   set_height_rows(6, 6);
 
-  m_tree_view.add_events(Gdk::BUTTON_PRESS_MASK); //Allow us to catch button_press_event and 
button_release_event
+  m_tree_view.add_events(Gdk::EventMask::BUTTON_PRESS_MASK); //Allow us to catch button_press_event and 
button_release_event
   m_tree_view.signal_button_press_event().connect_notify( sigc::mem_fun(*this, 
&DbAddDel::on_treeview_button_press_event) );
   m_tree_view.signal_columns_changed().connect( sigc::mem_fun(*this, &DbAddDel::on_treeview_columns_changed) 
);
   //signal_button_press_event().connect(sigc::mem_fun(*this, &DbAddDel::on_button_press_event_Popup));
@@ -660,7 +660,7 @@ void DbAddDel::construct_specified_columns()
     Gtk::Requisition requistion_min, requistion_natural; //TODO: Really support natural size.
     pCellButton->get_preferred_size(m_tree_view, requistion_min, requistion_natural);
 
-    m_treeviewcolumn_button->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); //Needed by fixed-height mode.
+    m_treeviewcolumn_button->set_sizing(Gtk::TreeViewColumnSizing::FIXED); //Needed by fixed-height mode.
 
     // TODO: I am not sure whether this is always correct. Perhaps, we also
     // have to take into account the xpad property of the cell renderer and
@@ -1649,7 +1649,7 @@ guint DbAddDel::treeview_append_column(const Glib::ustring& title, Gtk::CellRend
 
   //This is needed by fixed-height mode. We get critical warnings otherwise.
   //But we must call set_fixed_width() later or we will have a zero-width column.
-  pViewColumn->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED);
+  pViewColumn->set_sizing(Gtk::TreeViewColumnSizing::FIXED);
 
   auto cols_count = m_tree_view.append_column(*pViewColumn);
 
@@ -2215,7 +2215,7 @@ void DbAddDel::user_added(const Gtk::TreeModel::iterator& row)
   if(m_allow_only_one_related_record && (get_count() > 0))
   {
     //Tell user that they can't do that:
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Extra Related Records Not Possible")), true, 
Gtk::MESSAGE_WARNING);
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Extra Related Records Not Possible")), true, 
Gtk::MessageType::WARNING);
     dialog.set_secondary_text(_("You attempted to add a new related record, but there can only be one 
related record, because the relationship uses a unique key.")),
     dialog.set_transient_for(*AppWindow::get_appwindow());
     dialog.run();
diff --git a/glom/mode_data/db_adddel/db_adddel_withbuttons.cc 
b/glom/mode_data/db_adddel/db_adddel_withbuttons.cc
index a47b0a9..ba02122 100644
--- a/glom/mode_data/db_adddel/db_adddel_withbuttons.cc
+++ b/glom/mode_data/db_adddel/db_adddel_withbuttons.cc
@@ -27,27 +27,27 @@ namespace Glom
 {
 
 DbAddDel_WithButtons::DbAddDel_WithButtons()
-: m_ButtonBox(Gtk::ORIENTATION_HORIZONTAL),
+: m_ButtonBox(Gtk::Orientation::HORIZONTAL),
   m_Button_Del(_("_Delete"), true),
   m_Button_Edit(_("_Open"), true),
   m_Button_Add(_("_Add"), true)
 {
-  m_ButtonBox.set_layout(Gtk::BUTTONBOX_END);
+  m_ButtonBox.set_layout(Gtk::ButtonBoxStyle::END);
   m_ButtonBox.set_spacing(Utils::to_utype(UiUtils::DefaultSpacings::SMALL));
 
   setup_buttons();
-  pack_start(m_ButtonBox, Gtk::PACK_SHRINK);
+  pack_start(m_ButtonBox, Gtk::PackOptions::PACK_SHRINK);
 
   //Link buttons to handlers:
 
   m_Button_Add.signal_clicked().connect(sigc::mem_fun(*this, &DbAddDel_WithButtons::on_button_add));
-  m_ButtonBox.pack_end(m_Button_Add, Gtk::PACK_SHRINK);
+  m_ButtonBox.pack_end(m_Button_Add, Gtk::PackOptions::PACK_SHRINK);
 
   m_Button_Del.signal_clicked().connect(sigc::mem_fun(*this, &DbAddDel_WithButtons::on_button_del));
   m_Button_Edit.signal_clicked().connect(sigc::mem_fun(*this, &DbAddDel_WithButtons::on_button_edit));
 
-  m_ButtonBox.pack_end(m_Button_Del, Gtk::PACK_SHRINK);
-  m_ButtonBox.pack_end(m_Button_Edit, Gtk::PACK_SHRINK);
+  m_ButtonBox.pack_end(m_Button_Del, Gtk::PackOptions::PACK_SHRINK);
+  m_ButtonBox.pack_end(m_Button_Edit, Gtk::PackOptions::PACK_SHRINK);
 
   setup_buttons();
 }
diff --git a/glom/mode_data/flowtablewithfields.cc b/glom/mode_data/flowtablewithfields.cc
index 1a4c117..c7e8339 100644
--- a/glom/mode_data/flowtablewithfields.cc
+++ b/glom/mode_data/flowtablewithfields.cc
@@ -174,7 +174,7 @@ void FlowTableWithFields::add_layout_group(const std::shared_ptr<LayoutGroup>& g
       frame->set_label_widget(*label);
     }
 
-    frame->set_shadow_type(Gtk::SHADOW_NONE); //HIG-style
+    frame->set_shadow_type(Gtk::ShadowType::NONE); //HIG-style
     frame->show();
 
     auto flow_table = Gtk::manage( new FlowTableWithFields() );
@@ -466,13 +466,13 @@ void FlowTableWithFields::add_field(const std::shared_ptr<LayoutItem_Field>& lay
   auto label = info.m_second->get_label();
   if(label && !label->get_text().empty())
   {
-    auto boxLabel = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
+    auto boxLabel = Gtk::manage(new Gtk::Box(Gtk::Orientation::HORIZONTAL));
     boxLabel->show();
     boxLabel->pack_start(*label);
     info.m_first = boxLabel;
 
-    label->set_halign(Gtk::ALIGN_START);
-    label->set_valign(Gtk::ALIGN_CENTER);
+    label->set_halign(Gtk::Align::START);
+    label->set_valign(Gtk::Align::CENTER);
     label->show();
   }
   else
@@ -486,22 +486,22 @@ void FlowTableWithFields::add_field(const std::shared_ptr<LayoutItem_Field>& lay
   if( (layoutitem_field->get_glom_type() == Field::glom_field_type::TEXT) && 
layoutitem_field->get_formatting_used().get_text_format_multiline())
   {
     if(label)
-      label->set_valign(Gtk::ALIGN_START); //Center is neater next to entries, but center is silly next to 
multi-line text boxes.
+      label->set_valign(Gtk::Align::START); //Center is neater next to entries, but center is silly next to 
multi-line text boxes.
   }
   else if(layoutitem_field->get_glom_type() == Field::glom_field_type::IMAGE)
   {
     if(label)
-      label->set_valign(Gtk::ALIGN_START); //Center is neater next to entries, but center is silly next to 
large images.
+      label->set_valign(Gtk::Align::START); //Center is neater next to entries, but center is silly next to 
large images.
   }
 
   auto eventbox = Gtk::manage(new Gtk::EventBox());
   if(info.m_first)
       eventbox->add(*info.m_first);
 
-  eventbox->set_halign(Gtk::ALIGN_START);
+  eventbox->set_halign(Gtk::Align::START);
   info.m_first_eventbox = eventbox; //Remember it so we can retrieve the column number later from FlowTable.
   eventbox->set_visible_window(false);
-  eventbox->set_events(Gdk::ALL_EVENTS_MASK);
+  eventbox->set_events(Gdk::EventMask::ALL_EVENTS_MASK);
 
   add_widgets(*eventbox, *(info.m_second), true);
 
@@ -544,12 +544,12 @@ void FlowTableWithFields::add_button(const std::shared_ptr<LayoutItem_Button>& l
     //Put the button in a Gtk::Box so we can have non-default alignment in
     //its space. Note that we will need a different technique if we ever
     //support center alignment.
-    auto box_button = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
+    auto box_button = Gtk::manage(new Gtk::Box(Gtk::Orientation::HORIZONTAL));
     box_button->show();
     if(alignment == Formatting::HorizontalAlignment::RIGHT)
-      box_button->pack_end(*button, Gtk::PACK_SHRINK);
+      box_button->pack_end(*button, Gtk::PackOptions::PACK_SHRINK);
     else
-      box_button->pack_start(*button, Gtk::PACK_SHRINK);
+      box_button->pack_start(*button, Gtk::PackOptions::PACK_SHRINK);
 
     widget_to_add = box_button;
     expand = true;
@@ -569,9 +569,9 @@ void FlowTableWithFields::add_textobject(const std::shared_ptr<LayoutItem_Text>&
 
   const Formatting::HorizontalAlignment alignment =
     layoutitem_text->get_formatting_used_horizontal_alignment();
-  const Gtk::Align x_align = (alignment == Formatting::HorizontalAlignment::LEFT ? Gtk::ALIGN_START : 
Gtk::ALIGN_END);
+  const Gtk::Align x_align = (alignment == Formatting::HorizontalAlignment::LEFT ? Gtk::Align::START : 
Gtk::Align::END);
   label->set_halign(x_align);
-  label->set_valign(Gtk::ALIGN_CENTER);
+  label->set_valign(Gtk::Align::CENTER);
   label->show();
 
   apply_formatting(*label, *layoutitem_text);
@@ -585,10 +585,10 @@ void FlowTableWithFields::add_textobject(const std::shared_ptr<LayoutItem_Text>&
   }
   else
   {
-    auto title_label = Gtk::manage(new DataWidgetChildren::Label(title, Gtk::ALIGN_START, Gtk::ALIGN_START, 
false));
+    auto title_label = Gtk::manage(new DataWidgetChildren::Label(title, Gtk::Align::START, 
Gtk::Align::START, false));
     title_label->set_layout_item(layoutitem_text, table_name);
-    title_label->set_halign(Gtk::ALIGN_END);
-    title_label->set_valign(Gtk::ALIGN_CENTER);
+    title_label->set_halign(Gtk::Align::END);
+    title_label->set_valign(Gtk::Align::CENTER);
     title_label->show();
     add_layoutwidgetbase(title_label);
 
@@ -617,8 +617,8 @@ void FlowTableWithFields::add_imageobject(const std::shared_ptr<LayoutItem_Image
   else
   {
     auto title_label = Gtk::manage(new Gtk::Label(title));
-    title_label->set_halign(Gtk::ALIGN_END);
-    title_label->set_valign(Gtk::ALIGN_CENTER);
+    title_label->set_halign(Gtk::Align::END);
+    title_label->set_valign(Gtk::Align::CENTER);
     title_label->show();
     add_widgets(*title_label, *image, true /* expand */);
   }
@@ -1229,7 +1229,7 @@ void FlowTableWithFields::align_child_group_labels()
   type_vec_sizegroups vec_sizegroups(max_columns);
   for(guint i = 0; i < max_columns; ++i)
   {
-    vec_sizegroups[i] = Gtk::SizeGroup::create(Gtk::SIZE_GROUP_HORIZONTAL);
+    vec_sizegroups[i] = Gtk::SizeGroup::create(Gtk::SizeGroupMode::HORIZONTAL);
   }
 
   for(const auto& subtable : m_sub_flow_tables)
@@ -1267,7 +1267,7 @@ void FlowTableWithFields::on_menu_properties_activate()
 
   dialog->set_flowtable(this);
   const auto response = dialog->run();
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     auto group = get_layout_group();
     group->set_columns_count( dialog->get_columns_count() );
@@ -1294,11 +1294,11 @@ void FlowTableWithFields::on_menu_delete_activate()
     message = _("Delete whole group?");
   }
 
-  Gtk::MessageDialog dlg(message, false, Gtk::MESSAGE_QUESTION,
-    Gtk::BUTTONS_YES_NO, true);
+  Gtk::MessageDialog dlg(message, false, Gtk::MessageType::QUESTION,
+    Gtk::ButtonsType::YES_NO, true);
   switch(dlg.run())
   {
-    case Gtk::RESPONSE_YES:
+    case static_cast<int>(Gtk::ResponseType::YES):
       LayoutWidgetUtils::on_menu_delete_activate();
       break;
     default:
@@ -1336,7 +1336,7 @@ std::shared_ptr<LayoutItem_Portal> FlowTableWithFields::get_portal_relationship(
   //TODO: dialog->set_transient_for(*get_app_window());
   const auto response = dialog->run();
   dialog->hide();
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     //Get the chosen relationship:
     auto relationship  = dialog->get_relationship_chosen();
diff --git a/glom/mode_design/dialog_database_preferences.cc b/glom/mode_design/dialog_database_preferences.cc
index 59cb7eb..f3c156f 100644
--- a/glom/mode_design/dialog_database_preferences.cc
+++ b/glom/mode_design/dialog_database_preferences.cc
@@ -244,7 +244,7 @@ void Dialog_Database_Preferences::save_to_document()
 
 void Dialog_Database_Preferences::on_response(int response_id)
 {
-  if(response_id == Gtk::RESPONSE_OK)
+  if(response_id == Gtk::ResponseType::OK)
     save_to_document();
 }
 
diff --git a/glom/mode_design/dialog_initial_password.cc b/glom/mode_design/dialog_initial_password.cc
index f148922..7c622cd 100644
--- a/glom/mode_design/dialog_initial_password.cc
+++ b/glom/mode_design/dialog_initial_password.cc
@@ -76,17 +76,17 @@ bool Dialog_InitialPassword::check_password()
 {
   if(m_entry_user->get_text().empty())
   {
-    Frame_Glom::show_ok_dialog(_("Username Is Empty"), _("Please enter a login name for the new user."), 
*this, Gtk::MESSAGE_ERROR);
+    Frame_Glom::show_ok_dialog(_("Username Is Empty"), _("Please enter a login name for the new user."), 
*this, Gtk::MessageType::ERROR);
     return false;
   }
   else if(m_entry_password->get_text() != m_entry_password_confirm->get_text())
   {
-    Frame_Glom::show_ok_dialog(_("Passwords Do Not Match"), _("The entered password does not match the 
entered password confirmation. Please try again."), *this, Gtk::MESSAGE_ERROR);
+    Frame_Glom::show_ok_dialog(_("Passwords Do Not Match"), _("The entered password does not match the 
entered password confirmation. Please try again."), *this, Gtk::MessageType::ERROR);
     return false;
   }
   else if(m_entry_password->get_text().empty())
   {
-    Frame_Glom::show_ok_dialog(_("Password Is Empty"), _("Please enter a password for this user."), *this, 
Gtk::MESSAGE_ERROR);
+    Frame_Glom::show_ok_dialog(_("Password Is Empty"), _("Please enter a password for this user."), *this, 
Gtk::MessageType::ERROR);
     return false;
   }
   else
diff --git a/glom/mode_design/fields/box_db_table_definition.cc 
b/glom/mode_design/fields/box_db_table_definition.cc
index bc07202..e6a2048 100644
--- a/glom/mode_design/fields/box_db_table_definition.cc
+++ b/glom/mode_design/fields/box_db_table_definition.cc
@@ -285,14 +285,14 @@ bool Box_DB_Table_Definition::check_field_change(const std::shared_ptr<const Fie
     if(field_new->get_calculation() != field_old->get_calculation())
     {
       //TODO: Only show this when there are > 100 records?
-      Gtk::MessageDialog dialog(UiUtils::bold_message(_("Recalculation Required")), true, 
Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_NONE);
+      Gtk::MessageDialog dialog(UiUtils::bold_message(_("Recalculation Required")), true, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::NONE);
       dialog.set_secondary_text(_("You have changed the calculation used by this field so Glom must 
recalculate the value in all records. If the table contains many records then this could take a long time."));
       if(parent_window)
         dialog.set_transient_for(*parent_window);
 
-      dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-      dialog.add_button(_("Recalculate"), Gtk::RESPONSE_OK);
-      result = (dialog.run() == Gtk::RESPONSE_OK);
+      dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+      dialog.add_button(_("Recalculate"), Gtk::ResponseType::OK);
+      result = (dialog.run() == Gtk::ResponseType::OK);
     }
   }
 
@@ -301,7 +301,7 @@ bool Box_DB_Table_Definition::check_field_change(const std::shared_ptr<const Fie
   if(field_old->get_glom_type() == Field::glom_field_type::INVALID)
   {
     UiUtils::show_ok_dialog(_("Invalid database structure"),
-      _("This database field was created or edited outside of Glom. It has a data type that is not supported 
by Glom. Your system administrator may be able to correct this."), parent_window, Gtk::MESSAGE_ERROR);
+      _("This database field was created or edited outside of Glom. It has a data type that is not supported 
by Glom. Your system administrator may be able to correct this."), parent_window, Gtk::MessageType::ERROR);
 
     return false;
   }
@@ -310,7 +310,7 @@ bool Box_DB_Table_Definition::check_field_change(const std::shared_ptr<const Fie
   if(field_old->get_primary_key() && !field_new->get_primary_key()) //Was the primary key column unchecked?
   {
     UiUtils::show_ok_dialog(_("Primary key required"),
-      _("You may not unset the primary key because the table must have a primary key. You may set another 
field as the primary key instead."), parent_window, Gtk::MESSAGE_ERROR);
+      _("You may not unset the primary key because the table must have a primary key. You may set another 
field as the primary key instead."), parent_window, Gtk::MessageType::ERROR);
 
       return false;
   }
@@ -322,7 +322,7 @@ bool Box_DB_Table_Definition::check_field_change(const std::shared_ptr<const Fie
     //Check for nulls:
     if(field_has_null_values(field_old)) //Use the fieldOld because we only use the name, and we want to 
check the _existing_ field:
     {
-      UiUtils::show_ok_dialog(_("Field contains empty values."), _("The field may not yet be used as a 
primary key because it contains empty values."), parent_window, Gtk::MESSAGE_ERROR);
+      UiUtils::show_ok_dialog(_("Field contains empty values."), _("The field may not yet be used as a 
primary key because it contains empty values."), parent_window, Gtk::MessageType::ERROR);
 
       //TODO: Offer to fill it in with generated ID numbers? That could give strange results if the existing 
values are human-readable.
       return false;
@@ -331,19 +331,19 @@ bool Box_DB_Table_Definition::check_field_change(const std::shared_ptr<const Fie
     //Check that the values are unique:
     if(field_has_non_unique_values(field_old)) //Use the fieldOld because we only use the name, and we want 
to check the _existing_ field:
     {
-      UiUtils::show_ok_dialog(_("Field contains non-unique values."), _("The field may not yet be used as a 
primary key because it contains values that are not unique."), parent_window, Gtk::MESSAGE_ERROR);
+      UiUtils::show_ok_dialog(_("Field contains non-unique values."), _("The field may not yet be used as a 
primary key because it contains values that are not unique."), parent_window, Gtk::MessageType::ERROR);
       return false;
     }
 
     //Ask the user to confirm this major change:
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Change primary key")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE);
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Change primary key")), true, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::NONE);
     dialog.set_secondary_text(_("Are you sure that you wish to set this field as the primary key, instead of 
the existing primary key?"));
     if(parent_window)
       dialog.set_transient_for(*parent_window);
 
-    dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-    dialog.add_button(_("Change Primary Key"), Gtk::RESPONSE_OK);
-    if(dialog.run() != Gtk::RESPONSE_OK)
+    dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+    dialog.add_button(_("Change Primary Key"), Gtk::ResponseType::OK);
+    if(dialog.run() != Gtk::ResponseType::OK)
       return false; //Otherwise, continue, allowing the change.
   }
 
@@ -355,7 +355,7 @@ bool Box_DB_Table_Definition::check_field_change(const std::shared_ptr<const Fie
 
     //Warn the user and refuse to make the change:
     UiUtils::show_ok_dialog(_("Field Name Already Exists"),
-      _("This field already exists. Please choose a different field name"), parent_window, 
Gtk::MESSAGE_ERROR);
+      _("This field already exists. Please choose a different field name"), parent_window, 
Gtk::MessageType::ERROR);
 
     return false;
   }
diff --git a/glom/mode_design/fields/dialog_fieldcalculation.cc 
b/glom/mode_design/fields/dialog_fieldcalculation.cc
index 1a43a85..5ba087e 100644
--- a/glom/mode_design/fields/dialog_fieldcalculation.cc
+++ b/glom/mode_design/fields/dialog_fieldcalculation.cc
@@ -137,9 +137,9 @@ void Dialog_FieldCalculation::on_button_test()
     error_message);
 
   if(error_message.empty())
-    UiUtils::show_ok_dialog(_("Calculation result"), Glib::ustring::compose(_("The result of the calculation 
is:\n%1"), value.to_string()), *this, Gtk::MESSAGE_INFO);
+    UiUtils::show_ok_dialog(_("Calculation result"), Glib::ustring::compose(_("The result of the calculation 
is:\n%1"), value.to_string()), *this, Gtk::MessageType::INFO);
   else
-    UiUtils::show_ok_dialog( _("Calculation failed"), Glib::ustring::compose(_("The calculation failed with 
this error:\n%s"), error_message), *this, Gtk::MESSAGE_ERROR);
+    UiUtils::show_ok_dialog( _("Calculation failed"), Glib::ustring::compose(_("The calculation failed with 
this error:\n%s"), error_message), *this, Gtk::MessageType::ERROR);
 
   //Show what fields would trigger the recalculation:
   auto temp = std::make_shared<Field>();
diff --git a/glom/mode_design/fields/dialog_fielddefinition.cc 
b/glom/mode_design/fields/dialog_fielddefinition.cc
index 3b599c2..94d5058 100644
--- a/glom/mode_design/fields/dialog_fielddefinition.cc
+++ b/glom/mode_design/fields/dialog_fielddefinition.cc
@@ -152,11 +152,11 @@ void Dialog_FieldDefinition::set_field(const std::shared_ptr<const Field>& field
   auto pLabel = m_data_idget_default_value_simple->get_label();
   if(!pLabel->get_text().empty())
   {
-    pLabel->set_valign(Gtk::ALIGN_START); //Because the widget might be multiline.
-    m_box_default_value_simple->pack_start(*pLabel, Gtk::PACK_SHRINK);
+    pLabel->set_valign(Gtk::Align::START); //Because the widget might be multiline.
+    m_box_default_value_simple->pack_start(*pLabel, Gtk::PackOptions::PACK_SHRINK);
   }
 
-  m_box_default_value_simple->pack_end(*m_data_idget_default_value_simple, Gtk::PACK_EXPAND_WIDGET);
+  m_box_default_value_simple->pack_end(*m_data_idget_default_value_simple, 
Gtk::PackOptions::PACK_EXPAND_WIDGET);
   m_data_idget_default_value_simple->set_value(default_value);
   m_data_idget_default_value_simple->show();
 
@@ -379,7 +379,7 @@ void Dialog_FieldDefinition::on_button_edit_calculation()
   dialog->set_field(m_Field, m_table_name);
   //TODO: dialog.set_transient_for(*get_app_window());
   const auto response = Glom::UiUtils::dialog_run_with_help(dialog);
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     m_textView_calculation->get_buffer()->set_text( dialog->get_field()->get_calculation() );
   }
diff --git a/glom/mode_design/layout/dialog_choose_field.cc b/glom/mode_design/layout/dialog_choose_field.cc
index 240979e..15c7f34 100644
--- a/glom/mode_design/layout/dialog_choose_field.cc
+++ b/glom/mode_design/layout/dialog_choose_field.cc
@@ -59,7 +59,7 @@ Dialog_ChooseField::Dialog_ChooseField(BaseObjectType* cobject, const Glib::RefP
 
     m_treeview->append_column( _("Name"), m_ColumnsFields.m_col_name );
     m_treeview->append_column( _("Title"), m_ColumnsFields.m_col_title );
-    m_model->set_sort_column(m_ColumnsFields.m_col_name, Gtk::SORT_ASCENDING);
+    m_model->set_sort_column(m_ColumnsFields.m_col_name, Gtk::SortType::ASCENDING);
 
     m_treeview->signal_row_activated().connect( sigc::mem_fun(*this, &Dialog_ChooseField::on_row_activated) 
);
 
@@ -93,7 +93,7 @@ void Dialog_ChooseField::set_document(const std::shared_ptr<Document>& document,
   //Make this explicit in the API if that is not always suitable.
   auto selection = m_treeview->get_selection();
   selection->set_mode((field && !(field->get_name().empty()))
-    ? Gtk::SELECTION_SINGLE : Gtk::SELECTION_MULTIPLE);
+    ? Gtk::SelectionMode::SINGLE : Gtk::SelectionMode::MULTIPLE);
 
   //Select the current field at the start:
   if(field)
@@ -139,7 +139,7 @@ void Dialog_ChooseField::set_document(const std::shared_ptr<Document>& document,
   }
 
   auto selection = m_treeview->get_selection();
-  selection->set_mode(Gtk::SELECTION_MULTIPLE);
+  selection->set_mode(Gtk::SelectionMode::MULTIPLE);
 
 
   //Update the tree models from the document
@@ -274,7 +274,7 @@ Dialog_ChooseField::type_list_field_items Dialog_ChooseField::get_fields_chosen(
 
 void Dialog_ChooseField::on_row_activated(const Gtk::TreeModel::Path& /* path */, Gtk::TreeViewColumn* /* 
view_column */)
 {
-  response(Gtk::RESPONSE_OK);
+  response(Gtk::ResponseType::OK);
 }
 
 void Dialog_ChooseField::on_checkbutton_related_relationships_toggled()
diff --git a/glom/mode_design/layout/dialog_layout_details.cc 
b/glom/mode_design/layout/dialog_layout_details.cc
index 23a8a71..519802b 100644
--- a/glom/mode_design/layout/dialog_layout_details.cc
+++ b/glom/mode_design/layout/dialog_layout_details.cc
@@ -560,7 +560,7 @@ std::shared_ptr<LayoutItem_Button> Dialog_Layout_Details::offer_button_script_ed
   dialog->set_transient_for(*this);
   const auto dialog_response = Glom::UiUtils::dialog_run_with_help(dialog);
   dialog->hide();
-  if(dialog_response == Gtk::RESPONSE_OK)
+  if(dialog_response == Gtk::ResponseType::OK)
   {
     //Get the chosen relationship:
      result = dialog->get_script();
@@ -590,7 +590,7 @@ std::shared_ptr<Relationship> Dialog_Layout_Details::offer_relationship_list(con
   dialog->set_transient_for(*this);
   const auto dialog_response = dialog->run();
   dialog->hide();
-  if(dialog_response == Gtk::RESPONSE_OK)
+  if(dialog_response == Gtk::ResponseType::OK)
   {
     //Get the chosen relationship:
     result = dialog->get_relationship_chosen();
diff --git a/glom/mode_design/layout/dialog_layout_export.cc b/glom/mode_design/layout/dialog_layout_export.cc
index 275cd35..3d0cf27 100644
--- a/glom/mode_design/layout/dialog_layout_export.cc
+++ b/glom/mode_design/layout/dialog_layout_export.cc
@@ -60,7 +60,7 @@ Dialog_Layout_Export::Dialog_Layout_Export(BaseObjectType* cobject, const Glib::
 
 
     //Sort by sequence, so we can change the order by changing the values in the hidden sequence column.
-    m_model_fields->set_sort_column(m_ColumnsFields.m_col_sequence, Gtk::SORT_ASCENDING);
+    m_model_fields->set_sort_column(m_ColumnsFields.m_col_sequence, Gtk::SortType::ASCENDING);
 
 
     //Respond to changes of selection:
diff --git a/glom/mode_design/layout/dialog_layout_list_related.cc 
b/glom/mode_design/layout/dialog_layout_list_related.cc
index 0f77d16..9f23750 100644
--- a/glom/mode_design/layout/dialog_layout_list_related.cc
+++ b/glom/mode_design/layout/dialog_layout_list_related.cc
@@ -411,21 +411,21 @@ void Dialog_Layout_List_Related::on_combo_relationship_changed()
   {
     UiUtils::show_ok_dialog(_("Invalid Relationship"),
       _("The relationship may not be used to show related records because the relationship does not specify 
a field in the related table."),
-     *this, Gtk::MESSAGE_ERROR);
+     *this, Gtk::MessageType::ERROR);
     relationship_invalid = true;
   }
   else if(to_key_field->get_primary_key())
   {
     UiUtils::show_ok_dialog(_("Relationship Uses a Related Primary Key"),
       _("The relationship may not be used to show related records because the relationship uses a primary 
key field in the related table, which must contain unique values. This would prevent the relationship from 
specifying multiple related records."),
-     *this, Gtk::MESSAGE_ERROR);
+     *this, Gtk::MessageType::ERROR);
     relationship_invalid = true;
   }
   else if(to_key_field->get_unique_key())
   {
     UiUtils::show_ok_dialog(_("Relationship Uses a Related Unique Field"),
       _("The relationship may not be used to show related records because the relationship uses a 
unique-values field in the related table. This would prevent the relationship from specifying multiple 
related records."),
-     *this, Gtk::MESSAGE_ERROR);
+     *this, Gtk::MessageType::ERROR);
     relationship_invalid = true;
   }
 
diff --git a/glom/mode_design/layout/layout_item_dialogs/box_formatting.cc 
b/glom/mode_design/layout/layout_item_dialogs/box_formatting.cc
index f0fa315..bcd6a6d 100644
--- a/glom/mode_design/layout/layout_item_dialogs/box_formatting.cc
+++ b/glom/mode_design/layout/layout_item_dialogs/box_formatting.cc
@@ -200,13 +200,13 @@ void Box_Formatting::set_is_for_non_editable()
   //Add labels (because we will hide the checkboxes):
   auto label = Gtk::manage(new Gtk::Label(_("Font")));
   label->show();
-  m_hbox_font->pack_start(*label, Gtk::PACK_SHRINK);
+  m_hbox_font->pack_start(*label, Gtk::PackOptions::PACK_SHRINK);
   label = Gtk::manage(new Gtk::Label(_("Foreground Color")));
   label->show();
-  m_hbox_color_foreground->pack_start(*label, Gtk::PACK_SHRINK);
+  m_hbox_color_foreground->pack_start(*label, Gtk::PackOptions::PACK_SHRINK);
   label = Gtk::manage(new Gtk::Label(_("Background Color")));
   label->show();
-  m_hbox_color_background->pack_start(*label, Gtk::PACK_SHRINK);
+  m_hbox_color_background->pack_start(*label, Gtk::PackOptions::PACK_SHRINK);
 
   enforce_constraints();
 }
@@ -571,7 +571,7 @@ void Box_Formatting::on_button_choices_extra()
 
   const auto response = Glom::UiUtils::dialog_run_with_help(m_dialog_choices_extra_fields);
   m_dialog_choices_extra_fields->hide();
-  if(response == Gtk::RESPONSE_OK && m_dialog_choices_extra_fields->get_modified())
+  if(response == Gtk::ResponseType::OK && m_dialog_choices_extra_fields->get_modified())
   {
     //Update the label:
     const Glib::ustring text_extra_fields =
@@ -590,7 +590,7 @@ void Box_Formatting::on_button_choices_sortby()
 
   const auto response = Glom::UiUtils::dialog_run_with_help(m_dialog_choices_sortby);
   m_dialog_choices_sortby->hide();
-  if(response == Gtk::RESPONSE_OK && m_dialog_choices_sortby->get_modified())
+  if(response == Gtk::ResponseType::OK && m_dialog_choices_sortby->get_modified())
   {
     //Update the label:
     const Glib::ustring text_sortby =
diff --git a/glom/mode_design/layout/layout_item_dialogs/dialog_buttonscript.cc 
b/glom/mode_design/layout/layout_item_dialogs/dialog_buttonscript.cc
index 54a6f2b..fb550af 100644
--- a/glom/mode_design/layout/layout_item_dialogs/dialog_buttonscript.cc
+++ b/glom/mode_design/layout/layout_item_dialogs/dialog_buttonscript.cc
@@ -130,7 +130,7 @@ void Dialog_ButtonScript::on_button_test_script()
     error_message);
 
   if(!error_message.empty())
-    UiUtils::show_ok_dialog(_("Calculation failed"), Glib::ustring::compose(_("The calculation failed with 
this error:\n%1"), error_message), *this, Gtk::MESSAGE_ERROR);
+    UiUtils::show_ok_dialog(_("Calculation failed"), Glib::ustring::compose(_("The calculation failed with 
this error:\n%1"), error_message), *this, Gtk::MessageType::ERROR);
 }
 
 } //namespace Glom
diff --git a/glom/mode_design/layout/layout_item_dialogs/dialog_fieldslist.cc 
b/glom/mode_design/layout/layout_item_dialogs/dialog_fieldslist.cc
index d459108..813842e 100644
--- a/glom/mode_design/layout/layout_item_dialogs/dialog_fieldslist.cc
+++ b/glom/mode_design/layout/layout_item_dialogs/dialog_fieldslist.cc
@@ -59,7 +59,7 @@ Dialog_FieldsList::Dialog_FieldsList(BaseObjectType* cobject, const Glib::RefPtr
 
 
     //Sort by sequence, so we can change the order by changing the values in the hidden sequence column.
-    m_model_fields->set_sort_column(m_ColumnsFields.m_col_sequence, Gtk::SORT_ASCENDING);
+    m_model_fields->set_sort_column(m_ColumnsFields.m_col_sequence, Gtk::SortType::ASCENDING);
 
 
     //Respond to changes of selection:
diff --git a/glom/mode_design/layout/layout_item_dialogs/dialog_formatting.cc 
b/glom/mode_design/layout/layout_item_dialogs/dialog_formatting.cc
index 3ab802e..4f1954c 100644
--- a/glom/mode_design/layout/layout_item_dialogs/dialog_formatting.cc
+++ b/glom/mode_design/layout/layout_item_dialogs/dialog_formatting.cc
@@ -35,8 +35,8 @@ Dialog_Formatting::Dialog_Formatting()
   Utils::box_pack_start_glade_child_widget_derived_with_warning(get_content_area(), m_box_formatting);
   add_view(m_box_formatting);
 
-  add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  add_button(_("_Save"), Gtk::RESPONSE_OK);
+  add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  add_button(_("_Save"), Gtk::ResponseType::OK);
 }
 
 Dialog_Formatting::~Dialog_Formatting()
diff --git a/glom/mode_design/layout/layout_item_dialogs/dialog_group_by.cc 
b/glom/mode_design/layout/layout_item_dialogs/dialog_group_by.cc
index 6331b1d..843347e 100644
--- a/glom/mode_design/layout/layout_item_dialogs/dialog_group_by.cc
+++ b/glom/mode_design/layout/layout_item_dialogs/dialog_group_by.cc
@@ -141,7 +141,7 @@ void Dialog_GroupBy::on_button_field_sort_by()
 
     const auto dialog_response = Glom::UiUtils::dialog_run_with_help(m_dialog_choose_sort_fields);
     m_dialog_choose_sort_fields->hide();
-    if(dialog_response == Gtk::RESPONSE_OK && m_dialog_choose_sort_fields->get_modified())
+    if(dialog_response == Gtk::ResponseType::OK && m_dialog_choose_sort_fields->get_modified())
     {
       m_layout_item->set_fields_sort_by( m_dialog_choose_sort_fields->get_fields() );
     }
@@ -168,7 +168,7 @@ void Dialog_GroupBy::on_button_secondary_fields()
 
     const auto dialog_response = Glom::UiUtils::dialog_run_with_help(m_dialog_choose_secondary_fields);
     m_dialog_choose_secondary_fields->hide();
-    if(dialog_response == Gtk::RESPONSE_OK && m_dialog_choose_secondary_fields->get_modified())
+    if(dialog_response == Gtk::ResponseType::OK && m_dialog_choose_secondary_fields->get_modified())
     {
       m_layout_item->get_secondary_fields()->remove_all_items(); //Free the existing member items.
       m_layout_item->get_secondary_fields()->m_list_items = m_dialog_choose_secondary_fields->get_fields();
diff --git a/glom/mode_design/layout/layout_item_dialogs/dialog_sortfields.cc 
b/glom/mode_design/layout/layout_item_dialogs/dialog_sortfields.cc
index 1dfffa2..c70375d 100644
--- a/glom/mode_design/layout/layout_item_dialogs/dialog_sortfields.cc
+++ b/glom/mode_design/layout/layout_item_dialogs/dialog_sortfields.cc
@@ -59,7 +59,7 @@ Dialog_SortFields::Dialog_SortFields(BaseObjectType* cobject, const Glib::RefPtr
     m_treeview_fields->append_column_editable(_("Ascending"), m_ColumnsFields.m_col_ascending);
 
     //Sort by sequence, so we can change the order by changing the values in the hidden sequence column.
-    m_model_fields->set_sort_column(m_ColumnsFields.m_col_sequence, Gtk::SORT_ASCENDING);
+    m_model_fields->set_sort_column(m_ColumnsFields.m_col_sequence, Gtk::SortType::ASCENDING);
 
 
     //Respond to changes of selection:
diff --git a/glom/mode_design/print_layouts/box_print_layouts.cc 
b/glom/mode_design/print_layouts/box_print_layouts.cc
index b9fc041..a4e9c48 100644
--- a/glom/mode_design/print_layouts/box_print_layouts.cc
+++ b/glom/mode_design/print_layouts/box_print_layouts.cc
@@ -215,14 +215,14 @@ void Box_Print_Layouts::on_adddel_user_changed(const Gtk::TreeModel::iterator& r
         if(!name.empty() && !name_new.empty())
         {
           Glib::ustring strMsg = _("Are you sure that you want to rename this print layout?");  //TODO: Show 
old and new names?
-          Gtk::MessageDialog dialog(_("<b>Rename Print Layout</b>"), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE );
-          dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-          dialog.add_button(_("Rename"), Gtk::RESPONSE_OK);
+          Gtk::MessageDialog dialog(_("<b>Rename Print Layout</b>"), true, Gtk::MessageType::QUESTION, 
Gtk::ButtonsType::NONE );
+          dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+          dialog.add_button(_("Rename"), Gtk::ResponseType::OK);
           dialog.set_secondary_text(strMsg);
           const auto iButtonClicked = dialog.run();
 
           //Rename the item:
-          if(iButtonClicked == Gtk::RESPONSE_OK)
+          if(iButtonClicked == Gtk::ResponseType::OK)
           {
             m_AddDel.set_value_key(row, name_new);
 
diff --git a/glom/mode_design/print_layouts/print_layout_toolbar_button.cc 
b/glom/mode_design/print_layouts/print_layout_toolbar_button.cc
index 2da1125..8948820 100644
--- a/glom/mode_design/print_layouts/print_layout_toolbar_button.cc
+++ b/glom/mode_design/print_layouts/print_layout_toolbar_button.cc
@@ -49,8 +49,8 @@ PrintLayoutToolbarButton::PrintLayoutToolbarButton(const std::string& icon_name,
   std::vector<Gtk::TargetEntry> targetentries;
   targetentries.emplace_back(Gtk::TargetEntry(get_target()));
 
-  drag_source_set(targetentries, Gdk::MODIFIER_MASK,
-                  Gdk::ACTION_COPY | Gdk::ACTION_MOVE);
+  drag_source_set(targetentries, Gdk::ModifierType::MODIFIER_MASK,
+                  Gdk::DragAction::COPY | Gdk::DragAction::MOVE);
   set_tooltip_text(tooltip);
   set_label(title);
 }
diff --git a/glom/mode_design/print_layouts/window_print_layout_edit.cc 
b/glom/mode_design/print_layouts/window_print_layout_edit.cc
index b5b764c..3a273a1 100644
--- a/glom/mode_design/print_layouts/window_print_layout_edit.cc
+++ b/glom/mode_design/print_layouts/window_print_layout_edit.cc
@@ -96,7 +96,7 @@ Window_PrintLayout_Edit::Window_PrintLayout_Edit(BaseObjectType* cobject, const
   m_spinbutton_height->signal_value_changed().connect(
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_spinbutton_height));
 
-  const Gtk::TargetEntry target_rule(DRAG_TARGET_NAME_RULE, Gtk::TARGET_SAME_APP, 0);
+  const Gtk::TargetEntry target_rule(DRAG_TARGET_NAME_RULE, Gtk::TargetFlags::SAME_APP, 0);
   m_drag_targets_rule.emplace_back(target_rule);
 
   //The rulers are not in the glade file because they use an unusual widget
@@ -142,7 +142,7 @@ Window_PrintLayout_Edit::Window_PrintLayout_Edit(BaseObjectType* cobject, const
   builder->get_widget("button_close", m_button_close);
   m_button_close->signal_clicked().connect( sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_button_close) 
);
 
-  m_scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+  m_scrolled_window.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
   m_scrolled_window.add(m_canvas);
   m_box_canvas->pack_start(m_scrolled_window);
   m_canvas.show();
@@ -153,8 +153,8 @@ Window_PrintLayout_Edit::Window_PrintLayout_Edit(BaseObjectType* cobject, const
   const auto toolbar_target = Gtk::ToolPalette::get_drag_target_item();
   m_drag_targets_all.emplace_back(toolbar_target);
 
-  //Note that we don't use Gtk::DEST_DEFAULT_DEFAULTS because that would prevent our signal handlers from 
being used:
-  m_canvas.drag_dest_set(m_drag_targets_all, Gtk::DEST_DEFAULT_HIGHLIGHT, Gdk::ACTION_COPY);
+  //Note that we don't use Gtk::DestDefaults::DEFAULTS because that would prevent our signal handlers from 
being used:
+  m_canvas.drag_dest_set(m_drag_targets_all, Gtk::DestDefaults::HIGHLIGHT, Gdk::DragAction::COPY);
   m_canvas.signal_drag_drop().connect(
       sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_canvas_drag_drop) );
   m_canvas.signal_drag_motion().connect(
@@ -274,14 +274,14 @@ void Window_PrintLayout_Edit::init_menu()
   auto object =
     m_builder->get_object("Menubar");
   auto gmenu =
-    Glib::RefPtr<Gio::Menu>::cast_dynamic(object);
+    std::dynamic_pointer_cast<Gio::Menu>(object);
   if(!gmenu)
     g_warning("GMenu not found");
 
   //Menubar:
   auto menubar = std::make_unique<Gtk::MenuBar>(gmenu);
   menubar->show();
-  m_box_menu->pack_start(*(Gtk::manage(menubar.release())), Gtk::PACK_SHRINK);
+  m_box_menu->pack_start(*(Gtk::manage(menubar.release())), Gtk::PackOptions::PACK_SHRINK);
 
 
   //TODO: Create a generic checking method to test that
@@ -337,7 +337,7 @@ bool Window_PrintLayout_Edit::on_canvas_drag_motion(const Glib::RefPtr<Gdk::Drag
     else
        m_canvas.show_temp_rule(item_x, 0);
 
-    drag_context->drag_status(Gdk::ACTION_MOVE, timestamp);
+    drag_context->drag_status(Gdk::DragAction::MOVE, timestamp);
     return true; //Allow the drop.
   }
 
@@ -354,7 +354,7 @@ bool Window_PrintLayout_Edit::on_canvas_drag_motion(const Glib::RefPtr<Gdk::Drag
     return true;
   }
 
-  drag_context->drag_status(Gdk::ACTION_COPY, timestamp);
+  drag_context->drag_status(Gdk::DragAction::COPY, timestamp);
 
   //Move the temporary canvas item to the new position:
   m_layout_item_dropping->snap_position(item_x, item_y);
@@ -507,7 +507,7 @@ void Window_PrintLayout_Edit::on_canvas_drag_data_received(const Glib::RefPtr<Gd
       }
     }
 
-    drag_context->drag_status(Gdk::ACTION_COPY, timestamp);
+    drag_context->drag_status(Gdk::DragAction::COPY, timestamp);
     m_drag_preview_requested = false;
   }
   else
@@ -703,7 +703,7 @@ void Window_PrintLayout_Edit::setup_context_menu()
   auto object =
     m_builder->get_object("ContextMenu");
   auto gmenu =
-    Glib::RefPtr<Gio::Menu>::cast_dynamic(object);
+    std::dynamic_pointer_cast<Gio::Menu>(object);
   if(!gmenu)
     g_warning("GMenu not found");
 
@@ -833,14 +833,14 @@ void Window_PrintLayout_Edit::on_menu_insert_line_vertical()
 void Window_PrintLayout_Edit::on_menu_insert_create_standard()
 {
   //Ask for confirmation:
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Create Standard Layout")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Create Standard Layout")), true, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::NONE);
   dialog.set_secondary_text(_("This is an experimental feature. It will remove all items from the print 
layout and then try to create a layout similar to the layout of the detail view."));
   dialog.set_transient_for(*this);
-  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  dialog.add_button(_("Create"), Gtk::RESPONSE_OK);
+  dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  dialog.add_button(_("Create"), Gtk::ResponseType::OK);
 
   const auto response = dialog.run();
-  if(response != Gtk::RESPONSE_OK)
+  if(response != Gtk::ResponseType::OK)
     return;
 
   const auto document = std::dynamic_pointer_cast<const Document>(get_document());
@@ -877,12 +877,12 @@ void Window_PrintLayout_Edit::on_menu_insert_delete_page()
     return;
 
   //Ask the user to confirm:
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Remove page")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Remove page")), true, Gtk::MessageType::QUESTION, 
Gtk::ButtonsType::NONE);
   dialog.set_secondary_text(_("Are you sure that you wish to remove the last page and any items on that 
page?"));
   dialog.set_transient_for(*this);
-  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  dialog.add_button(_("Remove Page"), Gtk::RESPONSE_OK);
-  if(dialog.run() != Gtk::RESPONSE_OK)
+  dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  dialog.add_button(_("Remove Page"), Gtk::ResponseType::OK);
+  if(dialog.run() != Gtk::ResponseType::OK)
     return;
 
   m_canvas.set_page_count(page_count - 1);
diff --git a/glom/mode_design/relationships_overview/canvas_group_dbtable.cc 
b/glom/mode_design/relationships_overview/canvas_group_dbtable.cc
index 4602888..8597906 100644
--- a/glom/mode_design/relationships_overview/canvas_group_dbtable.cc
+++ b/glom/mode_design/relationships_overview/canvas_group_dbtable.cc
@@ -62,7 +62,7 @@ CanvasGroupDbTable::CanvasGroupDbTable(const Glib::ustring& table_name, const Gl
   const Glib::ustring title = "<b>" + table_title + "</b>";
   auto text = CanvasTextMovable::create(title,
     x + margin, y + margin, m_table_width - margin*2,
-    Goocanvas::ANCHOR_NORTH_WEST);
+    Goocanvas::AnchorType::NORTH_WEST);
   text->property_font() = "Sans 12"; //TODO: Let the user specify this.
   text->property_use_markup() = true;
   text->set_movement_allowed(false, false); //Move only as part of the parent group.
@@ -91,7 +91,7 @@ CanvasGroupDbTable::CanvasGroupDbTable(const Glib::ustring& table_name, const Gl
 
     auto text_item = CanvasTextMovable::create(title_field,
       x + margin, y + margin + field_y, m_table_width - margin*2,
-      Goocanvas::ANCHOR_NORTH_WEST);
+      Goocanvas::AnchorType::NORTH_WEST);
     text_item->property_font() = "Sans 12"; //TODO: Let the user specify this.
     text_item->property_use_markup() = true;
     text_item->set_movement_allowed(false, false); //Move only as part of the parent group.
diff --git a/glom/mode_design/relationships_overview/window_relationships_overview.cc 
b/glom/mode_design/relationships_overview/window_relationships_overview.cc
index ea54861..08194a3 100644
--- a/glom/mode_design/relationships_overview/window_relationships_overview.cc
+++ b/glom/mode_design/relationships_overview/window_relationships_overview.cc
@@ -84,7 +84,7 @@ Window_RelationshipsOverview::Window_RelationshipsOverview(BaseObjectType* cobje
 
   auto menu = std::make_unique<Gtk::MenuBar>(gmenu);
   menu->show();
-  vbox->pack_start(*(Gtk::manage(menu.release())), Gtk::PACK_SHRINK);
+  vbox->pack_start(*(Gtk::manage(menu.release())), Gtk::PackOptions::PACK_SHRINK);
 
 
   //Get the scolled window and add the canvas to it:
@@ -279,7 +279,7 @@ void Window_RelationshipsOverview::draw_lines()
           const auto text_y = ((from_field_y + to_field_y) / 2) + y_offset;
           auto text = CanvasTextMovable::create(item_get_title_or_name(relationship),
             text_x, text_y, -1, //TODO: Calc a suitable width.
-            Goocanvas::ANCHOR_CENTER);
+            Goocanvas::AnchorType::CENTER);
           text->property_font() = "Sans 10";
           text->property_use_markup() = true;
           text->set_movement_allowed(false, false); //Move only as part of the parent group.
@@ -302,7 +302,7 @@ void Window_RelationshipsOverview::load_from_document()
 
 void Window_RelationshipsOverview::on_menu_file_print()
 {
-  print_or_preview(Gtk::PRINT_OPERATION_ACTION_PRINT_DIALOG);
+  print_or_preview(Gtk::PrintOperationAction::PRINT_DIALOG);
 }
 
 void Window_RelationshipsOverview::on_menu_file_page_setup()
diff --git a/glom/mode_design/report_layout/dialog_layout_report.cc 
b/glom/mode_design/report_layout/dialog_layout_report.cc
index bc9afcb..8ed8584 100644
--- a/glom/mode_design/report_layout/dialog_layout_report.cc
+++ b/glom/mode_design/report_layout/dialog_layout_report.cc
@@ -699,7 +699,7 @@ std::shared_ptr<Relationship> Dialog_Layout_Report::offer_relationship_list()
   dialog->set_transient_for(*this);
   const auto dialog_response = dialog->run();
   dialog->hide();
-  if(dialog_response == Gtk::RESPONSE_OK)
+  if(dialog_response == Gtk::ResponseType::OK)
   {
     //Get the chosen relationship:
     result = dialog->get_relationship_chosen();
@@ -831,7 +831,7 @@ void Dialog_Layout_Report::on_button_edit()
         const auto dialog_response = dialog->run();
         dialog->hide();
 
-        if(dialog_response == Gtk::RESPONSE_OK)
+        if(dialog_response == Gtk::ResponseType::OK)
         {
           //Get the chosen relationship:
           auto chosenitem = dialog->get_item();
@@ -903,7 +903,7 @@ void Dialog_Layout_Report::on_button_edit()
                 const auto dialog_response = dialog->run();
                 dialog->hide();
 
-                if(dialog_response == Gtk::RESPONSE_OK)
+                if(dialog_response == Gtk::ResponseType::OK)
                 {
                   //Get the chosen relationship:
                   auto chosenitem = dialog->get_item();
diff --git a/glom/mode_design/script_library/dialog_script_library.cc 
b/glom/mode_design/script_library/dialog_script_library.cc
index 0cf204d..c0ea0ec 100644
--- a/glom/mode_design/script_library/dialog_script_library.cc
+++ b/glom/mode_design/script_library/dialog_script_library.cc
@@ -93,7 +93,7 @@ void Dialog_ScriptLibrary::on_button_add()
   dialog->set_transient_for(*this);
   const auto dialog_response = Glom::UiUtils::dialog_run_with_help(dialog);
   dialog->hide();
-  if(dialog_response != Gtk::RESPONSE_OK)
+  if(dialog_response != Gtk::ResponseType::OK)
     return;
 
   const auto name = dialog->m_entry_name->get_text();
@@ -119,14 +119,14 @@ void Dialog_ScriptLibrary::on_button_remove()
   if(!document)
     return;
 
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Remove library script")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE );
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Remove library script")), true, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::NONE );
   dialog.set_secondary_text(_("Do you really want to delete this script? This data can not be recovered"));
-  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  dialog.add_button(_("_Remove"), Gtk::RESPONSE_OK);
+  dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  dialog.add_button(_("_Remove"), Gtk::ResponseType::OK);
   dialog.set_transient_for(*this);
   const auto dialog_response = dialog.run();
   dialog.hide();
-  if(dialog_response != Gtk::RESPONSE_OK)
+  if(dialog_response != Gtk::ResponseType::OK)
     return;
 
   const auto name = m_combobox_name->get_active_text();
diff --git a/glom/mode_design/translation/combobox_locale.cc b/glom/mode_design/translation/combobox_locale.cc
index 26e59fe..daa0fce 100644
--- a/glom/mode_design/translation/combobox_locale.cc
+++ b/glom/mode_design/translation/combobox_locale.cc
@@ -40,7 +40,7 @@ ComboBox_Locale::ComboBox_Locale(BaseObjectType* cobject, const Glib::RefPtr<Gtk
     row[m_model_columns.m_name] = the_locale.m_name;
   }
 
-  m_model->set_sort_column(m_model_columns.m_name, Gtk::SORT_ASCENDING);
+  m_model->set_sort_column(m_model_columns.m_name, Gtk::SortType::ASCENDING);
 
   set_model(m_model);
 
diff --git a/glom/mode_design/translation/window_translations.cc 
b/glom/mode_design/translation/window_translations.cc
index 1b9ddcf..6045348 100644
--- a/glom/mode_design/translation/window_translations.cc
+++ b/glom/mode_design/translation/window_translations.cc
@@ -158,7 +158,7 @@ void Window_Translations::on_button_identify()
   const auto response = Glom::UiUtils::dialog_run_with_help(dialog);
   dialog->hide();
 
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     get_document()->set_translation_original_locale(dialog->get_locale());
 
@@ -294,7 +294,7 @@ void Window_Translations::on_button_copy_translation()
   const auto response = Glom::UiUtils::dialog_run_with_help(dialog);
   dialog->hide();
 
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     const auto copy_source_locale = dialog->get_locale();
     if(!copy_source_locale.empty())
@@ -338,7 +338,7 @@ void Window_Translations::on_treeview_edited(const Glib::ustring& /* path */, co
 void Window_Translations::on_button_export()
 {
   //Show the file-chooser dialog, to select an output .po file:
-  Gtk::FileChooserDialog file_dlg(_("Choose .po File Name"), Gtk::FILE_CHOOSER_ACTION_SAVE);
+  Gtk::FileChooserDialog file_dlg(_("Choose .po File Name"), Gtk::FileChooserAction::SAVE);
   file_dlg.set_transient_for(*this);
   file_dlg.set_do_overwrite_confirmation();
 
@@ -348,11 +348,11 @@ void Window_Translations::on_button_export()
   filter->add_pattern("*.po");
   file_dlg.add_filter(filter);
 
-  file_dlg.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  file_dlg.add_button(_("Export"), Gtk::RESPONSE_OK);
+  file_dlg.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  file_dlg.add_button(_("Export"), Gtk::ResponseType::OK);
 
   const auto result = file_dlg.run();
-  if(result != Gtk::RESPONSE_OK)
+  if(result != Gtk::ResponseType::OK)
     return;
 
   Glib::ustring uri = file_dlg.get_uri();
@@ -378,7 +378,7 @@ void Window_Translations::on_button_export()
 
 void Window_Translations::on_button_import()
 {
-  Gtk::FileChooserDialog file_dlg(_("Choose .po File Name"), Gtk::FILE_CHOOSER_ACTION_OPEN);
+  Gtk::FileChooserDialog file_dlg(_("Choose .po File Name"), Gtk::FileChooserAction::OPEN);
   file_dlg.set_transient_for(*this);
 
   // Only po files
@@ -387,13 +387,13 @@ void Window_Translations::on_button_import()
   filter->add_pattern("*.po");
   file_dlg.add_filter(filter);
 
-  file_dlg.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
+  file_dlg.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
 
   //Note to translators: "Import" here is an action verb - it's a button.
-  file_dlg.add_button(_("Import"), Gtk::RESPONSE_OK);
+  file_dlg.add_button(_("Import"), Gtk::ResponseType::OK);
 
   const auto result = file_dlg.run();
-  if(result != Gtk::RESPONSE_OK)
+  if(result != Gtk::ResponseType::OK)
     return;
 
   const auto uri = file_dlg.get_uri();
diff --git a/glom/mode_design/users/dialog_groups_list.cc b/glom/mode_design/users/dialog_groups_list.cc
index c3359f7..bf308aa 100644
--- a/glom/mode_design/users/dialog_groups_list.cc
+++ b/glom/mode_design/users/dialog_groups_list.cc
@@ -207,14 +207,14 @@ void Dialog_GroupsList::on_button_group_delete()
       if(!group.empty())
       {
         //TODO: Prevent deletion of standard groups
-        Gtk::MessageDialog dialog(UiUtils::bold_message(_("Delete Group")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_OK_CANCEL);
+        Gtk::MessageDialog dialog(UiUtils::bold_message(_("Delete Group")), true, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::OK_CANCEL);
         dialog.set_secondary_text(_("Are your sure that you wish to delete this group?"));
         dialog.set_transient_for(*this);
 
         int dialog_response = dialog.run();
         dialog.hide();
 
-        if(dialog_response == Gtk::RESPONSE_OK)
+        if(dialog_response == Gtk::ResponseType::OK)
         {
           const Glib::ustring strQuery = "DROP GROUP " + DbUtils::escape_sql_id(group);
           const auto test = DbUtils::query_execute_string(strQuery);
@@ -244,7 +244,7 @@ void Dialog_GroupsList::on_button_group_new()
 
   delete dialog;
 
-  if(dialog_response != Gtk::RESPONSE_OK)
+  if(dialog_response != Gtk::ResponseType::OK)
     return;
 
   if(group_name.empty())
diff --git a/glom/mode_design/users/dialog_user.cc b/glom/mode_design/users/dialog_user.cc
index 81a4507..90a5c23 100644
--- a/glom/mode_design/users/dialog_user.cc
+++ b/glom/mode_design/users/dialog_user.cc
@@ -49,12 +49,12 @@ bool Dialog_User::check_password()
 {
   if(m_entry_password->get_text() != m_entry_password_confirm->get_text())
   {
-    Frame_Glom::show_ok_dialog(_("Passwords Do Not Match"), _("The entered password does not match the 
entered password confirmation. Please try again."), *this, Gtk::MESSAGE_ERROR);
+    Frame_Glom::show_ok_dialog(_("Passwords Do Not Match"), _("The entered password does not match the 
entered password confirmation. Please try again."), *this, Gtk::MessageType::ERROR);
     return false;
   }
   else if(m_entry_password->get_text().empty())
   {
-    Frame_Glom::show_ok_dialog(_("Password Is Empty"), _("Please enter a password for this user."), *this, 
Gtk::MESSAGE_ERROR);
+    Frame_Glom::show_ok_dialog(_("Password Is Empty"), _("Please enter a password for this user."), *this, 
Gtk::MessageType::ERROR);
     return false;
   }
   else
diff --git a/glom/mode_design/users/dialog_users_list.cc b/glom/mode_design/users/dialog_users_list.cc
index 333192f..dd1463c 100644
--- a/glom/mode_design/users/dialog_users_list.cc
+++ b/glom/mode_design/users/dialog_users_list.cc
@@ -152,14 +152,14 @@ void Dialog_UsersList::on_button_user_delete()
         const Glib::ustring user = row[m_model_columns_users.m_col_name];
         if(!user.empty())
         {
-          Gtk::MessageDialog dialog(UiUtils::bold_message(_("Delete User")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_OK_CANCEL);
+          Gtk::MessageDialog dialog(UiUtils::bold_message(_("Delete User")), true, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::OK_CANCEL);
           dialog.set_secondary_text(_("Are your sure that you wish to delete this user?"));
           dialog.set_transient_for(*this);
 
           const auto dialog_response = dialog.run();
           dialog.hide();
 
-          if(dialog_response == Gtk::RESPONSE_OK)
+          if(dialog_response == Gtk::ResponseType::OK)
           {
             DbUtils::remove_user(user); //TODO: Warn about failure when this returns false?
             fill_list();
@@ -179,7 +179,7 @@ void Dialog_UsersList::on_button_user_add()
   if(users.empty())
   {
     UiUtils::show_ok_dialog(_("Error Retrieving the List of Users"),
-      _("Glom could not get the list of users from the database server. You probably do not have enough 
permissions. You should be a superuser."), *this, Gtk::MESSAGE_ERROR);
+      _("Glom could not get the list of users from the database server. You probably do not have enough 
permissions. You should be a superuser."), *this, Gtk::MessageType::ERROR);
     return;
   }
 
@@ -198,7 +198,7 @@ void Dialog_UsersList::on_button_user_add()
 
   delete dialog;
 
-  if(dialog_response != Gtk::RESPONSE_OK)
+  if(dialog_response != Gtk::ResponseType::OK)
     return;
 
   if(!user.empty())
@@ -232,14 +232,14 @@ void Dialog_UsersList::on_button_user_new()
   dialog->set_transient_for(*this);
   dialog->m_combo_group->set_sensitive(false); //It is being added to the current group, so don't offer a 
different group.
 
-  int dialog_response = Gtk::RESPONSE_OK;
+  int dialog_response = static_cast<int>(Gtk::ResponseType::OK);
   bool keep_trying = true;
   while(keep_trying)
   {
     dialog_response = Glom::UiUtils::dialog_run_with_help(dialog);
 
     //Check the password is acceptable:
-    if(dialog_response == Gtk::RESPONSE_OK)
+    if(dialog_response == static_cast<int>(Gtk::ResponseType::OK))
     {
       const auto password_ok = dialog->check_password();
       if(password_ok)
@@ -254,7 +254,7 @@ void Dialog_UsersList::on_button_user_new()
 
   delete dialog;
 
-  if(dialog_response != Gtk::RESPONSE_OK)
+  if(dialog_response != Gtk::ResponseType::OK)
     return;
 
   if(!DbUtils::add_user(get_document(), user, password, m_combo_group->get_active_text() /* group */))
@@ -300,14 +300,14 @@ void Dialog_UsersList::on_button_user_edit()
       dialog->m_combo_group->set_sensitive(false); //TODO: Allow, and handle, changes to this.
 
 
-      int dialog_response = Gtk::RESPONSE_OK;
+      int dialog_response = static_cast<int>(Gtk::ResponseType::OK);
       bool keep_trying = true;
       while(keep_trying)
       {
         dialog_response = Glom::UiUtils::dialog_run_with_help(dialog);
 
         //Check the password is acceptable:
-        if(dialog_response == Gtk::RESPONSE_OK)
+        if(dialog_response == Gtk::ResponseType::OK)
         {
           const auto password_ok = dialog->check_password();
           if(password_ok)
@@ -322,7 +322,7 @@ void Dialog_UsersList::on_button_user_edit()
 
       delete dialog;
 
-      if(dialog_response != Gtk::RESPONSE_OK)
+      if(dialog_response != Gtk::ResponseType::OK)
         return;
 
       if(!user.empty() && !password.empty())
@@ -406,7 +406,7 @@ bool Dialog_UsersList::warn_about_empty_standard_group()
   {
     if(m_model_users->children().size() == 1)
     {
-      Gtk::MessageDialog dialog(UiUtils::bold_message(_("Developer group may not be empty.")), true, 
Gtk::MESSAGE_WARNING);
+      Gtk::MessageDialog dialog(UiUtils::bold_message(_("Developer group may not be empty.")), true, 
Gtk::MessageType::WARNING);
       dialog.set_secondary_text(_("The developer group must contain at least one user."));
       dialog.set_transient_for(*this);
       dialog.run();
diff --git a/glom/mode_find/box_data_details_find.cc b/glom/mode_find/box_data_details_find.cc
index 4b2aa39..504958d 100644
--- a/glom/mode_find/box_data_details_find.cc
+++ b/glom/mode_find/box_data_details_find.cc
@@ -30,7 +30,7 @@ Box_Data_Details_Find::Box_Data_Details_Find()
 : Box_Data_Details(false)
 {
   //Instead of nav buttons:
-  m_hbox_buttons.pack_end(m_Button_Find, Gtk::PACK_SHRINK);
+  m_hbox_buttons.pack_end(m_Button_Find, Gtk::PackOptions::PACK_SHRINK);
 
   //A signal handler is connected in the Box_Data base class.
   m_Button_Find.set_can_default();
diff --git a/glom/mode_find/box_data_list_find.cc b/glom/mode_find/box_data_list_find.cc
index 690d9ba..5727643 100644
--- a/glom/mode_find/box_data_list_find.cc
+++ b/glom/mode_find/box_data_list_find.cc
@@ -27,12 +27,12 @@ namespace Glom
 {
 
 Box_Data_List_Find::Box_Data_List_Find()
-: m_HBox(Gtk::ORIENTATION_HORIZONTAL, Utils::to_utype(Glom::UiUtils::DefaultSpacings::SMALL))
+: m_HBox(Gtk::Orientation::HORIZONTAL, Utils::to_utype(Glom::UiUtils::DefaultSpacings::SMALL))
 {
   //m_strHint = _("Enter the search criteria and click [Find]\n Glom will then change to Data mode to 
display the results.");
 
-  m_HBox.pack_end(m_Button_Find, Gtk::PACK_SHRINK);
-  pack_start(m_HBox, Gtk::PACK_SHRINK);
+  m_HBox.pack_end(m_Button_Find, Gtk::PackOptions::PACK_SHRINK);
+  pack_start(m_HBox, Gtk::PackOptions::PACK_SHRINK);
 
   //A signal handler is connected in the Box_Data base class.
   m_Button_Find.set_can_default();
diff --git a/glom/navigation/box_tables.cc b/glom/navigation/box_tables.cc
index eeb28c9..7ef3ef1 100644
--- a/glom/navigation/box_tables.cc
+++ b/glom/navigation/box_tables.cc
@@ -223,7 +223,7 @@ void Box_Tables::on_adddel_add(const Gtk::TreeModel::iterator& row)
   // TODO: Remove this check when the libgda bug has been fixed:
   // https://bugzilla.gnome.org/show_bug.cgi?id=763534
   if (std::find(std::begin(table_name), std::end(table_name), ' ') != std::end(table_name)) {
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Table Names Cannot Contain Spaces")), true, 
Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK);
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Table Names Cannot Contain Spaces")), true, 
Gtk::MessageType::ERROR, Gtk::ButtonsType::OK);
     dialog.set_secondary_text(_("Unfortunately, Glom tables cannot have names that contain spaces. Please 
enter a different name for the table."));
     dialog.set_transient_for(*AppWindow::get_appwindow());
     dialog.run();
@@ -236,14 +236,14 @@ void Box_Tables::on_adddel_add(const Gtk::TreeModel::iterator& row)
   if(exists_in_db)
   {
     //Ask the user if they want us to try to cope with this:
-    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Table Already Exists")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_OK_CANCEL);
+    Gtk::MessageDialog dialog(UiUtils::bold_message(_("Table Already Exists")), true, 
Gtk::MessageType::QUESTION, Gtk::ButtonsType::OK_CANCEL);
     dialog.set_secondary_text(_("This table already exists on the database server, though it is not 
mentioned in the .glom file. This should not happen. Would you like Glom to attempt to use the existing 
table?"));
     dialog.set_transient_for(*AppWindow::get_appwindow());
 
     const auto response = dialog.run();
     dialog.hide();
 
-    if(response == Gtk::RESPONSE_OK)
+    if(response == Gtk::ResponseType::OK)
     {
       //Maybe Glom will cope with whatever fields are there. Let's see.
       created = true;
@@ -306,19 +306,19 @@ void Box_Tables::on_adddel_delete(const Gtk::TreeModel::iterator& rowStart, cons
           //Ask the user to confirm:
           const auto strMsg = Glib::ustring::compose(_("Are you sure that you want to delete this 
table?\nTable name: %1"), table_name);
           Gtk::MessageDialog dialog(UiUtils::bold_message(_("Delete Table")),
-            true, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_NONE,
+            true, Gtk::MessageType::QUESTION, Gtk::ButtonsType::NONE,
             true /* modal */);
           dialog.set_secondary_text(strMsg);
           dialog.set_transient_for(*AppWindow::get_appwindow());
-          dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-          dialog.add_button(_("Delete Table"), Gtk::RESPONSE_OK);
+          dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+          dialog.add_button(_("Delete Table"), Gtk::ResponseType::OK);
           const auto iButtonClicked = dialog.run();
 
           //Get a list of autoincrementing fields in the table:
           const auto fields = document->get_table_fields(table_name);
 
           //Delete the table:
-          if(iButtonClicked == Gtk::RESPONSE_OK)
+          if(iButtonClicked == Gtk::ResponseType::OK)
           {
             const auto test = DbUtils::drop_table(table_name);
             if(!test)
@@ -413,14 +413,14 @@ void Box_Tables::on_adddel_changed(const Gtk::TreeModel::iterator& row, guint co
       if(!table_name.empty() && !table_name_new.empty())
       {
         Glib::ustring strMsg = _("Are you sure that you want to rename this table?");  //TODO: Show old and 
new names?
-        Gtk::MessageDialog dialog(_("<b>Rename Table</b>"), true, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_NONE );
-        dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-        dialog.add_button(_("Rename"), Gtk::RESPONSE_OK);
+        Gtk::MessageDialog dialog(_("<b>Rename Table</b>"), true, Gtk::MessageType::QUESTION, 
Gtk::ButtonsType::NONE );
+        dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+        dialog.add_button(_("Rename"), Gtk::ResponseType::OK);
         dialog.set_secondary_text(strMsg);
         int iButtonClicked = dialog.run();
 
         //Rename the table:
-        if(iButtonClicked == Gtk::RESPONSE_OK)
+        if(iButtonClicked == Gtk::ResponseType::OK)
         {
           const auto test = DbUtils::rename_table(table_name, table_name_new);
           if(test)
diff --git a/glom/print_layout/canvas_layout_item.cc b/glom/print_layout/canvas_layout_item.cc
index fb9e019..63d7197 100644
--- a/glom/print_layout/canvas_layout_item.cc
+++ b/glom/print_layout/canvas_layout_item.cc
@@ -66,7 +66,7 @@ void CanvasLayoutItem::apply_formatting(const Glib::RefPtr<CanvasTextMovable>& c
   //Horizontal alignment:
   const Formatting::HorizontalAlignment alignment =
     layout_item.get_formatting_used_horizontal_alignment();
-  const Pango::Alignment x_align = (alignment == Formatting::HorizontalAlignment::LEFT ? Pango::ALIGN_LEFT : 
Pango::ALIGN_RIGHT);
+  const Pango::Alignment x_align = (alignment == Formatting::HorizontalAlignment::LEFT ? 
Pango::Alignment::LEFT : Pango::Alignment::RIGHT);
   canvas_item->property_alignment() = x_align;
 
   const auto formatting = layout_item.get_formatting_used();
@@ -374,7 +374,7 @@ void CanvasLayoutItem::add_portal_rows_if_necessary(const Glib::RefPtr<CanvasTab
             canvas_table->attach(cell_as_item,
               col /* left_attach */, col + 1 /* right_attach */,
               row /* top_attach */, row + 1 /* right_attach */,
-              Gtk::PACK_EXPAND_WIDGET, Gtk::PACK_EXPAND_WIDGET);
+              Gtk::PackOptions::PACK_EXPAND_WIDGET, Gtk::PackOptions::PACK_EXPAND_WIDGET);
 
             something_expanded = true;
         }
@@ -388,7 +388,7 @@ void CanvasLayoutItem::add_portal_rows_if_necessary(const Glib::RefPtr<CanvasTab
             canvas_table->attach(cell_as_item,
               col /* left_attach */, col + 1 /* right_attach */,
               row /* top_attach */, row + 1 /* right_attach */,
-              Gtk::PACK_EXPAND_PADDING, Gtk::PACK_EXPAND_WIDGET);
+              Gtk::PackOptions::PACK_EXPAND_PADDING, Gtk::PackOptions::PACK_EXPAND_WIDGET);
 
             //Add a second item (an invisible rect) to make sure that the size is really used:
             auto rect =
@@ -399,7 +399,7 @@ void CanvasLayoutItem::add_portal_rows_if_necessary(const Glib::RefPtr<CanvasTab
             canvas_table->attach(rect,
               col /* left_attach */, col + 1 /* right_attach */,
               row /* top_attach */, row + 1 /* right_attach */,
-              Gtk::PACK_SHRINK, Gtk::PACK_SHRINK);
+              Gtk::PackOptions::PACK_SHRINK, Gtk::PackOptions::PACK_SHRINK);
         }
       }
 
diff --git a/glom/print_layout/canvas_print_layout.cc b/glom/print_layout/canvas_print_layout.cc
index d7a11d6..2451ad0 100644
--- a/glom/print_layout/canvas_print_layout.cc
+++ b/glom/print_layout/canvas_print_layout.cc
@@ -56,7 +56,7 @@ Canvas_PrintLayout::Canvas_PrintLayout()
 
   //Use millimeters, because that's something that is meaningful to the user,
   //and we can use it with Gtk::PageSetup too:
-  property_units() = Gtk::UNIT_MM;
+  property_units() = Gtk::Unit::MM;
 
   m_items_group = Goocanvas::Group::create();
   //m_items_group->signal_button_press_event().connect( sigc::ptr_fun(&on_group_button_press_event), false );
@@ -366,7 +366,7 @@ std::shared_ptr<LayoutItem_Line> Canvas_PrintLayout::offer_line(const std::share
 
   const int response = Glom::UiUtils::dialog_run_with_help(dialog);
   dialog->hide();
-  if(response == Gtk::RESPONSE_OK)
+  if(response == Gtk::ResponseType::OK)
   {
     //Get the chosen relationship:
     result = dialog->get_line();
@@ -575,7 +575,7 @@ void Canvas_PrintLayout::update_page_bounds()
 
   double page_width = 0;
   double page_height = 0;
-  if(m_page_setup->get_orientation() == Gtk::PAGE_ORIENTATION_PORTRAIT) //TODO: Handle the reverse 
orientations too?
+  if(m_page_setup->get_orientation() == Gtk::PageOrientation::PORTRAIT) //TODO: Handle the reverse 
orientations too?
   {
     page_width = paper_size.get_width(units);
     page_height = paper_size.get_height(units);
@@ -1043,7 +1043,7 @@ void Canvas_PrintLayout::set_zoom_percent(guint percent)
 
 void Canvas_PrintLayout::hide_page_bounds()
 {
-  m_bounds_group->property_visibility() = Goocanvas::ITEM_HIDDEN;
+  m_bounds_group->property_visibility() = Goocanvas::ItemVisibility::HIDDEN;
 }
 
 void Canvas_PrintLayout::set_grid_gap(double gap)
@@ -1176,7 +1176,7 @@ Goocanvas::Bounds Canvas_PrintLayout::get_page_bounds(guint page_num) const
 
   double page_width = 0;
   double page_height = 0;
-  if(m_page_setup->get_orientation() == Gtk::PAGE_ORIENTATION_PORTRAIT) //TODO: Handle the reverse 
orientations too?
+  if(m_page_setup->get_orientation() == Gtk::PageOrientation::PORTRAIT) //TODO: Handle the reverse 
orientations too?
   {
     page_width = paper_size.get_width(units);
     page_height = paper_size.get_height(units);
diff --git a/glom/print_layout/print_layout_utils.cc b/glom/print_layout/print_layout_utils.cc
index 8d2d6aa..c2298d6 100644
--- a/glom/print_layout/print_layout_utils.cc
+++ b/glom/print_layout/print_layout_utils.cc
@@ -46,7 +46,7 @@ double get_page_height(const Glib::RefPtr<const Gtk::PageSetup>& page_setup, Gtk
   const auto paper_size = page_setup->get_paper_size();
 
   double page_height = 0;
-  if(page_setup->get_orientation() == Gtk::PAGE_ORIENTATION_PORTRAIT) //TODO: Handle the reverse 
orientations too?
+  if(page_setup->get_orientation() == Gtk::PageOrientation::PORTRAIT) //TODO: Handle the reverse 
orientations too?
   {
     page_height = paper_size.get_height(units);
     margin_top = page_setup->get_top_margin(units);
@@ -312,7 +312,7 @@ guint get_page_for_y(const Glib::RefPtr<const Gtk::PageSetup>& page_setup, Gtk::
 
 std::shared_ptr<PrintLayout> create_standard(const Glib::RefPtr<const Gtk::PageSetup>& page_setup, const 
Glib::ustring& table_name, const std::shared_ptr<const Document>& document, bool avoid_page_margins)
 {
-  const Gtk::Unit units = Gtk::UNIT_MM;
+  const Gtk::Unit units = Gtk::Unit::MM;
   auto print_layout = std::make_shared<PrintLayout>();
 
   //Start inside the border, on the next grid line:
@@ -427,7 +427,7 @@ void do_print_layout(const std::shared_ptr<const PrintLayout>& print_layout, con
   try
   {
     print->run(
-      (preview ? Gtk::PRINT_OPERATION_ACTION_PREVIEW : Gtk::PRINT_OPERATION_ACTION_PRINT_DIALOG),
+      (preview ? Gtk::PrintOperationAction::PREVIEW : Gtk::PrintOperationAction::PRINT_DIALOG),
       *transient_for);
   }
   catch(const Gtk::PrintError& ex)
diff --git a/glom/print_layout/printoperation_printlayout.cc b/glom/print_layout/printoperation_printlayout.cc
index b358ae9..cc6fb25 100644
--- a/glom/print_layout/printoperation_printlayout.cc
+++ b/glom/print_layout/printoperation_printlayout.cc
@@ -22,7 +22,7 @@ namespace Glom
 PrintOperationPrintLayout::PrintOperationPrintLayout()
 : m_canvas(nullptr)
 {
-  set_unit(Gtk::UNIT_MM);
+  set_unit(Gtk::Unit::MM);
   set_use_full_page(true); //Because we show the margins on our canvas.
 
   set_n_pages(1); //There is always at least one page.
diff --git a/glom/utility_widgets/adddel/adddel.cc b/glom/utility_widgets/adddel/adddel.cc
index 0aa01e4..92c5289 100644
--- a/glom/utility_widgets/adddel/adddel.cc
+++ b/glom/utility_widgets/adddel/adddel.cc
@@ -47,7 +47,7 @@ AddDelColumnInfo::AddDelColumnInfo()
 }
 
 AddDel::AddDel()
-: Gtk::Box(Gtk::ORIENTATION_VERTICAL),
+: Gtk::Box(Gtk::Orientation::VERTICAL),
   m_col_key(0),
   m_auto_add(true),
   m_allow_add(true),
@@ -81,15 +81,15 @@ void AddDel::init()
   //construct_specified_columns();
 
   m_scrolled_window.add(m_tree_view);
-  m_scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
-  m_scrolled_window.set_shadow_type(Gtk::SHADOW_IN);
+  m_scrolled_window.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
+  m_scrolled_window.set_shadow_type(Gtk::ShadowType::IN);
   m_tree_view.show();
   pack_start(m_scrolled_window);
 
   //Make sure that the TreeView doesn't start out only big enough for zero items.
   m_tree_view.set_size_request(-1, 150);
 
-  //m_tree_view.add_events(Gdk::BUTTON_PRESS_MASK); //Allow us to catch button_press_event and 
button_release_event
+  //m_tree_view.add_events(Gdk::EventMask::BUTTON_PRESS_MASK); //Allow us to catch button_press_event and 
button_release_event
   m_tree_view.signal_button_press_event().connect_notify( sigc::mem_fun(*this, 
&AddDel::on_treeview_button_press_event) );
 
   m_tree_view.signal_columns_changed().connect( sigc::mem_fun(*this, &AddDel::on_treeview_columns_changed) );
@@ -120,7 +120,7 @@ void AddDel::warn_about_duplicate()
   else
     message = m_prevent_duplicates_warning; //Something more specific and helpful.
 
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Duplicate")), true, Gtk::MESSAGE_WARNING, 
Gtk::BUTTONS_OK);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("Duplicate")), true, Gtk::MessageType::WARNING, 
Gtk::ButtonsType::OK);
   dialog.set_secondary_text(message);
 
   //TODO: dialog.set_transient_for(get_parent_window());
diff --git a/glom/utility_widgets/adddel/adddel_withbuttons.cc 
b/glom/utility_widgets/adddel/adddel_withbuttons.cc
index 31e3010..a7b2458 100644
--- a/glom/utility_widgets/adddel/adddel_withbuttons.cc
+++ b/glom/utility_widgets/adddel/adddel_withbuttons.cc
@@ -29,7 +29,7 @@ namespace Glom
 {
 
 AddDel_WithButtons::AddDel_WithButtons()
-: m_ButtonBox(Gtk::ORIENTATION_HORIZONTAL),
+: m_ButtonBox(Gtk::Orientation::HORIZONTAL),
   m_Button_Add(_("_Add"), true),
   m_Button_Del(_("_Delete"), true),
   m_Button_Edit(_("_Open"), true)
@@ -39,7 +39,7 @@ AddDel_WithButtons::AddDel_WithButtons()
 
 AddDel_WithButtons::AddDel_WithButtons(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& builder)
 : AddDel(cobject, builder),
-  m_ButtonBox(Gtk::ORIENTATION_HORIZONTAL),
+  m_ButtonBox(Gtk::Orientation::HORIZONTAL),
   m_Button_Add(_("_Add"), true),
   m_Button_Del(_("_Delete"), true),
   m_Button_Edit(_("_Open"), true)
@@ -49,7 +49,7 @@ AddDel_WithButtons::AddDel_WithButtons(BaseObjectType* cobject, const Glib::RefP
 
 void AddDel_WithButtons::init()
 {
-  m_ButtonBox.set_layout(Gtk::BUTTONBOX_END);
+  m_ButtonBox.set_layout(Gtk::ButtonBoxStyle::END);
   m_ButtonBox.set_spacing(Utils::to_utype(UiUtils::DefaultSpacings::SMALL));
 
   //m_Button_Add.set_margin(Utils::to_utype(UiUtils::DefaultSpacings::SMALL));
@@ -57,7 +57,7 @@ void AddDel_WithButtons::init()
   //m_Button_Edit.set_margin(Utils::to_utype(UiUtils::DefaultSpacings::SMALL));
 
   setup_buttons();
-  pack_start(m_ButtonBox, Gtk::PACK_SHRINK);
+  pack_start(m_ButtonBox, Gtk::PackOptions::PACK_SHRINK);
 
   //Link buttons to handlers:
   m_Button_Add.signal_clicked().connect(sigc::mem_fun(*this, &AddDel_WithButtons::on_button_add));
@@ -155,16 +155,16 @@ void AddDel_WithButtons::setup_buttons()
   if(!get_allow_user_actions())
     return;
 
-  m_ButtonBox.pack_end(m_Button_Add, Gtk::PACK_SHRINK);
+  m_ButtonBox.pack_end(m_Button_Add, Gtk::PackOptions::PACK_SHRINK);
   m_Button_Add.show();
 
-  m_ButtonBox.pack_end(m_Button_Del, Gtk::PACK_SHRINK);
+  m_ButtonBox.pack_end(m_Button_Del, Gtk::PackOptions::PACK_SHRINK);
   m_Button_Del.show();
 
-  m_ButtonBox.pack_end(m_Button_Edit, Gtk::PACK_SHRINK);
+  m_ButtonBox.pack_end(m_Button_Edit, Gtk::PackOptions::PACK_SHRINK);
   m_Button_Edit.show();
 
-  m_ButtonBox.pack_end(m_Button_Extra, Gtk::PACK_SHRINK);
+  m_ButtonBox.pack_end(m_Button_Extra, Gtk::PackOptions::PACK_SHRINK);
   if(!m_label_extra.empty())
     m_Button_Extra.show();
   else
diff --git a/glom/utility_widgets/canvas/canvas_group_grid.cc 
b/glom/utility_widgets/canvas/canvas_group_grid.cc
index 15cec1c..26be256 100644
--- a/glom/utility_widgets/canvas/canvas_group_grid.cc
+++ b/glom/utility_widgets/canvas/canvas_group_grid.cc
@@ -38,7 +38,7 @@ CanvasGroupGrid::CanvasGroupGrid()
 
   //Create the temp rule and hide it by default:
   m_temp_rule = create_rule_line(0, true); //Arbitrary defaults.
-  m_temp_rule->property_visibility() = Goocanvas::ITEM_INVISIBLE;
+  m_temp_rule->property_visibility() = Goocanvas::ItemVisibility::INVISIBLE;
   add_child(m_temp_rule);
 }
 
@@ -322,7 +322,7 @@ void CanvasGroupGrid::create_grid_lines()
 void CanvasGroupGrid::set_rules_visibility(bool visible)
 {
   if(m_grid_rules_group)
-    m_grid_rules_group->property_visibility() = (visible ? Goocanvas::ITEM_VISIBLE : 
Goocanvas::ITEM_INVISIBLE);
+    m_grid_rules_group->property_visibility() = (visible ? Goocanvas::ItemVisibility::VISIBLE : 
Goocanvas::ItemVisibility::INVISIBLE);
   else
     std::cerr << G_STRFUNC << ": m_grid_rules_group was null.\n";
 
@@ -333,7 +333,7 @@ void CanvasGroupGrid::set_rules_visibility(bool visible)
 
 void CanvasGroupGrid::show_temp_rule(double x, double y, bool show)
 {
-  m_temp_rule->property_visibility() = (show ? Goocanvas::ITEM_VISIBLE : Goocanvas::ITEM_INVISIBLE);
+  m_temp_rule->property_visibility() = (show ? Goocanvas::ItemVisibility::VISIBLE : 
Goocanvas::ItemVisibility::INVISIBLE);
 
   double left = 0.0;
   double top = 0.0;
diff --git a/glom/utility_widgets/canvas/canvas_group_resizable.cc 
b/glom/utility_widgets/canvas/canvas_group_resizable.cc
index 709ba61..ec64362 100644
--- a/glom/utility_widgets/canvas/canvas_group_resizable.cc
+++ b/glom/utility_widgets/canvas/canvas_group_resizable.cc
@@ -52,7 +52,7 @@ CanvasGroupResizable::CanvasGroupResizable()
   //    (Goocanvas::PointerEvents)(Goocanvas::EVENTS_VISIBLE_FILL & GOO_CANVAS_EVENTS_VISIBLE_STROKE);
 
 
-  set_drag_cursor(Gdk::FLEUR);
+  set_drag_cursor(Gdk::CursorType::FLEUR);
 }
 
 void CanvasGroupResizable::create_manipulators()
@@ -127,14 +127,14 @@ void CanvasGroupResizable::create_rect_manipulators()
   m_manipulator_edge_left->set_grid(m_grid);
   m_manipulator_edge_right->set_grid(m_grid);
 
-  m_manipulator_corner_top_left->set_drag_cursor(Gdk::TOP_LEFT_CORNER);
-  m_manipulator_corner_top_right->set_drag_cursor(Gdk::TOP_RIGHT_CORNER);
-  m_manipulator_corner_bottom_left->set_drag_cursor(Gdk::BOTTOM_LEFT_CORNER);
-  m_manipulator_corner_bottom_right->set_drag_cursor(Gdk::BOTTOM_RIGHT_CORNER);
-  m_manipulator_edge_top->set_drag_cursor(Gdk::TOP_SIDE);
-  m_manipulator_edge_bottom->set_drag_cursor(Gdk::BOTTOM_SIDE);
-  m_manipulator_edge_left->set_drag_cursor(Gdk::LEFT_SIDE);
-  m_manipulator_edge_right->set_drag_cursor(Gdk::RIGHT_SIDE);
+  m_manipulator_corner_top_left->set_drag_cursor(Gdk::CursorType::TOP_LEFT_CORNER);
+  m_manipulator_corner_top_right->set_drag_cursor(Gdk::CursorType::TOP_RIGHT_CORNER);
+  m_manipulator_corner_bottom_left->set_drag_cursor(Gdk::CursorType::BOTTOM_LEFT_CORNER);
+  m_manipulator_corner_bottom_right->set_drag_cursor(Gdk::CursorType::BOTTOM_RIGHT_CORNER);
+  m_manipulator_edge_top->set_drag_cursor(Gdk::CursorType::TOP_SIDE);
+  m_manipulator_edge_bottom->set_drag_cursor(Gdk::CursorType::BOTTOM_SIDE);
+  m_manipulator_edge_left->set_drag_cursor(Gdk::CursorType::LEFT_SIDE);
+  m_manipulator_edge_right->set_drag_cursor(Gdk::CursorType::RIGHT_SIDE);
 
   //Make sure that this is above the outline group:
   m_group_edge_manipulators->raise();//m_group_outline);
@@ -165,8 +165,8 @@ void CanvasGroupResizable::create_line_manipulators()
   m_manipulator_end->set_grid(m_grid);
   //m_manipulator_corner_top_right->set_snap_corner(CanvasRectMovable::Corners::TOP_RIGHT);
 
-  m_manipulator_start->set_drag_cursor(Gdk::TCROSS); //A rather arbitrary cursor.
-  m_manipulator_end->set_drag_cursor(Gdk::TCROSS);
+  m_manipulator_start->set_drag_cursor(Gdk::CursorType::TCROSS); //A rather arbitrary cursor.
+  m_manipulator_end->set_drag_cursor(Gdk::CursorType::TCROSS);
 
   manipulator_connect_signals(m_manipulator_start, Manipulators::START);
   manipulator_connect_signals(m_manipulator_end, Manipulators::END);
@@ -217,7 +217,7 @@ void CanvasGroupResizable::set_outline_visible(bool visible)
   }
 
   m_group_outline->property_visibility() =
-    (visible ? Goocanvas::ITEM_VISIBLE : Goocanvas::ITEM_INVISIBLE);
+    (visible ? Goocanvas::ItemVisibility::VISIBLE : Goocanvas::ItemVisibility::INVISIBLE);
 }
 
 Glib::RefPtr<CanvasGroupResizable> CanvasGroupResizable::create()
@@ -422,7 +422,7 @@ void CanvasGroupResizable::set_child(const Glib::RefPtr<CanvasItemMovable>& chil
   set_width_height(width, height);
 
   position_extras();
-  set_manipulators_visibility(Goocanvas::ITEM_INVISIBLE);
+  set_manipulators_visibility(Goocanvas::ItemVisibility::INVISIBLE);
   set_outline_visible(false);
 }
 
@@ -526,7 +526,7 @@ void CanvasGroupResizable::on_manipulator_corner_moved(const Glib::RefPtr<Canvas
 {
   //Make sure that the manipulator is still visibile.
   //(if the user moves too fast then we get a leave-notify-event on the manipulator, rect, or item):
-  set_manipulators_visibility(Goocanvas::ITEM_VISIBLE);
+  set_manipulators_visibility(Goocanvas::ItemVisibility::VISIBLE);
 
   auto manipulator_base = get_manipulator(manipulator_id);
   auto manipulator = std::dynamic_pointer_cast<CanvasRectMovable>(manipulator_base);
@@ -599,7 +599,7 @@ void CanvasGroupResizable::on_manipulator_line_end_moved(const Glib::RefPtr<Canv
 {
   //Make sure that the manipulator is still visibile.
   //(if the user moves too fast then we get a leave-notify-event on the manipulator, rect, or item):
-  set_manipulators_visibility(Goocanvas::ITEM_VISIBLE);
+  set_manipulators_visibility(Goocanvas::ItemVisibility::VISIBLE);
 
   auto manipulator_base = get_manipulator(manipulator_id);
   auto manipulator = std::dynamic_pointer_cast<CanvasRectMovable>(manipulator_base);
@@ -634,14 +634,14 @@ void CanvasGroupResizable::on_manipulator_line_end_moved(const Glib::RefPtr<Canv
 bool CanvasGroupResizable::on_manipulator_enter_notify_event(const Glib::RefPtr<Goocanvas::Item>& /* target 
*/, GdkEventCrossing* /* event */)
 {
   m_in_manipulator = true;
-  set_manipulators_visibility(Goocanvas::ITEM_VISIBLE);
+  set_manipulators_visibility(Goocanvas::ItemVisibility::VISIBLE);
   return false;
 }
 
 bool CanvasGroupResizable::on_manipulator_leave_notify_event(const Glib::RefPtr<Goocanvas::Item>& /* target 
*/, GdkEventCrossing* /* event */)
 {
   m_in_manipulator = false;
-  set_manipulators_visibility(Goocanvas::ITEM_INVISIBLE);
+  set_manipulators_visibility(Goocanvas::ItemVisibility::INVISIBLE);
   return false;
 }
 
@@ -649,7 +649,7 @@ void CanvasGroupResizable::on_manipulator_edge_moved(const Glib::RefPtr<CanvasIt
 {
   //Make sure that the manipulator is still visibile.
   //(if the user moves too fast then we get a leave-notify-event on the manipulator, rect, or item):
-  set_manipulators_visibility(Goocanvas::ITEM_VISIBLE);
+  set_manipulators_visibility(Goocanvas::ItemVisibility::VISIBLE);
 
   auto manipulator_base = get_manipulator(manipulator_id);
   auto manipulator = std::dynamic_pointer_cast<CanvasLineMovable>(manipulator_base);
@@ -769,9 +769,9 @@ void CanvasGroupResizable::set_manipulators_visibility(Goocanvas::ItemVisibility
   //because that is how we show selection:
   Goocanvas::ItemVisibility edge_visibility = visibility;
   if(get_selected())
-    edge_visibility = Goocanvas::ITEM_VISIBLE;
+    edge_visibility = Goocanvas::ItemVisibility::VISIBLE;
 
-  //For testing: visibility = Goocanvas::ITEM_VISIBLE;
+  //For testing: visibility = Goocanvas::ItemVisibility::VISIBLE;
   m_group_edge_manipulators->property_visibility() = edge_visibility;
   m_group_corner_manipulators->property_visibility() = visibility;
 
@@ -781,7 +781,7 @@ void CanvasGroupResizable::set_manipulators_visibility(Goocanvas::ItemVisibility
     std::dynamic_pointer_cast<CanvasTableMovable>(get_child());
   if(table)
   {
-    if(visibility == Goocanvas::ITEM_VISIBLE)
+    if(visibility == Goocanvas::ItemVisibility::VISIBLE)
       table->set_lines_visibility();
     else
       table->set_lines_visibility(false);
@@ -791,7 +791,7 @@ void CanvasGroupResizable::set_manipulators_visibility(Goocanvas::ItemVisibility
 
 bool CanvasGroupResizable::on_rect_enter_notify_event(const Glib::RefPtr<Goocanvas::Item>& /* target */, 
GdkEventCrossing* /* event */)
 {
-  set_manipulators_visibility(Goocanvas::ITEM_VISIBLE);
+  set_manipulators_visibility(Goocanvas::ItemVisibility::VISIBLE);
 
   return true;
 }
@@ -804,7 +804,7 @@ bool CanvasGroupResizable::on_rect_leave_notify_event(const Glib::RefPtr<Goocanv
   //Hide the manipulators if we are outside of the main area,
   //but not just because we are instead inside the manipulator itself:
   //Doesn't seem useful: if(!m_in_manipulator && (target_movable == m_child))
-  set_manipulators_visibility(Goocanvas::ITEM_INVISIBLE);
+  set_manipulators_visibility(Goocanvas::ItemVisibility::INVISIBLE);
 
 
   return false;
@@ -814,7 +814,7 @@ bool CanvasGroupResizable::on_resizer_enter_notify_event(const Glib::RefPtr<Gooc
 {
   CanvasItemMovable::on_enter_notify_event(target, event);
 
-  set_manipulators_visibility(Goocanvas::ITEM_VISIBLE);
+  set_manipulators_visibility(Goocanvas::ItemVisibility::VISIBLE);
 
   return true;
 }
@@ -827,7 +827,7 @@ bool CanvasGroupResizable::on_resizer_leave_notify_event(const Glib::RefPtr<Gooc
   //Hide the manipulators if we are outside of the main area,
   //but not just because we are instead inside the manipulator itself:
   //Doesn't seem useful: if(!m_in_manipulator && (target_movable == m_child))
-  set_manipulators_visibility(Goocanvas::ITEM_INVISIBLE);
+  set_manipulators_visibility(Goocanvas::ItemVisibility::INVISIBLE);
 
   return false;
 }
@@ -1044,9 +1044,9 @@ void CanvasGroupResizable::show_selected()
   if(!m_group_edge_manipulators)
     return;
 
-  Goocanvas::ItemVisibility edge_visibility = Goocanvas::ITEM_INVISIBLE;
+  Goocanvas::ItemVisibility edge_visibility = Goocanvas::ItemVisibility::INVISIBLE;
   if(get_selected())
-    edge_visibility = Goocanvas::ITEM_VISIBLE;
+    edge_visibility = Goocanvas::ItemVisibility::VISIBLE;
 
   //This is also set the same way if set_manipulators_visibility(),
   //in case that is called at some other time.
diff --git a/glom/utility_widgets/canvas/canvas_image_movable.cc 
b/glom/utility_widgets/canvas/canvas_image_movable.cc
index 860c94d..ca67389 100644
--- a/glom/utility_widgets/canvas/canvas_image_movable.cc
+++ b/glom/utility_widgets/canvas/canvas_image_movable.cc
@@ -212,7 +212,7 @@ void CanvasImageMovable::set_image_empty()
 
     try
     {
-      pixbuf = theme->load_icon("image-missing", Gtk::ICON_SIZE_DIALOG);
+      pixbuf = theme->load_icon("image-missing", static_cast<int>(Gtk::BuiltinIconSize::DIALOG));
     }
     catch(const Glib::Error& ex)
     {
diff --git a/glom/utility_widgets/canvas/canvas_item_movable.cc 
b/glom/utility_widgets/canvas/canvas_item_movable.cc
index 0fbb857..9048a22 100644
--- a/glom/utility_widgets/canvas/canvas_item_movable.cc
+++ b/glom/utility_widgets/canvas/canvas_item_movable.cc
@@ -52,7 +52,7 @@ CanvasItemMovable::CanvasItemMovable()
   m_drag_start_cursor_x(0.0), m_drag_start_cursor_y(0.0),
   m_drag_start_position_x(0.0), m_drag_start_position_y(0.0),
   m_drag_latest_position_x(0.0), m_drag_latest_position_y(0.0),
-  m_drag_cursor_type(Gdk::FLEUR), //arbitrary default
+  m_drag_cursor_type(Gdk::CursorType::FLEUR), //arbitrary default
   m_grid(nullptr),
   m_allow_vertical_movement(true), m_allow_horizontal_movement(true),
   m_selected(false),
@@ -95,7 +95,7 @@ bool CanvasItemMovable::on_button_press_event(const Glib::RefPtr<Goocanvas::Item
       if(canvas)
       {
         canvas->pointer_grab(item,
-          Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_RELEASE_MASK,
+          Gdk::EventMask::POINTER_MOTION_MASK | Gdk::EventMask::BUTTON_RELEASE_MASK,
           create_drag_cursor((GdkEventAny*)event, m_drag_cursor_type),
           event->time);
       }
@@ -129,14 +129,14 @@ bool CanvasItemMovable::on_motion_notify_event(const Glib::RefPtr<Goocanvas::Ite
 
   auto item = target;
 
-  if(item && m_dragging && (event->state & Gdk::BUTTON1_MASK))
+  if(item && m_dragging && (event->state & static_cast<guint>(Gdk::ModifierType::BUTTON1_MASK)))
   {
     const double offset_x = event->x - m_drag_start_cursor_x;
     const double offset_y = event->y - m_drag_start_cursor_y;
 
     // Inkscape uses the Ctrl key to restrict movement to horizontal or vertical,
     // so let's do that too.
-    if( (event->state & Gdk::CONTROL_MASK) && !m_dragging_vertical_only && !m_dragging_horizontal_only )
+    if( (event->state & static_cast<guint>(Gdk::ModifierType::CONTROL_MASK)) && !m_dragging_vertical_only && 
!m_dragging_horizontal_only )
     {
       //Decide whether to restrict to vertical or horizontal movement:
       //Whichever has the greatest offset already will be the axis that we restrict movement to.
@@ -151,7 +151,7 @@ bool CanvasItemMovable::on_motion_notify_event(const Glib::RefPtr<Goocanvas::Ite
         m_dragging_horizontal_only = false;
       }
     }
-    else if( !(event->state & Gdk::CONTROL_MASK) && (m_dragging_vertical_only || m_dragging_horizontal_only))
+    else if( !(event->state & static_cast<guint>(Gdk::ModifierType::CONTROL_MASK)) && 
(m_dragging_vertical_only || m_dragging_horizontal_only))
     {
       //Ctrl was released, so allow full movement again:
       m_dragging_vertical_only = false;
diff --git a/glom/utility_widgets/canvas/canvas_text_movable.h 
b/glom/utility_widgets/canvas/canvas_text_movable.h
index b8e5c15..fe61d06 100644
--- a/glom/utility_widgets/canvas/canvas_text_movable.h
+++ b/glom/utility_widgets/canvas/canvas_text_movable.h
@@ -32,12 +32,12 @@ class CanvasTextMovable
     public CanvasItemMovable
 {
 private:
-  explicit CanvasTextMovable(const Glib::ustring& string = Glib::ustring(), double x = 0.0, double y = 0.0, 
double width = 0.0, Goocanvas::AnchorType anchor = Goocanvas::ANCHOR_NORTH_WEST);
+  explicit CanvasTextMovable(const Glib::ustring& string = Glib::ustring(), double x = 0.0, double y = 0.0, 
double width = 0.0, Goocanvas::AnchorType anchor = Goocanvas::AnchorType::NORTH_WEST);
 
   void init();
 
 public:
-  static Glib::RefPtr<CanvasTextMovable> create(const Glib::ustring& string = Glib::ustring(), double x = 
0.0, double y = 0.0, double width = 0.0, Goocanvas::AnchorType anchor = Goocanvas::ANCHOR_NORTH_WEST);
+  static Glib::RefPtr<CanvasTextMovable> create(const Glib::ustring& string = Glib::ustring(), double x = 
0.0, double y = 0.0, double width = 0.0, Goocanvas::AnchorType anchor = Goocanvas::AnchorType::NORTH_WEST);
 
   enum class Corners
   {
diff --git a/glom/utility_widgets/dialog_image_load_progress.cc 
b/glom/utility_widgets/dialog_image_load_progress.cc
index 160cdea..3db1009 100644
--- a/glom/utility_widgets/dialog_image_load_progress.cc
+++ b/glom/utility_widgets/dialog_image_load_progress.cc
@@ -141,12 +141,12 @@ void DialogImageLoadProgress::on_stream_read(const Glib::RefPtr<Gio::AsyncResult
     }
     else
       // We are done loading the image, close the progress dialog
-      response(Gtk::RESPONSE_ACCEPT);
+      response(Gtk::ResponseType::ACCEPT);
   }
   catch(const Glib::Error& ex)
   {
     error(ex.what());
-    response(Gtk::RESPONSE_REJECT);
+    response(Gtk::ResponseType::REJECT);
   }
 }
 
@@ -162,12 +162,12 @@ void DialogImageLoadProgress::on_read_next(unsigned int at)
 
 void DialogImageLoadProgress::error(const Glib::ustring& error_message)
 {
-  Gtk::MessageDialog dialog(*this, Glib::ustring::compose(_("Error loading %1"), m_file->get_parse_name()), 
Gtk::MESSAGE_ERROR);
+  Gtk::MessageDialog dialog(*this, Glib::ustring::compose(_("Error loading %1"), m_file->get_parse_name()), 
false, Gtk::MessageType::ERROR);
   dialog.set_title(_("Error loading image"));
   dialog.set_secondary_text(error_message);
 
   dialog.run();
-  response(Gtk::RESPONSE_REJECT);
+  response(Gtk::ResponseType::REJECT);
 }
 
 DialogImageLoadProgress::UniquePtr DialogImageLoadProgress::get_image_data()
diff --git a/glom/utility_widgets/dialog_image_save_progress.cc 
b/glom/utility_widgets/dialog_image_save_progress.cc
index 9a8847a..3b71849 100644
--- a/glom/utility_widgets/dialog_image_save_progress.cc
+++ b/glom/utility_widgets/dialog_image_save_progress.cc
@@ -84,7 +84,7 @@ void DialogImageSaveProgress::save(const Glib::ustring& uri)
   catch(const Gio::Error& ex)
   {
     std::cerr << G_STRFUNC << ": exception: " << ex.what() << std::endl;
-    response(Gtk::RESPONSE_REJECT);
+    response(Gtk::ResponseType::REJECT);
     return;
   }
 
@@ -98,7 +98,7 @@ void DialogImageSaveProgress::save(const Glib::ustring& uri)
   catch(const Gio::Error& ex)
   {
     std::cerr << G_STRFUNC << ": exception: " << ex.what() << std::endl;
-    response(Gtk::RESPONSE_REJECT);
+    response(Gtk::ResponseType::REJECT);
     return;
   }
 }
@@ -122,23 +122,23 @@ void DialogImageSaveProgress::on_stream_write(const Glib::RefPtr<Gio::AsyncResul
       Glib::signal_idle().connect(sigc::bind_return(sigc::bind(sigc::mem_fun(*this, 
&DialogImageSaveProgress::on_write_next), offset + size), false));
     else
       // We are done saving the image, close the progress dialog
-      response(Gtk::RESPONSE_ACCEPT);
+      response(Gtk::ResponseType::ACCEPT);
   }
   catch(const Glib::Error& ex)
   {
     error(ex.what());
-    response(Gtk::RESPONSE_REJECT);
+    response(Gtk::ResponseType::REJECT);
   }
 }
 
 void DialogImageSaveProgress::error(const Glib::ustring& error_message)
 {
-  Gtk::MessageDialog dialog(*this, _("Error Saving"), Gtk::MESSAGE_ERROR);
+  Gtk::MessageDialog dialog(*this, _("Error Saving"), false, Gtk::MessageType::ERROR);
   dialog.set_title(_("Error saving image"));
   dialog.set_secondary_text(error_message);
 
   dialog.run();
-  response(Gtk::RESPONSE_REJECT);
+  response(Gtk::ResponseType::REJECT);
 }
 
 void DialogImageSaveProgress::on_write_next(unsigned int at)
diff --git a/glom/utility_widgets/eggspreadtablemm/test_spreadtablednd.cc 
b/glom/utility_widgets/eggspreadtablemm/test_spreadtablednd.cc
index ffffbd2..1cfea7d 100644
--- a/glom/utility_widgets/eggspreadtablemm/test_spreadtablednd.cc
+++ b/glom/utility_widgets/eggspreadtablemm/test_spreadtablednd.cc
@@ -37,7 +37,7 @@
 static const guint INITIAL_HSPACING = 2;
 static const guint INITIAL_VSPACING = 2;
 static const guint INITIAL_LINES = 3;
-static const Gtk::Align INITIAL_HALIGN = Gtk::ALIGN_FILL;
+static const Gtk::Align INITIAL_HALIGN = Gtk::Align::FILL;
 
 static Egg::SpreadTableDnd *paper = nullptr;
 static Gtk::ComboBoxText* combo_halign = nullptr;
@@ -80,7 +80,7 @@ populate_spread_table_wrappy(Egg::SpreadTableDnd* spread_table)
       eventbox->add(*frame);
 
       label->set_line_wrap();
-      label->set_line_wrap_mode(Pango::WRAP_WORD);
+      label->set_line_wrap_mode(Pango::WrapMode::WORD);
       label->set_width_chars(10);
 
       frame->set_halign(child_halign);
@@ -110,7 +110,7 @@ on_spinbutton_spacing_changed(Gtk::SpinButton* spinbutton, Gtk::Orientation orie
 {
   const auto state = spinbutton->get_value_as_int();
 
-  if(orientation == Gtk::ORIENTATION_HORIZONTAL)
+  if(orientation == Gtk::Orientation::HORIZONTAL)
     paper->set_horizontal_spacing(state);
   else
     paper->set_vertical_spacing(state);
@@ -150,9 +150,9 @@ static Gtk::Window *
 create_window()
 {
   auto window = new Gtk::Window();
-  auto hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 2));
+  auto hbox = Gtk::manage(new Gtk::Box(Gtk::Orientation::HORIZONTAL, 2));
   hbox->show();
-  auto vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 6));
+  auto vbox = Gtk::manage(new Gtk::Box(Gtk::Orientation::VERTICAL, 6));
   vbox->show();
 
   window->set_margin (8);
@@ -165,14 +165,14 @@ create_window()
   hbox->pack_start(*frame, true, true, 0);
 
   auto swindow = Gtk::manage(new Gtk::ScrolledWindow());
-  swindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+  swindow->set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
 
   swindow->show();
   frame->add(*swindow);
 
   paper =
     Gtk::manage(new Egg::SpreadTableDnd(
-      Gtk::ORIENTATION_VERTICAL,
+      Gtk::Orientation::VERTICAL,
       INITIAL_LINES));
 
   paper->set_vertical_spacing (INITIAL_VSPACING);
@@ -184,7 +184,7 @@ create_window()
   /* Add SpreadTable test control frame */
   auto expander = Gtk::manage(new Gtk::Expander("SpreadTable controls"));
   expander->set_expanded();
-  auto paper_cntl = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 2));
+  auto paper_cntl = Gtk::manage(new Gtk::Box(Gtk::Orientation::VERTICAL, 2));
   paper_cntl->show();;
   expander->show();
   expander->add(*paper_cntl);
@@ -204,7 +204,7 @@ create_window()
     sigc::ptr_fun(&on_combo_orientation_changed));
 
   /* Add horizontal/vertical spacing controls */
-  hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 2));
+  hbox = Gtk::manage(new Gtk::Box(Gtk::Orientation::HORIZONTAL, 2));
   hbox->show();
 
   auto label = Gtk::manage(new Gtk::Label("H Spacing"));
@@ -221,15 +221,15 @@ create_window()
   spinbutton->signal_changed().connect(
     sigc::bind(
       sigc::ptr_fun(&on_spinbutton_spacing_changed),
-      spinbutton, Gtk::ORIENTATION_HORIZONTAL));
+      spinbutton, Gtk::Orientation::HORIZONTAL));
   spinbutton->signal_value_changed().connect(
     sigc::bind(
       sigc::ptr_fun(&on_spinbutton_spacing_changed),
-      spinbutton, Gtk::ORIENTATION_HORIZONTAL));
+      spinbutton, Gtk::Orientation::HORIZONTAL));
 
   paper_cntl->pack_start(*hbox, false, false, 0);
 
-  hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 2));
+  hbox = Gtk::manage(new Gtk::Box(Gtk::Orientation::HORIZONTAL, 2));
   hbox->show();
 
   label =  Gtk::manage(new Gtk::Label("V Spacing"));
@@ -246,11 +246,11 @@ create_window()
   spinbutton->signal_changed().connect(
     sigc::bind(
       sigc::ptr_fun(&on_spinbutton_spacing_changed),
-      spinbutton, Gtk::ORIENTATION_VERTICAL));
+      spinbutton, Gtk::Orientation::VERTICAL));
   spinbutton->signal_value_changed().connect(
     sigc::bind(
       sigc::ptr_fun(&on_spinbutton_spacing_changed),
-      spinbutton, Gtk::ORIENTATION_VERTICAL));
+      spinbutton, Gtk::Orientation::VERTICAL));
 
   paper_cntl->pack_start(*hbox, false, false, 0);
 
@@ -274,7 +274,7 @@ create_window()
       togglebutton, child_accepts_drops));
 
   /* Add lines controls */
-  hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 2));
+  hbox = Gtk::manage(new Gtk::Box(Gtk::Orientation::HORIZONTAL, 2));
   hbox->show();
 
   label = Gtk::manage(new Gtk::Label("Lines"));
@@ -299,7 +299,7 @@ create_window()
   /* Add test items control frame */
   expander = Gtk::manage(new Gtk::Expander("Test item controls"));
   expander->set_expanded();
-  auto items_cntl = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 2));
+  auto items_cntl = Gtk::manage(new Gtk::Box(Gtk::Orientation::VERTICAL, 2));
   items_cntl->show();
   expander->show();
   expander->add(*items_cntl);
@@ -325,7 +325,7 @@ create_window()
   /* Embed another dnd spread table */
   auto spreadtable_inner =
     Gtk::manage(new Egg::SpreadTableDnd(
-      Gtk::ORIENTATION_VERTICAL,
+      Gtk::Orientation::VERTICAL,
       INITIAL_LINES));
 
   spreadtable_inner->set_vertical_spacing(INITIAL_VSPACING);
diff --git a/glom/utility_widgets/filechooserdialog_saveextras.cc 
b/glom/utility_widgets/filechooserdialog_saveextras.cc
index 238d19d..4ee051a 100644
--- a/glom/utility_widgets/filechooserdialog_saveextras.cc
+++ b/glom/utility_widgets/filechooserdialog_saveextras.cc
@@ -30,14 +30,14 @@ namespace Glom
 
 FileChooserDialog_SaveExtras::FileChooserDialog_SaveExtras(const Glib::ustring& title, 
Gtk::FileChooserAction action)
 : Gtk::FileChooserDialog(title, action),
-  m_extra_widget(Gtk::ORIENTATION_VERTICAL)
+  m_extra_widget(Gtk::Orientation::VERTICAL)
 {
   create_child_widgets();
 }
 
 FileChooserDialog_SaveExtras::FileChooserDialog_SaveExtras(Gtk::Window& parent, const Glib::ustring& title, 
Gtk::FileChooserAction action)
 : Gtk::FileChooserDialog(parent, title, action),
-  m_extra_widget(Gtk::ORIENTATION_VERTICAL)
+  m_extra_widget(Gtk::Orientation::VERTICAL)
 {
   create_child_widgets();
 }
@@ -56,18 +56,18 @@ void FileChooserDialog_SaveExtras::set_extra_message(const Glib::ustring& messag
 void FileChooserDialog_SaveExtras::create_child_widgets()
 {
   //m_extra_widget.pack_start(m_label_extra_message);
-  m_label_extra_message.set_halign(Gtk::ALIGN_START);
-  m_label_extra_message.set_valign(Gtk::ALIGN_CENTER);
+  m_label_extra_message.set_halign(Gtk::Align::START);
+  m_label_extra_message.set_valign(Gtk::Align::CENTER);
 
   auto frame = Gtk::manage(new Gtk::Frame());
   auto frame_label = Gtk::manage(new Gtk::Label());
   frame_label->set_markup(UiUtils::bold_message(_("New Database")));
   frame_label->show();
   frame->set_label_widget(*frame_label);
-  frame->set_shadow_type(Gtk::SHADOW_NONE);
+  frame->set_shadow_type(Gtk::ShadowType::NONE);
   frame->show();
 
-  auto vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 
Utils::to_utype(UiUtils::DefaultSpacings::SMALL)));
+  auto vbox = Gtk::manage(new Gtk::Box(Gtk::Orientation::VERTICAL, 
Utils::to_utype(UiUtils::DefaultSpacings::SMALL)));
   vbox->set_margin_start(Utils::to_utype(UiUtils::DefaultSpacings::LARGE));
   vbox->set_margin_top(Utils::to_utype(UiUtils::DefaultSpacings::SMALL));
   frame->add(*vbox);
@@ -77,13 +77,13 @@ void FileChooserDialog_SaveExtras::create_child_widgets()
 
   auto label_newdb = Gtk::manage(new Gtk::Label(_("Please choose a human-readable title for the new 
database. You can change this later in the database properties. It may contain any characters.")));
   vbox->pack_start(*label_newdb);
-  label_newdb->set_halign(Gtk::ALIGN_START);
-  label_newdb->set_valign(Gtk::ALIGN_CENTER);
+  label_newdb->set_halign(Gtk::Align::START);
+  label_newdb->set_valign(Gtk::Align::CENTER);
   label_newdb->show();
 
-  auto box_label = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 
Utils::to_utype(UiUtils::DefaultSpacings::LARGE)));
+  auto box_label = Gtk::manage(new Gtk::Box(Gtk::Orientation::HORIZONTAL, 
Utils::to_utype(UiUtils::DefaultSpacings::LARGE)));
   auto label_title = Gtk::manage(new Gtk::Label(_("_Title:"), true));
-  box_label->pack_start(*label_title, Gtk::PACK_SHRINK);
+  box_label->pack_start(*label_title, Gtk::PackOptions::PACK_SHRINK);
   label_title->show();
   box_label->pack_start(m_entry_title);
   m_entry_title.get_accessible()->set_name(_("Title"));
diff --git a/glom/utility_widgets/filechooserdialog_saveextras.h 
b/glom/utility_widgets/filechooserdialog_saveextras.h
index fb5e4c8..5235738 100644
--- a/glom/utility_widgets/filechooserdialog_saveextras.h
+++ b/glom/utility_widgets/filechooserdialog_saveextras.h
@@ -39,8 +39,8 @@ namespace Glom
 class FileChooserDialog_SaveExtras : public Gtk::FileChooserDialog
 {
 public:
-  explicit FileChooserDialog_SaveExtras(const Glib::ustring& title, Gtk::FileChooserAction action = 
Gtk::FILE_CHOOSER_ACTION_OPEN);
-  FileChooserDialog_SaveExtras(Gtk::Window& parent, const Glib::ustring& title, Gtk::FileChooserAction 
action = Gtk::FILE_CHOOSER_ACTION_OPEN);
+  explicit FileChooserDialog_SaveExtras(const Glib::ustring& title, Gtk::FileChooserAction action = 
Gtk::FileChooserAction::OPEN);
+  FileChooserDialog_SaveExtras(Gtk::Window& parent, const Glib::ustring& title, Gtk::FileChooserAction 
action = Gtk::FileChooserAction::OPEN);
 
   void set_extra_message(const Glib::ustring& message);
   void set_extra_newdb_title(const Glib::ustring& title);
diff --git a/glom/utility_widgets/flowtable.cc b/glom/utility_widgets/flowtable.cc
index 7c00928..4f76590 100644
--- a/glom/utility_widgets/flowtable.cc
+++ b/glom/utility_widgets/flowtable.cc
@@ -135,14 +135,14 @@ void FlowTable::insert(Gtk::Widget* first, Gtk::Widget* second, int index, bool
 {
   if(first && second)
   {
-    auto hbox = new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, get_horizontal_spacing());
+    auto hbox = new Gtk::Box(Gtk::Orientation::HORIZONTAL, get_horizontal_spacing());
     m_list_hboxes.emplace_back(hbox); //So we can delete it whenever necessary.
 
-    hbox->pack_start(*first, Gtk::PACK_SHRINK);
-    hbox->pack_start(*second, expand ? Gtk::PACK_EXPAND_WIDGET : Gtk::PACK_SHRINK);
+    hbox->pack_start(*first, Gtk::PackOptions::PACK_SHRINK);
+    hbox->pack_start(*second, expand ? Gtk::PackOptions::PACK_EXPAND_WIDGET : Gtk::PackOptions::PACK_SHRINK);
     hbox->show();
 
-    hbox->set_halign(Gtk::ALIGN_FILL);
+    hbox->set_halign(Gtk::Align::FILL);
     Egg::SpreadTableDnd::insert_child(*hbox, index);
     //std::cout << "DEBUG: inserted hbox=" << hbox << " for first=" << first << std::endl;
 
@@ -150,7 +150,7 @@ void FlowTable::insert(Gtk::Widget* first, Gtk::Widget* second, int index, bool
   }
   else if(first)
   {
-    first->set_halign(expand ? Gtk::ALIGN_FILL : Gtk::ALIGN_START);
+    first->set_halign(expand ? Gtk::Align::FILL : Gtk::Align::START);
     Egg::SpreadTableDnd::append_child(*first);
     //std::cout << "DEBUG: inserted first=" << first << std::endl;
     m_list_first_widgets.emplace_back(first);
diff --git a/glom/utility_widgets/imageglom.cc b/glom/utility_widgets/imageglom.cc
index ce35cd9..bbcee56 100644
--- a/glom/utility_widgets/imageglom.cc
+++ b/glom/utility_widgets/imageglom.cc
@@ -142,7 +142,7 @@ void ImageGlom::init()
 
   setup_menu_usermode();
 
-  m_frame.set_shadow_type(Gtk::SHADOW_ETCHED_IN); //Without this, the image widget has no borders and is 
completely invisible when empty.
+  m_frame.set_shadow_type(Gtk::ShadowType::ETCHED_IN); //Without this, the image widget has no borders and 
is completely invisible when empty.
   m_frame.show();
 
   add(m_frame);
@@ -457,11 +457,11 @@ void ImageGlom::show_image_data()
     }
     else if(icon)
     {
-      m_image->set(icon, Gtk::ICON_SIZE_DIALOG);
+      m_image->set(icon, Gtk::BuiltinIconSize::DIALOG);
     }
     else
     {
-      m_image->set_from_icon_name("image-missing", Gtk::ICON_SIZE_DIALOG);
+      m_image->set_from_icon_name("image-missing", Gtk::BuiltinIconSize::DIALOG);
     }
   }
 }
@@ -493,7 +493,7 @@ Glib::RefPtr<Gdk::Pixbuf> ImageGlom::get_scaled_image()
       //Don't set a new pixbuf if the dimensions have not changed:
       Glib::RefPtr<Gdk::Pixbuf> pixbuf_in_image;
 
-      if(m_image->get_storage_type() == Gtk::IMAGE_PIXBUF) //Prevent warning.
+      if(m_image->get_storage_type() == Gtk::ImageType::PIXBUF) //Prevent warning.
         pixbuf_in_image = m_image->get_pixbuf();
 
       if( !pixbuf_in_image || !pixbuf_scaled || (pixbuf_in_image->get_height() != 
pixbuf_scaled->get_height()) || (pixbuf_in_image->get_width() != pixbuf_scaled->get_width()) )
@@ -542,7 +542,7 @@ void ImageGlom::on_menupopup_activate_open_file_with()
   if(pApp)
     dialog.set_transient_for(*pApp);
 
-  if(dialog.run() != Gtk::RESPONSE_OK)
+  if(dialog.run() != Gtk::ResponseType::OK)
     return;
 
   auto app_info = dialog.get_app_info();
@@ -702,17 +702,17 @@ void ImageGlom::on_menupopup_activate_save_file()
 {
   auto pApp = get_appwindow();
 
-  Gtk::FileChooserDialog dialog(_("Save Image"), Gtk::FILE_CHOOSER_ACTION_SAVE);
+  Gtk::FileChooserDialog dialog(_("Save Image"), Gtk::FileChooserAction::SAVE);
   if(pApp)
     dialog.set_transient_for(*pApp);
 
   set_file_filter_images(dialog);
 
-  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  dialog.add_button(_("_Save"), Gtk::RESPONSE_OK);
+  dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  dialog.add_button(_("_Save"), Gtk::ResponseType::OK);
   const auto response = dialog.run();
   dialog.hide();
-  if(response != Gtk::RESPONSE_OK)
+  if(response != Gtk::ResponseType::OK)
     return;
 
   const auto uri = dialog.get_uri();
@@ -791,18 +791,18 @@ void ImageGlom::on_menupopup_activate_select_file()
 
   auto pApp = get_appwindow();
 
-  Gtk::FileChooserDialog dialog(_("Choose Image"), Gtk::FILE_CHOOSER_ACTION_OPEN);
+  Gtk::FileChooserDialog dialog(_("Choose Image"), Gtk::FileChooserAction::OPEN);
   if(pApp)
     dialog.set_transient_for(*pApp);
 
   set_file_filter_images(dialog);
 
-  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  dialog.add_button(_("Select"), Gtk::RESPONSE_OK);
+  dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  dialog.add_button(_("Select"), Gtk::ResponseType::OK);
   int response = dialog.run();
   dialog.hide();
 
-  if((response != Gtk::RESPONSE_CANCEL) && (response != Gtk::RESPONSE_DELETE_EVENT))
+  if((response != Gtk::ResponseType::CANCEL) && (response != Gtk::ResponseType::DELETE_EVENT))
   {
     const auto uri = dialog.get_uri();
     if(!uri.empty())
@@ -819,7 +819,7 @@ void ImageGlom::on_menupopup_activate_select_file()
 
         dialog_progress->load(uri);
 
-        if(dialog_progress->run() == Gtk::RESPONSE_ACCEPT)
+        if(dialog_progress->run() == Gtk::ResponseType::ACCEPT)
         {
           // This takes ownership of the GdaBinary from the dialog:
           auto image_data = dialog_progress->get_image_data();
diff --git a/glom/utility_widgets/layouttoolbarbutton.cc b/glom/utility_widgets/layouttoolbarbutton.cc
index 8dc56db..7581672 100644
--- a/glom/utility_widgets/layouttoolbarbutton.cc
+++ b/glom/utility_widgets/layouttoolbarbutton.cc
@@ -47,8 +47,8 @@ LayoutToolbarButton::LayoutToolbarButton(const std::string& icon_name, LayoutWid
   std::vector<Gtk::TargetEntry> targetentries;
   targetentries.emplace_back(Gtk::TargetEntry(get_target()));
 
-  drag_source_set(targetentries, Gdk::MODIFIER_MASK,
-                  Gdk::ACTION_COPY | Gdk::ACTION_MOVE);
+  drag_source_set(targetentries, Gdk::ModifierType::MODIFIER_MASK,
+                  Gdk::DragAction::COPY | Gdk::DragAction::MOVE);
   set_tooltip_text(tooltip);
   set_label(title);
 }
diff --git a/glom/utility_widgets/layoutwidgetbase.cc b/glom/utility_widgets/layoutwidgetbase.cc
index 46b5e87..3893e4a 100644
--- a/glom/utility_widgets/layoutwidgetbase.cc
+++ b/glom/utility_widgets/layoutwidgetbase.cc
@@ -80,6 +80,28 @@ void LayoutWidgetBase::set_read_only(bool /* read_only */)
 {
 }
 
+namespace {
+
+// Based on _gtkmm_align_float_from_enum().
+static float
+get_align_float_from_enum(Gtk::Align value)
+{
+  //Choose the float alignment value appropriate for this human-readable enum value:
+  switch(value)
+  {
+    case Gtk::Align::CENTER:
+      return 0.5; break;
+    case Gtk::Align::END:
+      return 1.0; break;
+    case Gtk::Align::START:
+    default:
+      return 0.0; break;
+  }
+}
+
+} // namespace }
+
+
 void LayoutWidgetBase::apply_formatting(Gtk::Widget& widget, const LayoutItem_WithFormatting& layout_item)
 {
   auto widget_to_change = &widget;
@@ -110,9 +132,9 @@ void LayoutWidgetBase::apply_formatting(Gtk::Widget& widget, const LayoutItem_Wi
     const Formatting::HorizontalAlignment alignment =
      layout_item.get_formatting_used_horizontal_alignment(true /* for details view */);
     const Gtk::Justification justification =
-      (alignment == Formatting::HorizontalAlignment::LEFT ? Gtk::JUSTIFY_LEFT : Gtk::JUSTIFY_RIGHT);
+      (alignment == Formatting::HorizontalAlignment::LEFT ? Gtk::Justification::LEFT : 
Gtk::Justification::RIGHT);
     const Gtk::Align x_align =
-      (alignment == Formatting::HorizontalAlignment::LEFT ? Gtk::ALIGN_START : Gtk::ALIGN_END);
+      (alignment == Formatting::HorizontalAlignment::LEFT ? Gtk::Align::START : Gtk::Align::END);
 
     auto label = dynamic_cast<Gtk::Label*>(widget_to_change);
     if(label)
@@ -122,7 +144,7 @@ void LayoutWidgetBase::apply_formatting(Gtk::Widget& widget, const LayoutItem_Wi
       //so we use set_xalign() to get the effect even for single lines of text.
       //See http://www.murrayc.com/permalink/2015/03/02/gtk-aligning-justification-in-text-widgets/
       label->set_justify(justification);
-      label->set_xalign(x_align);
+      label->set_xalign(get_align_float_from_enum(x_align));
     } else {
       auto textview = dynamic_cast<Gtk::TextView*>(widget_to_change);
       if(textview)
diff --git a/glom/utility_widgets/notebook_noframe.cc b/glom/utility_widgets/notebook_noframe.cc
index 719761b..18e64da 100644
--- a/glom/utility_widgets/notebook_noframe.cc
+++ b/glom/utility_widgets/notebook_noframe.cc
@@ -30,15 +30,15 @@ namespace Glom
 
 NotebookNoFrame::NotebookNoFrame()
 {
-  set_orientation(Gtk::ORIENTATION_VERTICAL);
+  set_orientation(Gtk::Orientation::VERTICAL);
   set_spacing(Utils::to_utype(UiUtils::DefaultSpacings::SMALL));
 
-  m_box_top.set_orientation(Gtk::ORIENTATION_HORIZONTAL);
+  m_box_top.set_orientation(Gtk::Orientation::HORIZONTAL);
   m_box_top.set_spacing(Utils::to_utype(UiUtils::DefaultSpacings::SMALL));
-  m_box_top.pack_start(m_box_action_left, Gtk::PACK_SHRINK);
+  m_box_top.pack_start(m_box_action_left, Gtk::PackOptions::PACK_SHRINK);
   m_box_top.pack_start(m_box_tabs);
-  m_box_top.pack_end(m_box_action_right, Gtk::PACK_SHRINK);
-  pack_start(m_box_top, Gtk::PACK_SHRINK);
+  m_box_top.pack_end(m_box_action_right, Gtk::PackOptions::PACK_SHRINK);
+  pack_start(m_box_top, Gtk::PackOptions::PACK_SHRINK);
 
   m_box_top.show();
 
@@ -107,14 +107,14 @@ void NotebookNoFrame::on_visible_child_changed()
 
 void NotebookNoFrame::set_action_widget(Gtk::Widget* widget, Gtk::PackType pack_type)
 {
-  if(pack_type == Gtk::PACK_START)
+  if(pack_type == Gtk::PackType::START)
   {
-    m_box_action_left.pack_start(*widget, Gtk::PACK_SHRINK);
+    m_box_action_left.pack_start(*widget, Gtk::PackOptions::PACK_SHRINK);
     m_box_action_left.show();
   }
   else
   {
-    m_box_action_right.pack_end(*widget, Gtk::PACK_SHRINK);
+    m_box_action_right.pack_end(*widget, Gtk::PackOptions::PACK_SHRINK);
     m_box_action_right.show();
   }
 }
diff --git a/glom/utility_widgets/notebooklabelglom.cc b/glom/utility_widgets/notebooklabelglom.cc
index b309359..d56d481 100644
--- a/glom/utility_widgets/notebooklabelglom.cc
+++ b/glom/utility_widgets/notebooklabelglom.cc
@@ -46,7 +46,7 @@ void NotebookLabel::init()
 {
   add(m_label);
   m_label.show();
-  set_events (Gdk::ALL_EVENTS_MASK);
+  set_events (Gdk::EventMask::ALL_EVENTS_MASK);
   set_visible_window (false);
   setup_menu(this);
 }
@@ -90,11 +90,11 @@ void NotebookLabel::on_menu_delete_activate()
     message = _("Delete whole notebook?");
   }
 
-  Gtk::MessageDialog dlg (message, false, Gtk::MESSAGE_QUESTION,
-                          Gtk::BUTTONS_YES_NO, true);
+  Gtk::MessageDialog dlg (message, false, Gtk::MessageType::QUESTION,
+                          Gtk::ButtonsType::YES_NO, true);
   switch(dlg.run())
   {
-    case Gtk::RESPONSE_YES:
+    case static_cast<int>(Gtk::ResponseType::YES):
       m_notebook->delete_from_layout();
       break;
     default:
diff --git a/glom/utility_widgets/placeholder.cc b/glom/utility_widgets/placeholder.cc
index 53d0730..bed806c 100644
--- a/glom/utility_widgets/placeholder.cc
+++ b/glom/utility_widgets/placeholder.cc
@@ -24,7 +24,7 @@ namespace Glom
 {
 
 PlaceHolder::PlaceHolder()
-: Gtk::Box(Gtk::ORIENTATION_VERTICAL),
+: Gtk::Box(Gtk::Orientation::VERTICAL),
   m_pChild(nullptr)
 {
 }
diff --git a/glom/utils_ui.cc b/glom/utils_ui.cc
index 854e1f8..ba28bdf 100644
--- a/glom/utils_ui.cc
+++ b/glom/utils_ui.cc
@@ -121,7 +121,7 @@ int UiUtils::dialog_run_with_help(Gtk::Dialog* dialog, const Glib::ustring& id)
 {
   int result = dialog->run();
 
-  while (result == Gtk::RESPONSE_HELP)
+  while (result == Gtk::ResponseType::HELP)
   {
     show_help(dialog, id);
     result = dialog->run();
@@ -162,14 +162,14 @@ void UiUtils::show_help(Gtk::Window* parent_window, const Glib::ustring& id)
   catch(const std::exception& ex)
   {
     const auto message = Glib::ustring::compose(_("Could not display help: %1"), Glib::ustring(ex.what()));
-    Gtk::MessageDialog dialog(message, false, Gtk::MESSAGE_ERROR);
+    Gtk::MessageDialog dialog(message, false, Gtk::MessageType::ERROR);
     dialog.run();
   }
 }
 
 void UiUtils::show_ok_dialog(const Glib::ustring& title, const Glib::ustring& message, Gtk::Window* parent, 
Gtk::MessageType message_type)
 {
-  Gtk::MessageDialog dialog("<b>" + title + "</b>", true /* markup */, message_type, Gtk::BUTTONS_OK);
+  Gtk::MessageDialog dialog("<b>" + title + "</b>", true /* markup */, message_type, Gtk::ButtonsType::OK);
   dialog.set_secondary_text(message);
   if(parent)
     dialog.set_transient_for(*parent);
@@ -481,21 +481,21 @@ Glib::RefPtr<Gdk::Pixbuf> UiUtils::image_scale_keeping_ratio(const Glib::RefPtr<
    return Glib::RefPtr<Gdk::Pixbuf>(); //This shouldn't happen anyway. It seems to happen sometimes though, 
when ratio is very small.
  }
 
-  return pixbuf->scale_simple(target_width, target_height, Gdk::INTERP_NEAREST);
+  return pixbuf->scale_simple(target_width, target_height, Gdk::InterpType::NEAREST);
 }
 
 bool UiUtils::show_warning_no_records_found(Gtk::Window& transient_for)
 {
   const auto message = _("Your find criteria did not match any records in the table.");
 
-  Gtk::MessageDialog dialog(UiUtils::bold_message(_("No Records Found")), true, Gtk::MESSAGE_WARNING, 
Gtk::BUTTONS_NONE);
+  Gtk::MessageDialog dialog(UiUtils::bold_message(_("No Records Found")), true, Gtk::MessageType::WARNING, 
Gtk::ButtonsType::NONE);
   dialog.set_secondary_text(message);
   dialog.set_transient_for(transient_for);
 
-  dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL);
-  dialog.add_button(_("New Find"), Gtk::RESPONSE_OK);
+  dialog.add_button(_("_Cancel"), Gtk::ResponseType::CANCEL);
+  dialog.add_button(_("New Find"), Gtk::ResponseType::OK);
 
-  const auto find_again = (dialog.run() == Gtk::RESPONSE_OK);
+  const auto find_again = (dialog.run() == Gtk::ResponseType::OK);
   return find_again;
 }
 
@@ -504,7 +504,7 @@ void UiUtils::show_report_in_browser(const std::string& filepath, Gtk::Window* p
 {
   //Give the user a clue, in case the web browser opens in the background, for instance in a new tab:
   if(parent_window)
-    show_ok_dialog(_("Report Finished"), _("The report will now be opened in your web browser."), 
*parent_window, Gtk::MESSAGE_INFO);
+    show_ok_dialog(_("Report Finished"), _("The report will now be opened in your web browser."), 
*parent_window, Gtk::MessageType::INFO);
 
 #ifdef G_OS_WIN32
   // gtk_show_uri doesn't seem to work on Win32, at least not for local files
@@ -546,7 +546,7 @@ bool UiUtils::script_check_for_pygtk2_with_warning(const Glib::ustring& script,
   if(!Utils::script_check_for_pygtk2(script))
   {
     UiUtils::show_ok_dialog(_("Script Uses PyGTK 2"),
-      _("Glom cannot run this script because it uses pygtk 2, but Glom uses GTK+ 3, and attempting to use 
pygtk 2 would cause Glom to crash."), parent_window, Gtk::MESSAGE_ERROR);
+      _("Glom cannot run this script because it uses pygtk 2, but Glom uses GTK+ 3, and attempting to use 
pygtk 2 would cause Glom to crash."), parent_window, Gtk::MessageType::ERROR);
     return false;
   }
 
diff --git a/glom/variablesmap.cc b/glom/variablesmap.cc
index 91c5b54..222cece 100644
--- a/glom/variablesmap.cc
+++ b/glom/variablesmap.cc
@@ -173,7 +173,7 @@ void VariablesMap::transfer_one_widget(Gtk::Widget* pWidget, bool to_variable)
     else
     {
       pCalendar->select_day(pVar->get_day());
-      pCalendar->select_month(pVar->get_month(), pVar->get_year());
+      pCalendar->select_month(static_cast<guint>(pVar->get_month()), pVar->get_year());
     }
   }
 }
diff --git a/glom/window_boxholder.cc b/glom/window_boxholder.cc
index 2429969..b29d74f 100644
--- a/glom/window_boxholder.cc
+++ b/glom/window_boxholder.cc
@@ -33,7 +33,7 @@ Window_BoxHolder::Window_BoxHolder(Box_WithButtons* pBox, const Glib::ustring& t
     set_title(title);
 
   //Set default position:
-  set_position(Gtk::WIN_POS_CENTER_ON_PARENT);
+  set_position(Gtk::WindowPosition::CENTER_ON_PARENT);
 
   pBox->signal_cancelled.connect(sigc::mem_fun(*this, &Window_BoxHolder::on_box_cancelled));
 


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