slouken@1895: /* slouken@1895: SDL - Simple DirectMedia Layer slouken@1895: Copyright (C) 1997-2006 Sam Lantinga slouken@1895: slouken@1895: This library is free software; you can redistribute it and/or slouken@1895: modify it under the terms of the GNU Lesser General Public slouken@1895: License as published by the Free Software Foundation; either slouken@1895: version 2.1 of the License, or (at your option) any later version. slouken@1895: slouken@1895: This library is distributed in the hope that it will be useful, slouken@1895: but WITHOUT ANY WARRANTY; without even the implied warranty of slouken@1895: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU slouken@1895: Lesser General Public License for more details. slouken@1895: slouken@1895: You should have received a copy of the GNU Lesser General Public slouken@1895: License along with this library; if not, write to the Free Software slouken@1895: Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA slouken@1895: slouken@1895: Sam Lantinga slouken@1895: slouken@libsdl.org slouken@1895: */ slouken@1895: #include "SDL_config.h" slouken@1895: slouken@1895: /* Window event handling code for SDL */ slouken@1895: slouken@1895: #include "SDL_events.h" slouken@1895: #include "SDL_events_c.h" slouken@1895: #include "../video/SDL_sysvideo.h" slouken@1895: slouken@1895: int slouken@1895: SDL_SendWindowEvent(SDL_WindowID windowID, Uint8 windowevent, int data1, slouken@1895: int data2) slouken@1895: { slouken@1895: int posted; slouken@1895: SDL_Window *window; slouken@1895: slouken@1895: window = SDL_GetWindowFromID(windowID); slouken@1895: if (!window) { slouken@1895: return 0; slouken@1895: } slouken@1895: switch (windowevent) { slouken@1895: case SDL_WINDOWEVENT_SHOWN: slouken@1895: if (window->flags & SDL_WINDOW_SHOWN) { slouken@1895: return 0; slouken@1895: } slouken@1895: window->flags |= SDL_WINDOW_SHOWN; slouken@1895: SDL_OnWindowShown(window); slouken@1895: break; slouken@1895: case SDL_WINDOWEVENT_HIDDEN: slouken@1895: if (!(window->flags & SDL_WINDOW_SHOWN)) { slouken@1895: return 0; slouken@1895: } slouken@1895: window->flags &= ~SDL_WINDOW_SHOWN; slouken@1895: SDL_OnWindowHidden(window); slouken@1895: break; slouken@1895: case SDL_WINDOWEVENT_MOVED: slouken@1895: if (window->flags & SDL_WINDOW_FULLSCREEN) { slouken@1895: return 0; slouken@1895: } slouken@1895: if (data1 == window->x && data2 == window->y) { slouken@1895: return 0; slouken@1895: } slouken@1895: break; slouken@1895: case SDL_WINDOWEVENT_RESIZED: slouken@1895: if (window->flags & SDL_WINDOW_FULLSCREEN) { slouken@1895: return 0; slouken@1895: } slouken@1895: if (data1 == window->w && data2 == window->h) { slouken@1895: return 0; slouken@1895: } slouken@1895: break; slouken@1895: case SDL_WINDOWEVENT_MINIMIZED: slouken@1895: if (window->flags & SDL_WINDOW_MINIMIZED) { slouken@1895: return 0; slouken@1895: } slouken@1895: window->flags |= SDL_WINDOW_MINIMIZED; slouken@1895: break; slouken@1895: case SDL_WINDOWEVENT_MAXIMIZED: slouken@1895: if (window->flags & SDL_WINDOW_MAXIMIZED) { slouken@1895: return 0; slouken@1895: } slouken@1895: window->flags |= SDL_WINDOW_MAXIMIZED; slouken@1895: break; slouken@1895: case SDL_WINDOWEVENT_RESTORED: slouken@1895: if (!(window->flags & (SDL_WINDOW_MINIMIZED | SDL_WINDOW_MAXIMIZED))) { slouken@1895: return 0; slouken@1895: } slouken@1895: window->flags &= ~(SDL_WINDOW_MINIMIZED | SDL_WINDOW_MAXIMIZED); slouken@1895: break; slouken@1895: case SDL_WINDOWEVENT_ENTER: slouken@1895: if (window->flags & SDL_WINDOW_MOUSE_FOCUS) { slouken@1895: return 0; slouken@1895: } slouken@1895: window->flags |= SDL_WINDOW_MOUSE_FOCUS; slouken@1895: break; slouken@1895: case SDL_WINDOWEVENT_LEAVE: slouken@1895: if (!(window->flags & SDL_WINDOW_MOUSE_FOCUS)) { slouken@1895: return 0; slouken@1895: } slouken@1895: window->flags &= ~SDL_WINDOW_MOUSE_FOCUS; slouken@1895: break; slouken@1895: case SDL_WINDOWEVENT_FOCUS_GAINED: slouken@1895: if (window->flags & SDL_WINDOW_INPUT_FOCUS) { slouken@1895: return 0; slouken@1895: } slouken@1895: window->flags |= SDL_WINDOW_INPUT_FOCUS; slouken@1895: SDL_OnWindowFocusGained(window); slouken@1895: break; slouken@1895: case SDL_WINDOWEVENT_FOCUS_LOST: slouken@1895: if (!(window->flags & SDL_WINDOW_INPUT_FOCUS)) { slouken@1895: return 0; slouken@1895: } slouken@1895: window->flags &= ~SDL_WINDOW_INPUT_FOCUS; slouken@1895: SDL_OnWindowFocusLost(window); slouken@1895: break; slouken@1895: } slouken@1895: slouken@1895: /* Post the event, if desired */ slouken@1895: posted = 0; slouken@1895: if (SDL_ProcessEvents[SDL_WINDOWEVENT] == SDL_ENABLE) { slouken@1895: SDL_Event event; slouken@1895: event.type = SDL_WINDOWEVENT; slouken@1895: event.window.event = windowevent; slouken@1895: event.window.data1 = data1; slouken@1895: event.window.data2 = data2; slouken@1895: event.window.windowID = windowID; slouken@1895: posted = (SDL_PushEvent(&event) > 0); slouken@1895: } slouken@1895: return (posted); slouken@1895: } slouken@1895: slouken@1895: /* vi: set ts=4 sw=4 expandtab: */