diff --git a/.gitignore b/.gitignore index d4edde88..48945461 100644 --- a/.gitignore +++ b/.gitignore @@ -4,12 +4,10 @@ Makefile cmake_install.cmake install_manifest.txt .clang_complete -*.swp *.o *.a bin/ test/ build/ -.lvimrc wayland-*-protocol.* wlr-example.ini diff --git a/.travis.yml b/.travis.yml index f6bbd7f4..0028de93 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,12 @@ compiler: - gcc - clang +# Settings to try +env: + matrix: + - OPTIONS="-Denable_libcap=true -Denable_systemd=true -Denable_elogind=false -Denable_xwayland=true" + - OPTIONS="-Denable_libcap=false -Denable_systemd=false -Denable_elogind=false -Denable_xwayland=false" + arch: packages: - meson @@ -19,7 +25,7 @@ arch: - xcb-util-image - libcap script: - - "meson build" + - "meson build $OPTIONS" - "ninja -C build" script: diff --git a/backend/drm/backend.c b/backend/drm/backend.c index 112b2b61..c0e49f18 100644 --- a/backend/drm/backend.c +++ b/backend/drm/backend.c @@ -168,6 +168,7 @@ struct wlr_backend *wlr_drm_backend_create(struct wl_display *display, return &drm->backend; error_event: + wl_list_remove(&drm->session_signal.link); wl_event_source_remove(drm->drm_event); error_fd: wlr_session_close_file(drm->session, drm->fd); diff --git a/backend/drm/drm.c b/backend/drm/drm.c index b9aae948..024bc929 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -469,7 +469,7 @@ static bool wlr_drm_connector_set_mode(struct wlr_output *output, if (!crtc) { return false; } - wlr_log(L_DEBUG, "%s: crtc=%ju ovr=%jd pri=%jd cur=%jd", conn->output.name, + wlr_log(L_DEBUG, "%s: crtc=%td ovr=%td pri=%td cur=%td", conn->output.name, crtc - drm->crtcs, crtc->overlay ? crtc->overlay - drm->overlay_planes : -1, crtc->primary ? crtc->primary - drm->primary_planes : -1, diff --git a/backend/meson.build b/backend/meson.build index 9931f546..9c8f5852 100644 --- a/backend/meson.build +++ b/backend/meson.build @@ -33,11 +33,11 @@ else backend_files += files('session/direct.c') endif -if systemd.found() +if systemd.found() and get_option('enable_systemd') backend_files += files('session/logind.c') endif -if elogind.found() +if elogind.found() and get_option('enable_elogind') backend_files += files('session/logind.c') endif diff --git a/include/rootston/view.h b/include/rootston/view.h index 9312c8c3..f6968c7a 100644 --- a/include/rootston/view.h +++ b/include/rootston/view.h @@ -54,7 +54,9 @@ struct roots_xwayland_surface { enum roots_view_type { ROOTS_WL_SHELL_VIEW, ROOTS_XDG_SHELL_V6_VIEW, +#ifdef WLR_HAS_XWAYLAND ROOTS_XWAYLAND_VIEW, +#endif }; struct roots_view { diff --git a/meson.build b/meson.build index aee4b11b..55b07efa 100644 --- a/meson.build +++ b/meson.build @@ -153,6 +153,22 @@ wlroots = declare_dependency( include_directories: wlr_inc, ) + +summary = [ + '', + '----------------', + 'wlroots @0@'.format(meson.project_version()), + '', + ' libcap: @0@'.format(get_option('enable_libcap')), + ' systemd: @0@'.format(get_option('enable_systemd')), + ' elogind: @0@'.format(get_option('enable_elogind')), + ' xwayland: @0@'.format(get_option('enable_xwayland')), + '----------------', + '' +] +message('\n'.join(summary)) + + subdir('rootston') subdir('examples') @@ -164,3 +180,31 @@ pkgconfig.generate( name: meson.project_name(), description: 'Wayland compositor library', ) + +git = find_program('git', required: false) +if git.found() + all_files = run_command( + git, + ['--git-dir=@0@/.git'.format(meson.source_root()), + 'ls-files', + ':/*.[ch]']) + all_files = files(all_files.stdout().split()) + + etags = find_program('etags', required: false) + if etags.found() and all_files.length() > 0 + custom_target('etags', + build_by_default: true, + input: all_files, + output: 'TAGS', + command: [etags.path(), '-o', 'TAGS'] + all_files) + endif + + ctags = find_program('ctags', required: false) + if ctags.found() and all_files.length() > 0 + custom_target('ctags', + build_by_default: true, + input: all_files, + output: 'tags', + command: [ctags.path(), '-o', 'tags'] + all_files) + endif +endif diff --git a/rootston/desktop.c b/rootston/desktop.c index 9abcfa33..5fd4a5cc 100644 --- a/rootston/desktop.c +++ b/rootston/desktop.c @@ -628,6 +628,24 @@ struct roots_desktop *desktop_create(struct roots_server *server, desktop->server = server; desktop->config = config; + desktop->layout = wlr_output_layout_create(); + desktop->layout_change.notify = handle_layout_change; + wl_signal_add(&desktop->layout->events.change, &desktop->layout_change); + + desktop->compositor = wlr_compositor_create(server->wl_display, + server->renderer); + + desktop->xdg_shell_v6 = wlr_xdg_shell_v6_create(server->wl_display); + wl_signal_add(&desktop->xdg_shell_v6->events.new_surface, + &desktop->xdg_shell_v6_surface); + desktop->xdg_shell_v6_surface.notify = handle_xdg_shell_v6_surface; + + desktop->wl_shell = wlr_wl_shell_create(server->wl_display); + wl_signal_add(&desktop->wl_shell->events.new_surface, + &desktop->wl_shell_surface); + desktop->wl_shell_surface.notify = handle_wl_shell_surface; + +#ifdef WLR_HAS_XWAYLAND const char *cursor_theme = NULL; const char *cursor_default = ROOTS_XCURSOR_DEFAULT; struct roots_cursor_config *cc = @@ -648,24 +666,6 @@ struct roots_desktop *desktop_create(struct roots_server *server, return NULL; } - desktop->layout = wlr_output_layout_create(); - desktop->layout_change.notify = handle_layout_change; - wl_signal_add(&desktop->layout->events.change, &desktop->layout_change); - - desktop->compositor = wlr_compositor_create(server->wl_display, - server->renderer); - - desktop->xdg_shell_v6 = wlr_xdg_shell_v6_create(server->wl_display); - wl_signal_add(&desktop->xdg_shell_v6->events.new_surface, - &desktop->xdg_shell_v6_surface); - desktop->xdg_shell_v6_surface.notify = handle_xdg_shell_v6_surface; - - desktop->wl_shell = wlr_wl_shell_create(server->wl_display); - wl_signal_add(&desktop->wl_shell->events.new_surface, - &desktop->wl_shell_surface); - desktop->wl_shell_surface.notify = handle_wl_shell_surface; - -#ifdef WLR_HAS_XWAYLAND if (config->xwayland) { desktop->xwayland = wlr_xwayland_create(server->wl_display, desktop->compositor); diff --git a/rootston/output.c b/rootston/output.c index f0710b11..c46ba115 100644 --- a/rootston/output.c +++ b/rootston/output.c @@ -120,15 +120,18 @@ static void view_for_each_surface(struct roots_view *view, wl_shell_surface_for_each_surface(view->wl_shell_surface, view->x, view->y, view->rotation, false, iterator, user_data); break; +#ifdef WLR_HAS_XWAYLAND case ROOTS_XWAYLAND_VIEW: if (view->wlr_surface != NULL) { surface_for_each_surface(view->wlr_surface, view->x, view->y, view->rotation, iterator, user_data); } break; +#endif } } +#ifdef WLR_HAS_XWAYLAND static void xwayland_children_for_each_surface( struct wlr_xwayland_surface *surface, surface_iterator_func_t iterator, void *user_data) { @@ -141,6 +144,7 @@ static void xwayland_children_for_each_surface( xwayland_children_for_each_surface(child, iterator, user_data); } } +#endif struct render_data { @@ -333,8 +337,10 @@ static bool has_standalone_surface(struct roots_view *view) { return wl_list_empty(&view->xdg_surface_v6->popups); case ROOTS_WL_SHELL_VIEW: return wl_list_empty(&view->wl_shell_surface->popups); +#ifdef WLR_HAS_XWAYLAND case ROOTS_XWAYLAND_VIEW: return wl_list_empty(&view->xwayland_surface->children); +#endif } return true; } @@ -444,10 +450,12 @@ static void render_output(struct roots_output *output) { // During normal rendering the xwayland window tree isn't traversed // because all windows are rendered. Here we only want to render // the fullscreen window's children so we have to traverse the tree. +#ifdef WLR_HAS_XWAYLAND if (view->type == ROOTS_XWAYLAND_VIEW) { xwayland_children_for_each_surface(view->xwayland_surface, render_surface, &data); } +#endif goto renderer_end; } diff --git a/rootston/seat.c b/rootston/seat.c index 7ff46f98..55866ce6 100644 --- a/rootston/seat.c +++ b/rootston/seat.c @@ -732,10 +732,12 @@ void roots_seat_set_focus(struct roots_seat *seat, struct roots_view *view) { return; } +#ifdef WLR_HAS_XWAYLAND if (view && view->type == ROOTS_XWAYLAND_VIEW && view->xwayland_surface->override_redirect) { return; } +#endif struct roots_seat_view *seat_view = NULL; if (view != NULL) { seat_view = roots_seat_view_from_view(seat, view); diff --git a/types/wlr_keyboard.c b/types/wlr_keyboard.c index b0dc97aa..29552eb4 100644 --- a/types/wlr_keyboard.c +++ b/types/wlr_keyboard.c @@ -215,13 +215,13 @@ void wlr_keyboard_set_keymap(struct wlr_keyboard *kb, } kb->keymap_fd = os_create_anonymous_file(kb->keymap_size); if (kb->keymap_fd < 0) { - wlr_log(L_ERROR, "creating a keymap file for %lu bytes failed", kb->keymap_size); + wlr_log(L_ERROR, "creating a keymap file for %zu bytes failed", kb->keymap_size); goto err; } void *ptr = mmap(NULL, kb->keymap_size, PROT_READ | PROT_WRITE, MAP_SHARED, kb->keymap_fd, 0); if (ptr == (void*)-1) { - wlr_log(L_ERROR, "failed to mmap() %lu bytes", kb->keymap_size); + wlr_log(L_ERROR, "failed to mmap() %zu bytes", kb->keymap_size); goto err; } strcpy(ptr, keymap_str);