* Copyright (c) 2009 Pierre-Yves Ritschard <pyr@spootnik.org>
* Copyright (c) 2010 Tuukka Kataja <stuge@xor.fi>
* Copyright (c) 2011 Jason L. Wright <jason@thought.net>
- * Copyright (c) 2011-2013 Reginald Kennedy <rk@rejii.com>
+ * Copyright (c) 2011-2014 Reginald Kennedy <rk@rejii.com>
* Copyright (c) 2011-2012 Lawrence Teo <lteo@lteo.net>
* Copyright (c) 2011-2012 Tiago Cunha <tcunha@gmx.com>
* Copyright (c) 2012-2013 David Hill <dhill@mindcry.org>
#define SWM_Q_FOCUSPREV (1<<5) /* focus on caller */
#define SWM_Q_NOFOCUSONMAP (1<<6) /* Don't focus on window when mapped. */
#define SWM_Q_FOCUSONMAP_SINGLE (1<<7) /* Only focus if single win of type. */
+#define SWM_Q_OBEYAPPFOCUSREQ (1<<8) /* Focus when applications ask. */
};
TAILQ_HEAD(quirk_list, quirk);
struct quirk_list quirks = TAILQ_HEAD_INITIALIZER(quirks);
set_region(ws->r);
- update_window_color(win);
-
xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win->s->root,
ewmh[_NET_ACTIVE_WINDOW].atom, XCB_ATOM_WINDOW, 32, 1,
&win->id);
}
+ if (cfw != win)
+ /* Update window border even if workspace is hidden. */
+ update_window_color(win);
+
out:
bar_draw();
DNPRINTF(SWM_D_MISC, "update_floater: win %#x\n", win->id);
+ win->bordered = 1;
+
if (FULLSCREEN(win)) {
/* _NET_WM_FULLSCREEN: fullscreen without border. */
if (!win->g_floatvalid)
win->g = r->g;
if (bar_enabled && ws->bar_enabled) {
- win->bordered = 1;
if (!bar_at_bottom)
Y(win) += bar_height;
HEIGHT(win) -= bar_height;
} else if (disable_border) {
win->bordered = 0;
- } else {
- win->bordered = 1;
}
if (win->bordered) {
win_to_ws(win, wsid, 1);
- /* Set window to be focus on target ws. */
+ /* Set new focus on target ws. */
if (focus_mode != SWM_FOCUS_FOLLOW) {
+ win->ws->focus_prev = win->ws->focus;
win->ws->focus = win;
win->ws->focus_pending = NULL;
+
+ if (win->ws->focus_prev)
+ update_window_color(win->ws->focus_prev);
}
DNPRINTF(SWM_D_STACK, "send_to_ws: focus_pending: %#x, focus: %#x, "
ewmh_apply_flags(win, win->ewmh_flags & ~EWMH_F_MAXIMIZED);
ewmh_update_wm_state(win);
- /* Restack and set new focus. */
+ /* Restack and set new focus on current ws. */
if (FLOATING(win))
load_float_geom(win);
"FOCUSPREV",
"NOFOCUSONMAP",
"FOCUSONMAP_SINGLE",
+ "OBEYAPPFOCUSREQ",
};
/* SWM_Q_WS: retain '|' for back compat for now (2009-08-11) */
* Allow focus changes that are a result of direct user
* action and from applications that use the old EWMH spec.
*/
- if (e->data.data32[0] != EWMH_SOURCE_TYPE_NORMAL) {
+ if (e->data.data32[0] != EWMH_SOURCE_TYPE_NORMAL ||
+ win->quirks & SWM_Q_OBEYAPPFOCUSREQ) {
if (WS_FOCUSED(win->ws))
focus_win(win);
else