rootston: fix compilation without XWayland support

In case wlroots is not being compiled with XWayland support, we will not
have an xwayland surface in our roots view. While we make sure to pay
attention to that in some places, we are not being consistent and try to
access the xwayland surface in other places. Obviously, this leads to a
compiler error due to the field not being present.

Fix the issue by sprinkling in a few additional ifdefs where required.
master
Patrick Steinhardt 7 years ago
parent facc5ef93a
commit 52cb19d99d

@ -51,7 +51,9 @@ struct roots_xwayland_surface {
enum roots_view_type { enum roots_view_type {
ROOTS_WL_SHELL_VIEW, ROOTS_WL_SHELL_VIEW,
ROOTS_XDG_SHELL_V6_VIEW, ROOTS_XDG_SHELL_V6_VIEW,
#ifdef WLR_HAS_XWAYLAND
ROOTS_XWAYLAND_VIEW, ROOTS_XWAYLAND_VIEW,
#endif
}; };
struct roots_view { struct roots_view {

@ -490,6 +490,7 @@ struct roots_desktop *desktop_create(struct roots_server *server,
desktop->server = server; desktop->server = server;
desktop->config = config; desktop->config = config;
#ifdef WLR_HAS_XWAYLAND
const char *cursor_theme = NULL; const char *cursor_theme = NULL;
const char *cursor_default = ROOTS_XCURSOR_DEFAULT; const char *cursor_default = ROOTS_XCURSOR_DEFAULT;
struct roots_cursor_config *cc = struct roots_cursor_config *cc =
@ -509,6 +510,7 @@ struct roots_desktop *desktop_create(struct roots_server *server,
free(desktop); free(desktop);
return NULL; return NULL;
} }
#endif
desktop->layout = wlr_output_layout_create(); desktop->layout = wlr_output_layout_create();
desktop->layout_change.notify = handle_layout_change; desktop->layout_change.notify = handle_layout_change;

@ -137,6 +137,7 @@ static void render_wl_shell_surface(struct wlr_wl_shell_surface *surface,
} }
} }
#ifdef WLR_HAS_XWAYLAND
static void render_xwayland_children(struct wlr_xwayland_surface *surface, static void render_xwayland_children(struct wlr_xwayland_surface *surface,
struct roots_desktop *desktop, struct wlr_output *wlr_output, struct roots_desktop *desktop, struct wlr_output *wlr_output,
struct timespec *when) { struct timespec *when) {
@ -149,6 +150,7 @@ static void render_xwayland_children(struct wlr_xwayland_surface *surface,
render_xwayland_children(child, desktop, wlr_output, when); render_xwayland_children(child, desktop, wlr_output, when);
} }
} }
#endif
static void render_decorations(struct roots_view *view, static void render_decorations(struct roots_view *view,
struct roots_desktop *desktop, struct wlr_output *output) { struct roots_desktop *desktop, struct wlr_output *output) {
@ -198,10 +200,12 @@ static void render_view(struct roots_view *view, struct roots_desktop *desktop,
render_wl_shell_surface(view->wl_shell_surface, desktop, wlr_output, render_wl_shell_surface(view->wl_shell_surface, desktop, wlr_output,
when, view->x, view->y, view->rotation, false); when, view->x, view->y, view->rotation, false);
break; break;
#ifdef WLR_HAS_XWAYLAND
case ROOTS_XWAYLAND_VIEW: case ROOTS_XWAYLAND_VIEW:
render_surface(view->wlr_surface, desktop, wlr_output, when, render_surface(view->wlr_surface, desktop, wlr_output, when,
view->x, view->y, view->rotation); view->x, view->y, view->rotation);
break; break;
#endif
} }
} }
@ -215,8 +219,10 @@ static bool has_standalone_surface(struct roots_view *view) {
return wl_list_empty(&view->xdg_surface_v6->popups); return wl_list_empty(&view->xdg_surface_v6->popups);
case ROOTS_WL_SHELL_VIEW: case ROOTS_WL_SHELL_VIEW:
return wl_list_empty(&view->wl_shell_surface->popups); return wl_list_empty(&view->wl_shell_surface->popups);
#ifdef WLR_HAS_XWAYLAND
case ROOTS_XWAYLAND_VIEW: case ROOTS_XWAYLAND_VIEW:
return wl_list_empty(&view->xwayland_surface->children); return wl_list_empty(&view->xwayland_surface->children);
#endif
} }
return true; return true;
} }
@ -264,10 +270,12 @@ static void output_frame_notify(struct wl_listener *listener, void *data) {
// During normal rendering the xwayland window tree isn't traversed // During normal rendering the xwayland window tree isn't traversed
// because all windows are rendered. Here we only want to render // because all windows are rendered. Here we only want to render
// the fullscreen window's children so we have to traverse the tree. // the fullscreen window's children so we have to traverse the tree.
#ifdef WLR_HAS_XWAYLAND
if (view->type == ROOTS_XWAYLAND_VIEW) { if (view->type == ROOTS_XWAYLAND_VIEW) {
render_xwayland_children(view->xwayland_surface, desktop, render_xwayland_children(view->xwayland_surface, desktop,
wlr_output, &now); wlr_output, &now);
} }
#endif
} }
wlr_renderer_end(server->renderer); wlr_renderer_end(server->renderer);
wlr_output_swap_buffers(wlr_output); wlr_output_swap_buffers(wlr_output);

@ -651,10 +651,12 @@ void roots_seat_set_focus(struct roots_seat *seat, struct roots_view *view) {
return; return;
} }
#ifdef WLR_HAS_XWAYLAND
if (view && view->type == ROOTS_XWAYLAND_VIEW && if (view && view->type == ROOTS_XWAYLAND_VIEW &&
view->xwayland_surface->override_redirect) { view->xwayland_surface->override_redirect) {
return; return;
} }
#endif
struct roots_seat_view *seat_view = NULL; struct roots_seat_view *seat_view = NULL;
if (view != NULL) { if (view != NULL) {
seat_view = roots_seat_view_from_view(seat, view); seat_view = roots_seat_view_from_view(seat, view);

Loading…
Cancel
Save