4. decide which way to use run loop (See ALTERNATIVE_RUN_LOOP in openbox.m).

GNUstep window protocol

1. XSizeHints - XSetWMNormalHints() - window
2. XWMHints - XSetWMHints() - APP_ROOT - window
3. MwmHints ("_MOTIF_WM_HINTS") - XChangeProperty(), window
4. XClassHint - XSetClassHint() - APP_ROOT, window
5. - XSetWMName() - APP_ROOT, window
6. - XSetWMIconName() - APP_ROOT, window
7. - XSetCommand() - APP_ROOT
8. - XSetWMClientMachine() - APP_ROOT
9. GNUstepWMAttributes ("_GNUSTEP_WM_ATTR") - XChangeProperty() - APP_ROOT, window
10. ("_NET_WM_PID") - XChangeProperty() - APP_ROOT.
11. ("_NET_WM_ICON") - XChangeProperty() - window
12. - XSetWindowBackground() - window

Bugs

5. For application which cannot save itself (like xterm),
   openbox save the state for them.
   If state is saved before, then application is closed,
   then logout without save state, openbox will still try to save state.
   And because the application is closed, no state is actually saved.
   But session manager still remember these applications are saved
   for the first time and try to open it when login.
   So they will be opened without state from openbox.
4. Session doesn't work because when Azalea starts,
   the environment is not set by GNUstep.sh yet.
3. Use openbox/test/urgent and close window when it is unfocosed.
   OpenBox (and Azalea) will crash.
   It's a memory management problem. Hope to resolve after porting.
2. While change number of desktop without reconfigure,
   it will crash while trying to switch desktop through menu syste.
   No problem to switch via keyboard.
   (This is a bug from openbox. It crashes in [AZScreen -updateDesktopNames]).
1. While changing dock settings in obconf. Azalea can freeze completely.
   It is probably related to the USR2 signal (reconfigure)
   sending to Azalea from obconf.
   And Azalea only updated when mouse is out of obconfig,
   which suggests an issue of run loop from NSApplication with USR2.
   (Fixed by calling AZMainLoop to run once before [NSApp run]. 
    It is a kind of hack.)

