mirror of
https://github.com/NickHu/sway
synced 2024-12-27 21:58:11 +01:00
allow pointer_constraints on layer_shell surfaces
This commit is contained in:
parent
07c827b4be
commit
d5659948f1
3 changed files with 17 additions and 6 deletions
|
@ -192,6 +192,8 @@ void seat_set_exclusive_client(struct sway_seat *seat,
|
||||||
|
|
||||||
struct sway_node *seat_get_focus(struct sway_seat *seat);
|
struct sway_node *seat_get_focus(struct sway_seat *seat);
|
||||||
|
|
||||||
|
struct wlr_surface *seat_get_focused_surface(struct sway_seat *seat);
|
||||||
|
|
||||||
struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat);
|
struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat);
|
||||||
|
|
||||||
// If a scratchpad container is fullscreen global, this can be used to try to
|
// If a scratchpad container is fullscreen global, this can be used to try to
|
||||||
|
|
|
@ -1372,12 +1372,9 @@ void handle_pointer_constraint(struct wl_listener *listener, void *data) {
|
||||||
sway_constraint->destroy.notify = handle_constraint_destroy;
|
sway_constraint->destroy.notify = handle_constraint_destroy;
|
||||||
wl_signal_add(&constraint->events.destroy, &sway_constraint->destroy);
|
wl_signal_add(&constraint->events.destroy, &sway_constraint->destroy);
|
||||||
|
|
||||||
struct sway_node *focus = seat_get_focus(seat);
|
struct wlr_surface *surface = seat_get_focused_surface(seat);
|
||||||
if (focus && node_is_view(focus)) {
|
if (surface == constraint->surface) {
|
||||||
struct wlr_surface *surface = focus->sway_container->view->surface;
|
sway_cursor_constrain(seat->cursor, constraint);
|
||||||
if (surface == constraint->surface) {
|
|
||||||
sway_cursor_constrain(seat->cursor, constraint);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1462,6 +1462,18 @@ struct sway_node *seat_get_focus(struct sway_seat *seat) {
|
||||||
return current->node;
|
return current->node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct wlr_surface *seat_get_focused_surface(struct sway_seat *seat) {
|
||||||
|
struct sway_node *focus = seat_get_focus(seat);
|
||||||
|
if (focus && node_is_view(focus)) {
|
||||||
|
return focus->sway_container->view->surface;
|
||||||
|
}
|
||||||
|
struct sway_seat_node *current = wl_container_of(seat->focus_stack.next, current, link);
|
||||||
|
struct wlr_layer_surface_v1 *layer = current->seat->focused_layer;
|
||||||
|
if (layer && layer->surface)
|
||||||
|
return layer->surface;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat) {
|
struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat) {
|
||||||
struct sway_node *focus = seat_get_focus_inactive(seat, &root->node);
|
struct sway_node *focus = seat_get_focus_inactive(seat, &root->node);
|
||||||
if (!focus) {
|
if (!focus) {
|
||||||
|
|
Loading…
Reference in a new issue