1 // SPDX-License-Identifier: GPL-2.0-or-later
5 #include <glibmm/main.h>
6 #include <gtkmm/dialog.h>
7 #include <gtkmm/window.h>
9 #include "dialog-run.h"
11 namespace Inkscape::UI
{
13 int dialog_run(Gtk::Dialog
&dialog
)
15 std::optional
<int> result
;
17 auto response_conn
= dialog
.signal_response().connect([&] (int response
) {
21 auto hide_conn
= dialog
.signal_hide().connect([&] {
22 result
= Gtk::ResponseType::NONE
;
26 dialog
.set_visible(true);
28 auto main_context
= Glib::MainContext::get_default();
30 main_context
->iteration(true);
33 response_conn
.disconnect();
34 hide_conn
.disconnect();
36 dialog
.set_visible(false);
41 void dialog_show_modal_and_selfdestruct(std::unique_ptr
<Gtk::Dialog
> dialog
, Gtk::Root
*root
)
43 if (auto const window
= dynamic_cast<Gtk::Window
*>(root
)) {
44 dialog
->set_transient_for(*window
);
47 dialog
->signal_response().connect([d
= dialog
.get()] (auto) { delete d
; });
48 dialog
->set_visible(true);
49 dialog
.release(); // deleted by signal_response handler
52 } // namespace Inkscape::UI