aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoroga2009-12-07 22:21:59 +0000
committeroga2009-12-07 22:21:59 +0000
commitad1677271ac08bca24c9d41bcbe555353687eb58 (patch)
tree242b773b3d4e4fdbcb70e4725da3b398ab7de847
parente4020287e35b326e95d08d540f8c14b34d9c32be (diff)
downloadcwm-ad1677271ac08bca24c9d41bcbe555353687eb58.tar.gz
Implement _NET_ACTIVE_WINDOW. for now just the informational hint is
supported, the client message to change this will be supported when all informational hints are working. ok okan@
-rw-r--r--calmwm.h5
-rw-r--r--client.c23
-rw-r--r--xutil.c3
3 files changed, 25 insertions, 6 deletions
diff --git a/calmwm.h b/calmwm.h
index 4f3fcf9..b533103 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: calmwm.h,v 1.99 2009/12/07 21:20:52 okan Exp $
+ * $Id: calmwm.h,v 1.100 2009/12/07 22:21:59 oga Exp $
*/
#ifndef _CALMWM_H_
@@ -526,7 +526,8 @@ extern struct conf Conf;
#define _NET_SUPPORTED cwm_atoms[7]
#define _NET_SUPPORTING_WM_CHECK cwm_atoms[8]
#define _NET_WM_NAME cwm_atoms[9]
-#define CWM_NO_ATOMS 10
+#define _NET_ACTIVE_WINDOW cwm_atoms[10]
+#define CWM_NO_ATOMS 11
#define CWM_NETWM_START 7
extern Atom cwm_atoms[CWM_NO_ATOMS];
diff --git a/client.c b/client.c
index 8531b9e..16f5fd5 100644
--- a/client.c
+++ b/client.c
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: client.c,v 1.66 2009/11/28 17:52:12 tobias Exp $
+ * $Id: client.c,v 1.67 2009/12/07 22:21:59 oga Exp $
*/
#include "headers.h"
@@ -23,6 +23,7 @@
static struct client_ctx *client_mrunext(struct client_ctx *);
static struct client_ctx *client_mruprev(struct client_ctx *);
+static void client_none(struct screen_ctx *);
static void client_placecalc(struct client_ctx *);
static void client_update(struct client_ctx *);
static void client_gethints(struct client_ctx *);
@@ -142,7 +143,7 @@ client_delete(struct client_ctx *cc)
TAILQ_REMOVE(&Clientq, cc, entry);
if (_curcc == cc)
- _curcc = NULL;
+ client_none(sc);
XFree(cc->size);
@@ -202,12 +203,28 @@ client_setactive(struct client_ctx *cc, int fg)
if (fg && _curcc != cc) {
client_setactive(NULL, 0);
_curcc = cc;
+ XChangeProperty(X_Dpy, sc->rootwin, _NET_ACTIVE_WINDOW,
+ XA_WINDOW, 32, PropModeReplace,
+ (unsigned char *)&cc->win, 1);
}
cc->active = fg;
client_draw_border(cc);
}
+/*
+ * set when there is no active client
+ */
+static void
+client_none(struct screen_ctx *sc)
+{
+ Window none = None;
+
+ XChangeProperty(X_Dpy, sc->rootwin, _NET_ACTIVE_WINDOW,
+ XA_WINDOW, 32, PropModeReplace, (unsigned char *)&none, 1);
+ _curcc = NULL;
+}
+
struct client_ctx *
client_current(void)
{
@@ -399,7 +416,7 @@ client_hide(struct client_ctx *cc)
xu_setstate(cc, IconicState);
if (cc == _curcc)
- _curcc = NULL;
+ client_none(cc->sc);
}
void
diff --git a/xutil.c b/xutil.c
index 5bea7c3..a2ba9b9 100644
--- a/xutil.c
+++ b/xutil.c
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: xutil.c,v 1.18 2009/12/07 21:20:52 okan Exp $
+ * $Id: xutil.c,v 1.19 2009/12/07 22:21:59 oga Exp $
*/
#include "headers.h"
@@ -181,6 +181,7 @@ char *atoms[CWM_NO_ATOMS] = {
"_NET_SUPPORTED",
"_NET_SUPPORTING_WM_CHECK",
"_NET_WM_NAME",
+ "_NET_ACTIVE_WINDOW",
};
void