Allow windows in scratchpad to set the urgent flag

When a window in the scratchpad container requests for
xdg_activation_v1, it is ignored no matter what the value of
focus_on_window_activation is.

At least allow windows in the scratchpad to set the urgent flag. When
focus_on_window_activation is set to "focus", show the parent scratchpad
where the contained requested for xdg_activation_v1.
This commit is contained in:
Robin Jarry 2023-01-25 21:54:16 +01:00 committed by Ronan Pigott
parent 16b0afd433
commit 9498e4d261

View file

@ -369,16 +369,13 @@ void view_set_activated(struct sway_view *view, bool activated) {
void view_request_activate(struct sway_view *view, struct sway_seat *seat) { void view_request_activate(struct sway_view *view, struct sway_seat *seat) {
struct sway_workspace *ws = view->container->pending.workspace; struct sway_workspace *ws = view->container->pending.workspace;
if (!ws) { // hidden scratchpad container
return;
}
if (!seat) { if (!seat) {
seat = input_manager_current_seat(); seat = input_manager_current_seat();
} }
switch (config->focus_on_window_activation) { switch (config->focus_on_window_activation) {
case FOWA_SMART: case FOWA_SMART:
if (workspace_is_visible(ws)) { if (ws && workspace_is_visible(ws)) {
seat_set_focus_container(seat, view->container); seat_set_focus_container(seat, view->container);
container_raise_floating(view->container); container_raise_floating(view->container);
} else { } else {
@ -389,8 +386,12 @@ void view_request_activate(struct sway_view *view, struct sway_seat *seat) {
view_set_urgent(view, true); view_set_urgent(view, true);
break; break;
case FOWA_FOCUS: case FOWA_FOCUS:
if (container_is_scratchpad_hidden_or_child(view->container)) {
root_scratchpad_show(view->container);
} else {
seat_set_focus_container(seat, view->container); seat_set_focus_container(seat, view->container);
container_raise_floating(view->container); container_raise_floating(view->container);
}
break; break;
case FOWA_NONE: case FOWA_NONE:
break; break;