[gnome-builder] Use g_object_class_install_properties() and the generic signal marshaller



commit 60556f3200969c7eac5f71c07b194266e261da37
Author: Garrett Regier <garrettregier gmail com>
Date:   Mon May 4 11:53:45 2015 -0700

    Use g_object_class_install_properties() and the generic signal marshaller

 libide/autotools/ide-autotools-build-system.c   |    4 +-
 libide/autotools/ide-autotools-build-task.c     |   12 +--
 libide/autotools/ide-autotools-builder.c        |    6 +-
 libide/autotools/ide-autotools-project-miner.c  |    4 +-
 libide/autotools/ide-makecache.c                |    4 +-
 libide/clang/ide-clang-completion-item.c        |    4 +-
 libide/clang/ide-clang-translation-unit.c       |    5 +-
 libide/devhelp/ide-devhelp-search-result.c      |    3 +-
 libide/git/ide-git-buffer-change-monitor.c      |    3 +-
 libide/git/ide-git-remote-callbacks.c           |    3 +-
 libide/git/ide-git-search-index.c               |    4 +-
 libide/git/ide-git-search-result.c              |    3 +-
 libide/git/ide-git-vcs.c                        |    6 +-
 libide/ide-back-forward-item.c                  |    3 +-
 libide/ide-back-forward-list.c                  |   11 +-
 libide/ide-buffer-change-monitor.c              |    6 +-
 libide/ide-buffer-manager.c                     |   35 ++----
 libide/ide-buffer.c                             |   22 +---
 libide/ide-build-system.c                       |    4 +-
 libide/ide-context.c                            |   24 +---
 libide/ide-device-manager.c                     |   12 +-
 libide/ide-device-provider.c                    |   12 +-
 libide/ide-device.c                             |    8 +-
 libide/ide-file-settings.c                      |   22 +---
 libide/ide-file.c                               |    9 +-
 libide/ide-highlight-engine.c                   |    4 +-
 libide/ide-language.c                           |   16 +--
 libide/ide-object.c                             |    7 +-
 libide/ide-progress.c                           |    8 +-
 libide/ide-project-file.c                       |   12 +--
 libide/ide-project-info.c                       |    8 +-
 libide/ide-project-item.c                       |    4 +-
 libide/ide-project-miner.c                      |    3 +-
 libide/ide-project.c                            |    6 +-
 libide/ide-script-manager.c                     |    4 +-
 libide/ide-script.c                             |   12 +-
 libide/ide-search-context.c                     |   15 +--
 libide/ide-search-engine.c                      |    4 +-
 libide/ide-search-result.c                      |    8 +-
 libide/ide-service.c                            |   12 +-
 libide/ide-source-map.c                         |    4 +-
 libide/ide-source-snippet-chunk.c               |   12 +--
 libide/ide-source-snippet-completion-item.c     |    4 +-
 libide/ide-source-snippet-completion-provider.c |    6 +-
 libide/ide-source-snippet-context.c             |    4 +-
 libide/ide-source-snippet.c                     |   16 +--
 libide/ide-source-view-capture.c                |    3 +-
 libide/ide-source-view-mode.c                   |    3 +-
 libide/ide-source-view.c                        |  162 +++++++----------------
 libide/theatrics/ide-animation.c                |   14 +--
 libide/theatrics/ide-box-theatric.c             |   16 +--
 src/commands/gb-command-bar-item.c              |    4 +-
 src/commands/gb-command-bar.c                   |    6 +-
 src/commands/gb-command-gaction.c               |    8 +-
 src/commands/gb-command-provider.c              |    6 +-
 src/commands/gb-command-result.c                |   10 +-
 src/commands/gb-command-vim.c                   |    6 +-
 src/commands/gb-command.c                       |    3 +-
 src/devhelp/gb-devhelp-document.c               |   11 +-
 src/devhelp/gb-devhelp-view.c                   |    3 +-
 src/dialogs/gb-new-project-dialog.c             |    9 +-
 src/dialogs/gb-recent-project-row.c             |    7 +-
 src/editor/gb-editor-frame.c                    |    9 +-
 src/editor/gb-editor-map-bin.c                  |    4 +-
 src/editor/gb-editor-settings-widget.c          |    4 +-
 src/editor/gb-editor-view.c                     |    3 +-
 src/editor/gb-editor-workspace.c                |    4 +-
 src/html/gb-html-document.c                     |   10 +-
 src/html/gb-html-view.c                         |    4 +-
 src/keybindings/gb-keybindings.c                |    4 +-
 src/preferences/gb-preferences-page.c           |    4 +-
 src/preferences/gb-preferences-switch.c         |   16 +--
 src/preferences/gb-preferences-window.c         |    3 +-
 src/project-tree/gb-new-file-popover.c          |    9 +-
 src/project-tree/gb-rename-file-popover.c       |    8 +-
 src/scrolledwindow/gb-scrolled-window.c         |    6 +-
 src/search/gb-search-display-group.c            |   15 +--
 src/search/gb-search-display-row.c              |    3 +-
 src/search/gb-search-display.c                  |    6 +-
 src/tree/gb-tree-builder.c                      |    4 +-
 src/tree/gb-tree-node.c                         |   14 +--
 src/tree/gb-tree.c                              |   14 +--
 src/views/gb-view-stack.c                       |    9 +-
 src/views/gb-view.c                             |    7 +-
 src/workbench/gb-workbench.c                    |   11 +-
 src/workbench/gb-workspace.c                    |    4 +-
 86 files changed, 256 insertions(+), 588 deletions(-)
---
diff --git a/libide/autotools/ide-autotools-build-system.c b/libide/autotools/ide-autotools-build-system.c
index dfa7f86..9c9c4f6 100644
--- a/libide/autotools/ide-autotools-build-system.c
+++ b/libide/autotools/ide-autotools-build-system.c
@@ -566,8 +566,8 @@ ide_autotools_build_system_class_init (IdeAutotoolsBuildSystemClass *klass)
                          _("The name of the project tarball."),
                          NULL,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TARBALL_NAME,
-                                   gParamSpecs [PROP_TARBALL_NAME]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/autotools/ide-autotools-build-task.c b/libide/autotools/ide-autotools-build-task.c
index 29ab01d..7d49fc3 100644
--- a/libide/autotools/ide-autotools-build-task.c
+++ b/libide/autotools/ide-autotools-build-task.c
@@ -380,8 +380,6 @@ ide_autotools_build_task_class_init (IdeAutotoolsBuildTaskClass *klass)
                         (G_PARAM_READWRITE |
                          G_PARAM_CONSTRUCT_ONLY |
                          G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CONFIG,
-                                   gParamSpecs [PROP_CONFIG]);
 
   gParamSpecs [PROP_DEVICE] =
     g_param_spec_object ("device",
@@ -391,8 +389,6 @@ ide_autotools_build_task_class_init (IdeAutotoolsBuildTaskClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DEVICE,
-                                   gParamSpecs [PROP_DEVICE]);
 
   gParamSpecs [PROP_DIRECTORY] =
     g_param_spec_object ("directory",
@@ -402,8 +398,6 @@ ide_autotools_build_task_class_init (IdeAutotoolsBuildTaskClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DIRECTORY,
-                                   gParamSpecs [PROP_DIRECTORY]);
 
   gParamSpecs [PROP_REQUIRE_AUTOGEN] =
     g_param_spec_boolean ("require-autogen",
@@ -413,8 +407,6 @@ ide_autotools_build_task_class_init (IdeAutotoolsBuildTaskClass *klass)
                           (G_PARAM_READWRITE |
                            G_PARAM_CONSTRUCT_ONLY |
                            G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_REQUIRE_AUTOGEN,
-                                   gParamSpecs [PROP_REQUIRE_AUTOGEN]);
 
   gParamSpecs [PROP_REQUIRE_CONFIGURE] =
     g_param_spec_boolean ("require-configure",
@@ -424,8 +416,8 @@ ide_autotools_build_task_class_init (IdeAutotoolsBuildTaskClass *klass)
                           (G_PARAM_READWRITE |
                            G_PARAM_CONSTRUCT_ONLY |
                            G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_REQUIRE_CONFIGURE,
-                                   gParamSpecs [PROP_REQUIRE_CONFIGURE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/autotools/ide-autotools-builder.c b/libide/autotools/ide-autotools-builder.c
index 4298ce7..6024474 100644
--- a/libide/autotools/ide-autotools-builder.c
+++ b/libide/autotools/ide-autotools-builder.c
@@ -333,8 +333,6 @@ ide_autotools_builder_class_init (IdeAutotoolsBuilderClass *klass)
                         (G_PARAM_READWRITE |
                          G_PARAM_CONSTRUCT_ONLY |
                          G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CONFIG,
-                                   gParamSpecs [PROP_CONFIG]);
 
   gParamSpecs [PROP_DEVICE] =
     g_param_spec_object ("device",
@@ -344,8 +342,8 @@ ide_autotools_builder_class_init (IdeAutotoolsBuilderClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DEVICE,
-                                   gParamSpecs [PROP_DEVICE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/autotools/ide-autotools-project-miner.c b/libide/autotools/ide-autotools-project-miner.c
index 6a104c8..9630349 100644
--- a/libide/autotools/ide-autotools-project-miner.c
+++ b/libide/autotools/ide-autotools-project-miner.c
@@ -308,8 +308,8 @@ ide_autotools_project_miner_class_init (IdeAutotoolsProjectMinerClass *klass)
                          _("The root directory to scan from."),
                          G_TYPE_FILE,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ROOT_DIRECTORY,
-                                   gParamSpecs [PROP_ROOT_DIRECTORY]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/autotools/ide-makecache.c b/libide/autotools/ide-makecache.c
index 70748d2..eff150f 100644
--- a/libide/autotools/ide-makecache.c
+++ b/libide/autotools/ide-makecache.c
@@ -1127,8 +1127,8 @@ ide_makecache_class_init (IdeMakecacheClass *klass)
                          _("The root makefile to be cached."),
                          G_TYPE_FILE,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_MAKEFILE,
-                                   gParamSpecs [PROP_MAKEFILE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/clang/ide-clang-completion-item.c b/libide/clang/ide-clang-completion-item.c
index ca8afd1..318fbc1 100644
--- a/libide/clang/ide-clang-completion-item.c
+++ b/libide/clang/ide-clang-completion-item.c
@@ -420,7 +420,6 @@ ide_clang_completion_item_class_init (IdeClangCompletionItemClass *klass)
                          G_MAXUINT-1,
                          0,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_INDEX, gParamSpecs [PROP_INDEX]);
 
   gParamSpecs [PROP_RESULTS] =
     g_param_spec_boxed ("results",
@@ -428,7 +427,8 @@ ide_clang_completion_item_class_init (IdeClangCompletionItemClass *klass)
                          _("The Clang result set."),
                          IDE_TYPE_REF_PTR,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_RESULTS, gParamSpecs [PROP_RESULTS]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gIcons = g_hash_table_new (g_str_hash, g_str_equal);
 
diff --git a/libide/clang/ide-clang-translation-unit.c b/libide/clang/ide-clang-translation-unit.c
index f0de10d..55c3cdc 100644
--- a/libide/clang/ide-clang-translation-unit.c
+++ b/libide/clang/ide-clang-translation-unit.c
@@ -547,7 +547,6 @@ ide_clang_translation_unit_class_init (IdeClangTranslationUnitClass *klass)
                          _("The file used to build the translation unit."),
                          G_TYPE_FILE,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE, gParamSpecs [PROP_FILE]);
 
   gParamSpecs [PROP_INDEX] =
     g_param_spec_boxed ("index",
@@ -555,7 +554,6 @@ ide_clang_translation_unit_class_init (IdeClangTranslationUnitClass *klass)
                          _("The highlight index for the translation unit."),
                          IDE_TYPE_HIGHLIGHT_INDEX,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_INDEX, gParamSpecs [PROP_INDEX]);
 
   gParamSpecs [PROP_SEQUENCE] =
     g_param_spec_int64 ("sequence",
@@ -565,7 +563,8 @@ ide_clang_translation_unit_class_init (IdeClangTranslationUnitClass *klass)
                         G_MAXINT64,
                         0,
                         (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SEQUENCE, gParamSpecs [PROP_SEQUENCE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/devhelp/ide-devhelp-search-result.c b/libide/devhelp/ide-devhelp-search-result.c
index 1fdb64e..ddef127 100644
--- a/libide/devhelp/ide-devhelp-search-result.c
+++ b/libide/devhelp/ide-devhelp-search-result.c
@@ -100,7 +100,8 @@ ide_devhelp_search_result_class_init (IdeDevhelpSearchResultClass *klass)
                          _("The URI to the Devhelp document."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_URI, gParamSpecs [PROP_URI]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/git/ide-git-buffer-change-monitor.c b/libide/git/ide-git-buffer-change-monitor.c
index 7f38b77..87c8a0d 100644
--- a/libide/git/ide-git-buffer-change-monitor.c
+++ b/libide/git/ide-git-buffer-change-monitor.c
@@ -720,7 +720,8 @@ ide_git_buffer_change_monitor_class_init (IdeGitBufferChangeMonitorClass *klass)
                          _("The repository to use for calculating diffs."),
                          GGIT_TYPE_REPOSITORY,
                          (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_REPOSITORY, gParamSpecs [PROP_REPOSITORY]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gWorkQueue = g_async_queue_new ();
   gWorkThread = g_thread_new ("IdeGitBufferChangeMonitorWorker",
diff --git a/libide/git/ide-git-remote-callbacks.c b/libide/git/ide-git-remote-callbacks.c
index 9c18030..07246be 100644
--- a/libide/git/ide-git-remote-callbacks.c
+++ b/libide/git/ide-git-remote-callbacks.c
@@ -220,7 +220,8 @@ ide_git_remote_callbacks_class_init (IdeGitRemoteCallbacksClass *klass)
                          1.0,
                          0.0,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FRACTION, gParamSpecs [PROP_FRACTION]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/git/ide-git-search-index.c b/libide/git/ide-git-search-index.c
index 0837998..bd53af8 100644
--- a/libide/git/ide-git-search-index.c
+++ b/libide/git/ide-git-search-index.c
@@ -315,8 +315,8 @@ ide_git_search_index_class_init (IdeGitSearchIndexClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_LOCATION,
-                                   gParamSpecs [PROP_LOCATION]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/git/ide-git-search-result.c b/libide/git/ide-git-search-result.c
index 77fc5ea..307bc5b 100644
--- a/libide/git/ide-git-search-result.c
+++ b/libide/git/ide-git-search-result.c
@@ -99,7 +99,8 @@ ide_git_search_result_class_init (IdeGitSearchResultClass *klass)
                          _("The file to be opened."),
                          G_TYPE_FILE,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE, gParamSpecs [PROP_FILE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/git/ide-git-vcs.c b/libide/git/ide-git-vcs.c
index 363f1fe..dddfe86 100644
--- a/libide/git/ide-git-vcs.c
+++ b/libide/git/ide-git-vcs.c
@@ -767,7 +767,8 @@ ide_git_vcs_class_init (IdeGitVcsClass *klass)
                          _("The git repository for the project."),
                          GGIT_TYPE_REPOSITORY,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_REPOSITORY, gParamSpecs [PROP_REPOSITORY]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   /**
    * IdeGitVcs::reloaded:
@@ -786,8 +787,7 @@ ide_git_vcs_class_init (IdeGitVcsClass *klass)
                                       G_TYPE_FROM_CLASS (klass),
                                       G_SIGNAL_RUN_LAST,
                                       0,
-                                      NULL, NULL,
-                                      g_cclosure_marshal_VOID__OBJECT,
+                                      NULL, NULL, NULL,
                                       G_TYPE_NONE,
                                       1,
                                       GGIT_TYPE_REPOSITORY);
diff --git a/libide/ide-back-forward-item.c b/libide/ide-back-forward-item.c
index 307e487..fe05e1b 100644
--- a/libide/ide-back-forward-item.c
+++ b/libide/ide-back-forward-item.c
@@ -143,7 +143,8 @@ ide_back_forward_item_class_init (IdeBackForwardItemClass *klass)
                         (G_PARAM_READWRITE |
                          G_PARAM_CONSTRUCT_ONLY |
                          G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_LOCATION, gParamSpecs [PROP_LOCATION]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-back-forward-list.c b/libide/ide-back-forward-list.c
index 549eeb8..7d2957a 100644
--- a/libide/ide-back-forward-list.c
+++ b/libide/ide-back-forward-list.c
@@ -427,8 +427,6 @@ ide_back_forward_list_class_init (IdeBackForwardListClass *klass)
                           _("If there are more backward navigation items."),
                           FALSE,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CAN_GO_BACKWARD,
-                                   gParamSpecs [PROP_CAN_GO_BACKWARD]);
 
   gParamSpecs [PROP_CAN_GO_FORWARD] =
     g_param_spec_boolean ("can-go-forward",
@@ -436,8 +434,6 @@ ide_back_forward_list_class_init (IdeBackForwardListClass *klass)
                           _("If there are more forward navigation items."),
                           FALSE,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CAN_GO_FORWARD,
-                                   gParamSpecs [PROP_CAN_GO_FORWARD]);
 
   gParamSpecs [PROP_CURRENT_ITEM] =
     g_param_spec_object ("current-item",
@@ -445,16 +441,15 @@ ide_back_forward_list_class_init (IdeBackForwardListClass *klass)
                          _("The current navigation item."),
                          IDE_TYPE_BACK_FORWARD_ITEM,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CURRENT_ITEM,
-                                   gParamSpecs [PROP_CURRENT_ITEM]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [NAVIGATE_TO] =
     g_signal_new ("navigate-to",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__OBJECT,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   IDE_TYPE_BACK_FORWARD_ITEM);
diff --git a/libide/ide-buffer-change-monitor.c b/libide/ide-buffer-change-monitor.c
index b269301..00e7d83 100644
--- a/libide/ide-buffer-change-monitor.c
+++ b/libide/ide-buffer-change-monitor.c
@@ -107,14 +107,14 @@ ide_buffer_change_monitor_class_init (IdeBufferChangeMonitorClass *klass)
                          _("The IdeBuffer to be monitored."),
                          IDE_TYPE_BUFFER,
                          (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BUFFER, gParamSpecs [PROP_BUFFER]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [CHANGED] = g_signal_new ("changed",
                                      G_TYPE_FROM_CLASS (klass),
                                      G_SIGNAL_RUN_LAST,
                                      0,
-                                     NULL, NULL,
-                                     g_cclosure_marshal_VOID__VOID,
+                                     NULL, NULL, NULL,
                                      G_TYPE_NONE,
                                      0);
 }
diff --git a/libide/ide-buffer-manager.c b/libide/ide-buffer-manager.c
index 1a9fe76..e3a25c1 100644
--- a/libide/ide-buffer-manager.c
+++ b/libide/ide-buffer-manager.c
@@ -85,7 +85,6 @@ enum {
   PROP_AUTO_SAVE,
   PROP_AUTO_SAVE_TIMEOUT,
   PROP_FOCUS_BUFFER,
-  PROP_MAX_FILE_SIZE,
   LAST_PROP
 };
 
@@ -1152,8 +1151,6 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
                           _("If the documents should auto save after a configured timeout."),
                           TRUE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_AUTO_SAVE,
-                                   gParamSpecs [PROP_AUTO_SAVE]);
 
   gParamSpecs [PROP_AUTO_SAVE_TIMEOUT] =
     g_param_spec_uint ("auto-save-timeout",
@@ -1163,8 +1160,6 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
                        G_MAXUINT,
                        AUTO_SAVE_TIMEOUT_DEFAULT,
                        (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_AUTO_SAVE_TIMEOUT,
-                                   gParamSpecs [PROP_AUTO_SAVE_TIMEOUT]);
 
   gParamSpecs [PROP_FOCUS_BUFFER] =
     g_param_spec_object ("focus-buffer",
@@ -1172,8 +1167,8 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
                          _("The currently focused buffer."),
                          IDE_TYPE_BUFFER,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FOCUS_BUFFER,
-                                   gParamSpecs [PROP_FOCUS_BUFFER]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   /**
    * IdeBufferManager::create-buffer:
@@ -1194,8 +1189,7 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
                                            G_SIGNAL_RUN_LAST,
                                            0,
                                            g_signal_accumulator_first_wins,
-                                           NULL,
-                                           g_cclosure_marshal_generic,
+                                           NULL, NULL,
                                            IDE_TYPE_BUFFER,
                                            1,
                                            IDE_TYPE_FILE);
@@ -1212,8 +1206,7 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
                                          G_TYPE_FROM_CLASS (klass),
                                          G_SIGNAL_RUN_LAST,
                                          0,
-                                         NULL, NULL,
-                                         g_cclosure_marshal_generic,
+                                         NULL, NULL, NULL,
                                          G_TYPE_NONE,
                                          1,
                                          IDE_TYPE_BUFFER);
@@ -1231,8 +1224,7 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
                                           G_TYPE_FROM_CLASS (klass),
                                           G_SIGNAL_RUN_LAST,
                                           0,
-                                          NULL, NULL,
-                                          g_cclosure_marshal_generic,
+                                          NULL, NULL, NULL,
                                           G_TYPE_NONE,
                                           1,
                                           IDE_TYPE_BUFFER);
@@ -1249,8 +1241,7 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
                                          G_TYPE_FROM_CLASS (klass),
                                          G_SIGNAL_RUN_LAST,
                                          0,
-                                         NULL, NULL,
-                                         g_cclosure_marshal_generic,
+                                         NULL, NULL, NULL,
                                          G_TYPE_NONE,
                                          1,
                                          IDE_TYPE_BUFFER);
@@ -1268,8 +1259,7 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
                                 G_TYPE_FROM_CLASS (klass),
                                 G_SIGNAL_RUN_LAST,
                                 G_CALLBACK (ide_buffer_manager_real_buffer_loaded),
-                                NULL, NULL,
-                                g_cclosure_marshal_generic,
+                                NULL, NULL, NULL,
                                 G_TYPE_NONE,
                                 1,
                                 IDE_TYPE_BUFFER);
@@ -1286,8 +1276,7 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
                                                 G_TYPE_FROM_CLASS (klass),
                                                 G_SIGNAL_RUN_LAST,
                                                 0,
-                                                NULL, NULL,
-                                                g_cclosure_marshal_generic,
+                                                NULL, NULL, NULL,
                                                 G_TYPE_NONE,
                                                 1,
                                                 IDE_TYPE_BUFFER);
@@ -1304,8 +1293,7 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
                                                 G_TYPE_FROM_CLASS (klass),
                                                 G_SIGNAL_RUN_LAST,
                                                 0,
-                                                NULL, NULL,
-                                                g_cclosure_marshal_generic,
+                                                NULL, NULL, NULL,
                                                 G_TYPE_NONE,
                                                 1,
                                                 IDE_TYPE_BUFFER);
@@ -1498,10 +1486,7 @@ ide_buffer_manager_set_max_file_size (IdeBufferManager *self,
   g_return_if_fail (IDE_IS_BUFFER_MANAGER (self));
 
   if (self->max_file_size != max_file_size)
-    {
-      self->max_file_size = max_file_size;
-      g_object_notify_by_pspec (G_OBJECT (self), gParamSpecs [PROP_MAX_FILE_SIZE]);
-    }
+    self->max_file_size = max_file_size;
 }
 
 /**
diff --git a/libide/ide-buffer.c b/libide/ide-buffer.c
index 725470a..30140a8 100644
--- a/libide/ide-buffer.c
+++ b/libide/ide-buffer.c
@@ -971,7 +971,6 @@ ide_buffer_class_init (IdeBufferClass *klass)
                          _("If the buffer is performing background work."),
                          FALSE,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BUSY, gParamSpecs [PROP_BUSY]);
 
   gParamSpecs [PROP_CHANGED_ON_VOLUME] =
     g_param_spec_boolean ("changed-on-volume",
@@ -979,8 +978,6 @@ ide_buffer_class_init (IdeBufferClass *klass)
                          _("If the file has changed on disk and the buffer is not in sync."),
                          FALSE,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CHANGED_ON_VOLUME,
-                                   gParamSpecs [PROP_CHANGED_ON_VOLUME]);
 
   gParamSpecs [PROP_CONTEXT] =
     g_param_spec_object ("context",
@@ -990,7 +987,6 @@ ide_buffer_class_init (IdeBufferClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CONTEXT, gParamSpecs [PROP_CONTEXT]);
 
   gParamSpecs [PROP_FILE] =
     g_param_spec_object ("file",
@@ -998,7 +994,6 @@ ide_buffer_class_init (IdeBufferClass *klass)
                          _("The file represented by the buffer."),
                          IDE_TYPE_FILE,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE, gParamSpecs [PROP_FILE]);
 
   gParamSpecs [PROP_HIGHLIGHT_DIAGNOSTICS] =
     g_param_spec_boolean ("highlight-diagnostics",
@@ -1006,8 +1001,6 @@ ide_buffer_class_init (IdeBufferClass *klass)
                           _("If diagnostic warnings and errors should be highlighted."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_HIGHLIGHT_DIAGNOSTICS,
-                                   gParamSpecs [PROP_HIGHLIGHT_DIAGNOSTICS]);
 
   gParamSpecs [PROP_READ_ONLY] =
     g_param_spec_boolean ("read-only",
@@ -1015,7 +1008,6 @@ ide_buffer_class_init (IdeBufferClass *klass)
                           _("If the underlying file is read only."),
                           FALSE,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_READ_ONLY, gParamSpecs [PROP_READ_ONLY]);
 
   gParamSpecs [PROP_STYLE_SCHEME_NAME] =
     g_param_spec_string ("style-scheme-name",
@@ -1023,8 +1015,6 @@ ide_buffer_class_init (IdeBufferClass *klass)
                          _("Style Scheme Name"),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_STYLE_SCHEME_NAME,
-                                   gParamSpecs [PROP_STYLE_SCHEME_NAME]);
 
   gParamSpecs [PROP_TITLE] =
     g_param_spec_string ("title",
@@ -1032,7 +1022,8 @@ ide_buffer_class_init (IdeBufferClass *klass)
                          _("The title of the buffer."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TITLE, gParamSpecs [PROP_TITLE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   /**
    * IdeBuffer::cursor-moved:
@@ -1048,8 +1039,7 @@ ide_buffer_class_init (IdeBufferClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (IdeBufferClass, cursor_moved),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__BOXED,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   GTK_TYPE_TEXT_ITER);
@@ -1065,8 +1055,7 @@ ide_buffer_class_init (IdeBufferClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -1080,8 +1069,7 @@ ide_buffer_class_init (IdeBufferClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 }
diff --git a/libide/ide-build-system.c b/libide/ide-build-system.c
index e691d08..725364d 100644
--- a/libide/ide-build-system.c
+++ b/libide/ide-build-system.c
@@ -184,8 +184,8 @@ ide_build_system_class_init (IdeBuildSystemClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_PROJECT_FILE,
-                                   gParamSpecs [PROP_PROJECT_FILE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-context.c b/libide/ide-context.c
index 29c2ee5..1060c47 100644
--- a/libide/ide-context.c
+++ b/libide/ide-context.c
@@ -646,8 +646,6 @@ ide_context_class_init (IdeContextClass *klass)
                          _("Back/forward navigation history for the context."),
                          IDE_TYPE_BACK_FORWARD_LIST,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BACK_FORWARD_LIST,
-                                   gParamSpecs [PROP_BACK_FORWARD_LIST]);
 
   gParamSpecs [PROP_BUFFER_MANAGER] =
     g_param_spec_object ("buffer-manager",
@@ -655,8 +653,6 @@ ide_context_class_init (IdeContextClass *klass)
                          _("The buffer manager for the context."),
                          IDE_TYPE_BUFFER_MANAGER,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BUFFER_MANAGER,
-                                   gParamSpecs [PROP_BUFFER_MANAGER]);
 
   gParamSpecs [PROP_BUILD_SYSTEM] =
     g_param_spec_object ("build-system",
@@ -664,8 +660,6 @@ ide_context_class_init (IdeContextClass *klass)
                          _("The build system used by the context."),
                          IDE_TYPE_BUILD_SYSTEM,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BUILD_SYSTEM,
-                                   gParamSpecs [PROP_BUILD_SYSTEM]);
 
   gParamSpecs [PROP_DEVICE_MANAGER] =
     g_param_spec_object ("device-manager",
@@ -673,8 +667,6 @@ ide_context_class_init (IdeContextClass *klass)
                          _("The device manager for the context."),
                          IDE_TYPE_DEVICE_MANAGER,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DEVICE_MANAGER,
-                                   gParamSpecs [PROP_DEVICE_MANAGER]);
 
   gParamSpecs [PROP_PROJECT_FILE] =
     g_param_spec_object ("project-file",
@@ -684,8 +676,6 @@ ide_context_class_init (IdeContextClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_PROJECT_FILE,
-                                   gParamSpecs [PROP_PROJECT_FILE]);
 
   gParamSpecs [PROP_ROOT_BUILD_DIR] =
     g_param_spec_string ("root-build-dir",
@@ -693,8 +683,6 @@ ide_context_class_init (IdeContextClass *klass)
                          _("The root directory to perform builds within."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ROOT_BUILD_DIR,
-                                   gParamSpecs [PROP_ROOT_BUILD_DIR]);
 
   gParamSpecs [PROP_SCRIPT_MANAGER] =
     g_param_spec_object ("script-manager",
@@ -702,8 +690,6 @@ ide_context_class_init (IdeContextClass *klass)
                          _("The script manager for the context."),
                          IDE_TYPE_SCRIPT_MANAGER,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SCRIPT_MANAGER,
-                                   gParamSpecs [PROP_SCRIPT_MANAGER]);
 
   gParamSpecs [PROP_SEARCH_ENGINE] =
     g_param_spec_object ("search-engine",
@@ -711,8 +697,6 @@ ide_context_class_init (IdeContextClass *klass)
                          _("The search engine for the context."),
                          IDE_TYPE_SEARCH_ENGINE,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SEARCH_ENGINE,
-                                   gParamSpecs [PROP_SEARCH_ENGINE]);
 
   gParamSpecs [PROP_SNIPPETS_MANAGER] =
     g_param_spec_object ("snippets-manager",
@@ -720,8 +704,6 @@ ide_context_class_init (IdeContextClass *klass)
                          _("The snippets manager for the context."),
                          IDE_TYPE_SOURCE_SNIPPETS_MANAGER,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SNIPPETS_MANAGER,
-                                   gParamSpecs [PROP_SNIPPETS_MANAGER]);
 
   gParamSpecs [PROP_UNSAVED_FILES] =
     g_param_spec_object ("unsaved-files",
@@ -729,8 +711,6 @@ ide_context_class_init (IdeContextClass *klass)
                          _("The unsaved files in the context."),
                          IDE_TYPE_UNSAVED_FILES,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_UNSAVED_FILES,
-                                   gParamSpecs [PROP_UNSAVED_FILES]);
 
   gParamSpecs [PROP_VCS] =
     g_param_spec_object ("vcs",
@@ -738,8 +718,8 @@ ide_context_class_init (IdeContextClass *klass)
                          _("The VCS for the context."),
                          IDE_TYPE_VCS,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_VCS,
-                                   gParamSpecs [PROP_VCS]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-device-manager.c b/libide/ide-device-manager.c
index 4ba40b8..9a55fb2 100644
--- a/libide/ide-device-manager.c
+++ b/libide/ide-device-manager.c
@@ -364,17 +364,15 @@ ide_device_manager_class_init (IdeDeviceManagerClass *klass)
                           _("If the device providers have settled."),
                           FALSE,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SETTLED,
-                                   gParamSpecs [PROP_SETTLED]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [DEVICE_ADDED] =
     g_signal_new ("device-added",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   2,
                   IDE_TYPE_DEVICE_PROVIDER,
@@ -385,9 +383,7 @@ ide_device_manager_class_init (IdeDeviceManagerClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   2,
                   IDE_TYPE_DEVICE_PROVIDER,
diff --git a/libide/ide-device-provider.c b/libide/ide-device-provider.c
index 6372ae7..f6ef0bd 100644
--- a/libide/ide-device-provider.c
+++ b/libide/ide-device-provider.c
@@ -156,17 +156,15 @@ ide_device_provider_class_init (IdeDeviceProviderClass *klass)
                           _("If device probing has settled."),
                           FALSE,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SETTLED,
-                                   gParamSpecs [PROP_SETTLED]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [DEVICE_ADDED] =
     g_signal_new ("device-added",
                   IDE_TYPE_DEVICE_PROVIDER,
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (IdeDeviceProviderClass, device_added),
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   IDE_TYPE_DEVICE);
@@ -176,9 +174,7 @@ ide_device_provider_class_init (IdeDeviceProviderClass *klass)
                   IDE_TYPE_DEVICE_PROVIDER,
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (IdeDeviceProviderClass, device_removed),
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   IDE_TYPE_DEVICE);
diff --git a/libide/ide-device.c b/libide/ide-device.c
index 06c4623..461bfa1 100644
--- a/libide/ide-device.c
+++ b/libide/ide-device.c
@@ -235,8 +235,6 @@ ide_device_class_init (IdeDeviceClass *klass)
                          _("The display name of the device."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DISPLAY_NAME,
-                                   gParamSpecs [PROP_DISPLAY_NAME]);
 
   gParamSpecs [PROP_ID] =
     g_param_spec_string ("id",
@@ -244,8 +242,6 @@ ide_device_class_init (IdeDeviceClass *klass)
                          _("The device identifier."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ID,
-                                   gParamSpecs [PROP_ID]);
 
   gParamSpecs [PROP_SYSTEM_TYPE] =
     g_param_spec_string ("system-type",
@@ -253,8 +249,8 @@ ide_device_class_init (IdeDeviceClass *klass)
                          _("The system type for which to compile."),
                          NULL,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SYSTEM_TYPE,
-                                   gParamSpecs [PROP_SYSTEM_TYPE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-file-settings.c b/libide/ide-file-settings.c
index ac89495..a66a9ca 100644
--- a/libide/ide-file-settings.c
+++ b/libide/ide-file-settings.c
@@ -483,8 +483,6 @@ ide_file_settings_class_init (IdeFileSettingsClass *klass)
                          _("The file encoding to use."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ENCODING,
-                                   gParamSpecs [PROP_ENCODING]);
 
   gParamSpecs [PROP_FILE] =
     g_param_spec_object ("file",
@@ -494,8 +492,6 @@ ide_file_settings_class_init (IdeFileSettingsClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE,
-                                   gParamSpecs [PROP_FILE]);
 
   gParamSpecs [PROP_INDENT_STYLE] =
     g_param_spec_enum ("indent-style",
@@ -504,8 +500,6 @@ ide_file_settings_class_init (IdeFileSettingsClass *klass)
                        IDE_TYPE_INDENT_STYLE,
                        IDE_INDENT_STYLE_SPACES,
                        (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_INDENT_STYLE,
-                                   gParamSpecs [PROP_INDENT_STYLE]);
 
   gParamSpecs [PROP_INDENT_WIDTH] =
     g_param_spec_int ("indent-width",
@@ -513,8 +507,6 @@ ide_file_settings_class_init (IdeFileSettingsClass *klass)
                       _("The width to use when indenting."),
                       -1, 32, -1,
                       (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_INDENT_WIDTH,
-                                   gParamSpecs [PROP_INDENT_WIDTH]);
 
   gParamSpecs [PROP_INSERT_TRAILING_NEWLINE] =
     g_param_spec_boolean ("insert-trailing-newline",
@@ -523,8 +515,6 @@ ide_file_settings_class_init (IdeFileSettingsClass *klass)
                             "when saving the file."),
                           TRUE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_INSERT_TRAILING_NEWLINE,
-                                   gParamSpecs [PROP_INSERT_TRAILING_NEWLINE]);
 
   gParamSpecs [PROP_NEWLINE_TYPE] =
     g_param_spec_enum ("newline-type",
@@ -533,8 +523,6 @@ ide_file_settings_class_init (IdeFileSettingsClass *klass)
                        GTK_SOURCE_TYPE_NEWLINE_TYPE,
                        GTK_SOURCE_NEWLINE_TYPE_LF,
                        (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_NEWLINE_TYPE,
-                                   gParamSpecs [PROP_NEWLINE_TYPE]);
 
   gParamSpecs [PROP_RIGHT_MARGIN_POSITION] =
     g_param_spec_uint ("right-margin-position",
@@ -544,8 +532,6 @@ ide_file_settings_class_init (IdeFileSettingsClass *klass)
                        1000,
                        80,
                        (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_RIGHT_MARGIN_POSITION,
-                                   gParamSpecs [PROP_RIGHT_MARGIN_POSITION]);
 
   gParamSpecs [PROP_TAB_WIDTH] =
     g_param_spec_uint ("tab-width",
@@ -553,8 +539,6 @@ ide_file_settings_class_init (IdeFileSettingsClass *klass)
                        _("The width in characters to represent a tab."),
                        1, 32, 8,
                        (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TAB_WIDTH,
-                                   gParamSpecs [PROP_TAB_WIDTH]);
 
   gParamSpecs [PROP_TRIM_TRAILING_WHITESPACE] =
     g_param_spec_boolean ("trim-trailing-whitespace",
@@ -562,8 +546,6 @@ ide_file_settings_class_init (IdeFileSettingsClass *klass)
                           _("If trailing whitespace should be trimmed."),
                           TRUE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TRIM_TRAILING_WHITESPACE,
-                                   gParamSpecs [PROP_TRIM_TRAILING_WHITESPACE]);
 
   gParamSpecs [PROP_SHOW_RIGHT_MARGIN] =
     g_param_spec_boolean ("show-right-margin",
@@ -571,8 +553,8 @@ ide_file_settings_class_init (IdeFileSettingsClass *klass)
                           _("If right margin should be shown."),
                           TRUE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SHOW_RIGHT_MARGIN,
-                                   gParamSpecs [PROP_SHOW_RIGHT_MARGIN]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-file.c b/libide/ide-file.c
index 7e24dd5..18cf931 100644
--- a/libide/ide-file.c
+++ b/libide/ide-file.c
@@ -491,7 +491,6 @@ ide_file_class_init (IdeFileClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE, gParamSpecs [PROP_FILE]);
 
   gParamSpecs [PROP_IS_TEMPORARY] =
     g_param_spec_boolean ("is-temporary",
@@ -499,8 +498,6 @@ ide_file_class_init (IdeFileClass *klass)
                           _("If the file represents a temporary file."),
                          FALSE,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_IS_TEMPORARY,
-                                   gParamSpecs [PROP_IS_TEMPORARY]);
 
   gParamSpecs [PROP_LANGUAGE] =
     g_param_spec_object ("language",
@@ -508,7 +505,6 @@ ide_file_class_init (IdeFileClass *klass)
                          _("The file language."),
                          IDE_TYPE_LANGUAGE,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_LANGUAGE, gParamSpecs [PROP_LANGUAGE]);
 
   gParamSpecs [PROP_PATH] =
     g_param_spec_string ("path",
@@ -516,7 +512,6 @@ ide_file_class_init (IdeFileClass *klass)
                          _("The path within the project."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_PATH, gParamSpecs [PROP_PATH]);
 
   gParamSpecs [PROP_TEMPORARY_ID] =
     g_param_spec_uint ("temporary-id",
@@ -526,8 +521,8 @@ ide_file_class_init (IdeFileClass *klass)
                        G_MAXUINT,
                        0,
                        (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TEMPORARY_ID,
-                                   gParamSpecs [PROP_TEMPORARY_ID]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-highlight-engine.c b/libide/ide-highlight-engine.c
index f834cad..4deaec5 100644
--- a/libide/ide-highlight-engine.c
+++ b/libide/ide-highlight-engine.c
@@ -631,7 +631,6 @@ ide_highlight_engine_class_init (IdeHighlightEngineClass *klass)
                          _("The buffer to highlight."),
                          IDE_TYPE_BUFFER,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BUFFER, gParamSpecs [PROP_BUFFER]);
 
   gParamSpecs [PROP_HIGHLIGHTER] =
     g_param_spec_object ("highlighter",
@@ -639,7 +638,8 @@ ide_highlight_engine_class_init (IdeHighlightEngineClass *klass)
                          _("The highlighter to use for type information."),
                          IDE_TYPE_HIGHLIGHTER,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_HIGHLIGHTER, gParamSpecs [PROP_HIGHLIGHTER]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gEngineQuark = g_quark_from_string ("IDE_HIGHLIGHT_ENGINE");
 }
diff --git a/libide/ide-language.c b/libide/ide-language.c
index c66832f..8b311ed 100644
--- a/libide/ide-language.c
+++ b/libide/ide-language.c
@@ -347,8 +347,6 @@ ide_language_class_init (IdeLanguageClass *klass)
                          _("The diagnostician for the language."),
                          IDE_TYPE_DIAGNOSTICIAN,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DIAGNOSTICIAN,
-                                   gParamSpecs [PROP_DIAGNOSTICIAN]);
 
   gParamSpecs [PROP_HIGHLIGHTER] =
     g_param_spec_object ("highlighter",
@@ -356,8 +354,6 @@ ide_language_class_init (IdeLanguageClass *klass)
                          _("The semantic highlighter for the language."),
                          IDE_TYPE_HIGHLIGHTER,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_HIGHLIGHTER,
-                                   gParamSpecs [PROP_HIGHLIGHTER]);
 
   gParamSpecs [PROP_ID] =
     g_param_spec_string ("id",
@@ -367,8 +363,6 @@ ide_language_class_init (IdeLanguageClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ID,
-                                   gParamSpecs [PROP_ID]);
 
   gParamSpecs [PROP_INDENTER] =
     g_param_spec_object ("indenter",
@@ -376,8 +370,6 @@ ide_language_class_init (IdeLanguageClass *klass)
                          _("The semantic indenter for the language."),
                          IDE_TYPE_INDENTER,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_INDENTER,
-                                   gParamSpecs [PROP_INDENTER]);
 
   gParamSpecs [PROP_NAME] =
     g_param_spec_string ("name",
@@ -385,8 +377,6 @@ ide_language_class_init (IdeLanguageClass *klass)
                          _("The name of the language."),
                          NULL,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_NAME,
-                                   gParamSpecs [PROP_NAME]);
 
   gParamSpecs [PROP_REFACTORY] =
     g_param_spec_object ("refactory",
@@ -394,8 +384,6 @@ ide_language_class_init (IdeLanguageClass *klass)
                          _("The refactory engine for the language."),
                          IDE_TYPE_REFACTORY,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_REFACTORY,
-                                   gParamSpecs [PROP_REFACTORY]);
 
   gParamSpecs [PROP_SYMBOL_RESOLVER] =
     g_param_spec_object ("symbol-resolver",
@@ -403,8 +391,8 @@ ide_language_class_init (IdeLanguageClass *klass)
                          _("The symbol resolver for the language."),
                          IDE_TYPE_SYMBOL_RESOLVER,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SYMBOL_RESOLVER,
-                                   gParamSpecs [PROP_SYMBOL_RESOLVER]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-object.c b/libide/ide-object.c
index 60ee3ac..0c9f790 100644
--- a/libide/ide-object.c
+++ b/libide/ide-object.c
@@ -206,16 +206,15 @@ ide_object_class_init (IdeObjectClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CONTEXT,
-                                   gParamSpecs [PROP_CONTEXT]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [DESTROY] =
     g_signal_new ("destroy",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (IdeObjectClass, destroy),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 }
diff --git a/libide/ide-progress.c b/libide/ide-progress.c
index 4fa74d5..ad43b12 100644
--- a/libide/ide-progress.c
+++ b/libide/ide-progress.c
@@ -211,8 +211,6 @@ ide_progress_class_init (IdeProgressClass *klass)
                           _("If the progress has completed."),
                           FALSE,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_COMPLETED,
-                                   gParamSpecs [PROP_COMPLETED]);
 
   gParamSpecs [PROP_FRACTION] =
     g_param_spec_double ("fraction",
@@ -222,8 +220,6 @@ ide_progress_class_init (IdeProgressClass *klass)
                          1.0,
                          0.0,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FRACTION,
-                                   gParamSpecs [PROP_FRACTION]);
 
   gParamSpecs [PROP_MESSAGE] =
     g_param_spec_string ("message",
@@ -231,8 +227,8 @@ ide_progress_class_init (IdeProgressClass *klass)
                          _("A short message for the progress."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_MESSAGE,
-                                   gParamSpecs [PROP_MESSAGE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-project-file.c b/libide/ide-project-file.c
index 48d16dc..f0b1a0c 100644
--- a/libide/ide-project-file.c
+++ b/libide/ide-project-file.c
@@ -249,8 +249,6 @@ ide_project_file_class_init (IdeProjectFileClass *klass)
                          _("A GFile to the underlying file."),
                          G_TYPE_FILE,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE,
-                                   gParamSpecs [PROP_FILE]);
 
   gParamSpecs [PROP_FILE_INFO] =
     g_param_spec_object ("file-info",
@@ -258,8 +256,6 @@ ide_project_file_class_init (IdeProjectFileClass *klass)
                          _("The file information for the project file."),
                          G_TYPE_FILE_INFO,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE_INFO,
-                                   gParamSpecs [PROP_FILE_INFO]);
 
   gParamSpecs [PROP_IS_DIRECTORY] =
     g_param_spec_boolean ("is-directory",
@@ -267,8 +263,6 @@ ide_project_file_class_init (IdeProjectFileClass *klass)
                           _("Is Directory"),
                           FALSE,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_IS_DIRECTORY,
-                                   gParamSpecs [PROP_IS_DIRECTORY]);
 
   gParamSpecs [PROP_NAME] =
     g_param_spec_string ("name",
@@ -276,8 +270,6 @@ ide_project_file_class_init (IdeProjectFileClass *klass)
                          _("The short name of the file."),
                          NULL,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_NAME,
-                                   gParamSpecs [PROP_NAME]);
 
   gParamSpecs [PROP_PATH] =
     g_param_spec_string ("path",
@@ -285,8 +277,8 @@ ide_project_file_class_init (IdeProjectFileClass *klass)
                          _("The path for the file within the project tree."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_PATH,
-                                   gParamSpecs [PROP_PATH]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-project-info.c b/libide/ide-project-info.c
index dfd6d69..737acf2 100644
--- a/libide/ide-project-info.c
+++ b/libide/ide-project-info.c
@@ -287,7 +287,6 @@ ide_project_info_class_init (IdeProjectInfoClass *klass)
                          _("The project name"),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_NAME, gParamSpecs [PROP_NAME]);
 
   gParamSpecs [PROP_DIRECTORY] =
     g_param_spec_object ("directory",
@@ -295,7 +294,6 @@ ide_project_info_class_init (IdeProjectInfoClass *klass)
                          _("The project directory."),
                          G_TYPE_FILE,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DIRECTORY, gParamSpecs [PROP_DIRECTORY]);
 
   gParamSpecs [PROP_FILE] =
     g_param_spec_object ("file",
@@ -303,7 +301,6 @@ ide_project_info_class_init (IdeProjectInfoClass *klass)
                          _("The toplevel project file"),
                          G_TYPE_FILE,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE, gParamSpecs [PROP_FILE]);
 
   gParamSpecs [PROP_LAST_MODIFIED_AT] =
     g_param_spec_boxed ("last-modified-at",
@@ -311,8 +308,6 @@ ide_project_info_class_init (IdeProjectInfoClass *klass)
                         _("Last Modified At"),
                         G_TYPE_DATE_TIME,
                         (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_LAST_MODIFIED_AT,
-                                   gParamSpecs [PROP_LAST_MODIFIED_AT]);
 
   gParamSpecs [PROP_PRIORITY] =
     g_param_spec_int ("priority",
@@ -322,7 +317,8 @@ ide_project_info_class_init (IdeProjectInfoClass *klass)
                       G_MAXINT,
                       0,
                       (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_PRIORITY, gParamSpecs [PROP_PRIORITY]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-project-item.c b/libide/ide-project-item.c
index 348f748..2f7ac6e 100644
--- a/libide/ide-project-item.c
+++ b/libide/ide-project-item.c
@@ -203,8 +203,8 @@ ide_project_item_class_init (IdeProjectItemClass *klass)
                          IDE_TYPE_PROJECT_ITEM,
                          (G_PARAM_READWRITE |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_PARENT,
-                                   gParamSpecs [PROP_PARENT]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-project-miner.c b/libide/ide-project-miner.c
index 415883c..9cc14c1 100644
--- a/libide/ide-project-miner.c
+++ b/libide/ide-project-miner.c
@@ -45,8 +45,7 @@ ide_project_miner_class_init (IdeProjectMinerClass *klass)
                                         G_TYPE_FROM_CLASS (klass),
                                         G_SIGNAL_RUN_LAST,
                                         G_STRUCT_OFFSET (IdeProjectMinerClass, discovered),
-                                        NULL, NULL,
-                                        g_cclosure_marshal_VOID__OBJECT,
+                                        NULL, NULL, NULL,
                                         G_TYPE_NONE,
                                         1,
                                         IDE_TYPE_PROJECT_INFO);
diff --git a/libide/ide-project.c b/libide/ide-project.c
index 02e2f44..4438d08 100644
--- a/libide/ide-project.c
+++ b/libide/ide-project.c
@@ -371,8 +371,6 @@ ide_project_class_init (IdeProjectClass *klass)
                          _("The name of the project."),
                          NULL,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_NAME,
-                                   gParamSpecs [PROP_NAME]);
 
   gParamSpecs [PROP_ROOT] =
     g_param_spec_object ("root",
@@ -382,8 +380,8 @@ ide_project_class_init (IdeProjectClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ROOT,
-                                   gParamSpecs [PROP_ROOT]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-script-manager.c b/libide/ide-script-manager.c
index bdee179..07513ef 100644
--- a/libide/ide-script-manager.c
+++ b/libide/ide-script-manager.c
@@ -131,8 +131,8 @@ ide_script_manager_class_init (IdeScriptManagerClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SCRIPTS_DIRECTORY,
-                                   gParamSpecs [PROP_SCRIPTS_DIRECTORY]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-script.c b/libide/ide-script.c
index c02a44d..4fdbd15 100644
--- a/libide/ide-script.c
+++ b/libide/ide-script.c
@@ -159,17 +159,15 @@ ide_script_class_init (IdeScriptClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE,
-                                   gParamSpecs [PROP_FILE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [LOAD] =
     g_signal_new ("load",
                   IDE_TYPE_SCRIPT,
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (IdeScriptClass, load),
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -178,9 +176,7 @@ ide_script_class_init (IdeScriptClass *klass)
                   IDE_TYPE_SCRIPT,
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (IdeScriptClass, unload),
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 }
diff --git a/libide/ide-search-context.c b/libide/ide-search-context.c
index c940414..a2a95f5 100644
--- a/libide/ide-search-context.c
+++ b/libide/ide-search-context.c
@@ -200,8 +200,7 @@ ide_search_context_class_init (IdeSearchContextClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -210,9 +209,7 @@ ide_search_context_class_init (IdeSearchContextClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   2,
                   IDE_TYPE_SEARCH_PROVIDER,
@@ -223,9 +220,7 @@ ide_search_context_class_init (IdeSearchContextClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   2,
                   IDE_TYPE_SEARCH_PROVIDER,
@@ -236,9 +231,7 @@ ide_search_context_class_init (IdeSearchContextClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   2,
                   IDE_TYPE_SEARCH_PROVIDER,
diff --git a/libide/ide-search-engine.c b/libide/ide-search-engine.c
index 66d5688..336aff0 100644
--- a/libide/ide-search-engine.c
+++ b/libide/ide-search-engine.c
@@ -131,9 +131,7 @@ ide_search_engine_class_init (IdeSearchEngineClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   IDE_TYPE_SEARCH_PROVIDER);
diff --git a/libide/ide-search-result.c b/libide/ide-search-result.c
index 19b95dd..00a340f 100644
--- a/libide/ide-search-result.c
+++ b/libide/ide-search-result.c
@@ -237,8 +237,6 @@ ide_search_result_class_init (IdeSearchResultClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TITLE,
-                                   gParamSpecs [PROP_TITLE]);
 
   gParamSpecs [PROP_SUBTITLE] =
     g_param_spec_string ("subtitle",
@@ -248,8 +246,6 @@ ide_search_result_class_init (IdeSearchResultClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SUBTITLE,
-                                   gParamSpecs [PROP_SUBTITLE]);
 
   gParamSpecs [PROP_SCORE] =
     g_param_spec_float ("score",
@@ -261,8 +257,8 @@ ide_search_result_class_init (IdeSearchResultClass *klass)
                         (G_PARAM_READWRITE |
                          G_PARAM_CONSTRUCT_ONLY |
                          G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SCORE,
-                                   gParamSpecs [PROP_SCORE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-service.c b/libide/ide-service.c
index a6723c2..2559d9f 100644
--- a/libide/ide-service.c
+++ b/libide/ide-service.c
@@ -139,8 +139,6 @@ ide_service_class_init (IdeServiceClass *klass)
                          _("The name of the service."),
                          NULL,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_NAME,
-                                   gParamSpecs [PROP_NAME]);
 
   gParamSpecs [PROP_RUNNING] =
     g_param_spec_boolean ("running",
@@ -148,16 +146,15 @@ ide_service_class_init (IdeServiceClass *klass)
                           _("If the service is running."),
                           FALSE,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_RUNNING,
-                                   gParamSpecs [PROP_RUNNING]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [START] =
     g_signal_new ("start",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (IdeServiceClass, start),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -166,8 +163,7 @@ ide_service_class_init (IdeServiceClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (IdeServiceClass, stop),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 }
diff --git a/libide/ide-source-map.c b/libide/ide-source-map.c
index 3a561ea..e5e44e6 100644
--- a/libide/ide-source-map.c
+++ b/libide/ide-source-map.c
@@ -903,7 +903,6 @@ ide_source_map_class_init (IdeSourceMapClass *klass)
                          _("The view this widget is mapping."),
                          GTK_SOURCE_TYPE_VIEW,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_VIEW, gParamSpecs [PROP_VIEW]);
 
   gParamSpecs [PROP_FONT_DESC] =
     g_param_spec_boxed ("font-desc",
@@ -911,7 +910,8 @@ ide_source_map_class_init (IdeSourceMapClass *klass)
                         _("The Pango font description to use."),
                         PANGO_TYPE_FONT_DESCRIPTION,
                         (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FONT_DESC, gParamSpecs [PROP_FONT_DESC]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [HIDE_MAP] =
     g_signal_new ("hide-map",
diff --git a/libide/ide-source-snippet-chunk.c b/libide/ide-source-snippet-chunk.c
index fa5de1c..88d0932 100644
--- a/libide/ide-source-snippet-chunk.c
+++ b/libide/ide-source-snippet-chunk.c
@@ -315,8 +315,6 @@ ide_source_snippet_chunk_class_init (IdeSourceSnippetChunkClass *klass)
                          _("The snippet context."),
                          IDE_TYPE_SOURCE_SNIPPET_CONTEXT,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CONTEXT,
-                                   gParamSpecs[PROP_CONTEXT]);
 
   gParamSpecs[PROP_SPEC] =
     g_param_spec_string ("spec",
@@ -324,8 +322,6 @@ ide_source_snippet_chunk_class_init (IdeSourceSnippetChunkClass *klass)
                          _("The specification to expand using the context."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SPEC,
-                                   gParamSpecs[PROP_SPEC]);
 
   gParamSpecs[PROP_TAB_STOP] =
     g_param_spec_int ("tab-stop",
@@ -335,8 +331,6 @@ ide_source_snippet_chunk_class_init (IdeSourceSnippetChunkClass *klass)
                       G_MAXINT,
                       -1,
                       (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TAB_STOP,
-                                   gParamSpecs[PROP_TAB_STOP]);
 
   gParamSpecs[PROP_TEXT] =
     g_param_spec_string ("text",
@@ -344,8 +338,6 @@ ide_source_snippet_chunk_class_init (IdeSourceSnippetChunkClass *klass)
                          _("The text for the chunk."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TEXT,
-                                   gParamSpecs[PROP_TEXT]);
 
   gParamSpecs[PROP_TEXT_SET] =
     g_param_spec_boolean ("text-set",
@@ -353,8 +345,8 @@ ide_source_snippet_chunk_class_init (IdeSourceSnippetChunkClass *klass)
                           _("If the text property has been manually set."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TEXT_SET,
-                                   gParamSpecs[PROP_TEXT_SET]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-source-snippet-completion-item.c b/libide/ide-source-snippet-completion-item.c
index 7615e52..072f65a 100644
--- a/libide/ide-source-snippet-completion-item.c
+++ b/libide/ide-source-snippet-completion-item.c
@@ -135,8 +135,8 @@ ide_source_snippet_completion_item_class_init (IdeSourceSnippetCompletionItemCla
                          _("The snippet to insert."),
                          IDE_TYPE_SOURCE_SNIPPET,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SNIPPET,
-                                   gParamSpecs[PROP_SNIPPET]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-source-snippet-completion-provider.c b/libide/ide-source-snippet-completion-provider.c
index 39ac1b8..265e575 100644
--- a/libide/ide-source-snippet-completion-provider.c
+++ b/libide/ide-source-snippet-completion-provider.c
@@ -169,8 +169,6 @@ ide_source_snippet_completion_provider_class_init (IdeSourceSnippetCompletionPro
                          _("The source view to insert snippet into."),
                          IDE_TYPE_SOURCE_VIEW,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SOURCE_VIEW,
-                                   gParamSpecs[PROP_SOURCE_VIEW]);
 
   gParamSpecs[PROP_SNIPPETS] =
     g_param_spec_object ("snippets",
@@ -178,8 +176,8 @@ ide_source_snippet_completion_provider_class_init (IdeSourceSnippetCompletionPro
                          _("The snippets to complete with this provider."),
                          IDE_TYPE_SOURCE_SNIPPETS,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SNIPPETS,
-                                   gParamSpecs[PROP_SNIPPETS]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-source-snippet-context.c b/libide/ide-source-snippet-context.c
index f5102ba..fc33149 100644
--- a/libide/ide-source-snippet-context.c
+++ b/libide/ide-source-snippet-context.c
@@ -649,9 +649,7 @@ ide_source_snippet_context_class_init (IdeSourceSnippetContextClass *klass)
                                     IDE_TYPE_SOURCE_SNIPPET_CONTEXT,
                                     G_SIGNAL_RUN_FIRST,
                                     0,
-                                    NULL,
-                                    NULL,
-                                    g_cclosure_marshal_VOID__VOID,
+                                    NULL, NULL, NULL,
                                     G_TYPE_NONE,
                                     0);
 
diff --git a/libide/ide-source-snippet.c b/libide/ide-source-snippet.c
index 995e77d..90f04a1 100644
--- a/libide/ide-source-snippet.c
+++ b/libide/ide-source-snippet.c
@@ -947,8 +947,6 @@ ide_source_snippet_class_init (IdeSourceSnippetClass *klass)
                          _("The GtkTextBuffer for the snippet."),
                          GTK_TYPE_TEXT_BUFFER,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BUFFER,
-                                   gParamSpecs[PROP_BUFFER]);
 
   gParamSpecs[PROP_MARK_BEGIN] =
     g_param_spec_object ("mark-begin",
@@ -956,8 +954,6 @@ ide_source_snippet_class_init (IdeSourceSnippetClass *klass)
                          _("The beginning text mark."),
                          GTK_TYPE_TEXT_MARK,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_MARK_BEGIN,
-                                   gParamSpecs[PROP_MARK_BEGIN]);
 
   gParamSpecs[PROP_MARK_END] =
     g_param_spec_object ("mark-end",
@@ -965,8 +961,6 @@ ide_source_snippet_class_init (IdeSourceSnippetClass *klass)
                          _("The ending text mark."),
                          GTK_TYPE_TEXT_MARK,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_MARK_END,
-                                   gParamSpecs[PROP_MARK_END]);
 
   gParamSpecs[PROP_TRIGGER] =
     g_param_spec_string ("trigger",
@@ -974,8 +968,6 @@ ide_source_snippet_class_init (IdeSourceSnippetClass *klass)
                          _("The trigger for the snippet."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TRIGGER,
-                                   gParamSpecs[PROP_TRIGGER]);
 
   gParamSpecs[PROP_LANGUAGE] =
     g_param_spec_string ("language",
@@ -983,8 +975,6 @@ ide_source_snippet_class_init (IdeSourceSnippetClass *klass)
                          _("The language for the snippet."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_LANGUAGE,
-                                   gParamSpecs[PROP_LANGUAGE]);
 
   gParamSpecs[PROP_DESCRIPTION] =
     g_param_spec_string ("description",
@@ -992,8 +982,6 @@ ide_source_snippet_class_init (IdeSourceSnippetClass *klass)
                          _("The description for the snippet."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DESCRIPTION,
-                                   gParamSpecs[PROP_DESCRIPTION]);
 
   gParamSpecs[PROP_TAB_STOP] =
     g_param_spec_int ("tab-stop",
@@ -1003,8 +991,8 @@ ide_source_snippet_class_init (IdeSourceSnippetClass *klass)
                       G_MAXINT,
                       -1,
                       (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TAB_STOP,
-                                   gParamSpecs[PROP_TAB_STOP]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-source-view-capture.c b/libide/ide-source-view-capture.c
index 175b14c..fb4a8a9 100644
--- a/libide/ide-source-view-capture.c
+++ b/libide/ide-source-view-capture.c
@@ -244,7 +244,8 @@ ide_source_view_capture_class_init (IdeSourceViewCaptureClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_VIEW, gParamSpecs [PROP_VIEW]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/libide/ide-source-view-mode.c b/libide/ide-source-view-mode.c
index a320f60..5217619 100644
--- a/libide/ide-source-view-mode.c
+++ b/libide/ide-source-view-mode.c
@@ -260,7 +260,8 @@ ide_source_view_mode_class_init (IdeSourceViewModeClass *klass)
                           _("The name of the mode."),
                           NULL,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_NAME, gParamSpecs [PROP_NAME]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gtk_widget_class_install_style_property (GTK_WIDGET_CLASS (klass),
                                            g_param_spec_boolean ("suppress-unbound",
diff --git a/libide/ide-source-view.c b/libide/ide-source-view.c
index 4de378c..7616295 100644
--- a/libide/ide-source-view.c
+++ b/libide/ide-source-view.c
@@ -159,18 +159,15 @@ G_DEFINE_TYPE_WITH_PRIVATE (IdeSourceView, ide_source_view, GTK_SOURCE_TYPE_VIEW
 
 enum {
   PROP_0,
-  PROP_AUTO_INDENT,
   PROP_BACK_FORWARD_LIST,
   PROP_COUNT,
   PROP_ENABLE_WORD_COMPLETION,
   PROP_FILE_SETTINGS,
   PROP_FONT_NAME,
   PROP_FONT_DESC,
-  PROP_HIGHLIGHT_CURRENT_LINE,
   PROP_INDENT_STYLE,
   PROP_INSERT_MATCHING_BRACE,
   PROP_MODE_DISPLAY_NAME,
-  PROP_OVERWRITE,
   PROP_OVERWRITE_BRACES,
   PROP_RUBBERBAND_SEARCH,
   PROP_SCROLL_OFFSET,
@@ -182,7 +179,12 @@ enum {
   PROP_SHOW_SEARCH_SHADOW,
   PROP_SMART_BACKSPACE,
   PROP_SNIPPET_COMPLETION,
-  LAST_PROP
+  LAST_PROP,
+
+  /* These are overridden */
+  PROP_AUTO_INDENT,
+  PROP_HIGHLIGHT_CURRENT_LINE,
+  PROP_OVERWRITE
 };
 
 enum {
@@ -5010,8 +5012,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                          _("The back-forward list to track jumps."),
                          IDE_TYPE_BACK_FORWARD_LIST,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BACK_FORWARD_LIST,
-                                   gParamSpecs [PROP_BACK_FORWARD_LIST]);
 
   gParamSpecs [PROP_COUNT] =
     g_param_spec_uint ("count",
@@ -5021,7 +5021,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                        G_MAXINT,
                        0,
                        (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_COUNT, gParamSpecs [PROP_COUNT]);
 
   gParamSpecs [PROP_FILE_SETTINGS] =
     g_param_spec_object ("file-settings",
@@ -5029,8 +5028,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                          _("The file settings that have been loaded for the file."),
                          IDE_TYPE_FILE_SETTINGS,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE_SETTINGS,
-                                   gParamSpecs [PROP_FILE_SETTINGS]);
 
   gParamSpecs [PROP_FONT_DESC] =
     g_param_spec_boxed ("font-desc",
@@ -5038,8 +5035,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                         _("The Pango font description to use for rendering source."),
                         PANGO_TYPE_FONT_DESCRIPTION,
                         (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FONT_DESC,
-                                   gParamSpecs [PROP_FONT_DESC]);
 
   gParamSpecs [PROP_ENABLE_WORD_COMPLETION] =
     g_param_spec_boolean ("enable-word-completion",
@@ -5047,8 +5042,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                           _("If words from all buffers can be used to autocomplete."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ENABLE_WORD_COMPLETION,
-                                   gParamSpecs [PROP_ENABLE_WORD_COMPLETION]);
 
   gParamSpecs [PROP_FONT_NAME] =
     g_param_spec_string ("font-name",
@@ -5056,8 +5049,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                          _("The Pango font name to use for rendering source."),
                          "Monospace",
                          (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FONT_NAME,
-                                   gParamSpecs [PROP_FONT_NAME]);
 
   g_object_class_override_property (object_class,
                                     PROP_HIGHLIGHT_CURRENT_LINE,
@@ -5070,8 +5061,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                        IDE_TYPE_INDENT_STYLE,
                        IDE_INDENT_STYLE_TABS,
                        (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_INDENT_STYLE,
-                                   gParamSpecs [PROP_INDENT_STYLE]);
 
   gParamSpecs [PROP_INSERT_MATCHING_BRACE] =
     g_param_spec_boolean ("insert-matching-brace",
@@ -5079,8 +5068,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                           _("Insert a matching brace/bracket/quotation/parenthesis."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_INSERT_MATCHING_BRACE,
-                                   gParamSpecs [PROP_INSERT_MATCHING_BRACE]);
 
   g_object_class_override_property (object_class, PROP_OVERWRITE, "overwrite");
 
@@ -5090,8 +5077,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                          _("The display name of the keybinding mode."),
                          NULL,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_MODE_DISPLAY_NAME,
-                                   gParamSpecs [PROP_MODE_DISPLAY_NAME]);
 
   gParamSpecs [PROP_OVERWRITE_BRACES] =
     g_param_spec_boolean ("overwrite-braces",
@@ -5099,8 +5084,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                           _("Overwrite a matching brace/bracket/quotation/parenthesis."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_OVERWRITE_BRACES,
-                                   gParamSpecs [PROP_OVERWRITE_BRACES]);
 
   gParamSpecs [PROP_RUBBERBAND_SEARCH] =
     g_param_spec_boolean ("rubberband-search",
@@ -5108,8 +5091,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                           _("Auto scroll to next search result without moving insertion caret."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_RUBBERBAND_SEARCH,
-                                   gParamSpecs [PROP_RUBBERBAND_SEARCH]);
 
   gParamSpecs [PROP_SCROLL_OFFSET] =
     g_param_spec_uint ("scroll-offset",
@@ -5119,8 +5100,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                        G_MAXUINT,
                        0,
                        (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SCROLL_OFFSET,
-                                   gParamSpecs [PROP_SCROLL_OFFSET]);
 
   gParamSpecs [PROP_SEARCH_CONTEXT] =
     g_param_spec_object ("search-context",
@@ -5128,8 +5107,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                          _("The search context for the view."),
                          GTK_SOURCE_TYPE_SEARCH_CONTEXT,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SEARCH_CONTEXT,
-                                   gParamSpecs [PROP_SEARCH_CONTEXT]);
 
   gParamSpecs [PROP_SHOW_GRID_LINES] =
     g_param_spec_boolean ("show-grid-lines",
@@ -5137,8 +5114,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                           _("If the background grid should be shown."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SHOW_GRID_LINES,
-                                   gParamSpecs [PROP_SHOW_GRID_LINES]);
 
   gParamSpecs [PROP_SHOW_LINE_CHANGES] =
     g_param_spec_boolean ("show-line-changes",
@@ -5146,8 +5121,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                           _("If line changes should be shown in the left gutter."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SHOW_LINE_CHANGES,
-                                   gParamSpecs [PROP_SHOW_LINE_CHANGES]);
 
   /**
    * IdeSourceView:show-line-diagnostics:
@@ -5163,8 +5136,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                           _("If line changes diagnostics should be shown in the left gutter."),
                           TRUE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SHOW_LINE_DIAGNOSTICS,
-                                   gParamSpecs [PROP_SHOW_LINE_DIAGNOSTICS]);
 
   gParamSpecs [PROP_SHOW_SEARCH_BUBBLES] =
     g_param_spec_boolean ("show-search-bubbles",
@@ -5172,8 +5143,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                           _("If search bubbles should be rendered."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SHOW_SEARCH_BUBBLES,
-                                   gParamSpecs [PROP_SHOW_SEARCH_BUBBLES]);
 
   gParamSpecs [PROP_SHOW_SEARCH_SHADOW] =
     g_param_spec_boolean ("show-search-shadow",
@@ -5181,8 +5150,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                           _("If the shadow should be drawn when performing searches."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SHOW_SEARCH_SHADOW,
-                                   gParamSpecs [PROP_SHOW_SEARCH_SHADOW]);
 
   gParamSpecs [PROP_SMART_BACKSPACE] =
     g_param_spec_boolean ("smart-backspace",
@@ -5190,8 +5157,6 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                          _("If smart Backspace should be used."),
                          FALSE,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SMART_BACKSPACE,
-                                   gParamSpecs [PROP_SMART_BACKSPACE]);
 
   gParamSpecs [PROP_SNIPPET_COMPLETION] =
     g_param_spec_boolean ("snippet-completion",
@@ -5199,16 +5164,15 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                           _("If snippet expansion should be enabled via the completion window."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SNIPPET_COMPLETION,
-                                   gParamSpecs [PROP_SNIPPET_COMPLETION]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [ACTION] =
     g_signal_new ("action",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, action),
-                  NULL, NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   3,
                   G_TYPE_STRING,
@@ -5220,8 +5184,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, append_to_count),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__INT,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   G_TYPE_INT);
@@ -5240,8 +5203,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, auto_indent),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5259,8 +5221,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, begin_macro),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5269,8 +5230,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                                 G_TYPE_FROM_CLASS (klass),
                                 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                                 G_CALLBACK (ide_source_view_begin_user_action),
-                                NULL, NULL,
-                                g_cclosure_marshal_VOID__VOID,
+                                NULL, NULL, NULL,
                                 G_TYPE_NONE,
                                 0);
 
@@ -5290,8 +5250,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, capture_modifier),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5304,8 +5263,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, clear_count),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5314,8 +5272,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, clear_modifier),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5324,8 +5281,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, clear_selection),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5334,8 +5290,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, clear_snippets),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5344,8 +5299,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, cycle_completion),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__ENUM,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   GTK_TYPE_DIRECTION_TYPE);
@@ -5355,8 +5309,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, delete_selection),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5374,8 +5327,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, end_macro),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5384,8 +5336,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                                 G_TYPE_FROM_CLASS (klass),
                                 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                                 G_CALLBACK (ide_source_view_end_user_action),
-                                NULL, NULL,
-                                g_cclosure_marshal_VOID__VOID,
+                                NULL, NULL, NULL,
                                 G_TYPE_NONE,
                                 0);
 
@@ -5394,8 +5345,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (IdeSourceViewClass, focus_location),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__BOXED,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   IDE_TYPE_SOURCE_LOCATION);
@@ -5405,8 +5355,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, goto_definition),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5415,8 +5364,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, hide_completion),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5425,8 +5373,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, indent_selection),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__INT,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   G_TYPE_INT);
@@ -5436,8 +5383,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, insert_at_cursor_and_indent),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__STRING,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   G_TYPE_STRING);
@@ -5456,8 +5402,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, insert_modifier),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__BOOLEAN,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   G_TYPE_BOOLEAN);
@@ -5471,8 +5416,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (IdeSourceViewClass, jump),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__BOXED,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   GTK_TYPE_TEXT_ITER);
@@ -5482,8 +5426,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, movement),
-                  NULL, NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   4,
                   IDE_TYPE_SOURCE_VIEW_MOVEMENT,
@@ -5503,8 +5446,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, move_error),
-                  NULL, NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   GTK_TYPE_DIRECTION_TYPE);
@@ -5514,8 +5456,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, move_search),
-                  NULL, NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   6,
                   GTK_TYPE_DIRECTION_TYPE,
@@ -5530,8 +5471,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, paste_clipboard_extended),
-                  NULL, NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   3,
                   G_TYPE_BOOLEAN,
@@ -5549,8 +5489,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, pop_selection),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5559,8 +5498,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (IdeSourceViewClass, pop_snippet),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__OBJECT,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   IDE_TYPE_SOURCE_SNIPPET);
@@ -5577,8 +5515,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, push_selection),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5615,8 +5552,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, replay_macro),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__BOOLEAN,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   G_TYPE_BOOLEAN);
@@ -5626,8 +5562,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, request_documentation),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5636,8 +5571,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, restore_insert_mark),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5646,8 +5580,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, save_insert_mark),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 
@@ -5656,8 +5589,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, selection_theatric),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__ENUM,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   IDE_TYPE_SOURCE_VIEW_THEATRIC);
@@ -5678,8 +5610,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, set_overwrite),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__BOOLEAN,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   G_TYPE_BOOLEAN);
@@ -5689,8 +5620,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, set_search_text),
-                  NULL, NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   2,
                   G_TYPE_STRING,
@@ -5710,8 +5640,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, sort),
-                  NULL, NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   2,
                   G_TYPE_BOOLEAN,
@@ -5722,8 +5651,7 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (IdeSourceViewClass, swap_selection_bounds),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   0);
 }
diff --git a/libide/theatrics/ide-animation.c b/libide/theatrics/ide-animation.c
index 7e43857..d0ae0cb 100644
--- a/libide/theatrics/ide-animation.c
+++ b/libide/theatrics/ide-animation.c
@@ -822,8 +822,6 @@ ide_animation_class_init (IdeAnimationClass *klass)
                        (G_PARAM_WRITABLE |
                         G_PARAM_CONSTRUCT_ONLY |
                         G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DURATION,
-                                   gParamSpecs[PROP_DURATION]);
 
   gParamSpecs[PROP_FRAME_CLOCK] =
     g_param_spec_object ("frame-clock",
@@ -833,8 +831,6 @@ ide_animation_class_init (IdeAnimationClass *klass)
                          (G_PARAM_WRITABLE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FRAME_CLOCK,
-                                   gParamSpecs[PROP_FRAME_CLOCK]);
 
   /**
    * IdeAnimation:mode:
@@ -852,8 +848,6 @@ ide_animation_class_init (IdeAnimationClass *klass)
                        (G_PARAM_WRITABLE |
                         G_PARAM_CONSTRUCT_ONLY |
                         G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_MODE,
-                                   gParamSpecs[PROP_MODE]);
 
   /**
    * IdeAnimation:target:
@@ -869,8 +863,8 @@ ide_animation_class_init (IdeAnimationClass *klass)
                          (G_PARAM_WRITABLE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TARGET,
-                                   gParamSpecs[PROP_TARGET]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   /**
    * IdeAnimation::tick:
@@ -881,9 +875,7 @@ ide_animation_class_init (IdeAnimationClass *klass)
                                  IDE_TYPE_ANIMATION,
                                  G_SIGNAL_RUN_FIRST,
                                  0,
-                                 NULL,
-                                 NULL,
-                                 g_cclosure_marshal_VOID__VOID,
+                                 NULL, NULL, NULL,
                                  G_TYPE_NONE,
                                  0);
 
diff --git a/libide/theatrics/ide-box-theatric.c b/libide/theatrics/ide-box-theatric.c
index ee51a79..368a7b4 100644
--- a/libide/theatrics/ide-box-theatric.c
+++ b/libide/theatrics/ide-box-theatric.c
@@ -261,8 +261,6 @@ ide_box_theatric_class_init (IdeBoxTheatricClass *klass)
                          1.0,
                          1.0,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ALPHA,
-                                   gParamSpecs[PROP_ALPHA]);
 
   gParamSpecs[PROP_BACKGROUND] =
     g_param_spec_string ("background",
@@ -270,8 +268,6 @@ ide_box_theatric_class_init (IdeBoxTheatricClass *klass)
                          _("background"),
                          "#000000",
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BACKGROUND,
-                                   gParamSpecs[PROP_BACKGROUND]);
 
   gParamSpecs[PROP_HEIGHT] =
     g_param_spec_int ("height",
@@ -281,8 +277,6 @@ ide_box_theatric_class_init (IdeBoxTheatricClass *klass)
                       G_MAXINT,
                       0,
                       (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_HEIGHT,
-                                   gParamSpecs[PROP_HEIGHT]);
 
   gParamSpecs[PROP_TARGET] =
     g_param_spec_object ("target",
@@ -292,8 +286,6 @@ ide_box_theatric_class_init (IdeBoxTheatricClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TARGET,
-                                   gParamSpecs[PROP_TARGET]);
 
   gParamSpecs[PROP_WIDTH] =
     g_param_spec_int ("width",
@@ -303,8 +295,6 @@ ide_box_theatric_class_init (IdeBoxTheatricClass *klass)
                       G_MAXINT,
                       0,
                       (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_WIDTH,
-                                   gParamSpecs[PROP_WIDTH]);
 
   gParamSpecs[PROP_X] =
     g_param_spec_int ("x",
@@ -314,8 +304,6 @@ ide_box_theatric_class_init (IdeBoxTheatricClass *klass)
                       G_MAXINT,
                       0,
                       (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_X,
-                                   gParamSpecs[PROP_X]);
 
   gParamSpecs[PROP_Y] =
     g_param_spec_int ("y",
@@ -325,8 +313,8 @@ ide_box_theatric_class_init (IdeBoxTheatricClass *klass)
                       G_MAXINT,
                       0,
                       (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_Y,
-                                   gParamSpecs[PROP_Y]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/commands/gb-command-bar-item.c b/src/commands/gb-command-bar-item.c
index 1676b85..de4575b 100644
--- a/src/commands/gb-command-bar-item.c
+++ b/src/commands/gb-command-bar-item.c
@@ -178,8 +178,8 @@ gb_command_bar_item_class_init (GbCommandBarItemClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_RESULT,
-                                   gParamSpecs [PROP_RESULT]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/commands/gb-command-bar.c b/src/commands/gb-command-bar.c
index 0239ea2..b4735c2 100644
--- a/src/commands/gb-command-bar.c
+++ b/src/commands/gb-command-bar.c
@@ -628,8 +628,7 @@ gb_command_bar_class_init (GbCommandBarClass *klass)
                                 G_TYPE_FROM_CLASS (klass),
                                 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                                 G_CALLBACK (gb_command_bar_complete),
-                                NULL, NULL,
-                                g_cclosure_marshal_VOID__VOID,
+                                NULL, NULL, NULL,
                                 G_TYPE_NONE,
                                 0);
 
@@ -643,8 +642,7 @@ gb_command_bar_class_init (GbCommandBarClass *klass)
                                 G_TYPE_FROM_CLASS (klass),
                                 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                                 G_CALLBACK (gb_command_bar_move_history),
-                                NULL, NULL,
-                                g_cclosure_marshal_VOID__ENUM,
+                                NULL, NULL, NULL,
                                 G_TYPE_NONE,
                                 1,
                                 GTK_TYPE_DIRECTION_TYPE);
diff --git a/src/commands/gb-command-gaction.c b/src/commands/gb-command-gaction.c
index bd34b96..90e4a4d 100644
--- a/src/commands/gb-command-gaction.c
+++ b/src/commands/gb-command-gaction.c
@@ -187,8 +187,6 @@ gb_command_gaction_class_init (GbCommandGactionClass *klass)
                          _("The GActionGroup containing the action."),
                          G_TYPE_ACTION_GROUP,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ACTION_GROUP,
-                                   gParamSpecs [PROP_ACTION_GROUP]);
 
   gParamSpecs [PROP_ACTION_NAME] =
     g_param_spec_string ("action-name",
@@ -196,8 +194,6 @@ gb_command_gaction_class_init (GbCommandGactionClass *klass)
                          _("The name of the action to execute."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ACTION_NAME,
-                                   gParamSpecs [PROP_ACTION_NAME]);
 
   gParamSpecs [PROP_PARAMETERS] =
     g_param_spec_variant ("parameters",
@@ -206,8 +202,8 @@ gb_command_gaction_class_init (GbCommandGactionClass *klass)
                           G_VARIANT_TYPE_ANY,
                           NULL,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_PARAMETERS,
-                                   gParamSpecs [PROP_PARAMETERS]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/commands/gb-command-provider.c b/src/commands/gb-command-provider.c
index ca2cc5f..e43993c 100644
--- a/src/commands/gb-command-provider.c
+++ b/src/commands/gb-command-provider.c
@@ -316,7 +316,6 @@ gb_command_provider_class_init (GbCommandProviderClass *klass)
                          _("The last focused GbView widget."),
                          GB_TYPE_VIEW,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ACTIVE_VIEW, gParamSpecs [PROP_ACTIVE_VIEW]);
 
   /**
    * GbCommandProvider:priority:
@@ -338,7 +337,6 @@ gb_command_provider_class_init (GbCommandProviderClass *klass)
                       G_MAXINT,
                       0,
                       (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_PRIORITY, gParamSpecs [PROP_PRIORITY]);
 
   /**
    * GbCommandProvider:workbench:
@@ -355,8 +353,8 @@ gb_command_provider_class_init (GbCommandProviderClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_WORKBENCH,
-                                   gParamSpecs [PROP_WORKBENCH]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   /**
    * GbCommandProvider::lookup:
diff --git a/src/commands/gb-command-result.c b/src/commands/gb-command-result.c
index c849287..e9f45e6 100644
--- a/src/commands/gb-command-result.c
+++ b/src/commands/gb-command-result.c
@@ -226,8 +226,6 @@ gb_command_result_class_init (GbCommandResultClass *klass)
                          NULL,
                          (G_PARAM_READWRITE |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_COMMAND_TEXT,
-                                   gParamSpecs [PROP_COMMAND_TEXT]);
 
   gParamSpecs [PROP_IS_ERROR] =
     g_param_spec_boolean ("is-error",
@@ -236,8 +234,6 @@ gb_command_result_class_init (GbCommandResultClass *klass)
                           FALSE,
                           (G_PARAM_READWRITE |
                            G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_IS_ERROR,
-                                   gParamSpecs [PROP_IS_ERROR]);
 
   gParamSpecs [PROP_IS_RUNNING] =
     g_param_spec_boolean ("is-running",
@@ -246,8 +242,6 @@ gb_command_result_class_init (GbCommandResultClass *klass)
                           FALSE,
                           (G_PARAM_READWRITE |
                            G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_IS_RUNNING,
-                                   gParamSpecs [PROP_IS_RUNNING]);
 
   gParamSpecs [PROP_RESULT_TEXT] =
     g_param_spec_string ("result-text",
@@ -256,8 +250,8 @@ gb_command_result_class_init (GbCommandResultClass *klass)
                          NULL,
                          (G_PARAM_READWRITE |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_RESULT_TEXT,
-                                   gParamSpecs [PROP_RESULT_TEXT]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/commands/gb-command-vim.c b/src/commands/gb-command-vim.c
index 22ac5b6..9ecdbef 100644
--- a/src/commands/gb-command-vim.c
+++ b/src/commands/gb-command-vim.c
@@ -183,8 +183,6 @@ gb_command_vim_class_init (GbCommandVimClass *klass)
                          NULL,
                          (G_PARAM_READWRITE |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_COMMAND_TEXT,
-                                   gParamSpecs [PROP_COMMAND_TEXT]);
 
   gParamSpecs [PROP_SOURCE_VIEW] =
     g_param_spec_object ("source-view",
@@ -193,8 +191,8 @@ gb_command_vim_class_init (GbCommandVimClass *klass)
                          IDE_TYPE_SOURCE_VIEW,
                          (G_PARAM_READWRITE |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SOURCE_VIEW,
-                                   gParamSpecs [PROP_SOURCE_VIEW]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/commands/gb-command.c b/src/commands/gb-command.c
index c04ad30..191bc65 100644
--- a/src/commands/gb-command.c
+++ b/src/commands/gb-command.c
@@ -59,8 +59,7 @@ gb_command_class_init (GbCommandClass *klass)
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GbCommandClass, execute),
                   g_signal_accumulator_first_wins,
-                  NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL,
                   GB_TYPE_COMMAND_RESULT,
                   0);
 }
diff --git a/src/devhelp/gb-devhelp-document.c b/src/devhelp/gb-devhelp-document.c
index 7be6539..83715f2 100644
--- a/src/devhelp/gb-devhelp-document.c
+++ b/src/devhelp/gb-devhelp-document.c
@@ -44,11 +44,13 @@ G_DEFINE_TYPE_EXTENDED (GbDevhelpDocument,
 
 enum {
   PROP_0,
+  PROP_URI,
+  LAST_PROP,
+
+  /* These are overridden */
   PROP_MODIFIED,
   PROP_READ_ONLY,
-  PROP_TITLE,
-  PROP_URI,
-  LAST_PROP
+  PROP_TITLE
 };
 
 static GParamSpec *gParamSpecs [LAST_PROP];
@@ -260,7 +262,8 @@ gb_devhelp_document_class_init (GbDevhelpDocumentClass *klass)
                          _("The uri to load."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_URI, gParamSpecs [PROP_URI]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/devhelp/gb-devhelp-view.c b/src/devhelp/gb-devhelp-view.c
index 371dd40..02735d0 100644
--- a/src/devhelp/gb-devhelp-view.c
+++ b/src/devhelp/gb-devhelp-view.c
@@ -245,7 +245,8 @@ gb_devhelp_view_class_init (GbDevhelpViewClass *klass)
                          _("The document for the devhelp view."),
                          GB_TYPE_DEVHELP_DOCUMENT,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DOCUMENT, gParamSpecs [PROP_DOCUMENT]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   GB_WIDGET_CLASS_TEMPLATE (klass, "gb-devhelp-view.ui");
   GB_WIDGET_CLASS_BIND_PRIVATE (klass, GbDevhelpView, web_view1);
diff --git a/src/dialogs/gb-new-project-dialog.c b/src/dialogs/gb-new-project-dialog.c
index f2731c4..f011e34 100644
--- a/src/dialogs/gb-new-project-dialog.c
+++ b/src/dialogs/gb-new-project-dialog.c
@@ -530,8 +530,7 @@ gb_new_project_dialog_class_init (GbNewProjectDialogClass *klass)
                                 G_TYPE_FROM_CLASS (klass),
                                 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                                 G_CALLBACK (gb_new_project_dialog_back),
-                                NULL, NULL,
-                                g_cclosure_marshal_VOID__VOID,
+                                NULL, NULL, NULL,
                                 G_TYPE_NONE,
                                 0);
 
@@ -540,8 +539,7 @@ gb_new_project_dialog_class_init (GbNewProjectDialogClass *klass)
                                 G_TYPE_FROM_CLASS (klass),
                                 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                                 G_CALLBACK (gb_new_project_dialog_close),
-                                NULL, NULL,
-                                g_cclosure_marshal_VOID__VOID,
+                                NULL, NULL, NULL,
                                 G_TYPE_NONE,
                                 0);
 
@@ -550,8 +548,7 @@ gb_new_project_dialog_class_init (GbNewProjectDialogClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__OBJECT,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   G_TYPE_FILE);
diff --git a/src/dialogs/gb-recent-project-row.c b/src/dialogs/gb-recent-project-row.c
index 68cd211..80e14f2 100644
--- a/src/dialogs/gb-recent-project-row.c
+++ b/src/dialogs/gb-recent-project-row.c
@@ -213,8 +213,6 @@ gb_recent_project_row_class_init (GbRecentProjectRowClass *klass)
                          _("The project information for the row."),
                          IDE_TYPE_PROJECT_INFO,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_PROJECT_INFO,
-                                   gParamSpecs [PROP_PROJECT_INFO]);
 
   gParamSpecs [PROP_SELECTED] =
     g_param_spec_boolean ("selected",
@@ -222,7 +220,6 @@ gb_recent_project_row_class_init (GbRecentProjectRowClass *klass)
                           _("Selected"),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SELECTED, gParamSpecs [PROP_SELECTED]);
 
   gParamSpecs [PROP_SELECTION_MODE] =
     g_param_spec_boolean ("selection-mode",
@@ -230,8 +227,8 @@ gb_recent_project_row_class_init (GbRecentProjectRowClass *klass)
                           _("Selection Mode"),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SELECTION_MODE,
-                                   gParamSpecs [PROP_SELECTION_MODE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/editor/gb-editor-frame.c b/src/editor/gb-editor-frame.c
index 2bfe497..509a126 100644
--- a/src/editor/gb-editor-frame.c
+++ b/src/editor/gb-editor-frame.c
@@ -784,8 +784,6 @@ gb_editor_frame_class_init (GbEditorFrameClass *klass)
                           _("Auto Hide Map"),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_AUTO_HIDE_MAP,
-                                   gParamSpecs [PROP_AUTO_HIDE_MAP]);
 
   gParamSpecs [PROP_BACK_FORWARD_LIST] =
     g_param_spec_object ("back-forward-list",
@@ -793,8 +791,6 @@ gb_editor_frame_class_init (GbEditorFrameClass *klass)
                          _("The back forward list."),
                          IDE_TYPE_BACK_FORWARD_LIST,
                          (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BACK_FORWARD_LIST,
-                                   gParamSpecs [PROP_BACK_FORWARD_LIST]);
 
   gParamSpecs [PROP_DOCUMENT] =
     g_param_spec_object ("document",
@@ -802,7 +798,6 @@ gb_editor_frame_class_init (GbEditorFrameClass *klass)
                          _("The editor document."),
                          GB_TYPE_EDITOR_DOCUMENT,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DOCUMENT, gParamSpecs [PROP_DOCUMENT]);
 
   gParamSpecs [PROP_SHOW_MAP] =
     g_param_spec_boolean ("show-map",
@@ -810,8 +805,8 @@ gb_editor_frame_class_init (GbEditorFrameClass *klass)
                           _("If the overview map should be shown."),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SHOW_MAP,
-                                   gParamSpecs [PROP_SHOW_MAP]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   GB_WIDGET_CLASS_TEMPLATE (klass, "gb-editor-frame.ui");
 
diff --git a/src/editor/gb-editor-map-bin.c b/src/editor/gb-editor-map-bin.c
index 6d6c043..c3009fc 100644
--- a/src/editor/gb-editor-map-bin.c
+++ b/src/editor/gb-editor-map-bin.c
@@ -176,8 +176,8 @@ gb_editor_map_bin_class_init (GbEditorMapBinClass *klass)
                          "The floating bar to use for relative allocation size.",
                          GTK_TYPE_WIDGET,
                          (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FLOATING_BAR,
-                                   gParamSpecs [PROP_FLOATING_BAR]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/editor/gb-editor-settings-widget.c b/src/editor/gb-editor-settings-widget.c
index 26c2527..150a017 100644
--- a/src/editor/gb-editor-settings-widget.c
+++ b/src/editor/gb-editor-settings-widget.c
@@ -183,8 +183,8 @@ gb_editor_settings_widget_class_init (GbEditorSettingsWidgetClass *klass)
                          _("The language to change the settings for."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_LANGUAGE,
-                                   gParamSpecs [PROP_LANGUAGE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/editor/gb-editor-view.c b/src/editor/gb-editor-view.c
index a25210f..6f60d95 100644
--- a/src/editor/gb-editor-view.c
+++ b/src/editor/gb-editor-view.c
@@ -688,7 +688,8 @@ gb_editor_view_class_init (GbEditorViewClass *klass)
                          _("The editor document."),
                          GB_TYPE_EDITOR_DOCUMENT,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DOCUMENT, gParamSpecs [PROP_DOCUMENT]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   GB_WIDGET_CLASS_TEMPLATE (klass, "gb-editor-view.ui");
 
diff --git a/src/editor/gb-editor-workspace.c b/src/editor/gb-editor-workspace.c
index 8b59b1a..f239af9 100644
--- a/src/editor/gb-editor-workspace.c
+++ b/src/editor/gb-editor-workspace.c
@@ -329,8 +329,8 @@ gb_editor_workspace_class_init (GbEditorWorkspaceClass *klass)
                           _("Show Project Tree"),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SHOW_PROJECT_TREE,
-                                   gParamSpecs [PROP_SHOW_PROJECT_TREE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   GB_WIDGET_CLASS_TEMPLATE (klass, "gb-editor-workspace.ui");
 
diff --git a/src/html/gb-html-document.c b/src/html/gb-html-document.c
index 8482ab1..fed6e8d 100644
--- a/src/html/gb-html-document.c
+++ b/src/html/gb-html-document.c
@@ -44,10 +44,12 @@ G_DEFINE_TYPE_EXTENDED (GbHtmlDocument, gb_html_document, G_TYPE_OBJECT, 0,
 enum {
   PROP_0,
   PROP_BUFFER,
+  LAST_PROP,
+
+  /* These are overridden */
   PROP_MODIFIED,
   PROP_READ_ONLY,
-  PROP_TITLE,
-  LAST_PROP
+  PROP_TITLE
 };
 
 static GParamSpec *gParamSpecs [LAST_PROP];
@@ -314,8 +316,8 @@ gb_html_document_class_init (GbHtmlDocumentClass *klass)
                          (G_PARAM_READWRITE |
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BUFFER,
-                                   gParamSpecs [PROP_BUFFER]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/html/gb-html-view.c b/src/html/gb-html-view.c
index 31dfeca..b6a745e 100644
--- a/src/html/gb-html-view.c
+++ b/src/html/gb-html-view.c
@@ -322,8 +322,8 @@ gb_html_view_class_init (GbHtmlViewClass *klass)
                          _("The document to view as HTML."),
                          GB_TYPE_DOCUMENT,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DOCUMENT,
-                                   gParamSpecs [PROP_DOCUMENT]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   GB_WIDGET_CLASS_TEMPLATE (klass, "gb-html-view.ui");
   GB_WIDGET_CLASS_BIND (klass, GbHtmlView, web_view1);
diff --git a/src/keybindings/gb-keybindings.c b/src/keybindings/gb-keybindings.c
index e2af70f..c3257f5 100644
--- a/src/keybindings/gb-keybindings.c
+++ b/src/keybindings/gb-keybindings.c
@@ -259,7 +259,6 @@ gb_keybindings_class_init (GbKeybindingsClass *klass)
                          _("The application to register keybindings for."),
                          GTK_TYPE_APPLICATION,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_APPLICATION, gParamSpecs [PROP_APPLICATION]);
 
   gParamSpecs [PROP_MODE] =
     g_param_spec_string ("mode",
@@ -267,7 +266,8 @@ gb_keybindings_class_init (GbKeybindingsClass *klass)
                          _("The name of the keybindings mode."),
                          NULL,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_MODE, gParamSpecs [PROP_MODE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/preferences/gb-preferences-page.c b/src/preferences/gb-preferences-page.c
index cf6a554..5990c56 100644
--- a/src/preferences/gb-preferences-page.c
+++ b/src/preferences/gb-preferences-page.c
@@ -217,8 +217,8 @@ gb_preferences_page_class_init (GbPreferencesPageClass *klass)
                          NULL,
                          (G_PARAM_READWRITE |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TITLE,
-                                   gParamSpecs [PROP_TITLE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   g_type_ensure (GB_TYPE_PREFERENCES_SWITCH);
 }
diff --git a/src/preferences/gb-preferences-switch.c b/src/preferences/gb-preferences-switch.c
index 37bafc0..4304745 100644
--- a/src/preferences/gb-preferences-switch.c
+++ b/src/preferences/gb-preferences-switch.c
@@ -316,8 +316,6 @@ gb_preferences_switch_class_init (GbPreferencesSwitchClass *klass)
                          _("The title of the switch."),
                          NULL,
                          (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TITLE,
-                                   gParamSpecs [PROP_TITLE]);
 
   gParamSpecs [PROP_DESCRIPTION] =
     g_param_spec_string ("description",
@@ -325,8 +323,6 @@ gb_preferences_switch_class_init (GbPreferencesSwitchClass *klass)
                          _("The description for the switch."),
                          NULL,
                          (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DESCRIPTION,
-                                   gParamSpecs [PROP_DESCRIPTION]);
 
   gParamSpecs [PROP_IS_RADIO] =
     g_param_spec_boolean ("is-radio",
@@ -334,8 +330,6 @@ gb_preferences_switch_class_init (GbPreferencesSwitchClass *klass)
                           _("If a radio button should be used."),
                           FALSE,
                           (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_IS_RADIO,
-                                   gParamSpecs [PROP_IS_RADIO]);
 
   gParamSpecs [PROP_SETTINGS] =
     g_param_spec_object ("settings",
@@ -343,8 +337,6 @@ gb_preferences_switch_class_init (GbPreferencesSwitchClass *klass)
                          _("The GSettings for the setting."),
                          G_TYPE_SETTINGS,
                          (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SETTINGS,
-                                   gParamSpecs [PROP_SETTINGS]);
 
   gParamSpecs [PROP_SETTINGS_SCHEMA_KEY] =
     g_param_spec_string ("settings-schema-key",
@@ -352,8 +344,6 @@ gb_preferences_switch_class_init (GbPreferencesSwitchClass *klass)
                          _("The settings schema key."),
                          NULL,
                          (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SETTINGS_SCHEMA_KEY,
-                                   gParamSpecs [PROP_SETTINGS_SCHEMA_KEY]);
 
   gParamSpecs [PROP_SETTINGS_SCHEMA_VALUE] =
     g_param_spec_variant ("settings-schema-value",
@@ -362,8 +352,6 @@ gb_preferences_switch_class_init (GbPreferencesSwitchClass *klass)
                           G_VARIANT_TYPE_ANY,
                           NULL,
                           (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SETTINGS_SCHEMA_VALUE,
-                                   gParamSpecs [PROP_SETTINGS_SCHEMA_VALUE]);
 
   gParamSpecs [PROP_SIZE_GROUP] =
     g_param_spec_object ("size-group",
@@ -371,8 +359,8 @@ gb_preferences_switch_class_init (GbPreferencesSwitchClass *klass)
                          _("The sizing group for the control."),
                          GTK_TYPE_SIZE_GROUP,
                          (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SIZE_GROUP,
-                                   gParamSpecs [PROP_SIZE_GROUP]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   GB_WIDGET_CLASS_TEMPLATE (klass, "gb-preferences-switch.ui");
 
diff --git a/src/preferences/gb-preferences-window.c b/src/preferences/gb-preferences-window.c
index 9293743..8860336 100644
--- a/src/preferences/gb-preferences-window.c
+++ b/src/preferences/gb-preferences-window.c
@@ -172,8 +172,7 @@ gb_preferences_window_class_init (GbPreferencesWindowClass *klass)
                                 G_TYPE_FROM_CLASS (klass),
                                 (G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
                                 G_CALLBACK (gb_preferences_window_close),
-                                NULL, NULL,
-                                g_cclosure_marshal_VOID__VOID,
+                                NULL, NULL, NULL,
                                 G_TYPE_NONE,
                                 0);
 
diff --git a/src/project-tree/gb-new-file-popover.c b/src/project-tree/gb-new-file-popover.c
index 850f8fc..07073dc 100644
--- a/src/project-tree/gb-new-file-popover.c
+++ b/src/project-tree/gb-new-file-popover.c
@@ -269,8 +269,6 @@ gb_new_file_popover_class_init (GbNewFilePopoverClass *klass)
                          _("Directory"),
                          G_TYPE_FILE,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DIRECTORY,
-                                   gParamSpecs [PROP_DIRECTORY]);
 
   gParamSpecs [PROP_FILE_TYPE] =
     g_param_spec_enum ("file-type",
@@ -279,16 +277,15 @@ gb_new_file_popover_class_init (GbNewFilePopoverClass *klass)
                        G_TYPE_FILE_TYPE,
                        G_FILE_TYPE_REGULAR,
                        (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE_TYPE,
-                                   gParamSpecs [PROP_FILE_TYPE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [CREATE_FILE] =
     g_signal_new ("create-file",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_FIRST,
                   0,
-                  NULL, NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   2,
                   G_TYPE_FILE,
diff --git a/src/project-tree/gb-rename-file-popover.c b/src/project-tree/gb-rename-file-popover.c
index ac23b84..0b1dbee 100644
--- a/src/project-tree/gb-rename-file-popover.c
+++ b/src/project-tree/gb-rename-file-popover.c
@@ -309,7 +309,6 @@ gb_rename_file_popover_class_init (GbRenameFilePopoverClass *klass)
                          _("File"),
                          G_TYPE_FILE,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_FILE, gParamSpecs [PROP_FILE]);
 
   gParamSpecs [PROP_IS_DIRECTORY] =
     g_param_spec_boolean ("is-directory",
@@ -317,16 +316,15 @@ gb_rename_file_popover_class_init (GbRenameFilePopoverClass *klass)
                           _("Is Directory"),
                           FALSE,
                           (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_IS_DIRECTORY,
-                                   gParamSpecs [PROP_IS_DIRECTORY]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [RENAME_FILE] =
     g_signal_new ("rename-file",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL, NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   2,
                   G_TYPE_FILE,
diff --git a/src/scrolledwindow/gb-scrolled-window.c b/src/scrolledwindow/gb-scrolled-window.c
index f3fe75c..153df99 100644
--- a/src/scrolledwindow/gb-scrolled-window.c
+++ b/src/scrolledwindow/gb-scrolled-window.c
@@ -257,8 +257,6 @@ gb_scrolled_window_class_init (GbScrolledWindowClass *klass)
                       G_MAXINT,
                       -1,
                       (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_MAX_CONTENT_HEIGHT,
-                                   gParamSpecs [PROP_MAX_CONTENT_HEIGHT]);
 
   gParamSpecs [PROP_MAX_CONTENT_WIDTH] =
     g_param_spec_int ("max-content-width",
@@ -268,8 +266,8 @@ gb_scrolled_window_class_init (GbScrolledWindowClass *klass)
                       G_MAXINT,
                       -1,
                       (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_MAX_CONTENT_WIDTH,
-                                   gParamSpecs [PROP_MAX_CONTENT_WIDTH]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/search/gb-search-display-group.c b/src/search/gb-search-display-group.c
index 2b9f460..a473f1a 100644
--- a/src/search/gb-search-display-group.c
+++ b/src/search/gb-search-display-group.c
@@ -42,7 +42,6 @@ G_DEFINE_TYPE (GbSearchDisplayGroup, gb_search_display_group, GTK_TYPE_BOX)
 
 enum {
   PROP_0,
-  PROP_MAX_RESULTS,
   PROP_PROVIDER,
   PROP_SIZE_GROUP,
   LAST_PROP
@@ -418,8 +417,6 @@ gb_search_display_group_class_init (GbSearchDisplayGroupClass *klass)
                          _("The search provider"),
                          IDE_TYPE_SEARCH_PROVIDER,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_PROVIDER,
-                                   gParamSpecs [PROP_PROVIDER]);
 
   gParamSpecs [PROP_SIZE_GROUP] =
     g_param_spec_object ("size-group",
@@ -427,17 +424,15 @@ gb_search_display_group_class_init (GbSearchDisplayGroupClass *klass)
                          _("The size group for the label."),
                          GTK_TYPE_SIZE_GROUP,
                          (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SIZE_GROUP,
-                                   gParamSpecs [PROP_SIZE_GROUP]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [RESULT_ACTIVATED] =
     g_signal_new ("result-activated",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_VOID__OBJECT,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   IDE_TYPE_SEARCH_RESULT);
@@ -447,9 +442,7 @@ gb_search_display_group_class_init (GbSearchDisplayGroupClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL,
-                  NULL,
-                  g_cclosure_marshal_VOID__OBJECT,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   IDE_TYPE_SEARCH_RESULT);
diff --git a/src/search/gb-search-display-row.c b/src/search/gb-search-display-row.c
index 55a85f8..4f881c9 100644
--- a/src/search/gb-search-display-row.c
+++ b/src/search/gb-search-display-row.c
@@ -160,7 +160,8 @@ gb_search_display_row_class_init (GbSearchDisplayRowClass *klass)
                          _("Result"),
                          IDE_TYPE_SEARCH_RESULT,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_RESULT, gParamSpecs [PROP_RESULT]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   GB_WIDGET_CLASS_TEMPLATE (widget_class, "gb-search-display-row.ui");
   GB_WIDGET_CLASS_BIND (widget_class, GbSearchDisplayRow, progress);
diff --git a/src/search/gb-search-display.c b/src/search/gb-search-display.c
index 5ab946d..43d2ec7 100644
--- a/src/search/gb-search-display.c
+++ b/src/search/gb-search-display.c
@@ -561,15 +561,15 @@ gb_search_display_class_init (GbSearchDisplayClass *klass)
                          _("The active search context."),
                          IDE_TYPE_SEARCH_CONTEXT,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CONTEXT, gParamSpecs [PROP_CONTEXT]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [RESULT_ACTIVATED] =
     g_signal_new_class_handler ("result-activated",
                                 G_TYPE_FROM_CLASS (klass),
                                 G_SIGNAL_RUN_LAST,
                                 G_CALLBACK (gb_search_display_real_result_activated),
-                                NULL, NULL,
-                                g_cclosure_marshal_VOID__OBJECT,
+                                NULL, NULL, NULL,
                                 G_TYPE_NONE,
                                 1,
                                 IDE_TYPE_SEARCH_RESULT);
diff --git a/src/tree/gb-tree-builder.c b/src/tree/gb-tree-builder.c
index d18b212..4f38ead 100644
--- a/src/tree/gb-tree-builder.c
+++ b/src/tree/gb-tree-builder.c
@@ -290,8 +290,8 @@ gb_tree_builder_class_init (GbTreeBuilderClass *klass)
                                    _("The GbTree the builder belongs to."),
                                    GB_TYPE_TREE,
                                    G_PARAM_READWRITE);
-       g_object_class_install_property(object_class, PROP_TREE,
-                                       gParamSpecs[PROP_TREE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 /**
diff --git a/src/tree/gb-tree-node.c b/src/tree/gb-tree-node.c
index 36e6f96..0b6d174 100644
--- a/src/tree/gb-tree-node.c
+++ b/src/tree/gb-tree-node.c
@@ -603,8 +603,6 @@ gb_tree_node_class_init (GbTreeNodeClass *klass)
                          _("The icon name to display."),
                          NULL,
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, PROP_ICON_NAME,
-                                   gParamSpecs[PROP_ICON_NAME]);
 
   /**
    * GbTreeNode:item:
@@ -617,8 +615,6 @@ gb_tree_node_class_init (GbTreeNodeClass *klass)
                          _("Optional object to associate with node."),
                          G_TYPE_OBJECT,
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, PROP_ITEM,
-                                   gParamSpecs[PROP_ITEM]);
 
   /**
    * GbTreeNode:parent:
@@ -631,8 +627,6 @@ gb_tree_node_class_init (GbTreeNodeClass *klass)
                          _("The parent node."),
                          GB_TYPE_TREE_NODE,
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, PROP_PARENT,
-                                   gParamSpecs[PROP_PARENT]);
 
   /**
    * GbTreeNode:tree:
@@ -645,8 +639,6 @@ gb_tree_node_class_init (GbTreeNodeClass *klass)
                          _("The GbTree the node belongs to."),
                          GB_TYPE_TREE,
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, PROP_TREE,
-                                   gParamSpecs[PROP_TREE]);
 
   /**
    * GbTreeNode:text:
@@ -659,8 +651,6 @@ gb_tree_node_class_init (GbTreeNodeClass *klass)
                          _("The text of the node."),
                          NULL,
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, PROP_TEXT,
-                                   gParamSpecs[PROP_TEXT]);
 
   /**
    * GbTreeNode:use-markup:
@@ -673,8 +663,8 @@ gb_tree_node_class_init (GbTreeNodeClass *klass)
                           _("If text should be translated as markup."),
                           FALSE,
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, PROP_USE_MARKUP,
-                                   gParamSpecs[PROP_USE_MARKUP]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 /**
diff --git a/src/tree/gb-tree.c b/src/tree/gb-tree.c
index 8ab0cef..9ee3b28 100644
--- a/src/tree/gb-tree.c
+++ b/src/tree/gb-tree.c
@@ -1295,8 +1295,6 @@ gb_tree_class_init (GbTreeClass *klass)
                          _ ("The root object of the tree."),
                          GB_TYPE_TREE_NODE,
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, PROP_ROOT,
-                                   gParamSpecs[PROP_ROOT]);
 
   gParamSpecs[PROP_SELECTION] =
     g_param_spec_object ("selection",
@@ -1304,8 +1302,6 @@ gb_tree_class_init (GbTreeClass *klass)
                          _ ("The node selection."),
                          GB_TYPE_TREE_NODE,
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, PROP_SELECTION,
-                                   gParamSpecs[PROP_SELECTION]);
 
   gParamSpecs [PROP_SHOW_ICONS] =
     g_param_spec_boolean ("show-icons",
@@ -1314,16 +1310,15 @@ gb_tree_class_init (GbTreeClass *klass)
                           FALSE,
                           (G_PARAM_READWRITE |
                            G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_SHOW_ICONS,
-                                   gParamSpecs [PROP_SHOW_ICONS]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [ACTION] =
     g_signal_new ("action",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                   G_STRUCT_OFFSET (GbTreeClass, action),
-                  NULL, NULL,
-                  g_cclosure_marshal_generic,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   3,
                   G_TYPE_STRING,
@@ -1335,8 +1330,7 @@ gb_tree_class_init (GbTreeClass *klass)
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GbTreeClass, populate_popup),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__OBJECT,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   GTK_TYPE_WIDGET);
diff --git a/src/views/gb-view-stack.c b/src/views/gb-view-stack.c
index f179e57..818b6fa 100644
--- a/src/views/gb-view-stack.c
+++ b/src/views/gb-view-stack.c
@@ -501,15 +501,15 @@ gb_view_stack_class_init (GbViewStackClass *klass)
                          _("The active view."),
                          GB_TYPE_VIEW,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ACTIVE_VIEW, gParamSpecs [PROP_ACTIVE_VIEW]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [EMPTY] =
     g_signal_new_class_handler ("empty",
                                 G_TYPE_FROM_CLASS (klass),
                                 G_SIGNAL_RUN_LAST,
                                 G_CALLBACK (gb_view_stack_real_empty),
-                                NULL, NULL,
-                                g_cclosure_marshal_VOID__VOID,
+                                NULL, NULL, NULL,
                                 G_TYPE_NONE,
                                 0);
 
@@ -517,8 +517,7 @@ gb_view_stack_class_init (GbViewStackClass *klass)
                                    G_TYPE_FROM_CLASS (klass),
                                    G_SIGNAL_RUN_LAST,
                                    0,
-                                   NULL, NULL,
-                                   g_cclosure_marshal_generic,
+                                   NULL, NULL, NULL,
                                    G_TYPE_NONE,
                                    2,
                                    GB_TYPE_VIEW,
diff --git a/src/views/gb-view.c b/src/views/gb-view.c
index 6d4e08c..5ac09e5 100644
--- a/src/views/gb-view.c
+++ b/src/views/gb-view.c
@@ -259,7 +259,6 @@ gb_view_class_init (GbViewClass *klass)
                           _("If the view can be split."),
                           FALSE,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CAN_SPLIT, gParamSpecs [PROP_CAN_SPLIT]);
 
   gParamSpecs [PROP_DOCUMENT] =
     g_param_spec_object ("document",
@@ -267,7 +266,6 @@ gb_view_class_init (GbViewClass *klass)
                          _("The underlying document."),
                          GB_TYPE_DOCUMENT,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_DOCUMENT, gParamSpecs [PROP_DOCUMENT]);
 
   gParamSpecs [PROP_MODIFIED] =
     g_param_spec_boolean ("modified",
@@ -275,8 +273,6 @@ gb_view_class_init (GbViewClass *klass)
                           _("If the document has been modified."),
                           FALSE,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_MODIFIED,
-                                   gParamSpecs [PROP_MODIFIED]);
 
   gParamSpecs [PROP_TITLE] =
     g_param_spec_string ("title",
@@ -284,7 +280,8 @@ gb_view_class_init (GbViewClass *klass)
                          _("The view title."),
                          NULL,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TITLE, gParamSpecs [PROP_TITLE]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void
diff --git a/src/workbench/gb-workbench.c b/src/workbench/gb-workbench.c
index 03b8f69..b9649ce 100644
--- a/src/workbench/gb-workbench.c
+++ b/src/workbench/gb-workbench.c
@@ -443,8 +443,6 @@ gb_workbench_class_init (GbWorkbenchClass *klass)
                          _("The active workspace."),
                          GB_TYPE_WORKSPACE,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ACTIVE_WORKSPACE,
-                                   gParamSpecs [PROP_ACTIVE_WORKSPACE]);
 
   gParamSpecs [PROP_BUILDING] =
     g_param_spec_boolean ("building",
@@ -452,7 +450,6 @@ gb_workbench_class_init (GbWorkbenchClass *klass)
                           _("If the project is currently building."),
                           FALSE,
                           (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_BUILDING, gParamSpecs [PROP_BUILDING]);
 
   gParamSpecs [PROP_COMMAND_MANAGER] =
     g_param_spec_object ("command-manager",
@@ -460,8 +457,6 @@ gb_workbench_class_init (GbWorkbenchClass *klass)
                          _("The command manager for the workbench."),
                          GB_TYPE_COMMAND_MANAGER,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_COMMAND_MANAGER,
-                                   gParamSpecs [PROP_COMMAND_MANAGER]);
 
   /**
    * GbWorkbench:context:
@@ -477,15 +472,15 @@ gb_workbench_class_init (GbWorkbenchClass *klass)
                          _("The IdeContext for the workbench."),
                          IDE_TYPE_CONTEXT,
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_CONTEXT, gParamSpecs [PROP_CONTEXT]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 
   gSignals [UNLOAD] =
     g_signal_new ("unload",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
                   0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__OBJECT,
+                  NULL, NULL, NULL,
                   G_TYPE_NONE,
                   1,
                   IDE_TYPE_CONTEXT);
diff --git a/src/workbench/gb-workspace.c b/src/workbench/gb-workspace.c
index 64351e5..dbe3094 100644
--- a/src/workbench/gb-workspace.c
+++ b/src/workbench/gb-workspace.c
@@ -164,7 +164,6 @@ gb_workspace_class_init (GbWorkspaceClass *klass)
                          NULL,
                          (G_PARAM_READWRITE |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_TITLE, gParamSpecs[PROP_TITLE]);
 
   gParamSpecs[PROP_ICON_NAME] =
     g_param_spec_string ("icon-name",
@@ -173,7 +172,8 @@ gb_workspace_class_init (GbWorkspaceClass *klass)
                          NULL,
                          (G_PARAM_READWRITE |
                           G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, PROP_ICON_NAME, gParamSpecs[PROP_ICON_NAME]);
+
+  g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
 }
 
 static void


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