JWM Source Documentation

hint.h
Go to the documentation of this file.
00001 
00010 #ifndef HINT_H
00011 #define HINT_H
00012 
00013 struct ClientNode;
00014 
00016 typedef enum {
00017 
00018    /* Misc */
00019    ATOM_COMPOUND_TEXT,
00020    ATOM_UTF8_STRING,
00021    ATOM_XSETROOT_ID,
00022 
00023    /* Standard atoms */
00024    ATOM_WM_STATE,
00025    ATOM_WM_PROTOCOLS,
00026    ATOM_WM_DELETE_WINDOW,
00027    ATOM_WM_TAKE_FOCUS,
00028    ATOM_WM_LOCALE_NAME,
00029    ATOM_WM_CHANGE_STATE,
00030    ATOM_WM_COLORMAP_WINDOWS,
00031 
00032    /* WM Spec atoms */
00033    ATOM_NET_SUPPORTED,
00034    ATOM_NET_NUMBER_OF_DESKTOPS,
00035    ATOM_NET_DESKTOP_NAMES,
00036    ATOM_NET_DESKTOP_GEOMETRY,
00037    ATOM_NET_DESKTOP_VIEWPORT,
00038    ATOM_NET_CURRENT_DESKTOP,
00039    ATOM_NET_ACTIVE_WINDOW,
00040    ATOM_NET_WORKAREA,
00041    ATOM_NET_SUPPORTING_WM_CHECK,
00042    ATOM_NET_SHOWING_DESKTOP,
00043    ATOM_NET_FRAME_EXTENTS,
00044    ATOM_NET_WM_DESKTOP,
00045 
00046    ATOM_NET_WM_STATE,
00047    ATOM_NET_WM_STATE_STICKY,
00048    ATOM_NET_WM_STATE_MAXIMIZED_VERT,
00049    ATOM_NET_WM_STATE_MAXIMIZED_HORZ,
00050    ATOM_NET_WM_STATE_SHADED,
00051    ATOM_NET_WM_STATE_FULLSCREEN,
00052    ATOM_NET_WM_STATE_HIDDEN,
00053    ATOM_NET_WM_STATE_SKIP_TASKBAR,
00054    ATOM_NET_WM_STATE_BELOW,
00055    ATOM_NET_WM_STATE_ABOVE,
00056 
00057    ATOM_NET_WM_ALLOWED_ACTIONS,
00058    ATOM_NET_WM_ACTION_MOVE,
00059    ATOM_NET_WM_ACTION_RESIZE,
00060    ATOM_NET_WM_ACTION_MINIMIZE,
00061    ATOM_NET_WM_ACTION_SHADE,
00062    ATOM_NET_WM_ACTION_STICK,
00063    ATOM_NET_WM_ACTION_MAXIMIZE_HORZ,
00064    ATOM_NET_WM_ACTION_MAXIMIZE_VERT,
00065    ATOM_NET_WM_ACTION_CHANGE_DESKTOP,
00066    ATOM_NET_WM_ACTION_CLOSE,
00067    ATOM_NET_WM_ACTION_BELOW,
00068    ATOM_NET_WM_ACTION_ABOVE,
00069 
00070    ATOM_NET_CLOSE_WINDOW,
00071    ATOM_NET_MOVERESIZE_WINDOW,
00072 
00073    ATOM_NET_WM_NAME,
00074    ATOM_NET_WM_ICON,
00075    ATOM_NET_WM_WINDOW_TYPE,
00076    ATOM_NET_WM_WINDOW_TYPE_DESKTOP,
00077    ATOM_NET_WM_WINDOW_TYPE_DOCK,
00078    ATOM_NET_WM_WINDOW_TYPE_SPLASH,
00079    ATOM_NET_WM_WINDOW_TYPE_DIALOG,
00080    ATOM_NET_WM_WINDOW_TYPE_NORMAL,
00081 
00082    ATOM_NET_CLIENT_LIST,
00083    ATOM_NET_CLIENT_LIST_STACKING,
00084 
00085    ATOM_NET_WM_STRUT_PARTIAL,
00086    ATOM_NET_WM_STRUT,
00087 
00088    ATOM_NET_SYSTEM_TRAY_OPCODE,
00089 
00090    ATOM_NET_WM_WINDOW_OPACITY,
00091 
00092    /* MWM atoms */
00093    ATOM_MOTIF_WM_HINTS,
00094 
00095    /* JWM-specific atoms. */
00096    ATOM_JWM_RESTART,
00097    ATOM_JWM_EXIT,
00098    ATOM_JWM_RELOAD,
00099 
00100    ATOM_COUNT
00101 } AtomType;
00102 
00103 #define FIRST_NET_ATOM ATOM_NET_SUPPORTED
00104 #define LAST_NET_ATOM  ATOM_NET_SYSTEM_TRAY_OPCODE
00105 
00106 #define FIRST_MWM_ATOM ATOM_MOTIF_WM_HINTS
00107 #define LAST_MWM_ATOM  ATOM_MOTIF_WM_HINTS
00108 
00110 typedef enum {
00111    LAYER_BOTTOM              = 0,
00112    LAYER_BELOW               = 2,
00113    LAYER_NORMAL              = 4,
00114    LAYER_ABOVE               = 6,
00115    DEFAULT_TRAY_LAYER        = 8,
00116    LAYER_TOP                 = 12,
00117    LAYER_COUNT               = 13
00118 } WinLayerType;
00119 
00121 typedef struct ClientState {
00122    unsigned int status;    
00123    unsigned int border;    
00124    unsigned int layer;     
00125    unsigned int desktop;   
00126    unsigned int opacity;   
00127 } ClientState;
00128 
00130 typedef enum {
00131    PROT_NONE       = 0,
00132    PROT_DELETE     = 1,
00133    PROT_TAKE_FOCUS = 2
00134 } ClientProtocolType;
00135 
00136 extern Atom atoms[ATOM_COUNT];
00137 
00138 void InitializeHints();
00139 void StartupHints();
00140 void ShutdownHints();
00141 void DestroyHints();
00142 
00144 void ReadCurrentDesktop();
00145 
00149 void ReadClientProtocols(struct ClientNode *np);
00150 
00154 void ReadWMName(struct ClientNode *np);
00155 
00159 void ReadWMClass(struct ClientNode *np);
00160 
00164 void ReadWMNormalHints(struct ClientNode *np);
00165 
00170 ClientProtocolType ReadWMProtocols(Window w);
00171 
00175 void ReadWMColormaps(struct ClientNode *np);
00176 
00180 void ReadWinLayer(struct ClientNode *np);
00181 
00186 ClientState ReadWindowState(Window win);
00187 
00191 void WriteState(struct ClientNode *np);
00192 
00199 int GetCardinalAtom(Window window, AtomType atom, unsigned long *value);
00200 
00207 int GetWindowAtom(Window window, AtomType atom, Window *value);
00208 
00214 void SetCardinalAtom(Window window, AtomType atom, unsigned long value);
00215 
00221 void SetWindowAtom(Window window, AtomType atom, unsigned long value);
00222 
00228 void SetPixmapAtom(Window window, AtomType atom, Pixmap value);
00229 
00230 #endif /* HINT_H */
00231