diff --git a/gtk/gtkapplication.c b/gtk/gtkapplication.c
index cf57bf2..1a6a263 100644
--- a/gtk/gtkapplication.c
+++ b/gtk/gtkapplication.c
@@ -60,6 +60,13 @@
  * </example>
  */
 
+enum {
+  WINDOW_ADDED,
+  LAST_SIGNAL
+};
+
+static guint gtk_application_signals[LAST_SIGNAL];
+
 G_DEFINE_TYPE (GtkApplication, gtk_application, G_TYPE_APPLICATION)
 
 struct _GtkApplicationPrivate
@@ -152,6 +159,21 @@ gtk_application_class_init (GtkApplicationClass *class)
   application_class->run_mainloop = gtk_application_run_mainloop;
 
   g_type_class_add_private (class, sizeof (GtkApplicationPrivate));
+
+  /**
+   * GtkApplication::window-added:
+   * @application: the #GtkApplication which emitted the signal
+   * @window: the newly-added #GtkWindow
+   *
+   * Emitted when a #GtkWindow is added to @application through
+   * gtk_application_add_window().
+   **/
+  gtk_application_signals[WINDOW_ADDED] =
+    g_signal_new ("window-added", GTK_TYPE_APPLICATION, G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (GtkApplicationClass, window_added),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__OBJECT,
+                  G_TYPE_NONE, 1, GTK_TYPE_WINDOW);
 }
 
 /**
@@ -216,6 +238,9 @@ gtk_application_add_window (GtkApplication *application,
       priv->windows = g_list_prepend (priv->windows, window);
       gtk_window_set_application (window, application);
       g_application_hold (G_APPLICATION (application));
+
+      g_signal_emit (application,
+                     gtk_application_signals[WINDOW_ADDED], 0, window);
     }
 }
 
diff --git a/gtk/gtkapplication.h b/gtk/gtkapplication.h
index c915e2d..2112ffc 100644
--- a/gtk/gtkapplication.h
+++ b/gtk/gtkapplication.h
@@ -55,8 +55,11 @@ struct _GtkApplicationClass
 {
   GApplicationClass parent_class;
 
+  void (*window_added) (GtkApplication *application,
+                        GtkWindow *window);
+
   /*< private >*/
-  gpointer padding[16];
+  gpointer padding[12];
 };
 
 GType                   gtk_application_get_type                        (void) G_GNUC_CONST;
