From 663db3412f53e421629167261fa6aac23c7907dd Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Wed, 22 Apr 2026 19:22:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(backend/X11):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BB=8E=20=5FNET=5FWM=5FSTATE=20=E4=B8=AD=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=20urgent=20=E5=B1=9E=E6=80=A7=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/x11/event.c | 16 ++++++++++++++++ src/backend/x11/internal.h | 2 ++ 2 files changed, 18 insertions(+) diff --git a/src/backend/x11/event.c b/src/backend/x11/event.c index 91f1c7a..340c789 100644 --- a/src/backend/x11/event.c +++ b/src/backend/x11/event.c @@ -1,5 +1,6 @@ #include "core/event.h" +#include #include #include #include @@ -71,6 +72,18 @@ static window_geometry_mode_t geometry_mode_from_states( return ZDWM_GEOMETRY_NORMAL; } +static bool urgent_from_states( + const atoms_t *atoms, + const xcb_atom_t *state_atoms, + uint32_t state_count +) { + for (uint32_t i = 0; i < state_count; ++i) { + if (state_atoms[i] == atoms->_NET_WM_STATE_DEMANDS_ATTENTION) return true; + } + + return false; +} + static bool handle_map_request( backend_t *backend, event_t *event, @@ -127,6 +140,9 @@ static bool handle_map_request( state_count, &ev->props.state_count ); + if (!ev->urgent) { + ev->urgent = urgent_from_states(atoms, state_atoms, state_count); + } } p_delete(&state_atoms); diff --git a/src/backend/x11/internal.h b/src/backend/x11/internal.h index c67dcda..52067aa 100644 --- a/src/backend/x11/internal.h +++ b/src/backend/x11/internal.h @@ -30,6 +30,8 @@ X(_NET_WM_STATE_MAXIMIZED_VERT) \ X(_NET_WM_STATE_MAXIMIZED_HORZ) \ \ + X(_NET_WM_STATE_DEMANDS_ATTENTION) \ + \ X(_NET_WM_WINDOW_TYPE) \ X(_NET_WM_WINDOW_TYPE_NORMAL) \ X(_NET_WM_WINDOW_TYPE_DESKTOP) \