When a mouse drag is finished, fire a MouseUp key press, instead of

doing the drag end in code. From Stephen Coakley.
This commit is contained in:
nicm
2016-03-01 12:04:43 +00:00
parent e647eeb0c9
commit 54ea8f74ae
3 changed files with 43 additions and 16 deletions

View File

@ -384,8 +384,42 @@ server_client_check_mouse(struct client *c)
c->tty.mouse_drag_update = NULL;
c->tty.mouse_drag_release = NULL;
/*
* End a mouse drag by passing a MouseUp key corresponding to
* the button that started the drag.
*/
switch (c->tty.mouse_drag_flag) {
case 1:
if (where == PANE)
key = KEYC_MOUSEUP1_PANE;
if (where == STATUS)
key = KEYC_MOUSEUP1_STATUS;
if (where == BORDER)
key = KEYC_MOUSEUP1_BORDER;
break;
case 2:
if (where == PANE)
key = KEYC_MOUSEUP2_PANE;
if (where == STATUS)
key = KEYC_MOUSEUP2_STATUS;
if (where == BORDER)
key = KEYC_MOUSEUP2_BORDER;
break;
case 3:
if (where == PANE)
key = KEYC_MOUSEUP3_PANE;
if (where == STATUS)
key = KEYC_MOUSEUP3_STATUS;
if (where == BORDER)
key = KEYC_MOUSEUP3_BORDER;
break;
default:
key = KEYC_MOUSE;
break;
}
c->tty.mouse_drag_flag = 0;
return (KEYC_MOUSE); /* not a key, but still may want to pass */
return (key);
}
/* Convert to a key binding. */
@ -425,7 +459,11 @@ server_client_check_mouse(struct client *c)
}
}
c->tty.mouse_drag_flag = 1;
/*
* Begin a drag by setting the flag to a non-zero value that
* corresponds to the mouse button in use.
*/
c->tty.mouse_drag_flag = MOUSE_BUTTONS(b) + 1;
break;
case WHEEL:
if (MOUSE_BUTTONS(b) == MOUSE_WHEEL_UP) {