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:
M | xhints.c | | | 2 | +- |
M | xutil.c | | | 71 | +++++++---------------------------------------------------------------- |
M | xutil.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);