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) \