allow specifying that some focus events should be ignored for the focus order list
This commit is contained in:
parent
ec4e24a422
commit
d6f9bc953a
3 changed files with 10 additions and 1 deletions
|
@ -709,6 +709,7 @@ void action_cycle_windows(union ActionData *data)
|
|||
}
|
||||
if (client_focus(it->data)) {
|
||||
t = it->data;
|
||||
focus_ignore_in++;
|
||||
break;
|
||||
}
|
||||
} while (it != start);
|
||||
|
|
|
@ -18,6 +18,7 @@ GList **focus_order = NULL; /* these lists are created when screen_startup
|
|||
Window focus_backup = None;
|
||||
gboolean focus_new = TRUE;
|
||||
gboolean focus_follow = TRUE;
|
||||
int focus_ignore_in = 0;
|
||||
|
||||
static void parse_assign(char *name, ParseToken *value)
|
||||
{
|
||||
|
@ -99,7 +100,10 @@ void focus_set_client(Client *client)
|
|||
focus_client = client;
|
||||
|
||||
/* move to the top of the list */
|
||||
if (client != NULL) {
|
||||
if (focus_ignore_in) {
|
||||
g_assert(focus_ignore_in > 0);
|
||||
--focus_ignore_in;
|
||||
} else if (client != NULL) {
|
||||
desktop = client->desktop;
|
||||
if (desktop == DESKTOP_ALL) desktop = screen_desktop;
|
||||
focus_order[desktop] = g_list_remove(focus_order[desktop], client);
|
||||
|
|
|
@ -12,6 +12,10 @@ extern Window focus_backup;
|
|||
/*! The client which is currently focused */
|
||||
extern struct Client *focus_client;
|
||||
|
||||
/* The number of FocusIn events which should be ignored for tracking the focus
|
||||
order */
|
||||
extern int focus_ignore_in;
|
||||
|
||||
/*! The recent focus order on each desktop */
|
||||
extern GList **focus_order;
|
||||
|
||||
|
|
Loading…
Reference in a new issue