#include "stacking.h"
#include "dispatch.h"
#include "group.h"
+#include "config.h"
#include <glib.h>
#include <X11/Xutil.h>
client_startup_stack_order = NULL;
client_startup_stack_size = 0;
- if (focus_new)
+ if (config_focus_new)
focus_fallback(Fallback_NoFocus);
}
dispatch_client(Event_Client_Mapped, self, 0, 0);
- if (ob_state != State_Starting && focus_new)
- client_focus(self);
+ /* focus the new window? */
+ if (ob_state != State_Starting) {
+ if (config_focus_new)
+ client_focus(self);
+ else if (self->transient_for) {
+ if (self->transient_for != TRAN_GROUP) {/* transient of a window */
+ if (focus_client == self->transient_for)
+ client_focus(self);
+ } else { /* transient of a group */
+ GSList *it;
+
+ for (it = self->group->members; it; it = it->next)
+ if (focus_client == it->data) {
+ client_focus(self);
+ break;
+ }
+ }
+ }
+ }
/* update the list hints */
client_set_list();
focus_order[old] = g_list_remove(focus_order[old], self);
if (target == DESKTOP_ALL) {
for (i = 0; i < screen_num_desktops; ++i) {
- if (focus_new)
+ if (config_focus_new)
focus_order[i] = g_list_prepend(focus_order[i], self);
else
focus_order[i] = g_list_append(focus_order[i], self);
}
} else {
- if (focus_new)
+ if (config_focus_new)
focus_order[target] = g_list_prepend(focus_order[target], self);
else
focus_order[target] = g_list_append(focus_order[target], self);