struct Workspace_Assignment *assignment;
TAILQ_FOREACH(assignment, &ws_assignments, ws_assignments) {
if (strcmp(assignment->name, target_name) != 0 ||
- strcmp(assignment->output, output->name) == 0)
+ strcmp(assignment->output, output_primary_name(output)) == 0)
continue;
assigned = true;
if (next->urgent && (int)(config.workspace_urgency_timer * 1000) > 0) {
/* focus for now… */
next->urgent = false;
- con_focus(next);
+ con_activate(next);
/* … but immediately reset urgency flags; they will be set to false by
* the timer callback in case the container is focused at the time of
ev_timer_again(main_loop, focused->urgency_timer);
}
} else
- con_focus(next);
+ con_activate(next);
ipc_send_workspace_event("focus", workspace, current);
y(free);
+ /* Avoid calling output_push_sticky_windows later with a freed container. */
+ if (old == old_focus) {
+ old_focus = NULL;
+ }
+
ewmh_update_number_of_desktops();
ewmh_update_desktop_names();
ewmh_update_desktop_viewport();
con_fix_percent(ws);
if (old_focused)
- con_focus(old_focused);
+ con_activate(old_focused);
}
/*
bool used_assignment = false;
struct Workspace_Assignment *assignment;
TAILQ_FOREACH(assignment, &ws_assignments, ws_assignments) {
- if (assignment->output == NULL || strcmp(assignment->output, current_output->name) != 0)
+ if (assignment->output == NULL || strcmp(assignment->output, output_primary_name(current_output)) != 0)
continue;
/* check if this workspace is already attached to the tree */