mirror of
https://github.com/cage-kiosk/cage.git
synced 2025-10-28 05:40:16 -04:00
Compare commits
4 commits
af86afc055
...
cbe95c2136
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cbe95c2136 | ||
|
|
6efb3b5042 | ||
|
|
e21c155bcd | ||
|
|
141a348264 |
3 changed files with 54 additions and 0 deletions
14
cage.c
14
cage.c
|
|
@ -596,11 +596,25 @@ main(int argc, char *argv[])
|
|||
wl_display_run(server.wl_display);
|
||||
|
||||
#if CAGE_HAS_XWAYLAND
|
||||
if (xwayland) {
|
||||
wl_list_remove(&server.new_xwayland_surface.link);
|
||||
}
|
||||
wlr_xwayland_destroy(xwayland);
|
||||
wlr_xcursor_manager_destroy(xcursor_manager);
|
||||
#endif
|
||||
wl_display_destroy_clients(server.wl_display);
|
||||
|
||||
wl_list_remove(&server.new_virtual_pointer.link);
|
||||
wl_list_remove(&server.new_virtual_keyboard.link);
|
||||
wl_list_remove(&server.output_manager_apply.link);
|
||||
wl_list_remove(&server.output_manager_test.link);
|
||||
wl_list_remove(&server.xdg_toplevel_decoration.link);
|
||||
wl_list_remove(&server.new_xdg_toplevel.link);
|
||||
wl_list_remove(&server.new_xdg_popup.link);
|
||||
wl_list_remove(&server.new_idle_inhibitor_v1.link);
|
||||
wl_list_remove(&server.new_output.link);
|
||||
wl_list_remove(&server.output_layout_change.link);
|
||||
|
||||
end:
|
||||
if (pid != 0)
|
||||
app_ret = cleanup_primary_client(pid);
|
||||
|
|
|
|||
25
output.c
25
output.c
|
|
@ -66,6 +66,26 @@ update_output_manager_config(struct cg_server *server)
|
|||
wlr_output_manager_v1_set_configuration(server->output_manager_v1, config);
|
||||
}
|
||||
|
||||
static void
|
||||
update_cursor_map_to_output(struct cg_server *server)
|
||||
{
|
||||
struct cg_output *only_enabled_output = NULL;
|
||||
struct cg_output *output;
|
||||
wl_list_for_each (output, &server->outputs, link) {
|
||||
if (!only_enabled_output && output->wlr_output->enabled) {
|
||||
only_enabled_output = output;
|
||||
} else {
|
||||
only_enabled_output = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (only_enabled_output) {
|
||||
wlr_cursor_map_to_output(server->seat->cursor, only_enabled_output->wlr_output);
|
||||
} else {
|
||||
wlr_cursor_map_to_output(server->seat->cursor, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
output_layout_add_auto(struct cg_output *output)
|
||||
{
|
||||
|
|
@ -111,6 +131,7 @@ output_enable(struct cg_output *output)
|
|||
output_layout_add_auto(output);
|
||||
}
|
||||
|
||||
update_cursor_map_to_output(output->server);
|
||||
update_output_manager_config(output->server);
|
||||
}
|
||||
|
||||
|
|
@ -182,6 +203,7 @@ handle_output_commit(struct wl_listener *listener, void *data)
|
|||
* - always update output manager configuration even if the output is now disabled */
|
||||
|
||||
if (event->state->committed & OUTPUT_CONFIG_UPDATED) {
|
||||
update_cursor_map_to_output(output->server);
|
||||
update_output_manager_config(output->server);
|
||||
}
|
||||
}
|
||||
|
|
@ -193,6 +215,7 @@ handle_output_request_state(struct wl_listener *listener, void *data)
|
|||
struct wlr_output_event_request_state *event = data;
|
||||
|
||||
if (wlr_output_commit_state(output->wlr_output, event->state)) {
|
||||
update_cursor_map_to_output(output->server);
|
||||
update_output_manager_config(output->server);
|
||||
}
|
||||
}
|
||||
|
|
@ -203,6 +226,7 @@ handle_output_layout_change(struct wl_listener *listener, void *data)
|
|||
struct cg_server *server = wl_container_of(listener, server, output_layout_change);
|
||||
|
||||
view_position_all(server);
|
||||
update_cursor_map_to_output(server);
|
||||
update_output_manager_config(server);
|
||||
}
|
||||
|
||||
|
|
@ -330,6 +354,7 @@ handle_new_output(struct wl_listener *listener, void *data)
|
|||
}
|
||||
|
||||
view_position_all(output->server);
|
||||
update_cursor_map_to_output(output->server);
|
||||
update_output_manager_config(output->server);
|
||||
}
|
||||
|
||||
|
|
|
|||
15
seat.c
15
seat.c
|
|
@ -380,6 +380,16 @@ cleanup:
|
|||
free(cg_group);
|
||||
}
|
||||
|
||||
static void
|
||||
keyboard_group_destroy(struct cg_keyboard_group *keyboard_group)
|
||||
{
|
||||
wl_list_remove(&keyboard_group->key.link);
|
||||
wl_list_remove(&keyboard_group->modifiers.link);
|
||||
wlr_keyboard_group_destroy(keyboard_group->wlr_group);
|
||||
wl_list_remove(&keyboard_group->link);
|
||||
free(keyboard_group);
|
||||
}
|
||||
|
||||
static void
|
||||
handle_new_keyboard(struct cg_seat *seat, struct wlr_keyboard *keyboard, bool virtual)
|
||||
{
|
||||
|
|
@ -893,6 +903,11 @@ seat_destroy(struct cg_seat *seat)
|
|||
wl_list_remove(&seat->request_start_drag.link);
|
||||
wl_list_remove(&seat->start_drag.link);
|
||||
|
||||
struct cg_keyboard_group *keyboard_group, *keyboard_group_tmp;
|
||||
wl_list_for_each_safe (keyboard_group, keyboard_group_tmp, &seat->keyboard_groups, link) {
|
||||
keyboard_group_destroy(keyboard_group);
|
||||
}
|
||||
|
||||
// Destroying the wlr seat will trigger the destroy handler on our seat,
|
||||
// which will in turn free it.
|
||||
wlr_seat_destroy(seat->seat);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue