Fixed bug 4581 - mouse events with SDL_TOUCH_MOUSEID make window lost focus

Virtual mouse events should never leave the window or change focus for single window applications.
This commit is contained in:
Sylvain Becker 2019-04-08 21:27:24 +02:00
parent d68e501db4
commit cfefe5434a
1 changed files with 12 additions and 4 deletions

View File

@ -257,12 +257,18 @@ SDL_SendTouch(SDL_TouchID id, SDL_FingerID fingerid,
if (finger_touching == SDL_FALSE) { if (finger_touching == SDL_FALSE) {
int pos_x = (int)(x * (float)window->w); int pos_x = (int)(x * (float)window->w);
int pos_y = (int)(y * (float)window->h); int pos_y = (int)(y * (float)window->h);
SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, pos_x, pos_y); if (pos_x >= 0 && pos_y >= 0 && pos_x < window->w && pos_y < window->h) {
SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT); SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, pos_x, pos_y);
SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT);
}
} }
} else { } else {
if (finger_touching == SDL_TRUE && track_touchid == id && track_fingerid == fingerid) { if (finger_touching == SDL_TRUE && track_touchid == id && track_fingerid == fingerid) {
SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT); int pos_x = (int)(x * (float)window->w);
int pos_y = (int)(y * (float)window->h);
if (pos_x >= 0 && pos_y >= 0 && pos_x < window->w && pos_y < window->h) {
SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT);
}
} }
} }
} }
@ -355,7 +361,9 @@ SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid,
if (finger_touching == SDL_TRUE && track_touchid == id && track_fingerid == fingerid) { if (finger_touching == SDL_TRUE && track_touchid == id && track_fingerid == fingerid) {
int pos_x = (int)(x * (float)window->w); int pos_x = (int)(x * (float)window->w);
int pos_y = (int)(y * (float)window->h); int pos_y = (int)(y * (float)window->h);
SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, pos_x, pos_y); if (pos_x >= 0 && pos_y >= 0 && pos_x < window->w && pos_y < window->h) {
SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, pos_x, pos_y);
}
} }
} }
} }