+ if (IS_MOUSE_RELEASE(button)) release = TRUE;
+
+ if (IS_CURSOR_MOVE(button & ~MOD_MASK)) {
+ if (!ui->cursor_active) {
+ ui->cursor_active = TRUE;
+ } else if (button & (MOD_SHFT | MOD_CTRL)) {
+ if (ui->ndragcoords > 0) return NULL;
+ ui->ndragcoords = -1;
+ return mark_in_direction(state, ui->curx, ui->cury,
+ KEY_DIRECTION(button & ~MOD_MASK),
+ (button & MOD_SHFT), tmpbuf);
+ } else {
+ move_cursor(button, &ui->curx, &ui->cury, w, h, FALSE);
+ if (ui->ndragcoords >= 0)
+ update_ui_drag(state, ui, ui->curx, ui->cury);
+ }
+ return "";
+ }
+
+ if (IS_CURSOR_SELECT(button & ~MOD_MASK)) {
+ if (!ui->cursor_active) {
+ ui->cursor_active = TRUE;
+ return "";
+ } else if (button == CURSOR_SELECT) {
+ if (ui->ndragcoords == -1) {
+ ui->ndragcoords = 0;
+ ui->dragcoords[0] = ui->cury * w + ui->curx;
+ ui->clickx = CENTERED_COORD(ui->curx);
+ ui->clicky = CENTERED_COORD(ui->cury);
+ return "";
+ } else release = TRUE;
+ } else if (button == CURSOR_SELECT2 && ui->ndragcoords >= 0) {
+ ui->ndragcoords = -1;
+ return "";
+ }
+ }
+
+ if (release) {
+ if (ui->ndragcoords > 0) {