shod

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 999824257ffd9b920b172c9fe9ee16b019efba2b
parent d3733666d8d291bf0651354aa859f57179157cc9
Author: Lucas de Sena <lucas@seninha.org>
Date:   Sat, 15 Jul 2023 14:00:22 -0300

use X-macros for enumerating and naming atoms

Diffstat:
Mxhints.c | 2+-
Mxutil.c | 71+++++++----------------------------------------------------------------
Mxutil.h | 128+++++++++++++++++++++++++++++++++++++------------------------------------------
3 files changed, 68 insertions(+), 133 deletions(-)

diff --git a/xhints.c b/xhints.c @@ -62,7 +62,7 @@ ewmhinit(const char *wmname) XChangeProperty(dpy, root, atoms[_NET_SUPPORTING_WM_CHECK], XA_WINDOW, 32, PropModeReplace, (unsigned char *)&wm.checkwin, 1); /* set properties that the window manager supports */ - XChangeProperty(dpy, root, atoms[_NET_SUPPORTED], XA_ATOM, 32, PropModeReplace, (unsigned char *)atoms, ATOM_LAST); + XChangeProperty(dpy, root, atoms[_NET_SUPPORTED], XA_ATOM, 32, PropModeReplace, (unsigned char *)atoms, NATOMS); XDeleteProperty(dpy, root, atoms[_NET_CLIENT_LIST]); /* set number of desktops */ diff --git a/xutil.c b/xutil.c @@ -6,69 +6,13 @@ #include <X11/extensions/Xrender.h> -static char *atomnames[ATOM_LAST] = { - [UTF8_STRING] = "UTF8_STRING", - [WM_DELETE_WINDOW] = "WM_DELETE_WINDOW", - [WM_WINDOW_ROLE] = "WM_WINDOW_ROLE", - [WM_TAKE_FOCUS] = "WM_TAKE_FOCUS", - [WM_PROTOCOLS] = "WM_PROTOCOLS", - [WM_STATE] = "WM_STATE", - [WM_CLIENT_LEADER] = "WM_CLIENT_LEADER", - [_NET_SUPPORTED] = "_NET_SUPPORTED", - [_NET_DESKTOP_NAMES] = "_NET_DESKTOP_NAMES", - [_NET_CLIENT_LIST] = "_NET_CLIENT_LIST", - [_NET_CLIENT_LIST_STACKING] = "_NET_CLIENT_LIST_STACKING", - [_NET_NUMBER_OF_DESKTOPS] = "_NET_NUMBER_OF_DESKTOPS", - [_NET_CURRENT_DESKTOP] = "_NET_CURRENT_DESKTOP", - [_NET_ACTIVE_WINDOW] = "_NET_ACTIVE_WINDOW", - [_NET_WM_DESKTOP] = "_NET_WM_DESKTOP", - [_NET_SUPPORTING_WM_CHECK] = "_NET_SUPPORTING_WM_CHECK", - [_NET_SHOWING_DESKTOP] = "_NET_SHOWING_DESKTOP", - [_NET_CLOSE_WINDOW] = "_NET_CLOSE_WINDOW", - [_NET_MOVERESIZE_WINDOW] = "_NET_MOVERESIZE_WINDOW", - [_NET_WM_MOVERESIZE] = "_NET_WM_MOVERESIZE", - [_NET_WM_NAME] = "_NET_WM_NAME", - [_NET_WM_WINDOW_TYPE] = "_NET_WM_WINDOW_TYPE", - [_NET_WM_WINDOW_TYPE_DESKTOP] = "_NET_WM_WINDOW_TYPE_DESKTOP", - [_NET_WM_WINDOW_TYPE_MENU] = "_NET_WM_WINDOW_TYPE_MENU", - [_NET_WM_WINDOW_TYPE_TOOLBAR] = "_NET_WM_WINDOW_TYPE_TOOLBAR", - [_NET_WM_WINDOW_TYPE_DOCK] = "_NET_WM_WINDOW_TYPE_DOCK", - [_NET_WM_WINDOW_TYPE_DIALOG] = "_NET_WM_WINDOW_TYPE_DIALOG", - [_NET_WM_WINDOW_TYPE_UTILITY] = "_NET_WM_WINDOW_TYPE_UTILITY", - [_NET_WM_WINDOW_TYPE_SPLASH] = "_NET_WM_WINDOW_TYPE_SPLASH", - [_NET_WM_WINDOW_TYPE_PROMPT] = "_NET_WM_WINDOW_TYPE_PROMPT", - [_NET_WM_WINDOW_TYPE_NOTIFICATION] = "_NET_WM_WINDOW_TYPE_NOTIFICATION", - [_NET_WM_STATE] = "_NET_WM_STATE", - [_NET_WM_STATE_STICKY] = "_NET_WM_STATE_STICKY", - [_NET_WM_STATE_MAXIMIZED_VERT] = "_NET_WM_STATE_MAXIMIZED_VERT", - [_NET_WM_STATE_MAXIMIZED_HORZ] = "_NET_WM_STATE_MAXIMIZED_HORZ", - [_NET_WM_STATE_SHADED] = "_NET_WM_STATE_SHADED", - [_NET_WM_STATE_HIDDEN] = "_NET_WM_STATE_HIDDEN", - [_NET_WM_STATE_FULLSCREEN] = "_NET_WM_STATE_FULLSCREEN", - [_NET_WM_STATE_ABOVE] = "_NET_WM_STATE_ABOVE", - [_NET_WM_STATE_BELOW] = "_NET_WM_STATE_BELOW", - [_NET_WM_STATE_FOCUSED] = "_NET_WM_STATE_FOCUSED", - [_NET_WM_STATE_DEMANDS_ATTENTION] = "_NET_WM_STATE_DEMANDS_ATTENTION", - [_NET_WM_STRUT] = "_NET_WM_STRUT", - [_NET_WM_STRUT_PARTIAL] = "_NET_WM_STRUT_PARTIAL", - [_NET_REQUEST_FRAME_EXTENTS] = "_NET_REQUEST_FRAME_EXTENTS", - [_NET_FRAME_EXTENTS] = "_NET_FRAME_EXTENTS", - [_NET_WM_FULL_PLACEMENT] = "_NET_WM_FULL_PLACEMENT", - [_MOTIF_WM_HINTS] = "_MOTIF_WM_HINTS", - [_GNUSTEP_WM_ATTR] = "_GNUSTEP_WM_ATTR", - [_SHOD_CYCLE] = "_SHOD_CYCLE", - [_SHOD_GROUP_TAB] = "_SHOD_GROUP_TAB", - [_SHOD_GROUP_CONTAINER] = "_SHOD_GROUP_CONTAINER", - [_SHOD_CONTAINER_LIST] = "_SHOD_CONTAINER_LIST", -}; - Visual *visual; Colormap colormap; unsigned int depth; XrmDatabase xdb = NULL; Display *dpy; Window root; -Atom atoms[ATOM_LAST]; +Atom atoms[NATOMS]; int screen; int @@ -224,13 +168,12 @@ getatomprop(Window win, Atom prop) void initatoms(void) { - XInternAtoms(dpy, atomnames, ATOM_LAST, False, atoms); -} - -void -initatom(int atomenum) -{ - atoms[atomenum] = XInternAtom(dpy, atomnames[atomenum], False); + static char *atomnames[NATOMS] = { +#define X(atom) [atom] = #atom, + ATOMS +#undef X + }; + XInternAtoms(dpy, atomnames, NATOMS, False, atoms); } void diff --git a/xutil.h b/xutil.h @@ -8,73 +8,66 @@ #include <X11/Xft/Xft.h> /* atom names */ -enum { - /* utf8 */ - UTF8_STRING, +#define ATOMS \ + X(UTF8_STRING) \ + X(WM_DELETE_WINDOW) \ + X(WM_WINDOW_ROLE) \ + X(WM_TAKE_FOCUS) \ + X(WM_PROTOCOLS) \ + X(WM_STATE) \ + X(WM_CLIENT_LEADER) \ + X(_NET_ACTIVE_WINDOW) \ + X(_NET_CLIENT_LIST) \ + X(_NET_CLIENT_LIST_STACKING) \ + X(_NET_CLOSE_WINDOW) \ + X(_NET_CURRENT_DESKTOP) \ + X(_NET_DESKTOP_NAMES) \ + X(_NET_FRAME_EXTENTS) \ + X(_NET_MOVERESIZE_WINDOW) \ + X(_NET_NUMBER_OF_DESKTOPS) \ + X(_NET_REQUEST_FRAME_EXTENTS) \ + X(_NET_SHOWING_DESKTOP) \ + X(_NET_SUPPORTED) \ + X(_NET_SUPPORTING_WM_CHECK) \ + X(_NET_WM_DESKTOP) \ + X(_NET_WM_FULL_PLACEMENT) \ + X(_NET_WM_MOVERESIZE) \ + X(_NET_WM_NAME) \ + X(_NET_WM_STATE) \ + X(_NET_WM_STATE_ABOVE) \ + X(_NET_WM_STATE_BELOW) \ + X(_NET_WM_STATE_DEMANDS_ATTENTION) \ + X(_NET_WM_STATE_FOCUSED) \ + X(_NET_WM_STATE_FULLSCREEN) \ + X(_NET_WM_STATE_HIDDEN) \ + X(_NET_WM_STATE_MAXIMIZED_HORZ) \ + X(_NET_WM_STATE_MAXIMIZED_VERT) \ + X(_NET_WM_STATE_SHADED) \ + X(_NET_WM_STATE_STICKY) \ + X(_NET_WM_STRUT) \ + X(_NET_WM_STRUT_PARTIAL) \ + X(_NET_WM_WINDOW_TYPE) \ + X(_NET_WM_WINDOW_TYPE_DESKTOP) \ + X(_NET_WM_WINDOW_TYPE_DIALOG) \ + X(_NET_WM_WINDOW_TYPE_DOCK) \ + X(_NET_WM_WINDOW_TYPE_MENU) \ + X(_NET_WM_WINDOW_TYPE_NOTIFICATION) \ + X(_NET_WM_WINDOW_TYPE_PROMPT) \ + X(_NET_WM_WINDOW_TYPE_SPLASH) \ + X(_NET_WM_WINDOW_TYPE_TOOLBAR) \ + X(_NET_WM_WINDOW_TYPE_UTILITY) \ + X(_MOTIF_WM_HINTS) \ + X(_GNUSTEP_WM_ATTR) \ + X(_SHOD_CYCLE) \ + X(_SHOD_GROUP_TAB) \ + X(_SHOD_GROUP_CONTAINER) \ + X(_SHOD_CONTAINER_LIST) - /* ICCCM atoms */ - WM_DELETE_WINDOW, - WM_WINDOW_ROLE, - WM_TAKE_FOCUS, - WM_PROTOCOLS, - WM_STATE, - WM_CLIENT_LEADER, - - /* EWMH atoms */ - _NET_ACTIVE_WINDOW, - _NET_CLIENT_LIST, - _NET_CLIENT_LIST_STACKING, - _NET_CLOSE_WINDOW, - _NET_CURRENT_DESKTOP, - _NET_DESKTOP_NAMES, - _NET_FRAME_EXTENTS, - _NET_MOVERESIZE_WINDOW, - _NET_NUMBER_OF_DESKTOPS, - _NET_REQUEST_FRAME_EXTENTS, - _NET_SHOWING_DESKTOP, - _NET_SUPPORTED, - _NET_SUPPORTING_WM_CHECK, - _NET_WM_DESKTOP, - _NET_WM_FULL_PLACEMENT, - _NET_WM_MOVERESIZE, - _NET_WM_NAME, - _NET_WM_STATE, - _NET_WM_STATE_ABOVE, - _NET_WM_STATE_BELOW, - _NET_WM_STATE_DEMANDS_ATTENTION, - _NET_WM_STATE_FOCUSED, - _NET_WM_STATE_FULLSCREEN, - _NET_WM_STATE_HIDDEN, - _NET_WM_STATE_MAXIMIZED_HORZ, - _NET_WM_STATE_MAXIMIZED_VERT, - _NET_WM_STATE_SHADED, - _NET_WM_STATE_STICKY, - _NET_WM_STRUT, - _NET_WM_STRUT_PARTIAL, - _NET_WM_WINDOW_TYPE, - _NET_WM_WINDOW_TYPE_DESKTOP, - _NET_WM_WINDOW_TYPE_DIALOG, - _NET_WM_WINDOW_TYPE_DOCK, - _NET_WM_WINDOW_TYPE_MENU, - _NET_WM_WINDOW_TYPE_NOTIFICATION, - _NET_WM_WINDOW_TYPE_PROMPT, - _NET_WM_WINDOW_TYPE_SPLASH, - _NET_WM_WINDOW_TYPE_TOOLBAR, - _NET_WM_WINDOW_TYPE_UTILITY, - - /* motif atoms */ - _MOTIF_WM_HINTS, - - /* GNUstep atoms */ - _GNUSTEP_WM_ATTR, - - /* shod atoms */ - _SHOD_CYCLE, - _SHOD_GROUP_TAB, - _SHOD_GROUP_CONTAINER, - _SHOD_CONTAINER_LIST, - - ATOM_LAST +enum Atom { +#define X(atom) atom, + ATOMS + NATOMS +#undef X }; extern Visual *visual; @@ -83,7 +76,7 @@ extern unsigned int depth; extern XrmDatabase xdb; extern Display *dpy; extern Window root; -extern Atom atoms[ATOM_LAST]; +extern Atom atoms[NATOMS]; extern int screen; int max(int x, int y); @@ -99,7 +92,6 @@ unsigned long getatomsprop(Window win, Atom prop, Atom **atoms); Window getwinprop(Window win, Atom prop); Atom getatomprop(Window win, Atom prop); void initatoms(void); -void initatom(int atomenum); void xinit(void); void xinitvisual(void); char *getresource(XrmDatabase xdb, XrmClass *class, XrmName *name);