Added assignment type 'A_NO_FOCUS' (#1416)

Any assignment with type 'A_NO_FOCUS' will cause the matched window to not be focused by i3 when it is managed.
This commit is contained in:
Ingo Bürk 2015-03-29 17:29:21 +02:00
parent d689827613
commit e155447932
2 changed files with 7 additions and 3 deletions

View File

@ -460,6 +460,7 @@ struct Assignment {
* *
* A_COMMAND = run the specified command for the matching window * A_COMMAND = run the specified command for the matching window
* A_TO_WORKSPACE = assign the matching window to the specified workspace * A_TO_WORKSPACE = assign the matching window to the specified workspace
* A_NO_FOCUS = don't focus matched window when it is managed
* *
* While the type is a bitmask, only one value can be set at a time. It is * While the type is a bitmask, only one value can be set at a time. It is
* a bitmask to allow filtering for multiple types, for example in the * a bitmask to allow filtering for multiple types, for example in the
@ -469,7 +470,8 @@ struct Assignment {
enum { enum {
A_ANY = 0, A_ANY = 0,
A_COMMAND = (1 << 0), A_COMMAND = (1 << 0),
A_TO_WORKSPACE = (1 << 1) A_TO_WORKSPACE = (1 << 1),
A_NO_FOCUS = (1 << 2)
} type; } type;
/** the criteria to check if a window matches */ /** the criteria to check if a window matches */

View File

@ -512,8 +512,10 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
/* Defer setting focus after the 'new' event has been sent to ensure the /* Defer setting focus after the 'new' event has been sent to ensure the
* proper window event sequence. */ * proper window event sequence. */
if (set_focus && !nc->window->doesnt_accept_focus && nc->mapped) { if (set_focus && !nc->window->doesnt_accept_focus && nc->mapped) {
DLOG("Now setting focus.\n"); if (assignment_for(cwindow, A_NO_FOCUS) == NULL) {
con_focus(nc); DLOG("Now setting focus.\n");
con_focus(nc);
}
} }
tree_render(); tree_render();