diff options
author | Kazutaka YOKOTA <yokota@FreeBSD.org> | 1999-11-09 12:35:36 +0000 |
---|---|---|
committer | Kazutaka YOKOTA <yokota@FreeBSD.org> | 1999-11-09 12:35:36 +0000 |
commit | cc5c7f76deb8c9ac22ed7ea2ac6d8a404aa7e7ff (patch) | |
tree | 07f466c7e4e4a63a9cd2b05ccd1a5acf16987bc4 /sys/dev/syscons/scmouse.c | |
parent | 10b50b7afd423c24b9dd39e620fe9fb670162445 (diff) | |
download | src-cc5c7f76deb8c9ac22ed7ea2ac6d8a404aa7e7ff.tar.gz src-cc5c7f76deb8c9ac22ed7ea2ac6d8a404aa7e7ff.zip |
Correctly record the mouse position in the current VTY.
Notes
Notes:
svn path=/head/; revision=53057
Diffstat (limited to 'sys/dev/syscons/scmouse.c')
-rw-r--r-- | sys/dev/syscons/scmouse.c | 45 |
1 files changed, 22 insertions, 23 deletions
diff --git a/sys/dev/syscons/scmouse.c b/sys/dev/syscons/scmouse.c index 496cd7c32d37..33be7d0a4a5e 100644 --- a/sys/dev/syscons/scmouse.c +++ b/sys/dev/syscons/scmouse.c @@ -639,6 +639,7 @@ sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, mouse_info_t buf; scr_stat *cur_scp; struct tty *mtty; + int f; if (scp == NULL) return ENOTTY; @@ -752,6 +753,19 @@ sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, if (SC_VTY(tp->t_dev) != SC_CONSOLECTL) return ENOTTY; #endif + s = spltty(); + if (mouse->u.data.x != 0 || mouse->u.data.y != 0) { + cur_scp->mouse_xpos += mouse->u.data.x; + cur_scp->mouse_ypos += mouse->u.data.y; + set_mouse_pos(cur_scp); + } + f = 0; + if (mouse->operation == MOUSE_ACTION) { + f = cur_scp->mouse_buttons ^ mouse->u.data.buttons; + cur_scp->mouse_buttons = mouse->u.data.buttons; + } + splx(s); + mouse_status.dx += mouse->u.data.x; mouse_status.dy += mouse->u.data.y; mouse_status.dz += mouse->u.data.z; @@ -792,7 +806,6 @@ sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, } if (cur_scp->mouse_signal) { - cur_scp->mouse_buttons = mouse->u.data.buttons; /* has controlling process died? */ if (cur_scp->mouse_proc && (cur_scp->mouse_proc != pfind(cur_scp->mouse_pid))){ @@ -823,31 +836,17 @@ sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, if (cur_scp->sc->flags & SC_MOUSE_ENABLED) cur_scp->status |= MOUSE_VISIBLE; - if (mouse->operation == MOUSE_ACTION) { + if ((mouse->operation == MOUSE_ACTION) && f) { /* process button presses */ - if (cur_scp->mouse_buttons ^ mouse->u.data.buttons) { - cur_scp->mouse_buttons = mouse->u.data.buttons; - if (cur_scp->mouse_buttons & MOUSE_BUTTON1DOWN) - mouse_cut_start(cur_scp); - else - mouse_cut_end(cur_scp); - if (cur_scp->mouse_buttons & MOUSE_BUTTON2DOWN || - cur_scp->mouse_buttons & MOUSE_BUTTON3DOWN) - mouse_paste(cur_scp); - } + if (cur_scp->mouse_buttons & MOUSE_BUTTON1DOWN) + mouse_cut_start(cur_scp); + else + mouse_cut_end(cur_scp); + if (cur_scp->mouse_buttons & MOUSE_BUTTON2DOWN || + cur_scp->mouse_buttons & MOUSE_BUTTON3DOWN) + mouse_paste(cur_scp); } -#else /* SC_NO_CUTPASTE */ - if (mouse->operation == MOUSE_ACTION) - cur_scp->mouse_buttons = mouse->u.data.buttons; #endif /* SC_NO_CUTPASTE */ - - if (mouse->u.data.x != 0 || mouse->u.data.y != 0) { - s = spltty(); - cur_scp->mouse_xpos += mouse->u.data.x; - cur_scp->mouse_ypos += mouse->u.data.y; - set_mouse_pos(cur_scp); - splx(s); - } break; case MOUSE_BUTTON_EVENT: |