src/SDL_compat.c
branchSDL-1.3
changeset 1686 8d7fecceb9ef
parent 1685 66267c6a0b12
child 1687 d36048e8e302
equal deleted inserted replaced
1685:66267c6a0b12 1686:8d7fecceb9ef
   148         modes[nmodes] = NULL;
   148         modes[nmodes] = NULL;
   149     }
   149     }
   150     return modes;
   150     return modes;
   151 }
   151 }
   152 
   152 
   153 static int (*orig_eventfilter) (const SDL_Event * event);
   153 static int (*orig_eventfilter) (SDL_Event * event);
   154 
   154 
   155 static int
   155 static int
   156 SDL_CompatEventFilter(const SDL_Event * event)
   156 SDL_CompatEventFilter(SDL_Event * event)
   157 {
   157 {
   158     SDL_Event fake;
   158     SDL_Event fake;
   159 
   159 
   160     switch (event->type) {
   160     switch (event->type) {
   161     case SDL_WINDOWEVENT:
   161     case SDL_WINDOWEVENT:
   201             fake.active.gain = 1;
   201             fake.active.gain = 1;
   202             fake.active.state = SDL_APPINPUTFOCUS;
   202             fake.active.state = SDL_APPINPUTFOCUS;
   203             SDL_PushEvent(&fake);
   203             SDL_PushEvent(&fake);
   204             break;
   204             break;
   205         }
   205         }
       
   206     case SDL_KEYDOWN:
       
   207     case SDL_KEYUP:
       
   208         {
       
   209             Uint32 unicode = 0;
       
   210             if (event->key.type == SDL_KEYDOWN && event->key.keysym.sym < 256) {
       
   211                 int shifted = !!(event->key.keysym.mod & KMOD_SHIFT);
       
   212                 int capslock = !!(event->key.keysym.mod & KMOD_CAPS);
       
   213                 if ((shifted ^ capslock) != 0) {
       
   214                     unicode = SDL_toupper(event->key.keysym.sym);
       
   215                 } else {
       
   216                     unicode = event->key.keysym.sym;
       
   217                 }
       
   218             }
       
   219             if (unicode) {
       
   220                 event->key.keysym.unicode = unicode;
       
   221             }
       
   222             break;
       
   223         }
   206     }
   224     }
   207     if (orig_eventfilter) {
   225     if (orig_eventfilter) {
   208         return orig_eventfilter(event);
   226         return orig_eventfilter(event);
   209     } else {
   227     } else {
   210         return 1;
   228         return 1;
   226 }
   244 }
   227 
   245 
   228 SDL_Surface *
   246 SDL_Surface *
   229 SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags)
   247 SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags)
   230 {
   248 {
   231     int (*filter) (const SDL_Event * event);
   249     int (*filter) (SDL_Event * event);
   232     const SDL_DisplayMode *desktop_mode;
   250     const SDL_DisplayMode *desktop_mode;
   233     SDL_DisplayMode mode;
   251     SDL_DisplayMode mode;
   234     int i;
   252     int i;
   235     Uint32 window_flags;
   253     Uint32 window_flags;
   236     Uint32 desktop_format;
   254     Uint32 desktop_format;