210static inline int
211gtk_dialog_run(GtkDialog* dialog)
212{
213 struct RunDialogContext {
214 GMainLoop *loop;
215 int response;
216 } context = { g_main_loop_new(nullptr, FALSE), 0 };
217
218 gtk_widget_show(GTK_WIDGET(dialog));
219 g_signal_connect(dialog, "response", G_CALLBACK(+[](GtkDialog*, int response, RunDialogContext* context) {
220 context->response = response;
221 g_main_loop_quit(context->loop);
222 }), &context);
223 g_main_loop_run(context.loop);
224 g_main_loop_unref(context.loop);
225
226 return context.response;
227}
228