--- a/src/video/gem/SDL_gemevents.c Thu Jun 02 22:02:18 2005 +0000
+++ b/src/video/gem/SDL_gemevents.c Fri Jun 03 08:18:55 2005 +0000
@@ -140,14 +140,23 @@
{
int quit, resultat;
short buffer[8], kc;
+ short x2,y2,w2,h2;
quit = 0;
+ event_mask = MU_MESAG|MU_TIMER|MU_KEYBD;
+ if (!GEM_fullscreen && (GEM_handle>=0)) {
+ wind_get (GEM_handle, WF_WORKXYWH, &x2, &y2, &w2, &h2);
+ event_mask |= MU_M1|MU_M2;
+ } else {
+ x2=y2=w2=h2=0;
+ }
+
resultat = evnt_multi(
- MU_MESAG|MU_TIMER|MU_KEYBD,
+ event_mask,
0,0,0,
- 0,0,0,0,0,
- 0,0,0,0,0,
+ MO_ENTER,x2,y2,w2,h2,
+ MO_LEAVE,x2,y2,w2,h2,
buffer,
10,
&dummy,&dummy,&dummy,&kstate,&kc,&dummy
@@ -167,6 +176,18 @@
}
}
+ /* Mouse entering/leaving window */
+ if (resultat & MU_M1) {
+ if (this->input_grab == SDL_GRAB_OFF) {
+ SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS);
+ }
+ }
+ if (resultat & MU_M2) {
+ if (this->input_grab == SDL_GRAB_OFF) {
+ SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS);
+ }
+ }
+
/* Timer event ? */
if ((resultat & MU_TIMER) || quit)
break;
@@ -224,9 +245,6 @@
case WM_TOPPED:
wind_set(message[3],WF_TOP,message[4],0,0,0);
SDL_PrivateAppActive(1, SDL_APPINPUTFOCUS);
- if (this->input_grab == SDL_GRAB_OFF) {
- SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS);
- }
break;
case WM_REDRAW:
if (!GEM_lock_redraw) {
@@ -289,9 +307,6 @@
case WM_BOTTOMED:
case WM_UNTOPPED:
SDL_PrivateAppActive(0, SDL_APPINPUTFOCUS);
- if (this->input_grab == SDL_GRAB_OFF) {
- SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS);
- }
break;
}
@@ -326,6 +341,11 @@
static short prevmousex=0, prevmousey=0, prevmouseb=0;
short x2, y2, w2, h2;
+ /* Don't return mouse events if out of window */
+ if ((SDL_GetAppState() & SDL_APPMOUSEFOCUS)==0) {
+ return;
+ }
+
/* Retrieve window coords, and generate mouse events accordingly */
x2 = y2 = 0;
w2 = VDI_w;