From cee3bde8058fee785fd1771642a7794d7b9ff57f Mon Sep 17 00:00:00 2001
From: Lukas K <lu@0x83.eu>
Date: Wed, 25 Oct 2017 20:09:36 +0200
Subject: [PATCH] Revert "use GtkFileChooserNative wherever possible"

This reverts commit 28779193432251564b054de65118561d3575ce84.
---
 imp/fab_output_window.cpp               |  18 ++--
 imp/imp_schematic.cpp                   |  20 ++---
 pool-mgr/editor_window.cpp              |  21 ++---
 pool-mgr/part_wizard/location_entry.cpp |  19 ++--
 pool-mgr/part_wizard/part_wizard.cpp    |  15 ++--
 pool-mgr/pool-mgr-app_win.cpp           |  17 ++--
 pool-mgr/pool_notebook.cpp              | 148 ++++++++++++--------------------
 prj-mgr/prj-mgr-app_win.cpp             |  17 ++--
 prj-mgr/prj-mgr-prefs.cpp               |  18 ++--
 9 files changed, 115 insertions(+), 178 deletions(-)

diff --git a/imp/fab_output_window.cpp b/imp/fab_output_window.cpp
index f072f9c..14fc0b5 100644
--- a/imp/fab_output_window.cpp
+++ b/imp/fab_output_window.cpp
@@ -72,17 +72,13 @@ namespace horizon {
 
 		generate_button->signal_clicked().connect(sigc::mem_fun(this, &FabOutputWindow::generate));
 		directory_button->signal_clicked().connect([this]{
-			GtkFileChooserNative *native = gtk_file_chooser_native_new ("Select output directory",
-				GTK_WINDOW(gobj()),
-				GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
-				"Select",
-				"_Cancel");
-			auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-			chooser->set_do_overwrite_confirmation(true);
-			chooser->set_filename(directory_entry->get_text());
-
-			if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-				directory_entry->set_text(chooser->get_filename());
+			Gtk::FileChooserDialog fc(*this, "Choose directory", Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER);
+			fc.set_do_overwrite_confirmation(true);
+			fc.set_filename(directory_entry->get_text());
+			fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+			fc.add_button("Select", Gtk::RESPONSE_ACCEPT);
+			if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+				directory_entry->set_text(fc.get_filename());
 			}
 		});
 
diff --git a/imp/imp_schematic.cpp b/imp/imp_schematic.cpp
index 9a26080..454a292 100644
--- a/imp/imp_schematic.cpp
+++ b/imp/imp_schematic.cpp
@@ -120,22 +120,18 @@ namespace horizon {
 	}
 
 	void ImpSchematic::handle_export_pdf() {
-		GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save PDF",
-			main_window->gobj(),
-			GTK_FILE_CHOOSER_ACTION_SAVE,
-			"_Open",
-			"_Cancel");
-		auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-		chooser->set_do_overwrite_confirmation(true);
+		Gtk::FileChooserDialog fc(*main_window, "Save PDF", Gtk::FILE_CHOOSER_ACTION_SAVE);
+		fc.set_do_overwrite_confirmation(true);
 		if(last_pdf_filename.size()) {
-			chooser->set_filename(last_pdf_filename);
+			fc.set_filename(last_pdf_filename);
 		}
 		else {
-			chooser->set_current_name("schematic.pdf");
+			fc.set_current_name("schematic.pdf");
 		}
-
-		if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-			std::string fn = chooser->get_filename();
+		fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+		fc.add_button("_Save", Gtk::RESPONSE_ACCEPT);
+		if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+			std::string fn = fc.get_filename();
 			last_pdf_filename = fn;
 			export_pdf(fn, *core.c->get_schematic(), core.r);
 		}
diff --git a/pool-mgr/editor_window.cpp b/pool-mgr/editor_window.cpp
index b549aa8..f59c5a9 100644
--- a/pool-mgr/editor_window.cpp
+++ b/pool-mgr/editor_window.cpp
@@ -142,26 +142,23 @@ namespace horizon {
 			store->save();
 		}
 		else {
-			GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save",
-				GTK_WINDOW(gobj()),
-				GTK_FILE_CHOOSER_ACTION_SAVE,
-				"_Save",
-				"_Cancel");
-			auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-			chooser->set_do_overwrite_confirmation(true);
-			chooser->set_current_name("something.json");
+			Gtk::FileChooserDialog fc(*this, "Save as", Gtk::FILE_CHOOSER_ACTION_SAVE);
+			fc.set_do_overwrite_confirmation(true);
+			fc.set_current_name("something.json");
 			switch(type) {
 				case ObjectType::UNIT :
-					chooser->set_current_folder(Glib::build_filename(pool->get_base_path(), "units"));
+					fc.set_current_folder(Glib::build_filename(pool->get_base_path(), "units"));
 				break;
 				case ObjectType::ENTITY :
-					chooser->set_current_folder(Glib::build_filename(pool->get_base_path(), "entities"));
+					fc.set_current_folder(Glib::build_filename(pool->get_base_path(), "entities"));
 				break;
 				default:;
 			}
 
-			if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-				std::string fn = chooser->get_filename();
+			fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+			fc.add_button("_Save", Gtk::RESPONSE_ACCEPT);
+			if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+				std::string fn = fc.get_filename();
 				store->save_as(fn);
 				save_button->set_label("Save");
 			}
diff --git a/pool-mgr/part_wizard/location_entry.cpp b/pool-mgr/part_wizard/location_entry.cpp
index 2f80e66..7002608 100644
--- a/pool-mgr/part_wizard/location_entry.cpp
+++ b/pool-mgr/part_wizard/location_entry.cpp
@@ -24,18 +24,13 @@ namespace horizon {
 
 	void LocationEntry::handle_button() {
 		auto top = dynamic_cast<Gtk::Window*>(get_ancestor(GTK_TYPE_WINDOW));
-
-		GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save",
-			top->gobj(),
-			GTK_FILE_CHOOSER_ACTION_SAVE,
-			"Set",
-			"_Cancel");
-		auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-		chooser->set_do_overwrite_confirmation(true);
-		chooser->set_filename(entry->get_text());
-
-		if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-			entry->set_text(chooser->get_filename());
+		Gtk::FileChooserDialog fc(*top, "Save", Gtk::FILE_CHOOSER_ACTION_SAVE);
+		fc.set_do_overwrite_confirmation(true);
+		fc.set_filename(entry->get_text());
+		fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+		fc.add_button("Set", Gtk::RESPONSE_ACCEPT);
+		if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+			entry->set_text(fc.get_filename());
 		}
 	}
 
diff --git a/pool-mgr/part_wizard/part_wizard.cpp b/pool-mgr/part_wizard/part_wizard.cpp
index 2b5ee75..54a1576 100644
--- a/pool-mgr/part_wizard/part_wizard.cpp
+++ b/pool-mgr/part_wizard/part_wizard.cpp
@@ -287,19 +287,16 @@ namespace horizon {
 	}
 
 	void PartWizard::handle_import() {
-		GtkFileChooserNative *native = gtk_file_chooser_native_new ("Open",
-			gobj(),
-			GTK_FILE_CHOOSER_ACTION_OPEN,
-			"_Save",
-			"_Cancel");
-		auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
+		Gtk::FileChooserDialog fc(*this, "Open", Gtk::FILE_CHOOSER_ACTION_OPEN);
+		fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+		fc.add_button("_Open", Gtk::RESPONSE_ACCEPT);
 		auto filter= Gtk::FileFilter::create();
 		filter->set_name("json documents");
 		filter->add_pattern("*.json");
-		chooser->add_filter(filter);
+		fc.add_filter(filter);
 
-		if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-			auto filename = chooser->get_filename();
+		if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+			auto filename = fc.get_filename();
 			try {
 				json j;
 				std::ifstream ifs(filename);
diff --git a/pool-mgr/pool-mgr-app_win.cpp b/pool-mgr/pool-mgr-app_win.cpp
index e492a29..52d642b 100644
--- a/pool-mgr/pool-mgr-app_win.cpp
+++ b/pool-mgr/pool-mgr-app_win.cpp
@@ -49,19 +49,16 @@ namespace horizon {
 	}
 
 	void PoolManagerAppWindow::handle_open() {
-		GtkFileChooserNative *native = gtk_file_chooser_native_new ("Open Pool",
-			GTK_WINDOW(gobj()),
-			GTK_FILE_CHOOSER_ACTION_OPEN,
-			"_Open",
-			"_Cancel");
-		auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-		auto filter = Gtk::FileFilter::create();
+		Gtk::FileChooserDialog fc(*this, "Open Pool", Gtk::FILE_CHOOSER_ACTION_OPEN);
+		fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+		fc.add_button("_Open", Gtk::RESPONSE_ACCEPT);
+		auto filter= Gtk::FileFilter::create();
 		filter->set_name("Horizon pools");
 		filter->add_pattern("pool.json");
-		chooser->add_filter(filter);
+		fc.add_filter(filter);
 
-		if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-			auto file = chooser->get_file();
+		if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+			auto file = fc.get_file();
 			open_file_view(file);
 		}
 	}
diff --git a/pool-mgr/pool_notebook.cpp b/pool-mgr/pool_notebook.cpp
index 2f737c8..346eb36 100644
--- a/pool-mgr/pool_notebook.cpp
+++ b/pool-mgr/pool_notebook.cpp
@@ -187,21 +187,15 @@ namespace horizon {
 					if(!br->get_selected())
 						return;
 					auto top = dynamic_cast<Gtk::Window*>(get_ancestor(GTK_TYPE_WINDOW));
-
-					GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save Symbol",
-						top->gobj(),
-						GTK_FILE_CHOOSER_ACTION_SAVE,
-						"_Save",
-						"_Cancel");
-					auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-					chooser->set_do_overwrite_confirmation(true);
+					Gtk::FileChooserDialog fc(*top, "Save Symbol", Gtk::FILE_CHOOSER_ACTION_SAVE);
+					fc.set_do_overwrite_confirmation(true);
 					auto unit_filename = pool.get_filename(ObjectType::UNIT, br->get_selected());
 					auto basename = Gio::File::create_for_path(unit_filename)->get_basename();
-					chooser->set_current_folder(Glib::build_filename(base_path, "symbols"));
-					chooser->set_current_name(basename);
-
-					if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-						std::string fn = chooser->get_filename();
+					fc.set_current_folder(Glib::build_filename(base_path, "symbols"));
+					fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+					fc.add_button("_Save", Gtk::RESPONSE_ACCEPT);
+					if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+						std::string fn = fc.get_filename();
 						Symbol sym(horizon::UUID::random());
 						auto unit = pool.get_unit(br->get_selected());
 						sym.name = unit->name;
@@ -218,21 +212,16 @@ namespace horizon {
 					if(!br->get_selected())
 						return;
 					auto top = dynamic_cast<Gtk::Window*>(get_ancestor(GTK_TYPE_WINDOW));
-
-					GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save Entity",
-						top->gobj(),
-						GTK_FILE_CHOOSER_ACTION_SAVE,
-						"_Save",
-						"_Cancel");
-					auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-					chooser->set_do_overwrite_confirmation(true);
+					Gtk::FileChooserDialog fc(*top, "Save entity", Gtk::FILE_CHOOSER_ACTION_SAVE);
+					fc.set_do_overwrite_confirmation(true);
+					fc.set_current_folder(Glib::build_filename(base_path, "entities"));
 					auto unit_filename = pool.get_filename(ObjectType::UNIT, br->get_selected());
 					auto basename = Gio::File::create_for_path(unit_filename)->get_basename();
-					chooser->set_current_folder(Glib::build_filename(base_path, "symbols"));
-					chooser->set_current_name(basename);
-
-					if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-						std::string fn = chooser->get_filename();
+					fc.set_current_name(basename);
+					fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+					fc.add_button("_Save", Gtk::RESPONSE_ACCEPT);
+					if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+						std::string fn = fc.get_filename();
 						Entity entity(horizon::UUID::random());
 						auto unit = pool.get_unit(br->get_selected());
 						entity.name = unit->name;
@@ -439,19 +428,14 @@ namespace horizon {
 				bbox->pack_start(*bu, false, false,0);
 				bu->signal_clicked().connect([this]{
 					auto top = dynamic_cast<Gtk::Window*>(get_ancestor(GTK_TYPE_WINDOW));
-
-					GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save Padstack",
-						top->gobj(),
-						GTK_FILE_CHOOSER_ACTION_SAVE,
-						"_Save",
-						"_Cancel");
-					auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-					chooser->set_do_overwrite_confirmation(true);
-					chooser->set_current_name("padstack.json");
-					chooser->set_current_folder(Glib::build_filename(base_path, "padstacks"));
-
-					if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-						std::string fn = chooser->get_filename();
+					Gtk::FileChooserDialog fc(*top, "Save Padstack", Gtk::FILE_CHOOSER_ACTION_SAVE);
+					fc.set_do_overwrite_confirmation(true);
+					fc.set_current_name("padstack.json");
+					fc.set_current_folder(Glib::build_filename(base_path, "padstacks"));
+					fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+					fc.add_button("_Save", Gtk::RESPONSE_ACCEPT);
+					if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+						std::string fn = fc.get_filename();
 						Padstack ps(horizon::UUID::random());
 						save_json_to_file(fn, ps.serialize());
 						spawn(PoolManagerProcess::Type::IMP_PADSTACK, {fn});
@@ -542,19 +526,14 @@ namespace horizon {
 				bbox->pack_start(*bu, false, false,0);
 				bu->signal_clicked().connect([this]{
 					auto top = dynamic_cast<Gtk::Window*>(get_ancestor(GTK_TYPE_WINDOW));
-
-					GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save Package",
-						top->gobj(),
-						GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER,
-						"_Save",
-						"_Cancel");
-					auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-					chooser->set_do_overwrite_confirmation(true);
-					chooser->set_current_name("package");
-					chooser->set_current_folder(Glib::build_filename(base_path, "packages"));
-
-					if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-						std::string fn = chooser->get_filename();
+					Gtk::FileChooserDialog fc(*top, "Save Package", Gtk::FILE_CHOOSER_ACTION_CREATE_FOLDER);
+					fc.set_do_overwrite_confirmation(true);
+					fc.set_current_name("package");
+					fc.set_current_folder(Glib::build_filename(base_path, "packages"));
+					fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+					fc.add_button("_Save", Gtk::RESPONSE_ACCEPT);
+					if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+						std::string fn = fc.get_filename();
 						auto fi = Gio::File::create_for_path(Glib::build_filename(fn, "padstacks"));
 						fi->make_directory_with_parents();
 						Package pkg(horizon::UUID::random());
@@ -582,21 +561,16 @@ namespace horizon {
 					if(!br->get_selected())
 						return;
 					auto top = dynamic_cast<Gtk::Window*>(get_ancestor(GTK_TYPE_WINDOW));
-
-					GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save Padstack",
-						top->gobj(),
-						GTK_FILE_CHOOSER_ACTION_SAVE,
-						"_Save",
-						"_Cancel");
-					auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-					chooser->set_do_overwrite_confirmation(true);
-					chooser->set_current_name("pad.json");
+					Gtk::FileChooserDialog fc(*top, "Save Padstack", Gtk::FILE_CHOOSER_ACTION_SAVE);
+					fc.set_do_overwrite_confirmation(true);
 					auto pkg_filename = pool.get_filename(ObjectType::PACKAGE, br->get_selected());
 					auto pkg_dir = Glib::path_get_dirname(pkg_filename);
-					chooser->set_current_folder(Glib::build_filename(pkg_dir, "padstacks"));
-
-					if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-						std::string fn = chooser->get_filename();
+					fc.set_current_folder(Glib::build_filename(pkg_dir, "padstacks"));
+					fc.set_current_name("padstack.json");
+					fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+					fc.add_button("_Save", Gtk::RESPONSE_ACCEPT);
+					if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+						std::string fn = fc.get_filename();
 						Padstack ps(horizon::UUID::random());
 						ps.name = "Pad";
 						save_json_to_file(fn, ps.serialize());
@@ -679,21 +653,16 @@ namespace horizon {
 					}
 					if(!(entity_uuid && package_uuid))
 						return;
-
-					auto entity = pool.get_entity(entity_uuid);
-					GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save Part",
-						top->gobj(),
-						GTK_FILE_CHOOSER_ACTION_SAVE,
-						"_Save",
-						"_Cancel");
-					auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-					chooser->set_do_overwrite_confirmation(true);
-					chooser->set_current_name(entity->name+".json");
-					chooser->set_current_folder(Glib::build_filename(base_path, "parts"));
-
-					if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-						std::string fn = chooser->get_filename();
+					Gtk::FileChooserDialog fc(*top, "Save Part", Gtk::FILE_CHOOSER_ACTION_SAVE);
+					fc.set_do_overwrite_confirmation(true);
+					fc.set_current_name("package");
+					fc.set_current_folder(Glib::build_filename(base_path, "parts"));
+					fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+					fc.add_button("_Save", Gtk::RESPONSE_ACCEPT);
+					if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+						std::string fn = fc.get_filename();
 						Part part(horizon::UUID::random());
+						auto entity = pool.get_entity(entity_uuid);
 						auto package = pool.get_package(package_uuid);
 						part.attributes[Part::Attribute::MPN] = {false, entity->name};
 						part.attributes[Part::Attribute::MANUFACTURER] = {false, entity->manufacturer};
@@ -724,19 +693,14 @@ namespace horizon {
 						return;
 					auto base_part = pool.get_part(uu);
 					auto top = dynamic_cast<Gtk::Window*>(get_ancestor(GTK_TYPE_WINDOW));
-
-					GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save Part",
-						top->gobj(),
-						GTK_FILE_CHOOSER_ACTION_SAVE,
-						"_Save",
-						"_Cancel");
-					auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-					chooser->set_do_overwrite_confirmation(true);
-					chooser->set_current_name(base_part->get_MPN()+".json");
-					chooser->set_current_folder(Glib::path_get_dirname(pool.get_filename(ObjectType::PART, uu)));
-
-					if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-						std::string fn = chooser->get_filename();
+					Gtk::FileChooserDialog fc(*top, "Save Part", Gtk::FILE_CHOOSER_ACTION_SAVE);
+					fc.set_do_overwrite_confirmation(true);
+					fc.set_current_name(base_part->get_MPN()+".json");
+					fc.set_current_folder(Glib::path_get_dirname(pool.get_filename(ObjectType::PART, uu)));
+					fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+					fc.add_button("_Save", Gtk::RESPONSE_ACCEPT);
+					if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+						std::string fn = fc.get_filename();
 						Part part(horizon::UUID::random());
 						part.base = base_part;
 						part.attributes[Part::Attribute::MPN] = {true, base_part->get_MPN()};
diff --git a/prj-mgr/prj-mgr-app_win.cpp b/prj-mgr/prj-mgr-app_win.cpp
index e3f336d..0d01714 100644
--- a/prj-mgr/prj-mgr-app_win.cpp
+++ b/prj-mgr/prj-mgr-app_win.cpp
@@ -297,19 +297,16 @@ namespace horizon {
 	}
 
 	void ProjectManagerAppWindow::handle_open() {
-		GtkFileChooserNative *native = gtk_file_chooser_native_new ("Open Project",
-			GTK_WINDOW(gobj()),
-			GTK_FILE_CHOOSER_ACTION_OPEN,
-			"_Open",
-			"_Cancel");
-		auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-		auto filter = Gtk::FileFilter::create();
+		Gtk::FileChooserDialog fc(*this, "Open Project", Gtk::FILE_CHOOSER_ACTION_OPEN);
+		fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+		fc.add_button("_Open", Gtk::RESPONSE_ACCEPT);
+		auto filter= Gtk::FileFilter::create();
 		filter->set_name("Horizon projects");
 		filter->add_pattern("*.hprj");
-		chooser->add_filter(filter);
+		fc.add_filter(filter);
 
-		if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-			auto file = chooser->get_file();
+		if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+			auto file = fc.get_file();
 			open_file_view(file);
 		}
 	}
diff --git a/prj-mgr/prj-mgr-prefs.cpp b/prj-mgr/prj-mgr-prefs.cpp
index 56eab78..98bb5ec 100644
--- a/prj-mgr/prj-mgr-prefs.cpp
+++ b/prj-mgr/prj-mgr-prefs.cpp
@@ -102,22 +102,20 @@ namespace horizon {
 		update();
 
 		box->button_add_pool->signal_clicked().connect([this] {
-			GtkFileChooserNative *native = gtk_file_chooser_native_new ("Add Pool",
-				GTK_WINDOW(gobj()),
-				GTK_FILE_CHOOSER_ACTION_OPEN,
-				"_Open",
-				"_Cancel");
-			auto chooser = Glib::wrap(GTK_FILE_CHOOSER(native));
-			auto filter = Gtk::FileFilter::create();
+			Gtk::FileChooserDialog fc(*this, "Add Pool", Gtk::FILE_CHOOSER_ACTION_OPEN);
+			fc.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+			fc.add_button("_Open", Gtk::RESPONSE_ACCEPT);
+			auto filter= Gtk::FileFilter::create();
 			filter->set_name("Horizon pool (pool.json)");
 			filter->add_pattern("pool.json");
-			chooser->add_filter(filter);
+			fc.add_filter(filter);
 
-			if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) {
-				auto path = chooser->get_filename();
+			if(fc.run()==Gtk::RESPONSE_ACCEPT) {
+				auto path = fc.get_filename();
 				auto mapp = Glib::RefPtr<ProjectManagerApplication>::cast_dynamic(app);
 				mapp->add_pool(path);
 				update();
+
 			}
 		});
 
-- 
2.14.2

