Post a Comment
Along with the old distinction between reparenting and non-reparenting window managers. All the major WMs are reparenting, but I guess there was a time when that wasn't standard.
For those who don't know, reparenting means that when an app creates a new top-level window, the window manager creates a frame window and reparents that app's top-level window to be inside the frame window. The window manager owns the frame and uses it to allow the user to move and resize the app's window, which otherwise wouldn't have controls to do so (at least not in a consistent fashion).
Note that Windows and Mac OS X (that I can tell) do not follow this pattern. The window frame is owned by the app, but drawn and managed by the client-side libraries. In Windows, an app can have its own custom frame by responding to the WM_NCPAINT message instead of calling DefWindowProc. It also has to handle the WM_NCHITTEST, etc. messages. The downside is (although I see this mostly with Mac) that if an app locks up, its window frame becomes non-responsive, which can be rather frustrating sometimes. In MS Windows, the window manager takes control of the frame after a certain period of non-responsiveness, allowing the user to try to terminate the application with the X button, or move or minimize the window.




