From 9f9adf7e2eb033a5ce7fd2c21721bc27dfb9705d Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Tue, 16 Jun 2026 23:33:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(backend):=20=E5=86=99=E5=85=A5=20=5FNET=5F?= =?UTF-8?q?SUPPORTED=20=E5=B1=9E=E6=80=A7=E5=A3=B0=E6=98=8E=20EWMH=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/x11/backend.c | 15 +++++++++++++++ src/backend/x11/internal.h | 30 +++++++++++++++++------------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/backend/x11/backend.c b/src/backend/x11/backend.c index 20d8205..b8b9247 100644 --- a/src/backend/x11/backend.c +++ b/src/backend/x11/backend.c @@ -60,6 +60,21 @@ static void atoms_init(backend_t *backend) { *atom->atom = reply->atom; p_delete(&reply); } + +#define EWMH_ITEM(name) atoms->name, + xcb_atom_t ewmh_supported_atoms[] = {EWMH_ATOMS(EWMH_ITEM)}; +#undef EWMH_ITEM + auto root = backend->screen->root; + xcb_change_property( + conn, + XCB_PROP_MODE_REPLACE, + root, + atoms->_NET_SUPPORTED, + XCB_ATOM_ATOM, + 32, + countof(ewmh_supported_atoms), + ewmh_supported_atoms + ); } static void create_wm_check_window(backend_t *backend) { diff --git a/src/backend/x11/internal.h b/src/backend/x11/internal.h index 7a19ca7..524c89c 100644 --- a/src/backend/x11/internal.h +++ b/src/backend/x11/internal.h @@ -9,21 +9,9 @@ #include "base/window_list.h" #include "core/event.h" -#define ATOM_LIST(X) \ - X(COMPOUND_TEXT) \ - X(UTF8_STRING) \ - \ - X(WM_WINDOW_ROLE) \ - X(WM_NAME) \ - X(WM_CHANGE_STATE) \ +#define EWMH_ATOMS(X) \ X(_NET_WM_NAME) \ - \ - X(WM_PROTOCOLS) \ - X(WM_TAKE_FOCUS) \ - X(WM_DELETE_WINDOW) \ X(_NET_ACTIVE_WINDOW) \ - \ - X(_NET_SUPPORTING_WM_CHECK) \ X(_NET_WM_PID) \ \ X(_NET_CLIENT_LIST) \ @@ -56,6 +44,22 @@ X(_NET_WM_WINDOW_TYPE_DND) \ X(_NET_WM_WINDOW_TYPE_NOTIFICATION) +#define ATOM_LIST(X) \ + X(COMPOUND_TEXT) \ + X(UTF8_STRING) \ + \ + X(WM_WINDOW_ROLE) \ + X(WM_NAME) \ + X(WM_CHANGE_STATE) \ + \ + X(WM_PROTOCOLS) \ + X(WM_TAKE_FOCUS) \ + X(WM_DELETE_WINDOW) \ + \ + X(_NET_SUPPORTING_WM_CHECK) \ + X(_NET_SUPPORTED) \ + EWMH_ATOMS(X) + typedef struct atoms_t { #define DECLARATION_ATOM(name) xcb_atom_t name; ATOM_LIST(DECLARATION_ATOM);