diff --git a/aegisub/src/video_display.cpp b/aegisub/src/video_display.cpp
index 002ba3f69d593931dd4ec56df088b6f151475f28..bf9f933166f191cce5a2eafc0c18aec39c2e8c70 100644
--- a/aegisub/src/video_display.cpp
+++ b/aegisub/src/video_display.cpp
@@ -414,7 +414,13 @@ void VideoDisplay::SetTool(std::unique_ptr<VisualToolBase> new_tool) {
 	tool->SetToolbar(toolBar);
 
 	// Update size as the new typesetting tool may have changed the subtoolbar size
-	UpdateSize();
+	if (!freeSize)
+		UpdateSize();
+	else {
+		// UpdateSize fits the window to the video, which we don't want to do
+		GetGrandParent()->Layout();
+		tool->SetDisplayArea(viewport_left, viewport_top, viewport_width, viewport_height);
+	}
 }
 
 bool VideoDisplay::ToolIsType(std::type_info const& type) const {