From a041d9898e6d699bd8c0c25482ec574feb03c547 Mon Sep 17 00:00:00 2001 From: "John Ankarstr\\xf6m" Date: Sat, 29 May 2021 12:54:47 +0200 Subject: First commit This is the original state of the released tarball for JWM 1.8, which will serve as my starting point for further modifications. --- src/hint.h | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 src/hint.h (limited to 'src/hint.h') diff --git a/src/hint.h b/src/hint.h new file mode 100644 index 0000000..7eae815 --- /dev/null +++ b/src/hint.h @@ -0,0 +1,173 @@ +/** + * @file hint.h + * @author Joe Wingbermuehle + * @date 2004-2006 + * + * @brief Header for reading and writing X properties. + * + */ + +#ifndef HINT_H +#define HINT_H + +struct ClientNode; + +typedef enum { + + /* Misc */ + ATOM_COMPOUND_TEXT, + ATOM_UTF8_STRING, + + /* Standard atoms */ + ATOM_WM_STATE, + ATOM_WM_PROTOCOLS, + ATOM_WM_DELETE_WINDOW, + ATOM_WM_TAKE_FOCUS, + ATOM_WM_LOCALE_NAME, + ATOM_WM_CHANGE_STATE, + ATOM_WM_COLORMAP_WINDOWS, + + /* WM Spec atoms */ + ATOM_NET_SUPPORTED, + ATOM_NET_NUMBER_OF_DESKTOPS, + ATOM_NET_DESKTOP_NAMES, + ATOM_NET_DESKTOP_GEOMETRY, + ATOM_NET_DESKTOP_VIEWPORT, + ATOM_NET_CURRENT_DESKTOP, + ATOM_NET_ACTIVE_WINDOW, + ATOM_NET_WORKAREA, + ATOM_NET_SUPPORTING_WM_CHECK, + ATOM_NET_FRAME_EXTENTS, + ATOM_NET_WM_DESKTOP, + + ATOM_NET_WM_STATE, + ATOM_NET_WM_STATE_STICKY, + ATOM_NET_WM_STATE_MAXIMIZED_VERT, + ATOM_NET_WM_STATE_MAXIMIZED_HORZ, + ATOM_NET_WM_STATE_SHADED, + ATOM_NET_WM_STATE_FULLSCREEN, + + ATOM_NET_WM_ALLOWED_ACTIONS, + ATOM_NET_WM_ACTION_MOVE, + ATOM_NET_WM_ACTION_RESIZE, + ATOM_NET_WM_ACTION_MINIMIZE, + ATOM_NET_WM_ACTION_SHADE, + ATOM_NET_WM_ACTION_STICK, + ATOM_NET_WM_ACTION_MAXIMIZE_HORZ, + ATOM_NET_WM_ACTION_MAXIMIZE_VERT, + ATOM_NET_WM_ACTION_CHANGE_DESKTOP, + ATOM_NET_WM_ACTION_CLOSE, + + ATOM_NET_CLOSE_WINDOW, + ATOM_NET_MOVERESIZE_WINDOW, + + ATOM_NET_WM_NAME, + ATOM_NET_WM_ICON, + ATOM_NET_WM_WINDOW_TYPE, + ATOM_NET_WM_WINDOW_TYPE_DESKTOP, + ATOM_NET_WM_WINDOW_TYPE_DOCK, + + ATOM_NET_CLIENT_LIST, + ATOM_NET_CLIENT_LIST_STACKING, + + ATOM_NET_WM_STRUT_PARTIAL, + ATOM_NET_WM_STRUT, + + ATOM_NET_SYSTEM_TRAY_OPCODE, + + /* GNOME atoms */ + ATOM_WIN_LAYER, + ATOM_WIN_STATE, + ATOM_WIN_WORKSPACE_COUNT, + ATOM_WIN_WORKSPACE, + ATOM_WIN_SUPPORTING_WM_CHECK, + ATOM_WIN_PROTOCOLS, + + /* MWM atoms */ + ATOM_MOTIF_WM_HINTS, + + /* JWM-specific atoms. */ + ATOM_JWM_RESTART, + ATOM_JWM_EXIT, + + ATOM_COUNT +} AtomType; + +#define FIRST_NET_ATOM ATOM_NET_SUPPORTED +#define LAST_NET_ATOM ATOM_NET_SYSTEM_TRAY_OPCODE + +#define FIRST_WIN_ATOM ATOM_WIN_LAYER +#define LAST_WIN_ATOM ATOM_WIN_PROTOCOLS + +#define FIRST_MWM_ATOM ATOM_MOTIF_WM_HINTS +#define LAST_MWM_ATOM ATOM_MOTIF_WM_HINTS + +#define WIN_STATE_STICKY (1UL << 0) +#define WIN_STATE_MINIMIZED (1UL << 1) +#define WIN_STATE_MAXIMIZED_VERT (1UL << 2) +#define WIN_STATE_MAXIMIZED_HORIZ (1UL << 3) +#define WIN_STATE_HIDDEN (1UL << 4) +#define WIN_STATE_SHADED (1UL << 5) +#define WIN_STATE_HIDE_WORKSPACE (1UL << 6) +#define WIN_STATE_HIDE_TRANSIENT (1UL << 7) +#define WIN_STATE_FIXED_POSITION (1UL << 8) +#define WIN_STATE_ARRANGE_IGNORE (1UL << 9) + +#define WIN_HINT_SKIP_FOCUS (1UL << 0) +#define WIN_HINT_SKIP_WINLIST (1UL << 1) +#define WIN_HINT_SKIP_TASKBAR (1UL << 2) +#define WIN_HINT_GROUP_TRANSIENT (1UL << 3) +#define WIN_HINT_FOCUS_ON_CLICK (1UL << 4) + +typedef enum { + LAYER_BOTTOM = 0, + LAYER_NORMAL = 4, + DEFAULT_TRAY_LAYER = 8, + LAYER_TOP = 12, + LAYER_COUNT = 13 +} WinLayerType; + +typedef struct ClientState { + unsigned int status; + unsigned int border; + unsigned int layer; + unsigned int desktop; +} ClientState; + +typedef enum { + PROT_NONE = 0, + PROT_DELETE = 1, + PROT_TAKE_FOCUS = 2 +} ClientProtocolType; + +extern Atom atoms[ATOM_COUNT]; + +void InitializeHints(); +void StartupHints(); +void ShutdownHints(); +void DestroyHints(); + +void ReadCurrentDesktop(); + +void ReadClientProtocols(struct ClientNode *np); + +void ReadWMName(struct ClientNode *np); +void ReadWMClass(struct ClientNode *np); +void ReadWMNormalHints(struct ClientNode *np); +ClientProtocolType ReadWMProtocols(Window w); +void ReadWMColormaps(struct ClientNode *np); + +void ReadWinLayer(struct ClientNode *np); + +ClientState ReadWindowState(Window win); + +void WriteState(struct ClientNode *np); + +int GetCardinalAtom(Window window, AtomType atom, unsigned long *value); +int GetWindowAtom(Window window, AtomType atom, Window *value); + +void SetCardinalAtom(Window window, AtomType atom, unsigned long value); +void SetWindowAtom(Window window, AtomType atom, unsigned long value); + +#endif + -- cgit v1.2.3