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)) {
|
if (client_focus(it->data)) {
|
||||||
t = it->data;
|
t = it->data;
|
||||||
|
focus_ignore_in++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (it != start);
|
} while (it != start);
|
||||||
|
|
|
@ -18,6 +18,7 @@ GList **focus_order = NULL; /* these lists are created when screen_startup
|
||||||
Window focus_backup = None;
|
Window focus_backup = None;
|
||||||
gboolean focus_new = TRUE;
|
gboolean focus_new = TRUE;
|
||||||
gboolean focus_follow = TRUE;
|
gboolean focus_follow = TRUE;
|
||||||
|
int focus_ignore_in = 0;
|
||||||
|
|
||||||
static void parse_assign(char *name, ParseToken *value)
|
static void parse_assign(char *name, ParseToken *value)
|
||||||
{
|
{
|
||||||
|
@ -99,7 +100,10 @@ void focus_set_client(Client *client)
|
||||||
focus_client = client;
|
focus_client = client;
|
||||||
|
|
||||||
/* move to the top of the list */
|
/* 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;
|
desktop = client->desktop;
|
||||||
if (desktop == DESKTOP_ALL) desktop = screen_desktop;
|
if (desktop == DESKTOP_ALL) desktop = screen_desktop;
|
||||||
focus_order[desktop] = g_list_remove(focus_order[desktop], client);
|
focus_order[desktop] = g_list_remove(focus_order[desktop], client);
|
||||||
|
|
|
@ -12,6 +12,10 @@ extern Window focus_backup;
|
||||||
/*! The client which is currently focused */
|
/*! The client which is currently focused */
|
||||||
extern struct Client *focus_client;
|
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 */
|
/*! The recent focus order on each desktop */
|
||||||
extern GList **focus_order;
|
extern GList **focus_order;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue