From d654fc2d793da8a35f34f65a33a90a2b22dfa583 Mon Sep 17 00:00:00 2001
From: spherallic <spherallic@gmail.com>
Date: Fri, 12 Jul 2024 15:04:44 +0200
Subject: [PATCH] Fix flag setting actions when multiple sides are selected

---
 .../VisualModes/BaseVisualGeometrySector.cs      |  2 +-
 .../VisualModes/BaseVisualGeometrySidedef.cs     | 16 +++++++++-------
 .../BuilderModes/VisualModes/BaseVisualMode.cs   |  4 ++--
 .../BuilderModes/VisualModes/BaseVisualSlope.cs  |  2 +-
 .../BuilderModes/VisualModes/BaseVisualThing.cs  |  2 +-
 .../BuilderModes/VisualModes/BaseVisualVertex.cs |  2 +-
 .../VisualModes/IVisualEventReceiver.cs          |  2 +-
 .../VisualModes/NullVisualEventReceiver.cs       |  2 +-
 8 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs
index 7747022d..7854faaa 100755
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs
@@ -400,7 +400,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		protected virtual void SetTexture(string texturename) { }
 		public virtual void ApplyUpperUnpegged(bool set) { }
 		public virtual void ApplyLowerUnpegged(bool set) { }
-		public virtual void ApplyLineFlag(Linedef line, string flag, string name) { }
+		public virtual void ApplyLineFlag(string flag, string name) { }
 		protected abstract void MoveTextureOffset(int offsetx, int offsety);
 		protected abstract Point GetTextureOffset();
 		public virtual void OnPaintSelectEnd() { } // biwa
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs
index 8e8f1868..bd115438 100755
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs
@@ -1063,7 +1063,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		// Toggle midtexture pegging
 		public virtual void OnTogglePegMidtexture()
 		{
-			mode.ApplyLineFlag(this.Sidedef.Line, "midpeg", "Peg Midtexture");
+			mode.ApplyLineFlag("midpeg", "Peg Midtexture");
 		}
 
 		// Toggle slope skew
@@ -1073,15 +1073,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			{
 				case VisualGeometryType.WALL_LOWER:
 				case VisualGeometryType.WALL_UPPER:
-					mode.ApplyLineFlag(this.Sidedef.Line, "skewtd", "Slope Skew");
-					break;
-
 				case VisualGeometryType.WALL_MIDDLE_3D:
-					mode.ApplyLineFlag(this.GetControlLinedef(), "skewtd", "Slope Skew");
+					mode.ApplyLineFlag("skewtd", "Slope Skew");
 					break;
 
 				case VisualGeometryType.WALL_MIDDLE:
-					mode.ApplyLineFlag(this.Sidedef.Line, "noskew", "No Midtexture Skew");
+					mode.ApplyLineFlag("noskew", "No Midtexture Skew");
 					break;
 			}
 		}
@@ -1149,8 +1146,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		}
 
 		// This sets a specified flag
-		public virtual void ApplyLineFlag(Linedef line, string flag, string name)
+		public virtual void ApplyLineFlag(string flag, string name)
 		{
+			Linedef line = this.Sidedef.Line;
+
+			if (this.GeometryType == VisualGeometryType.WALL_MIDDLE_3D)
+				line = this.GetControlLinedef();
+
 			if (line.IsFlagSet(flag))
 			{
 				// Remove flag
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
index 4ccf56e6..67a732c3 100644
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
@@ -2249,12 +2249,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		}
 
 		// Apply specified flag
-		public void ApplyLineFlag(Linedef line, string flag, string name)
+		public void ApplyLineFlag(string flag, string name)
 		{
 			List<IVisualEventReceiver> objs = GetSelectedObjects(false, true, false, false, false);
 			foreach (IVisualEventReceiver i in objs)
 			{
-				i.ApplyLineFlag(line, flag, name);
+				i.ApplyLineFlag(flag, name);
 			}
 		}
 
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs
index c544c430..70297db3 100644
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs
@@ -129,7 +129,7 @@ namespace CodeImp.DoomBuilder.VisualModes
 		public void ApplyTexture(string texture) { }
 		public void ApplyUpperUnpegged(bool set) { }
 		public void ApplyLowerUnpegged(bool set) { }
-		public void ApplyLineFlag(Linedef line, string flag, string name) { }
+		public void ApplyLineFlag(string flag, string name) { }
 		public void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight, bool stopatselected) { } //mxd
 		public virtual void OnPaintSelectEnd() { } // biwa
 		public void OnChangeScale(int x, int y) { }
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs
index ec81c7ae..dff6e63b 100644
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs
@@ -723,7 +723,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		public void ApplyTexture(string texture) { }
 		public void ApplyUpperUnpegged(bool set) { }
 		public void ApplyLowerUnpegged(bool set) { }
-		public void ApplyLineFlag(Linedef line, string flag, string name) { }
+		public void ApplyLineFlag(string flag, string name) { }
 		public void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight, bool stopatselected) { } //mxd
 		public virtual void OnPaintSelectEnd() { } // biwa
 
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs
index 6526d827..76715b32 100644
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs
@@ -262,7 +262,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		public void ApplyTexture(string texture) { }
 		public void ApplyUpperUnpegged(bool set) { }
 		public void ApplyLowerUnpegged(bool set) { }
-		public void ApplyLineFlag(Linedef line, string flag, string name) { }
+		public void ApplyLineFlag(string flag, string name) { }
 		public string GetTextureName() { return ""; }
 		public void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight, bool stopatselected) { } //mxd
 		public virtual void OnPaintSelectBegin() { } // biwa
diff --git a/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs b/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs
index b280b32f..896b93fc 100644
--- a/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs
@@ -64,7 +64,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		void ApplyTexture(string texture);
 		void ApplyUpperUnpegged(bool set);
 		void ApplyLowerUnpegged(bool set);
-		void ApplyLineFlag(Linedef line, string flag, string name);
+		void ApplyLineFlag(string flag, string name);
 
 		// Other methods
 		string GetTextureName();
diff --git a/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs b/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs
index 5e35629c..045ee2a5 100644
--- a/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs
@@ -61,7 +61,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		public void ApplyTexture(string texture) { }
 		public void ApplyUpperUnpegged(bool set) { }
 		public void ApplyLowerUnpegged(bool set) { }
-		public void ApplyLineFlag(Linedef line, string flag, string name) { }
+		public void ApplyLineFlag(string flag, string name) { }
 		public string GetTextureName() { return "";	}
 		public void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight, bool stopatselected) { } //mxd
 	}
-- 
GitLab