From 061d3afd7ea2f623978cf25b5ad4763f3d92b1c7 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Mon, 20 Sep 2004 06:35:36 +0000
Subject: [PATCH] If no higher multi-clicks are pending, time out clicks
 immediately.

---
 src/conio/mouse.c | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/conio/mouse.c b/src/conio/mouse.c
index 3705d757cd..73654c18a2 100644
--- a/src/conio/mouse.c
+++ b/src/conio/mouse.c
@@ -150,6 +150,24 @@ void add_outevent(int event, int x, int y)
 	pthread_mutex_unlock(&out_mutex);
 }
 
+int more_multies(int button, int clicks)
+{
+	int i;
+
+	switch(clicks) {
+		case 1:
+			if(mouse_events & (1<<CIOLIB_BUTTON_DBL_CLICK(button)))
+				return(1);
+		case 2:
+			if(mouse_events & (1<<CIOLIB_BUTTON_TRPL_CLICK(button)))
+				return(1);
+		case 3:
+			if(mouse_events & (1<<CIOLIB_BUTTON_QUAD_CLICK(button)))
+				return(1);
+	}
+	return(0);
+}
+
 void ciolib_mouse_thread(void *data)
 {
 	struct in_mouse_event *old_in_event;
@@ -315,15 +333,15 @@ void ciolib_mouse_thread(void *data)
 							break;
 						case MOUSE_SINGLEPRESSED:
 							state.button_state[but-1]=MOUSE_CLICKED;
-							state.timeout[but-1]=MSEC_CLOCK()+state.multi_timeout;
+							state.timeout[but-1]=more_multies(but,1)?MSEC_CLOCK()+state.multi_timeout:MSEC_CLOCK();
 							break;
 						case MOUSE_DOUBLEPRESSED:
 							state.button_state[but-1]=MOUSE_DOUBLECLICKED;
-							state.timeout[but-1]=MSEC_CLOCK()+state.multi_timeout;
+							state.timeout[but-1]=more_multies(but,2)?MSEC_CLOCK()+state.multi_timeout:MSEC_CLOCK();
 							break;
 						case MOUSE_TRIPLEPRESSED:
 							state.button_state[but-1]=MOUSE_TRIPLECLICKED;
-							state.timeout[but-1]=MSEC_CLOCK()+state.multi_timeout;
+							state.timeout[but-1]=more_multies(but,3)?MSEC_CLOCK()+state.multi_timeout:MSEC_CLOCK();
 							break;
 						case MOUSE_QUADPRESSED:
 							state.button_state[but-1]=MOUSE_NOSTATE;
-- 
GitLab