This enables userspace to enable one of the mouse protocols and choose
one of the new event types by escape sequences.

They are not a bitmasks, but mutually exclusive.

And don't forget to reset protocol value also if resetting vc.

Signed-off-by: Tammo Block <tammo.bl...@gmail.com>
---
 drivers/tty/vt/vt.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 673177d4e859..e2324d8e4e74 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -1896,13 +1896,25 @@ static void set_mode(struct vc_data *vc, int on_off)
                                        clr_kbd(vc, decarm);
                                break;
                        case 9:
-                               vc->vc_report_mouse = on_off ? 1 : 0;
+                               vc->vc_report_mouse = on_off * 
TIOCL_REPORTBTNPRESS;
                                break;
                        case 25:                /* Cursor on/off */
                                vc->vc_deccm = on_off;
                                break;
                        case 1000:
-                               vc->vc_report_mouse = on_off ? 2 : 0;
+                               vc->vc_report_mouse = on_off * 
TIOCL_REPORTRELEASE;
+                               break;
+                       case 1002:
+                               vc->vc_report_mouse = on_off * TIOCL_REPORTDRAG;
+                               break;
+                       case 1003:
+                               vc->vc_report_mouse = on_off * 
TIOCL_REPORTANYMOVE;
+                               break;
+                       case 1006:              /* SRG protocol */
+                               vc->vc_protocol_mouse = on_off * 1;
+                               break;
+                       case 1015:              /* URXVT protocol */
+                               vc->vc_protocol_mouse = on_off * 2;
                                break;
                        }
                } else {
@@ -2067,6 +2079,7 @@ static void reset_terminal(struct vc_data *vc, int 
do_clear)
        vc->state.charset       = 0;
        vc->vc_need_wrap        = 0;
        vc->vc_report_mouse     = 0;
+       vc->vc_protocol_mouse   = 0;
        vc->vc_utf              = default_utf8;
        vc->vc_utf_count        = 0;
 
-- 
2.27.0

Reply via email to