From d22ab8c1df33cb477847036755c7cace3d746741 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net>
Date: Mon, 28 Oct 2024 12:55:32 -0400
Subject: [PATCH] Make ALT-O mouse control toggle work in RIP mode

---
 src/syncterm/CHANGES  |  7 ++++++-
 src/syncterm/ripper.c |  3 ++-
 src/syncterm/term.c   | 19 -------------------
 src/syncterm/term.h   | 19 +++++++++++++++++++
 4 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/src/syncterm/CHANGES b/src/syncterm/CHANGES
index 24e81726d9..faf742d7a0 100644
--- a/src/syncterm/CHANGES
+++ b/src/syncterm/CHANGES
@@ -1,3 +1,9 @@
+Version 1.2rc5
+--------------
+Fix RIP parsing when passed fragmented ANSI sequences
+Fix cursor when RIP changes font height
+Fix Alt-O in RIP mode
+
 Version 1.2rc4
 --------------
 Fix pointy scaling to work even when interpolating both directions
@@ -9,7 +15,6 @@ Fix telnets (broken when sftp support was added)
 Update ANSI and win32 console support
 Fix bug with window resizing calculations
 New icons thanks to zuMi!
-Fix RIP parsing when passed fragmented ANSI sequences
 
 Version 1.2rc3
 --------------
diff --git a/src/syncterm/ripper.c b/src/syncterm/ripper.c
index 28a3f88500..19a9ac0079 100644
--- a/src/syncterm/ripper.c
+++ b/src/syncterm/ripper.c
@@ -16241,6 +16241,7 @@ rip_getch(void)
 		}
 		return ch;
 	}
+	struct mouse_state *ms = cterm->mouse_state_change_cbdata;
 
 	gotoxy(wherex(), wherey());
 	ch = getch();
@@ -16251,7 +16252,7 @@ rip_getch(void)
 	}
 
 	shadow_palette();
-	if (ch == CIO_KEY_MOUSE) {
+	if (ch == CIO_KEY_MOUSE && (!(ms->flags & MS_FLAGS_DISABLED))) {
 		ch = -1;
 		getmouse(&mevent);
 		mevent.startx_res = unmap_rip_x(mevent.startx_res);
diff --git a/src/syncterm/term.c b/src/syncterm/term.c
index 67b39b995f..d5ab686fff 100644
--- a/src/syncterm/term.c
+++ b/src/syncterm/term.c
@@ -102,25 +102,6 @@ get_cterm_size(int *cols, int *rows, int ns)
 	}
 }
 
-enum mouse_modes {
-	MM_OFF,
-	MM_RIP = 1,
-	MM_X10 = 9,
-	MM_NORMAL_TRACKING = 1000,
-	MM_HIGHLIGHT_TRACKING = 1001,
-	MM_BUTTON_EVENT_TRACKING = 1002,
-	MM_ANY_EVENT_TRACKING = 1003
-};
-
-struct mouse_state {
-	uint32_t         flags;
-
-#define MS_FLAGS_SGR (1 << 0)
-#define MS_FLAGS_DISABLED (1 << 1)
-#define MS_SGR_SET (1006)
-	enum mouse_modes mode;
-};
-
 void
 setup_mouse_events(struct mouse_state *ms)
 {
diff --git a/src/syncterm/term.h b/src/syncterm/term.h
index 3074867cc8..42736162bc 100644
--- a/src/syncterm/term.h
+++ b/src/syncterm/term.h
@@ -18,6 +18,25 @@ struct terminal {
 	int nostatus;
 };
 
+enum mouse_modes {
+	MM_OFF,
+	MM_RIP = 1,
+	MM_X10 = 9,
+	MM_NORMAL_TRACKING = 1000,
+	MM_HIGHLIGHT_TRACKING = 1001,
+	MM_BUTTON_EVENT_TRACKING = 1002,
+	MM_ANY_EVENT_TRACKING = 1003
+};
+
+struct mouse_state {
+	uint32_t         flags;
+
+#define MS_FLAGS_SGR (1 << 0)
+#define MS_FLAGS_DISABLED (1 << 1)
+#define MS_SGR_SET (1006)
+	enum mouse_modes mode;
+};
+
 #define XMODEM_128B (1 << 10) /* Use 128 byte block size (ick!) */
 
 extern struct terminal   term;
-- 
GitLab