Skip to content

Commit

Permalink
Better mouse lose/gain focus
Browse files Browse the repository at this point in the history
  • Loading branch information
pmandin committed Jun 3, 2005
1 parent e65c97a commit 2a74b79
Showing 1 changed file with 29 additions and 9 deletions.
38 changes: 29 additions & 9 deletions src/video/gem/SDL_gemevents.c
Expand Up @@ -140,14 +140,23 @@ void GEM_PumpEvents(_THIS)
{
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
Expand All @@ -167,6 +176,18 @@ void GEM_PumpEvents(_THIS)
}
}

/* 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;
Expand Down Expand Up @@ -224,9 +245,6 @@ static int do_messages(_THIS, short *message)
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) {
Expand Down Expand Up @@ -289,9 +307,6 @@ static int do_messages(_THIS, short *message)
case WM_BOTTOMED:
case WM_UNTOPPED:
SDL_PrivateAppActive(0, SDL_APPINPUTFOCUS);
if (this->input_grab == SDL_GRAB_OFF) {
SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS);
}
break;
}

Expand Down Expand Up @@ -326,6 +341,11 @@ static void do_mouse(_THIS, short mx, short my, short mb, short ks)
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;
Expand Down

0 comments on commit 2a74b79

Please sign in to comment.