diff -ur xfwm4-4.10.1-old/config.log xfwm4-4.10.1/config.log diff -ur xfwm4-4.10.1-old/src/client.h xfwm4-4.10.1/src/client.h --- xfwm4-4.10.1-old/src/client.h 2013-05-05 11:58:42.000000000 -0400 +++ xfwm4-4.10.1/src/client.h 2014-08-02 22:04:27.596707929 -0400 @@ -161,6 +161,7 @@ #define CLIENT_FLAG_DEMANDS_ATTENTION (1L<<17) #define CLIENT_FLAG_HAS_SHAPE (1L<<18) #define CLIENT_FLAG_FULLSCREN_MONITORS (1L<<19) +#define CLIENT_FLAG_FOCUSED (1L<<20) #define WM_FLAG_DELETE (1L<<0) #define WM_FLAG_INPUT (1L<<1) diff -ur xfwm4-4.10.1-old/src/display.c xfwm4-4.10.1/src/display.c --- xfwm4-4.10.1-old/src/display.c 2013-05-05 11:58:42.000000000 -0400 +++ xfwm4-4.10.1/src/display.c 2014-08-02 21:58:00.970039255 -0400 @@ -126,6 +126,7 @@ "_NET_WM_STATE_ABOVE", "_NET_WM_STATE_BELOW", "_NET_WM_STATE_DEMANDS_ATTENTION", + "_NET_WM_STATE_FOCUSED", "_NET_WM_STATE_FULLSCREEN", "_NET_WM_STATE_HIDDEN", "_NET_WM_STATE_MAXIMIZED_HORZ", diff -ur xfwm4-4.10.1-old/src/display.h xfwm4-4.10.1/src/display.h --- xfwm4-4.10.1-old/src/display.h 2013-05-05 11:58:42.000000000 -0400 +++ xfwm4-4.10.1/src/display.h 2014-08-02 21:57:43.626705829 -0400 @@ -221,6 +221,7 @@ NET_WM_STATE_ABOVE, NET_WM_STATE_BELOW, NET_WM_STATE_DEMANDS_ATTENTION, + NET_WM_STATE_FOCUSED, NET_WM_STATE_FULLSCREEN, NET_WM_STATE_HIDDEN, NET_WM_STATE_MAXIMIZED_HORZ, diff -ur xfwm4-4.10.1-old/src/focus.c xfwm4-4.10.1/src/focus.c --- xfwm4-4.10.1-old/src/focus.c 2013-05-05 11:58:42.000000000 -0400 +++ xfwm4-4.10.1/src/focus.c 2014-08-02 22:09:50.010042939 -0400 @@ -462,6 +462,8 @@ if (previous) { + FLAG_UNSET (previous->flags, CLIENT_FLAG_FOCUSED); + clientSetNetState (previous); frameQueueDraw (previous, FALSE); if (previous->screen_info != screen_info) { @@ -497,6 +499,8 @@ client_focus = c; if (c2) { + FLAG_UNSET (c2->flags, CLIENT_FLAG_FOCUSED); + clientSetNetState (c2); clientAdjustFullscreenLayer (c2, FALSE); frameQueueDraw (c2, FALSE); clientUpdateOpacity (c2); @@ -513,8 +517,9 @@ { TRACE ("Un-setting WM_STATE_DEMANDS_ATTENTION flag on \"%s\" (0x%lx)", c->name, c->window); FLAG_UNSET (c->flags, CLIENT_FLAG_DEMANDS_ATTENTION); - clientSetNetState (c); } + FLAG_SET (c->flags, CLIENT_FLAG_FOCUSED); + clientSetNetState (c); clientAdjustFullscreenLayer (c, TRUE); frameQueueDraw (c, FALSE); clientUpdateOpacity (c); diff -ur xfwm4-4.10.1-old/src/hints.c xfwm4-4.10.1/src/hints.c --- xfwm4-4.10.1-old/src/hints.c 2013-05-05 11:58:42.000000000 -0400 +++ xfwm4-4.10.1/src/hints.c 2014-08-02 22:07:37.220042248 -0400 @@ -389,6 +389,7 @@ atoms[i++] = display_info->atoms[NET_WM_STATE_ABOVE]; atoms[i++] = display_info->atoms[NET_WM_STATE_BELOW]; atoms[i++] = display_info->atoms[NET_WM_STATE_DEMANDS_ATTENTION]; + atoms[i++] = display_info->atoms[NET_WM_STATE_FOCUSED]; atoms[i++] = display_info->atoms[NET_WM_STATE_FULLSCREEN]; atoms[i++] = display_info->atoms[NET_WM_STATE_HIDDEN]; atoms[i++] = display_info->atoms[NET_WM_STATE_MAXIMIZED_HORZ]; diff -ur xfwm4-4.10.1-old/src/netwm.c xfwm4-4.10.1/src/netwm.c --- xfwm4-4.10.1-old/src/netwm.c 2013-05-05 11:58:42.000000000 -0400 +++ xfwm4-4.10.1/src/netwm.c 2014-08-02 22:06:00.030041743 -0400 @@ -130,6 +130,11 @@ TRACE ("clientSetNetState : demands_attention"); data[i++] = display_info->atoms[NET_WM_STATE_DEMANDS_ATTENTION]; } + if (FLAG_TEST (c->flags, CLIENT_FLAG_FOCUSED)) + { + TRACE ("clientSetNetState : focused"); + data[i++] = display_info->atoms[NET_WM_STATE_FOCUSED]; + } XChangeProperty (display_info->dpy, c->window, display_info->atoms[NET_WM_STATE], XA_ATOM, 32, PropModeReplace, (unsigned char *) data, i);