aboutsummaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorgotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2008-04-03 16:57:01 +0000
committergotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2008-04-03 16:57:01 +0000
commit247c29b4d5b6bec972e7ee3d79e83d436a7905b4 (patch)
tree7e030ccb8677741da90d48fb3f9c79507573d12f /main.c
parentaff8cfef90ff3e839ac1e4fffdd072859b6a96f8 (diff)
downloaddzen-247c29b4d5b6bec972e7ee3d79e83d436a7905b4.tar.gz
dzen-247c29b4d5b6bec972e7ee3d79e83d436a7905b4.zip
added _NET_WM_WINDOW_TYPE_DOCK support
git-svn-id: http://dzen.googlecode.com/svn/trunk@221 f2baff5b-bf2c-0410-a398-912abdc3d8b2
Diffstat (limited to 'main.c')
-rw-r--r--main.c46
1 files changed, 39 insertions, 7 deletions
diff --git a/main.c b/main.c
index bc844ec..a4832fa 100644
--- a/main.c
+++ b/main.c
@@ -290,10 +290,12 @@ queryscreeninfo(Display *dpy, XRectangle *rect, int screen) {
#endif
static void
-set_net_wm_strut_partial_for(Display *dpy, Window w) {
+set_docking_ewmh_info(Display *dpy, Window w) {
unsigned long strut[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
unsigned long strut_s[4] = { 0, 0, 0, 0 };
XWindowAttributes wa;
+ Atom type;
+ unsigned int desktop;
XGetWindowAttributes(dpy, w, &wa);
@@ -334,6 +336,33 @@ set_net_wm_strut_partial_for(Display *dpy, Window w) {
4
);
}
+
+ type = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DOCK", False);
+
+ XChangeProperty(
+ dpy,
+ w,
+ XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False),
+ XInternAtom(dpy, "ATOM", False),
+ 32,
+ PropModeReplace,
+ (unsigned char *)&type,
+ 1
+ );
+
+ desktop = 0xffffffff;
+
+ XChangeProperty(
+ dpy,
+ w,
+ XInternAtom(dpy, "_NET_WM_DESKTOP", False),
+ XInternAtom(dpy, "CARDINAL", False),
+ 32,
+ PropModeReplace,
+ (unsigned char *)&desktop,
+ 1
+ );
+
}
static void
@@ -354,7 +383,7 @@ x_create_gcs(void) {
}
static void
-x_create_windows(void) {
+x_create_windows(int use_ewmh_dock) {
XSetWindowAttributes wa;
Window root;
int i;
@@ -377,7 +406,7 @@ x_create_windows(void) {
x_create_gcs();
/* window attributes */
- wa.override_redirect = 1;
+ wa.override_redirect = (use_ewmh_dock ? 0 : 1);
wa.background_pixmap = ParentRelative;
wa.event_mask = ExposureMask | ButtonReleaseMask | ButtonPressMask | ButtonMotionMask | EnterWindowMask | LeaveWindowMask | KeyPressMask;
@@ -401,7 +430,8 @@ x_create_windows(void) {
XFillRectangle(dzen.dpy, dzen.title_win.drawable, dzen.rgc, 0, 0, dzen.title_win.width, dzen.line_height);
/* set some hints for windowmanagers*/
- set_net_wm_strut_partial_for(dzen.dpy, dzen.title_win.win);
+ if (use_ewmh_dock)
+ set_docking_ewmh_info(dzen.dpy, dzen.title_win.win);
/* TODO: Smarter approach to window creation so we can reduce the
* size of this function.
@@ -775,7 +805,7 @@ init_input_buffer(void) {
int
main(int argc, char *argv[]) {
- int i, preload=0;
+ int i, preload=0, use_ewmh_dock=0;
char *action_string = NULL;
char *endptr, *fnpre;
@@ -907,13 +937,15 @@ main(int argc, char *argv[]) {
if(++i < argc) dzen.xinescreen = atoi(argv[i]);
}
#endif
+ else if(!strncmp(argv[i], "-dock", 6))
+ use_ewmh_dock = 1;
else if(!strncmp(argv[i], "-v", 3))
eprint("dzen-"VERSION", (C)opyright 2007-2008 Robert Manea\n");
else
eprint("usage: dzen2 [-v] [-p [seconds]] [-m [v|h]] [-ta <l|c|r>] [-sa <l|c|r>]\n"
" [-x <pixel>] [-y <pixel>] [-w <pixel>] [-tw <pixel>] [-u]\n"
" [-e <string>] [-l <lines>] [-fn <font>] [-bg <color>] [-fg <color>]\n"
- " [-geometry <geometry string>] [-expand <left|both|right>]\n"
+ " [-geometry <geometry string>] [-expand <left|both|right>] [-dock]\n"
#ifdef DZEN_XINERAMA
" [-xs <screen>]\n"
#endif
@@ -976,7 +1008,7 @@ main(int argc, char *argv[]) {
dzen.slave_win.max_lines = 1;
- x_create_windows();
+ x_create_windows(use_ewmh_dock);
//dzen.title_win.x_right_corner = dzen.title_win.x + dzen.title_win.width;
if(!dzen.slave_win.ishmenu)