Jelajahi Sumber

tools: add ability to restart the engine inside resource browser

Daniele Bartolini 7 tahun lalu
induk
melakukan
55d3007d5a
1 mengubah file dengan 28 tambahan dan 5 penghapusan
  1. 28 5
      tools/level_editor/resource_browser.vala

+ 28 - 5
tools/level_editor/resource_browser.vala

@@ -169,15 +169,14 @@ namespace Crown
 
 		private void on_destroy()
 		{
-			if (_console_client.is_connected())
-				_console_client.close();
-
-			if (_engine_process != null)
-				_engine_process.force_exit();
+			stop_engine();
 		}
 
 		private void start_engine(uint window_xid)
 		{
+			if (window_xid == 0)
+				return;
+
 			string args[] =
 			{
 				ENGINE_EXE,
@@ -209,6 +208,30 @@ namespace Crown
 			_tree_view.set_cursor(new Gtk.TreePath.first(), null, false);
 		}
 
+		private void stop_engine()
+		{
+			_console_client.close();
+
+			if (_engine_process != null)
+			{
+				_engine_process.force_exit();
+				try
+				{
+					_engine_process.wait();
+				}
+				catch (Error e)
+				{
+					stderr.printf("Error: %s\n", e.message);
+				}
+			}
+		}
+
+		public void restart_engine()
+		{
+			stop_engine();
+			start_engine(_engine_view.window_id);
+		}
+
 		private void on_engine_view_realized()
 		{
 			start_engine(_engine_view.window_id);