src/events/SDL_windowevents.c
branchSDL-1.3
changeset 1722 5daa04d862f1
parent 1668 4da1ee79c9af
child 1724 6c63fc2bd986
equal deleted inserted replaced
1721:1cc762cafff8 1722:5daa04d862f1
    23 
    23 
    24 /* Window event handling code for SDL */
    24 /* Window event handling code for SDL */
    25 
    25 
    26 #include "SDL_events.h"
    26 #include "SDL_events.h"
    27 #include "SDL_events_c.h"
    27 #include "SDL_events_c.h"
       
    28 #include "../video/SDL_sysvideo.h"
    28 
    29 
    29 int
    30 int
    30 SDL_PrivateWindowEvent(SDL_WindowID windowID, Uint8 windowevent, int data1,
    31 SDL_PrivateWindowEvent(SDL_WindowID windowID, Uint8 windowevent, int data1,
    31                        int data2)
    32                        int data2)
    32 {
    33 {
    33     int posted;
    34     int posted;
       
    35     SDL_Window *window;
       
    36 
       
    37     window = SDL_GetWindowFromID(windowID);
       
    38     if (!window) {
       
    39         return 0;
       
    40     }
       
    41     switch (windowevent) {
       
    42     case SDL_WINDOWEVENT_SHOWN:
       
    43         if (window->flags & SDL_WINDOW_SHOWN) {
       
    44             return 0;
       
    45         }
       
    46         window->flags |= SDL_WINDOW_SHOWN;
       
    47         break;
       
    48     case SDL_WINDOWEVENT_HIDDEN:
       
    49         if (!(window->flags & SDL_WINDOW_SHOWN)) {
       
    50             return 0;
       
    51         }
       
    52         window->flags &= ~SDL_WINDOW_SHOWN;
       
    53         break;
       
    54     case SDL_WINDOWEVENT_MINIMIZED:
       
    55         if (window->flags & SDL_WINDOW_MINIMIZED) {
       
    56             return 0;
       
    57         }
       
    58         window->flags |= SDL_WINDOW_MINIMIZED;
       
    59         break;
       
    60     case SDL_WINDOWEVENT_MAXIMIZED:
       
    61         if (window->flags & SDL_WINDOW_MAXIMIZED) {
       
    62             return 0;
       
    63         }
       
    64         window->flags |= SDL_WINDOW_MAXIMIZED;
       
    65         break;
       
    66     case SDL_WINDOWEVENT_RESTORED:
       
    67         if (!(window->flags & (SDL_WINDOW_MINIMIZED | SDL_WINDOW_MAXIMIZED))) {
       
    68             return 0;
       
    69         }
       
    70         window->flags &= ~(SDL_WINDOW_MINIMIZED | SDL_WINDOW_MAXIMIZED);
       
    71         break;
       
    72     case SDL_WINDOWEVENT_ENTER:
       
    73         if (window->flags & SDL_WINDOW_MOUSE_FOCUS) {
       
    74             return 0;
       
    75         }
       
    76         window->flags |= SDL_WINDOW_MOUSE_FOCUS;
       
    77         break;
       
    78     case SDL_WINDOWEVENT_LEAVE:
       
    79         if (!(window->flags & SDL_WINDOW_MOUSE_FOCUS)) {
       
    80             return 0;
       
    81         }
       
    82         window->flags &= ~SDL_WINDOW_MOUSE_FOCUS;
       
    83         break;
       
    84     case SDL_WINDOWEVENT_FOCUS_GAINED:
       
    85         if (window->flags & SDL_WINDOW_KEYBOARD_FOCUS) {
       
    86             return 0;
       
    87         }
       
    88         window->flags |= SDL_WINDOW_KEYBOARD_FOCUS;
       
    89         break;
       
    90     case SDL_WINDOWEVENT_FOCUS_LOST:
       
    91         if (!(window->flags & SDL_WINDOW_KEYBOARD_FOCUS)) {
       
    92             return 0;
       
    93         }
       
    94         window->flags &= ~SDL_WINDOW_KEYBOARD_FOCUS;
       
    95         break;
       
    96     }
    34 
    97 
    35     /* Post the event, if desired */
    98     /* Post the event, if desired */
    36     posted = 0;
    99     posted = 0;
    37     if (SDL_ProcessEvents[SDL_WINDOWEVENT] == SDL_ENABLE) {
   100     if (SDL_ProcessEvents[SDL_WINDOWEVENT] == SDL_ENABLE) {
    38         SDL_Event event;
   101         SDL_Event event;
    39         event.type = SDL_WINDOWEVENT;
   102         event.type = SDL_WINDOWEVENT;
    40         event.window.event = windowevent;
   103         event.window.event = windowevent;
    41         event.window.data1 = data1;
   104         event.window.data1 = data1;
    42         event.window.data2 = data2;
   105         event.window.data2 = data2;
    43         event.window.windowID = windowID;
   106         event.window.windowID = windowID;
    44         if ((SDL_EventOK == NULL) || (*SDL_EventOK) (&event)) {
   107         if ((SDL_EventOK == NULL)
       
   108             || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
    45             posted = 1;
   109             posted = 1;
    46             SDL_PushEvent(&event);
   110             SDL_PushEvent(&event);
    47         }
   111         }
    48     }
   112     }
    49     return (posted);
   113     return (posted);