From 80117db6c4f39af1cff247de5a3eb19e2f07c21b Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Wed, 2 May 2007 23:03:43 +0000 Subject: [PATCH] turn on demands_attention when urgent gets set, and turn it off when urgent is removed, for those apps that think it is 1917 or something --- openbox/client.c | 21 ++++++++++++++++----- openbox/client.h | 3 +++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/openbox/client.c b/openbox/client.c index 5e1a7851..27470d34 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1622,6 +1622,8 @@ void client_update_wmhints(ObClient *self) self->can_focus = TRUE; if ((hints = XGetWMHints(ob_display, self->window)) != NULL) { + gboolean ur; + if (hints->flags & InputHint) self->can_focus = hints->input; @@ -1631,6 +1633,13 @@ void client_update_wmhints(ObClient *self) if (hints->flags & StateHint) self->iconic = hints->initial_state == IconicState; + ur = self->urgent; + self->urgent = (hints->flags & XUrgencyHint); + if (self->urgent && !ur) + client_hilite(self, TRUE); + else if (!self->urgent && ur && self->demands_attention) + client_hilite(self, FALSE); + if (!(hints->flags & WindowGroupHint)) hints->window_group = None; @@ -2775,11 +2784,13 @@ void client_hilite(ObClient *self, gboolean hilite) /* don't allow focused windows to hilite */ self->demands_attention = hilite && !client_focused(self); - if (self->demands_attention) - frame_flash_start(self->frame); - else - frame_flash_stop(self->frame); - client_change_state(self); + if (self->frame != NULL) { /* if we're mapping, just set the state */ + if (self->demands_attention) + frame_flash_start(self->frame); + else + frame_flash_stop(self->frame); + client_change_state(self); + } } void client_set_desktop_recursive(ObClient *self, diff --git a/openbox/client.h b/openbox/client.h index 5847c67f..f75d155c 100644 --- a/openbox/client.h +++ b/openbox/client.h @@ -258,6 +258,9 @@ struct _ObClient /*! Demands attention flag */ gboolean demands_attention; + /*! The urgent flag */ + gboolean urgent; + /*! The layer in which the window will be stacked, windows in lower layers are always below windows in higher layers. */ ObStackingLayer layer; -- 2.45.2