That doesn't make sense in this context and breaks grabs.
g_object_set_data (G_OBJECT (previous_toplevel), "object-controller", NULL);
toplevel = gtk_widget_get_toplevel (widget);
+
+ if (!GTK_IS_WINDOW (toplevel))
+ return;
+
controller = gtk_event_controller_key_new ();
g_object_set_data_full (G_OBJECT (toplevel), "object-controller", controller, g_object_unref);
g_signal_connect (controller, "key-pressed", G_CALLBACK (key_pressed), widget);
g_object_set_data (G_OBJECT (previous_toplevel), "prop-controller", NULL);
toplevel = gtk_widget_get_toplevel (widget);
+
+ if (!GTK_IS_WINDOW (toplevel))
+ return;
+
controller = gtk_event_controller_key_new ();
g_object_set_data_full (G_OBJECT (toplevel), "prop-controller", controller, g_object_unref);
g_signal_connect (controller, "key-pressed", G_CALLBACK (key_pressed), widget);
g_object_set_data (G_OBJECT (previous_toplevel), "resource-controller", NULL);
toplevel = gtk_widget_get_toplevel (widget);
+
+ if (!GTK_IS_WINDOW (toplevel))
+ return;
+
controller = gtk_event_controller_key_new ();
g_object_set_data_full (G_OBJECT (toplevel), "resource-controller", controller, g_object_unref);
g_signal_connect (controller, "key-pressed", G_CALLBACK (key_pressed), widget);
g_object_set_data (G_OBJECT (previous_toplevel), "statistics-controller", NULL);
toplevel = gtk_widget_get_toplevel (widget);
+
+ if (!GTK_IS_WINDOW (toplevel))
+ return;
+
controller = gtk_event_controller_key_new ();
g_object_set_data_full (G_OBJECT (toplevel), "statistics-controller", controller, g_object_unref);
g_signal_connect (controller, "key-pressed", G_CALLBACK (key_pressed), widget);