server->seat.xcursor_manager, cursor_name, server->seat.cursor);
}
-bool input_inhibit_blocks_surface(struct seat *seat,
- struct wl_resource *resource)
+bool
+input_inhibit_blocks_surface(struct seat *seat, struct wl_resource *resource)
{
- struct wl_client * inhibiting_client =
+ struct wl_client *inhibiting_client =
seat->active_client_while_inhibited;
return (inhibiting_client != NULL) &&
inhibiting_client != wl_resource_get_client(resource);
damage_all_outputs(server);
if (surface &&
- ! input_inhibit_blocks_surface(&server->seat, surface->resource)) {
+ !input_inhibit_blocks_surface(&server->seat, surface->resource)) {
bool focus_changed =
wlr_seat->pointer_state.focused_surface != surface;
/*
wl_signal_add(&seat->cursor->events.frame, &seat->cursor_frame);
seat->request_cursor.notify = request_cursor_notify;
- wl_signal_add(&seat->seat->events.request_set_cursor, &seat->request_cursor);
+ wl_signal_add(&seat->seat->events.request_set_cursor,
+ &seat->request_cursor);
seat->request_set_selection.notify = request_set_selection_notify;
- wl_signal_add(&seat->seat->events.request_set_selection, &seat->request_set_selection);
+ wl_signal_add(&seat->seat->events.request_set_selection,
+ &seat->request_set_selection);
seat->request_set_primary_selection.notify =
request_set_primary_selection_notify;
if (!view || view->minimized || !view->mapped) {
return;
}
- if(input_inhibit_blocks_surface(seat, view->surface->resource))
- return;
+ if (input_inhibit_blocks_surface(seat, view->surface->resource)) {
+ return;
+ }
struct wlr_surface *prev_surface;
prev_surface = seat->seat->keyboard_state.focused_surface;
seat_focus_surface(seat, NULL);
return;
}
- if(input_inhibit_blocks_surface(seat, view->surface->resource))
- return;
+ if (input_inhibit_blocks_surface(seat, view->surface->resource)) {
+ return;
+ }
if (view->minimized) {
/* this will unmap and then focus */
/*
* Some xwayland apps produce unmapped surfaces on startup and also leave
- * some unmapped surfaces kicking around on 'close' (for example * leafpad's
+ * some unmapped surfaces kicking around on 'close' (for example leafpad's
* "about" dialogue). Whilst this is not normally a problem, we have to be
* careful when cycling between views. The only views we should focus are
* those that are already mapped and those that have been minimized.
static bool
handle_compositor_keybindings(struct wl_listener *listener,
- struct wlr_event_keyboard_key *event)
+ struct wlr_event_keyboard_key *event)
{
struct seat *seat = wl_container_of(listener, seat, keyboard_key);
struct server *server = seat->server;
/* end cycle */
desktop_focus_view(&server->seat, server->cycle_view);
server->cycle_view = NULL;
- /* XXX should we handled=true here? */
+ /* TODO should we handled=true here? */
} else if (event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {
/* cycle to next */
server->cycle_view =
}
return handled;
}
+
static void
keyboard_key_notify(struct wl_listener *listener, void *data)
{
- /* XXX need to check if input inhibited before doing any
- * compositor bindings
- */
-
/* This event is raised when a key is pressed or released. */
struct seat *seat = wl_container_of(listener, seat, keyboard_key);
struct server *server = seat->server;
bool handled = false;
- if(!seat->active_client_while_inhibited)
- /* ignore labwc keybindings if input is inhibited */
+ /* ignore labwc keybindings if input is inhibited */
+ if (!seat->active_client_while_inhibited) {
handled = handle_compositor_keybindings(listener, event);
+ }
if (!handled) {
wlr_seat_set_keyboard(wlr_seat, device);
}
}
-static void seat_inhibit_input(struct seat *seat, struct wl_client *active_client)
+static void
+seat_inhibit_input(struct seat *seat, struct wl_client *active_client)
{
seat->active_client_while_inhibited = active_client;
- if(seat->focused_layer &&
- (wl_resource_get_client(seat->focused_layer->resource) !=
- active_client))
- {
+ if (seat->focused_layer &&
+ (wl_resource_get_client(seat->focused_layer->resource) !=
+ active_client)) {
seat_set_focus_layer(seat, NULL);
}
- struct wlr_surface * previous_kb_surface = seat->seat->keyboard_state.focused_surface;
+ struct wlr_surface *previous_kb_surface =
+ seat->seat->keyboard_state.focused_surface;
if (previous_kb_surface &&
wl_resource_get_client(previous_kb_surface->resource) != active_client) {
seat_focus_surface(seat, NULL); /* keyboard focus */
}
- struct wlr_seat_client * previous_ptr_client = seat->seat->pointer_state.focused_client;
+ struct wlr_seat_client *previous_ptr_client =
+ seat->seat->pointer_state.focused_client;
if (previous_ptr_client &&
(previous_ptr_client->client != active_client)) {
wlr_seat_pointer_clear_focus(seat->seat);
}
}
-static void seat_disinhibit_input(struct seat *seat)
+static void
+seat_disinhibit_input(struct seat *seat)
{
seat->active_client_while_inhibited = NULL;
- // Triggers a refocus of the topmost surface layer if necessary
- // TODO: Make layer surface focus per-output based on cursor position
+ /*
+ * Triggers a refocus of the topmost surface layer if necessary
+ * TODO: Make layer surface focus per-output based on cursor position
+ */
struct output *output;
- wl_list_for_each(output, &seat->server->outputs, link)
+ wl_list_for_each(output, &seat->server->outputs, link) {
arrange_layers(output);
+ }
}
-static void handle_input_inhibit(struct wl_listener *listener, void *data) {
+static void
+handle_input_inhibit(struct wl_listener *listener, void *data)
+{
wlr_log(WLR_INFO, "activate input inhibit");
- struct server *server = wl_container_of(
- listener, server, input_inhibit_activate);
-
- seat_inhibit_input(&server->seat,
- server->input_inhibit->active_client);
+ struct server *server =
+ wl_container_of(listener, server, input_inhibit_activate);
+ seat_inhibit_input(&server->seat, server->input_inhibit->active_client);
}
-static void handle_input_disinhibit(struct wl_listener *listener, void *data) {
+static void
+handle_input_disinhibit(struct wl_listener *listener, void *data)
+{
wlr_log(WLR_INFO, "deactivate input inhibit");
- struct server *server = wl_container_of(
- listener, server, input_inhibit_deactivate);
-
+ struct server *server =
+ wl_container_of(listener, server, input_inhibit_deactivate);
seat_disinhibit_input(&server->seat);
}
-
void
server_init(struct server *server)
{
wlr_data_control_manager_v1_create(server->wl_display);
wlr_gamma_control_manager_v1_create(server->wl_display);
- // struct wlr_input_inhibit_manager *input_inhibit_mgr = NULL;
- server->input_inhibit = wlr_input_inhibit_manager_create(server->wl_display);
+ server->input_inhibit =
+ wlr_input_inhibit_manager_create(server->wl_display);
if (!server->input_inhibit) {
- wlr_log(WLR_ERROR, "unable to create the input inhibit manager");
+ wlr_log(WLR_ERROR, "unable to create input inhibit manager");
exit(EXIT_FAILURE);
}
- wl_signal_add(&server->input_inhibit->events.activate, &server->input_inhibit_activate);
+ wl_signal_add(&server->input_inhibit->events.activate,
+ &server->input_inhibit_activate);
server->input_inhibit_activate.notify = handle_input_inhibit;
- wl_signal_add(&server->input_inhibit->events.deactivate, &server->input_inhibit_deactivate);
+ wl_signal_add(&server->input_inhibit->events.deactivate,
+ &server->input_inhibit_deactivate);
server->input_inhibit_deactivate.notify = handle_input_disinhibit;
server->foreign_toplevel_manager =