refactor(backend/x11): 用 X-macro 统一 atom 列表的声明和初始化
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
#include "base/macros.h"
|
||||
#include "base/memory.h"
|
||||
#include "core/types.h"
|
||||
#include "internal.h" /* IWYU pragma: keep */
|
||||
#include "internal.h"
|
||||
|
||||
typedef struct atom_item_t {
|
||||
const char *name;
|
||||
@@ -28,64 +28,9 @@ static void atoms_init(backend_t *backend) {
|
||||
xcb_connection_t *conn = backend->conn;
|
||||
atoms_t *atoms = &backend->atoms;
|
||||
|
||||
atom_item_t atom_list[] = {
|
||||
{"COMPOUND_TEXT", sizeof("COMPOUND_TEXT") - 1, &atoms->COMPOUND_TEXT},
|
||||
{"UTF8_STRING", sizeof("UTF8_STRING") - 1, &atoms->UTF8_STRING},
|
||||
|
||||
{"WM_WINDOW_ROLE", sizeof("WM_WINDOW_ROLE") - 1, &atoms->WM_WINDOW_ROLE},
|
||||
{"WM_NAME", sizeof("WM_NAME") - 1, &atoms->WM_NAME},
|
||||
{"_NET_WM_NAME", sizeof("_NET_WM_NAME") - 1, &atoms->_NET_WM_NAME},
|
||||
|
||||
{"_NET_WM_STATE", sizeof("_NET_WM_STATE") - 1, &atoms->_NET_WM_STATE},
|
||||
{"_NET_WM_STATE_FULLSCREEN", sizeof("_NET_WM_STATE_FULLSCREEN") - 1,
|
||||
&atoms->_NET_WM_STATE_FULLSCREEN},
|
||||
{"_NET_WM_STATE_ABOVE", sizeof("_NET_WM_STATE_ABOVE") - 1,
|
||||
&atoms->_NET_WM_STATE_ABOVE},
|
||||
{"_NET_WM_STATE_STICKY", sizeof("_NET_WM_STATE_STICKY") - 1,
|
||||
&atoms->_NET_WM_STATE_STICKY},
|
||||
{"_NET_WM_STATE_MODAL", sizeof("_NET_WM_STATE_MODAL") - 1,
|
||||
&atoms->_NET_WM_STATE_MODAL},
|
||||
{"_NET_WM_STATE_SKIP_TASKBAR", sizeof("_NET_WM_STATE_SKIP_TASKBAR") - 1,
|
||||
&atoms->_NET_WM_STATE_SKIP_TASKBAR},
|
||||
{"_NET_WM_STATE_MAXIMIZED_VERT", sizeof("_NET_WM_STATE_MAXIMIZED_VERT") - 1,
|
||||
&atoms->_NET_WM_STATE_MAXIMIZED_VERT},
|
||||
{"_NET_WM_STATE_MAXIMIZED_HORZ", sizeof("_NET_WM_STATE_MAXIMIZED_HORZ") - 1,
|
||||
&atoms->_NET_WM_STATE_MAXIMIZED_HORZ},
|
||||
|
||||
{"_NET_WM_WINDOW_TYPE", sizeof("_NET_WM_WINDOW_TYPE") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE},
|
||||
{"_NET_WM_WINDOW_TYPE_NORMAL", sizeof("_NET_WM_WINDOW_TYPE_NORMAL") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_NORMAL},
|
||||
{"_NET_WM_WINDOW_TYPE_DESKTOP", sizeof("_NET_WM_WINDOW_TYPE_DESKTOP") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_DESKTOP},
|
||||
{"_NET_WM_WINDOW_TYPE_DOCK", sizeof("_NET_WM_WINDOW_TYPE_DOCK") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_DOCK},
|
||||
{"_NET_WM_WINDOW_TYPE_TOOLBAR", sizeof("_NET_WM_WINDOW_TYPE_TOOLBAR") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_TOOLBAR},
|
||||
{"_NET_WM_WINDOW_TYPE_DIALOG", sizeof("_NET_WM_WINDOW_TYPE_DIALOG") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_DIALOG},
|
||||
{"_NET_WM_WINDOW_TYPE_UTILITY", sizeof("_NET_WM_WINDOW_TYPE_UTILITY") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_UTILITY},
|
||||
{"_NET_WM_WINDOW_TYPE_SPLASH", sizeof("_NET_WM_WINDOW_TYPE_SPLASH") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_SPLASH},
|
||||
{"_NET_WM_WINDOW_TYPE_MENU", sizeof("_NET_WM_WINDOW_TYPE_MENU") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_MENU},
|
||||
{"_NET_WM_WINDOW_TYPE_DROPDOWN_MENU",
|
||||
sizeof("_NET_WM_WINDOW_TYPE_DROPDOWN_MENU") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_DROPDOWN_MENU},
|
||||
{"_NET_WM_WINDOW_TYPE_POPUP_MENU",
|
||||
sizeof("_NET_WM_WINDOW_TYPE_POPUP_MENU") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_POPUP_MENU},
|
||||
{"_NET_WM_WINDOW_TYPE_TOOLTIP", sizeof("_NET_WM_WINDOW_TYPE_TOOLTIP") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_TOOLTIP},
|
||||
{"_NET_WM_WINDOW_TYPE_COMBO", sizeof("_NET_WM_WINDOW_TYPE_COMBO") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_COMBO},
|
||||
{"_NET_WM_WINDOW_TYPE_DND", sizeof("_NET_WM_WINDOW_TYPE_DND") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_DND},
|
||||
{"_NET_WM_WINDOW_TYPE_NOTIFICATION",
|
||||
sizeof("_NET_WM_WINDOW_TYPE_NOTIFICATION") - 1,
|
||||
&atoms->_NET_WM_WINDOW_TYPE_NOTIFICATION},
|
||||
};
|
||||
#define ATOM_ITEM(name) {#name, sizeof(#name) - 1, &atoms->name},
|
||||
atom_item_t atom_list[] = {ATOM_LIST(ATOM_ITEM)};
|
||||
#undef ATOM_ITEM
|
||||
|
||||
xcb_intern_atom_cookie_t cookies[countof(atom_list)];
|
||||
for (size_t i = 0; i < countof(atom_list); ++i) {
|
||||
|
||||
@@ -3,38 +3,43 @@
|
||||
#include <xcb/xcb.h>
|
||||
#include <xcb/xproto.h>
|
||||
|
||||
#include "core/backend.h" /* IWYU pragma: keep */
|
||||
#define ATOM_LIST(X) \
|
||||
X(COMPOUND_TEXT) \
|
||||
X(UTF8_STRING) \
|
||||
\
|
||||
X(WM_WINDOW_ROLE) \
|
||||
X(WM_NAME) \
|
||||
X(_NET_WM_NAME) \
|
||||
\
|
||||
X(_NET_WM_STATE) \
|
||||
X(_NET_WM_STATE_FULLSCREEN) \
|
||||
X(_NET_WM_STATE_ABOVE) \
|
||||
X(_NET_WM_STATE_STICKY) \
|
||||
X(_NET_WM_STATE_MODAL) \
|
||||
X(_NET_WM_STATE_SKIP_TASKBAR) \
|
||||
X(_NET_WM_STATE_MAXIMIZED_VERT) \
|
||||
X(_NET_WM_STATE_MAXIMIZED_HORZ) \
|
||||
\
|
||||
X(_NET_WM_WINDOW_TYPE) \
|
||||
X(_NET_WM_WINDOW_TYPE_NORMAL) \
|
||||
X(_NET_WM_WINDOW_TYPE_DESKTOP) \
|
||||
X(_NET_WM_WINDOW_TYPE_DOCK) \
|
||||
X(_NET_WM_WINDOW_TYPE_TOOLBAR) \
|
||||
X(_NET_WM_WINDOW_TYPE_DIALOG) \
|
||||
X(_NET_WM_WINDOW_TYPE_UTILITY) \
|
||||
X(_NET_WM_WINDOW_TYPE_SPLASH) \
|
||||
X(_NET_WM_WINDOW_TYPE_MENU) \
|
||||
X(_NET_WM_WINDOW_TYPE_DROPDOWN_MENU) \
|
||||
X(_NET_WM_WINDOW_TYPE_POPUP_MENU) \
|
||||
X(_NET_WM_WINDOW_TYPE_TOOLTIP) \
|
||||
X(_NET_WM_WINDOW_TYPE_COMBO) \
|
||||
X(_NET_WM_WINDOW_TYPE_DND) \
|
||||
X(_NET_WM_WINDOW_TYPE_NOTIFICATION)
|
||||
|
||||
typedef struct atoms_t {
|
||||
xcb_atom_t COMPOUND_TEXT;
|
||||
xcb_atom_t UTF8_STRING;
|
||||
xcb_atom_t WM_WINDOW_ROLE;
|
||||
xcb_atom_t WM_NAME;
|
||||
xcb_atom_t _NET_WM_NAME;
|
||||
xcb_atom_t _NET_WM_STATE;
|
||||
xcb_atom_t _NET_WM_STATE_FULLSCREEN;
|
||||
xcb_atom_t _NET_WM_STATE_ABOVE;
|
||||
xcb_atom_t _NET_WM_STATE_STICKY;
|
||||
xcb_atom_t _NET_WM_STATE_MODAL;
|
||||
xcb_atom_t _NET_WM_STATE_SKIP_TASKBAR;
|
||||
xcb_atom_t _NET_WM_STATE_MAXIMIZED_VERT;
|
||||
xcb_atom_t _NET_WM_STATE_MAXIMIZED_HORZ;
|
||||
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_NORMAL;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_DESKTOP;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_DOCK;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_TOOLBAR;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_DIALOG;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_UTILITY;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_SPLASH;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_MENU;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_DROPDOWN_MENU;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_POPUP_MENU;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_TOOLTIP;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_COMBO;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_DND;
|
||||
xcb_atom_t _NET_WM_WINDOW_TYPE_NOTIFICATION;
|
||||
#define DECLARATION_ATOM(name) xcb_atom_t name;
|
||||
ATOM_LIST(DECLARATION_ATOM);
|
||||
#undef DECLARATION_ATOM
|
||||
} atoms_t;
|
||||
|
||||
struct backend_t {
|
||||
|
||||
Reference in New Issue
Block a user