X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=5b97af2f11104da3f14fa6d2668cdb6cb11d9774;hb=ef048ac6ee49f942ee0029e04dfd8697a08f3d10;hp=9faa4aaf7e77eedd4aa2990e0d096b60030f0a92;hpb=9c2fd87adbf7aa38a9c1b58954372c20a95bfe77;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 9faa4aa..5b97af2 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -6211,9 +6211,10 @@ manage_window(Window id) TAILQ_INSERT_AFTER(&win->ws->winlist, ww, win, entry); else if ((ww = win->ws->focus) && spawn_position == SWM_STACK_ABOVE) - TAILQ_INSERT_AFTER(&win->ws->winlist, win->ws->focus, win, entry); + TAILQ_INSERT_AFTER(&win->ws->winlist, win->ws->focus, + win, entry); else if (ww && spawn_position == SWM_STACK_BELOW) - TAILQ_INSERT_AFTER(&win->ws->winlist, win->ws->focus, win, entry); + TAILQ_INSERT_BEFORE(win->ws->focus, win, entry); else switch (spawn_position) { default: case SWM_STACK_TOP: @@ -6312,10 +6313,21 @@ manage_window(Window id) win->s = r->s; /* this never changes */ if (trans && (ww = find_window(trans))) TAILQ_INSERT_AFTER(&ws->winlist, ww, win, entry); - else if (spawn_position == SWM_STACK_ABOVE && win->ws->focus) - TAILQ_INSERT_AFTER(&win->ws->winlist, win->ws->focus, win, entry); - else - TAILQ_INSERT_TAIL(&ws->winlist, win, entry); + else if (win->ws->focus && spawn_position == SWM_STACK_ABOVE) + TAILQ_INSERT_AFTER(&win->ws->winlist, win->ws->focus, win, + entry); + else if (win->ws->focus && spawn_position == SWM_STACK_BELOW) + TAILQ_INSERT_BEFORE(win->ws->focus, win, entry); + else switch (spawn_position) { + default: + case SWM_STACK_TOP: + case SWM_STACK_ABOVE: + TAILQ_INSERT_TAIL(&win->ws->winlist, win, entry); + break; + case SWM_STACK_BOTTOM: + case SWM_STACK_BELOW: + TAILQ_INSERT_HEAD(&win->ws->winlist, win, entry); + } /* ignore window border if there is one. */ WIDTH(win) = win->wa.width; @@ -6969,14 +6981,21 @@ visibilitynotify(XEvent *e) void clientmessage(XEvent *e) { - XClientMessageEvent *ev; - struct ws_win *win; + XClientMessageEvent *ev; + struct ws_win *win; ev = &e->xclient; win = find_window(ev->window); - if (win == NULL) + if (win == NULL) { + if (ev->message_type == ewmh[_NET_ACTIVE_WINDOW].atom) { + DNPRINTF(SWM_D_EVENT, "clientmessage: request focus on " + "unmanaged window.\n"); + e->xmaprequest.window = ev->window; + maprequest(e); + } return; + } DNPRINTF(SWM_D_EVENT, "clientmessage: window: 0x%lx, type: %ld\n", ev->window, ev->message_type);