diff -r b49d35af54a9 svkbd.c --- a/svkbd.c Thu Mar 24 21:02:10 2011 +0100 +++ b/svkbd.c Thu Mar 24 23:34:10 2011 +0100 @@ -20,6 +20,7 @@ /* enums */ enum { ColFG, ColBG, ColLast }; +enum { NetWMWindowType, NetLast }; /* typedefs */ typedef unsigned int uint; @@ -83,6 +84,7 @@ [Expose] = expose, [LeaveNotify] = leavenotify, }; +static Atom netatom[NetLast]; static Display *dpy; static DC dc; static Window root, win; @@ -309,14 +311,21 @@ void setup(void) { int i; + XSetWindowAttributes wa; + XTextProperty str; + XClassHint *ch; XWMHints *wmh; - XSetWindowAttributes wa; + char *name = "svkbd"; + char *wintype = "_NET_WM_WINDOW_TYPE_TOOLBAR"; /* init screen */ screen = DefaultScreen(dpy); root = RootWindow(dpy, screen); initfont(font); + /* init atoms */ + netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); + /* init appearance */ if (!ww) ww = DisplayWidth(dpy, screen); @@ -324,7 +333,7 @@ ww = DisplayWidth(dpy, screen) / (ww * -1); if (wh < 0) - wh = DisplayHeight(dpy, screen) / (wh * -1); + wh = DisplayHeight(dpy, screen) / (wh * -1); if (wy < 0) wy = DisplayHeight(dpy, screen) + wy; @@ -351,11 +360,27 @@ CWOverrideRedirect | CWBorderPixel | CWBackingPixel, &wa); XSelectInput(dpy, win, StructureNotifyMask|ButtonReleaseMask| ButtonPressMask|ExposureMask|LeaveWindowMask); + wmh = XAllocWMHints(); wmh->input = False; wmh->flags = InputHint; XSetWMHints(dpy, win, wmh); + XStringListToTextProperty(&name, 1, &str); + ch = XAllocClassHint(); + ch->res_class = name; + ch->res_name = name; + + XSetWMProperties(dpy, win, &str, &str, NULL, 0, NULL, wmh, + ch); + + XFree(ch); XFree(wmh); + XFree(str.value); + + XStringListToTextProperty(&wintype, 1, &str); + XSetTextProperty(dpy, win, &str, netatom[NetWMWindowType]); + XFree(str.value); + XMapRaised(dpy, win); updatekeys(); drawkeyboard();