allow specifying that some focus events should be ignored for the focus order list

This commit is contained in:
Dana Jansens 2003-04-05 22:56:10 +00:00
parent ec4e24a422
commit d6f9bc953a
3 changed files with 10 additions and 1 deletions

View file

@ -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);

View file

@ -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);

View file

@ -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;