3

I am using the library gtkmm. My code is almost perfect, I think because it compiles and I can execute it. But in the terminal when I clicked on open a file in my software that I made with gtkmm I can read this message :

Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.

So I looked for on this forum how can I solve it and I understood I have to use this method : gtk_window_set_transient_for().

Actually I have a Gtk::Window and a Gtk::FileChooserDialog. Can you put an example which use gtk_window_set_transient_for() ?

Thank you very much !

Paul Hain
  • 35
  • 1
  • 5

1 Answers1

3

Gtk::FileChooserDialog and other GTK+ dialogues are derived from Gtk::Window. Gtk::Window has the method set_transient_for(Gtk::Window &parent); which if not set gives you the message you have seen.

To fix this set_transient_for(Gtk::Window &) needs to be used. Note that this takes a reference and not a pointer. So you would use it something like this.

{
  Gtk::Window first_window;

  ...

  Gtk::FileChooserDialog file_dialog("Title");

  ...

  file_dialog.set_transient_for(first_window);

  ...
}

It is also possible to set the transient window for the dialog with the constructor. like so.

{
  Gtk::Window first_window;

  ...

  Gtk::FileChooserDialog file_dialog(first_window, "Title");

  ...
}

If first_window is a pointer the you would need to do something like so.

file_dialog.set_transient_for(*first_window);