src/foreign.c: verify associated view is still valid

Closes #172
This commit is contained in:
Consolatis 2021-12-28 06:08:35 +01:00 committed by ARDiDo
parent 4b2a7a28c6
commit 4a20d57b38

View file

@ -7,8 +7,10 @@ handle_toplevel_handle_request_minimize(struct wl_listener *listener, void *data
struct view *view = wl_container_of(listener, view, struct view *view = wl_container_of(listener, view,
toplevel_handle_request_minimize); toplevel_handle_request_minimize);
struct wlr_foreign_toplevel_handle_v1_minimized_event *event = data; struct wlr_foreign_toplevel_handle_v1_minimized_event *event = data;
if (view) {
view_minimize(view, event->minimized); view_minimize(view, event->minimized);
} }
}
static void static void
handle_toplevel_handle_request_maximize(struct wl_listener *listener, void *data) handle_toplevel_handle_request_maximize(struct wl_listener *listener, void *data)
@ -16,8 +18,10 @@ handle_toplevel_handle_request_maximize(struct wl_listener *listener, void *data
struct view *view = wl_container_of(listener, view, struct view *view = wl_container_of(listener, view,
toplevel_handle_request_maximize); toplevel_handle_request_maximize);
struct wlr_foreign_toplevel_handle_v1_maximized_event *event = data; struct wlr_foreign_toplevel_handle_v1_maximized_event *event = data;
if (view) {
view_maximize(view, event->maximized); view_maximize(view, event->maximized);
} }
}
static void static void
handle_toplevel_handle_request_fullscreen(struct wl_listener *listener, void *data) handle_toplevel_handle_request_fullscreen(struct wl_listener *listener, void *data)
@ -25,8 +29,10 @@ handle_toplevel_handle_request_fullscreen(struct wl_listener *listener, void *da
struct view *view = wl_container_of(listener, view, struct view *view = wl_container_of(listener, view,
toplevel_handle_request_fullscreen); toplevel_handle_request_fullscreen);
struct wlr_foreign_toplevel_handle_v1_fullscreen_event *event = data; struct wlr_foreign_toplevel_handle_v1_fullscreen_event *event = data;
if (view) {
view_set_fullscreen(view, event->fullscreen, NULL); view_set_fullscreen(view, event->fullscreen, NULL);
} }
}
static void static void
handle_toplevel_handle_request_activate(struct wl_listener *listener, void *data) handle_toplevel_handle_request_activate(struct wl_listener *listener, void *data)
@ -35,17 +41,21 @@ handle_toplevel_handle_request_activate(struct wl_listener *listener, void *data
toplevel_handle_request_activate); toplevel_handle_request_activate);
// struct wlr_foreign_toplevel_handle_v1_activated_event *event = data; // struct wlr_foreign_toplevel_handle_v1_activated_event *event = data;
/* In a multi-seat world we would select seat based on event->seat here. */ /* In a multi-seat world we would select seat based on event->seat here. */
if (view) {
desktop_focus_and_activate_view(&view->server->seat, view); desktop_focus_and_activate_view(&view->server->seat, view);
desktop_move_to_front(view); desktop_move_to_front(view);
} }
}
static void static void
handle_toplevel_handle_request_close(struct wl_listener *listener, void *data) handle_toplevel_handle_request_close(struct wl_listener *listener, void *data)
{ {
struct view *view = wl_container_of(listener, view, struct view *view = wl_container_of(listener, view,
toplevel_handle_request_close); toplevel_handle_request_close);
if (view) {
view_close(view); view_close(view);
} }
}
void void
foreign_toplevel_handle_create(struct view *view) foreign_toplevel_handle_create(struct view *view)