diff -r f4d353bd5d16 src/events/SDL_windowevents.c --- a/src/events/SDL_windowevents.c Thu Nov 27 09:55:34 2014 -0500 +++ b/src/events/SDL_windowevents.c Sun Nov 30 08:17:37 2014 +0100 @@ -207,4 +207,27 @@ return (posted); } +int +SDL_SendWindowFlagChangeEvents(SDL_Window * window, Uint32 flags) { + int posted; + + if (!window) { + return 0; + } + + if (flags & SDL_WINDOW_MINIMIZED) { + posted += SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MINIMIZED, 0, 0); + } else if (flags & SDL_WINDOW_MAXIMIZED) { + posted += SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MAXIMIZED, 0, 0); + } else { + posted += SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESTORED, 0, 0); + } + if (flags & SDL_WINDOW_SHOWN) { + posted += SDL_SendWindowEvent(window, SDL_WINDOWEVENT_SHOWN, 0, 0); + } else { + posted += SDL_SendWindowEvent(window, SDL_WINDOWEVENT_HIDDEN, 0, 0); + } + + return (posted); +} /* vi: set ts=4 sw=4 expandtab: */ diff -r f4d353bd5d16 src/events/SDL_windowevents_c.h --- a/src/events/SDL_windowevents_c.h Thu Nov 27 09:55:34 2014 -0500 +++ b/src/events/SDL_windowevents_c.h Sun Nov 30 08:17:37 2014 +0100 @@ -25,6 +25,7 @@ extern int SDL_SendWindowEvent(SDL_Window * window, Uint8 windowevent, int data1, int data2); +extern int SDL_SendWindowFlagChangeEvents(SDL_Window * window, Uint32 flags); #endif /* _SDL_windowevents_c_h */ diff -r f4d353bd5d16 src/video/x11/SDL_x11events.c --- a/src/video/x11/SDL_x11events.c Thu Nov 27 09:55:34 2014 -0500 +++ b/src/video/x11/SDL_x11events.c Sun Nov 30 08:17:37 2014 +0100 @@ -1075,14 +1075,7 @@ because they use the NETWM protocol to notify us of changes. */ Uint32 flags = X11_GetNetWMState(_this, xevent.xproperty.window); - if ((flags^data->window->flags) & SDL_WINDOW_HIDDEN || - (flags^data->window->flags) & SDL_WINDOW_FULLSCREEN ) { - if (flags & SDL_WINDOW_HIDDEN) { - X11_DispatchUnmapNotify(data); - } else { - X11_DispatchMapNotify(data); - } - } + SDL_SendWindowFlagChangeEvents(data->window, flags); } } break; diff -r f4d353bd5d16 test/testwm2.c --- a/test/testwm2.c Thu Nov 27 09:55:34 2014 -0500 +++ b/test/testwm2.c Sun Nov 30 08:17:37 2014 +0100 @@ -93,6 +93,27 @@ event.window.data2); } } + if (event.window.event == SDL_WINDOWEVENT_MINIMIZED) { + SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); + if (window) { + SDL_Log("Window %d minimized\n", + event.window.windowID); + } + } + if (event.window.event == SDL_WINDOWEVENT_MAXIMIZED) { + SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); + if (window) { + SDL_Log("Window %d maximized\n", + event.window.windowID); + } + } + if (event.window.event == SDL_WINDOWEVENT_RESTORED) { + SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); + if (window) { + SDL_Log("Window %d restored\n", + event.window.windowID); + } + } if (event.window.event == SDL_WINDOWEVENT_MOVED) { SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); if (window) { @@ -119,6 +140,12 @@ system_cursor = 0; } updateCursor = SDL_TRUE; + } else if (event.key.keysym.sym == SDLK_r) { + SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); + SDL_RestoreWindow(window); + } else if (event.key.keysym.sym == SDLK_m) { + SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); + SDL_MaximizeWindow(window); } if (updateCursor) { SDL_Log("Changing cursor to \"%s\"", cursorNames[system_cursor]);