Просмотр исходного кода

tools: fix directory opening on Windows

Daniele Bartolini 5 лет назад
Родитель
Сommit
af52a97437
2 измененных файлов с 27 добавлено и 17 удалено
  1. 25 8
      tools/level_editor/level_editor.vala
  2. 2 9
      tools/level_editor/project_browser.vala

+ 25 - 8
tools/level_editor/level_editor.vala

@@ -1804,14 +1804,7 @@ namespace Crown
 
 		private void on_browse_logs(GLib.SimpleAction action, GLib.Variant? param)
 		{
-			try
-			{
-				AppInfo.launch_default_for_uri(_logs_dir.get_uri(), null);
-			}
-			catch (Error e)
-			{
-				loge(e.message);
-			}
+			open_directory(_logs_dir.get_uri());
 		}
 
 		private void on_changelog(GLib.SimpleAction action, GLib.Variant? param)
@@ -1866,6 +1859,30 @@ namespace Crown
 
 			_save_timer_id = GLib.Timeout.add_seconds(minutes*60, save_timeout);
 		}
+
+		public void open_directory(string directory)
+		{
+#if CROWN_PLATFORM_LINUX
+			try
+			{
+				GLib.AppInfo.launch_default_for_uri("file://" + directory, null);
+			}
+			catch (Error e)
+			{
+				loge(e.message);
+			}
+#else
+			GLib.SubprocessLauncher sl = new GLib.SubprocessLauncher(subprocess_flags());
+			try
+			{
+				sl.spawnv({ "explorer.exe", directory, null });
+			}
+			catch (Error e)
+			{
+				loge(e.message);
+			}
+#endif
+		}
 	}
 
 	public static GLib.SubprocessFlags subprocess_flags()

+ 2 - 9
tools/level_editor/project_browser.vala

@@ -313,15 +313,8 @@ namespace Crown
 								_tree_view.model.get_value(parent, ProjectStore.Column.NAME, out parent_name);
 
 								GLib.File file = GLib.File.new_for_path(GLib.Path.build_filename(_project.source_dir(), (string)parent_name));
-								try
-								{
-									GLib.AppInfo.launch_default_for_uri("file://" + file.get_path(), null);
-								}
-								catch (Error e)
-								{
-									Gtk.Application app = ((Gtk.Window)this.get_toplevel()).application;
-									((LevelEditorApplication)app).loge(e.message);
-								}
+								Gtk.Application app = ((Gtk.Window)this.get_toplevel()).application;
+								((LevelEditorApplication)app).open_directory(file.get_path());
 							}
 						});
 						menu.add(mi);