mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-04 20:55:58 +01:00
Merge remote-tracking branch 'upstream/master' into output-damage
This commit is contained in:
commit
1ee61dbd0f
11 changed files with 87 additions and 26 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
44
meson.build
44
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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue