X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=648b0c54dc0e47fb0008a1f6d5da128c770340dc;hb=5d83029a3a9b69ab0f1287aa6c0499b681d891d9;hp=75c7a6cc7ddbe78b597bf9c71ceac86a3e2df770;hpb=43af7f1229fa4a5fbbc749733a08a5fb4ebfec24;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 75c7a6c..648b0c5 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -2862,7 +2862,7 @@ switchws(struct swm_region *r, union arg *args) this_r->ws = new_ws; new_ws->r = this_r; - unmap_window(old_ws->focus); + unfocus_win(old_ws->focus); stack(); @@ -6750,12 +6750,12 @@ manage_window(xcb_window_t id, uint16_t mapped) { xcb_window_t trans = XCB_WINDOW_NONE; struct ws_win *win, *ww; - int ws_idx, border_me = 0; + int ws_idx; char ws_idx_str[SWM_PROPLEN]; struct swm_region *r; struct pid_e *p; struct quirk *qp; - uint32_t event_mask, i; + uint32_t i, wa[2]; xcb_icccm_get_wm_protocols_reply_t wpr; if ((win = find_window(id)) != NULL) { @@ -6796,9 +6796,9 @@ manage_window(xcb_window_t id, uint16_t mapped) /* Ignore window border if there is one. */ WIDTH(win) = win->wa->width; HEIGHT(win) = win->wa->height; - X(win) = win->wa->x + win->wa->border_width; - Y(win) = win->wa->y + win->wa->border_width; - win->bordered = 0; + X(win) = win->wa->x + win->wa->border_width - border_width; + Y(win) = win->wa->y + win->wa->border_width - border_width; + win->bordered = 1; win->mapped = mapped; win->floatmaxed = 0; win->ewmh_flags = 0; @@ -6853,7 +6853,6 @@ manage_window(xcb_window_t id, uint16_t mapped) } else if (trans && (ww = find_window(trans)) != NULL) { /* Launch transients in the same ws as parent. */ win->ws = ww->ws; - border_me = 1; } else { win->ws = r->ws; } @@ -6883,7 +6882,6 @@ manage_window(xcb_window_t id, uint16_t mapped) DNPRINTF(SWM_D_CLASS, "manage_window: java window " "detected.\n"); win->java = 1; - border_me = 1; } TAILQ_FOREACH(qp, &quirks, entry) { @@ -6891,20 +6889,16 @@ manage_window(xcb_window_t id, uint16_t mapped) !strcmp(win->ch.instance_name, qp->name)) { DNPRINTF(SWM_D_CLASS, "manage_window: on quirks" "list; mask: 0x%lx\n", qp->quirk); - if (qp->quirk & SWM_Q_FLOAT) { + if (qp->quirk & SWM_Q_FLOAT) win->floating = 1; - border_me = 1; - } win->quirks = qp->quirk; } } } /* Alter window position if quirky */ - if (win->quirks & SWM_Q_ANYWHERE) { + if (win->quirks & SWM_Q_ANYWHERE) win->manual = 1; - border_me = 1; - } /* Reset font sizes (the bruteforce way; no default keybinding). */ if (win->quirks & SWM_Q_XTERM_FONTADJ) { @@ -6914,28 +6908,23 @@ manage_window(xcb_window_t id, uint16_t mapped) fake_keypress(win, XK_KP_Add, XCB_MOD_MASK_SHIFT); } - if (border_me) { - win->bordered = 1; - X(win) -= border_width; - Y(win) -= border_width; - } - /* Make sure window is positioned inside its region, if its active. */ - if (win->ws->r) + if (win->ws->r) { constrain_window(win, win->ws->r, 0); - - if (win->ws->r || border_me) update_window(win); + } + - /* Select which X events to monitor. */ - event_mask = XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_FOCUS_CHANGE | - XCB_EVENT_MASK_PROPERTY_CHANGE | XCB_EVENT_MASK_STRUCTURE_NOTIFY; + /* Select which X events to monitor and set border pixel color. */ + wa[0] = win->s->c[SWM_S_COLOR_UNFOCUS].pixel; + wa[1] = XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_PROPERTY_CHANGE | + XCB_EVENT_MASK_STRUCTURE_NOTIFY; #ifdef SWM_DEBUG - event_mask |= XCB_EVENT_MASK_LEAVE_WINDOW; + wa[1] |= XCB_EVENT_MASK_LEAVE_WINDOW | XCB_EVENT_MASK_FOCUS_CHANGE; #endif - xcb_change_window_attributes(conn, win->id, XCB_CW_EVENT_MASK, - &event_mask); + xcb_change_window_attributes(conn, win->id, XCB_CW_BORDER_PIXEL | + XCB_CW_EVENT_MASK, wa); out: /* Figure out where to stack the window in the workspace. */