diff --git a/src/conio/cterm.c b/src/conio/cterm.c
index 3fffba2d2eaa62df3d20647eb592be9e5e859e5f..c739f1549aa76e23425159fe021132a97ccdaa61 100644
--- a/src/conio/cterm.c
+++ b/src/conio/cterm.c
@@ -1816,7 +1816,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
 									case 1007:
 									case 1015:
 										if (cterm->mouse_state_change)
-											cterm->mouse_state_change(seq->param_int[i], 1);
+											cterm->mouse_state_change(seq->param_int[i], 1, cterm->mouse_state_change_cbdata);
 										break;
 								}
 							}
@@ -1888,7 +1888,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
 									case 1007:
 									case 1015:
 										if (cterm->mouse_state_change)
-											cterm->mouse_state_change(seq->param_int[i], 0);
+											cterm->mouse_state_change(seq->param_int[i], 0, cterm->mouse_state_change_cbdata);
 										break;
 								}
 							}
diff --git a/src/conio/cterm.h b/src/conio/cterm.h
index 815b14909fd7380eb9a594176cf0deaa51c5181f..8bd078d9b355bf958a34034ce40e189171d6392c 100644
--- a/src/conio/cterm.h
+++ b/src/conio/cterm.h
@@ -179,7 +179,8 @@ struct cterminal {
 	void				*apc_handler_data;
 
 	/* Mouse state change callback */
-	void (*mouse_state_change)(int parameter, int enable);
+	void (*mouse_state_change)(int parameter, int enable, void *cbdata);
+	void *mouse_state_change_cbdata;
 
 	/* conio function pointers */
 #ifdef CTERM_WITHOUT_CONIO