Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package weston for openSUSE:Factory checked in at 2022-12-15 19:26:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/weston (Old) and /work/SRC/openSUSE:Factory/.weston.new.1835 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "weston" Thu Dec 15 19:26:00 2022 rev:29 rq:1043154 version:11 Changes: -------- --- /work/SRC/openSUSE:Factory/weston/weston.changes 2022-09-23 14:15:55.718079877 +0200 +++ /work/SRC/openSUSE:Factory/.weston.new.1835/weston.changes 2022-12-15 19:26:24.144465000 +0100 @@ -1,0 +2,8 @@ +Thu Dec 15 13:47:26 UTC 2022 - Jan Engelhardt <[email protected]> + +- Update to release 11.0.1 + * A few potential crash fixes for xwm and ivi-shell have been + pre-emptively addressed as well some warnings seen with + ivi-shell when closing down weston. + +------------------------------------------------------------------- Old: ---- weston-11.0.0.tar.xz weston-11.0.0.tar.xz.sig weston.keyring New: ---- weston-11.0.1.tar.xz weston-11.0.1.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ weston.spec ++++++ --- /var/tmp/diff_new_pack.U5FuwG/_old 2022-12-15 19:26:24.620467709 +0100 +++ /var/tmp/diff_new_pack.U5FuwG/_new 2022-12-15 19:26:24.624467732 +0100 @@ -19,7 +19,7 @@ Name: weston %define lname libweston0 %define major 11 -%define realver 11.0.0 +%define realver 11.0.1 Version: 11 Release: 0 Summary: Wayland Reference Compositor @@ -28,9 +28,8 @@ URL: https://wayland.freedesktop.org/ #Git-Clone: git://anongit.freedesktop.org/wayland/weston #Git-Web: https://cgit.freedesktop.org/wayland/weston/ -Source: https://gitlab.freedesktop.org/wayland/weston/-/releases/%realver/downloads/weston-%realver.tar.xz -Source2: https://gitlab.freedesktop.org/wayland/weston/-/releases/%realver/downloads/weston-%realver.tar.xz.sig -Source3: %name.keyring +Source: https://gitlab.freedesktop.org/wayland/weston/uploads/f5648c818fba5432edc3ea63c4db4813/weston-11.0.1.tar.xz +Source2: https://gitlab.freedesktop.org/wayland/weston/uploads/bb54e28b5ee47aaccb30a8ffbc31f977/weston-11.0.1.tar.xz.sig BuildRequires: Mesa-libGLESv3-devel BuildRequires: autoconf >= 2.64 BuildRequires: automake >= 1.11 ++++++ weston-11.0.0.tar.xz -> weston-11.0.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/compositor/main.c new/weston-11.0.1/compositor/main.c --- old/weston-11.0.0/compositor/main.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/compositor/main.c 2022-12-14 08:09:30.000000000 +0100 @@ -385,6 +385,7 @@ sigset_t allsigs; pid_t pid; bool ret; + size_t written __attribute__((unused)); weston_log("launching '%s'\n", path); str_printf(&fail_exec, "Error: Couldn't launch client '%s'\n", path); @@ -424,22 +425,23 @@ /* Launch clients as the user. Do not launch clients with wrong euid. */ if (seteuid(getuid()) == -1) { - write(STDERR_FILENO, fail_seteuid, - strlen(fail_seteuid)); + written = write(STDERR_FILENO, fail_seteuid, + strlen(fail_seteuid)); _exit(EXIT_FAILURE); } ret = fdstr_clear_cloexec_fd1(&wayland_socket); if (!ret) { - write(STDERR_FILENO, fail_cloexec, - strlen(fail_cloexec)); + written = write(STDERR_FILENO, fail_cloexec, + strlen(fail_cloexec)); _exit(EXIT_FAILURE); } execve(argp[0], argp, envp); if (fail_exec) - write(STDERR_FILENO, fail_exec, strlen(fail_exec)); + written = write(STDERR_FILENO, fail_exec, + strlen(fail_exec)); _exit(EXIT_FAILURE); default: @@ -2051,7 +2053,8 @@ enum weston_drm_backend_output_mode mode = WESTON_DRM_BACKEND_OUTPUT_PREFERRED; uint32_t transform = WL_OUTPUT_TRANSFORM_NORMAL; - uint32_t max_bpc; + uint32_t max_bpc = 0; + bool max_bpc_specified = false; char *s; char *modeline = NULL; char *gbm_format = NULL; @@ -2063,16 +2066,19 @@ return -1; } - weston_config_section_get_uint(section, "max-bpc", &max_bpc, 16); - api->set_max_bpc(output, max_bpc); - weston_config_section_get_string(section, "mode", &s, "preferred"); + if (weston_config_section_get_uint(section, "max-bpc", &max_bpc, 16) == 0) + max_bpc_specified = true; if (strcmp(s, "off") == 0) { assert(0 && "off was supposed to be pruned"); return -1; } else if (wet->drm_use_current_mode || strcmp(s, "current") == 0) { mode = WESTON_DRM_BACKEND_OUTPUT_CURRENT; + /* If mode=current and no max-bpc was specfied on the .ini file, + use current max_bpc so full modeset is not done. */ + if (!max_bpc_specified) + max_bpc = 0; } else if (strcmp(s, "preferred") != 0) { modeline = s; s = NULL; @@ -2086,6 +2092,8 @@ } free(modeline); + api->set_max_bpc(output, max_bpc); + if (count_remaining_heads(output, NULL) == 1) { struct weston_head *head = weston_output_get_first_head(output); transform = weston_head_get_transform(head); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/compositor/xwayland.c new/weston-11.0.1/compositor/xwayland.c --- old/weston-11.0.0/compositor/xwayland.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/compositor/xwayland.c 2022-12-14 08:09:30.000000000 +0100 @@ -110,6 +110,7 @@ char *const *envp; char *const *argp; bool ret; + size_t written __attribute__ ((unused)); if (os_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, wayland_socket.fds) < 0) { weston_log("wl connection socketpair failed\n"); @@ -174,8 +175,8 @@ /* execve does not return on success, so it failed */ if (exec_failure_msg) { - write(STDERR_FILENO, exec_failure_msg, - strlen(exec_failure_msg)); + written = write(STDERR_FILENO, exec_failure_msg, + strlen(exec_failure_msg)); } _exit(EXIT_FAILURE); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/doc/sphinx/doxygen.ini.in new/weston-11.0.1/doc/sphinx/doxygen.ini.in --- old/weston-11.0.0/doc/sphinx/doxygen.ini.in 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/doc/sphinx/doxygen.ini.in 2022-12-14 08:09:30.000000000 +0100 @@ -759,7 +759,7 @@ # a warning is encountered. # The default value is: NO. -WARN_AS_ERROR = YES +WARN_AS_ERROR = @MESON_WERROR@ # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/doc/sphinx/meson.build new/weston-11.0.1/doc/sphinx/meson.build --- old/weston-11.0.0/doc/sphinx/meson.build 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/doc/sphinx/meson.build 2022-12-14 08:09:30.000000000 +0100 @@ -39,6 +39,7 @@ doxy_conf_data = configuration_data() doxy_conf_data.set('SRC_ROOT', meson.source_root()) doxy_conf_data.set('OUTPUT_DIR', doxygen_database) +doxy_conf_data.set('MESON_WERROR', get_option('werror') == true ? 'YES' : 'NO') doxygen_conf_weston = configure_file( input: 'doxygen.ini.in', output: 'doxygen.ini', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/include/libweston/backend-drm.h new/weston-11.0.1/include/libweston/backend-drm.h --- old/weston-11.0.0/include/libweston/backend-drm.h 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/include/libweston/backend-drm.h 2022-12-14 08:09:30.000000000 +0100 @@ -84,7 +84,8 @@ * The property is used for working around faulty sink hardware like * monitors or media converters that mishandle the kernel driver * chosen bits-per-channel on the physical link. When having trouble, - * try a lower value like 8. + * try a lower value like 8. A value of 0 means that the current max + * bpc will be reprogrammed. * * The value actually used in KMS is silently clamped to the range the * KMS driver claims to support. The default value is 16. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/ivi-shell/hmi-controller.c new/weston-11.0.1/ivi-shell/hmi-controller.c --- old/weston-11.0.0/ivi-shell/hmi-controller.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/ivi-shell/hmi-controller.c 2022-12-14 08:09:30.000000000 +0100 @@ -738,6 +738,8 @@ struct hmi_controller *hmi_ctrl = container_of(listener, struct hmi_controller, destroy_listener); + wl_list_remove(&hmi_ctrl->destroy_listener.link); + wl_list_for_each_safe(link, next, &hmi_ctrl->workspace_fade.layer_list, link) { wl_list_remove(&link->link); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/ivi-shell/ivi-layout.c new/weston-11.0.1/ivi-shell/ivi-layout.c --- old/weston-11.0.0/ivi-shell/ivi-layout.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/ivi-shell/ivi-layout.c 2022-12-14 08:09:30.000000000 +0100 @@ -1192,15 +1192,14 @@ else length--; } + if (length == 0) { + free(*ppArray); + *ppArray = NULL; + } } *pLength = length; - if (!length) { - free(*ppArray); - *ppArray = NULL; - } - return IVI_SUCCEEDED; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/ivi-shell/ivi-shell.c new/weston-11.0.1/ivi-shell/ivi-shell.c --- old/weston-11.0.0/ivi-shell/ivi-shell.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/ivi-shell/ivi-shell.c 2022-12-14 08:09:30.000000000 +0100 @@ -346,7 +346,6 @@ wl_list_remove(&shell->destroy_listener.link); wl_list_remove(&shell->wake_listener.link); - weston_desktop_destroy(shell->desktop); wl_list_for_each_safe(ivisurf, next, &shell->ivi_surface_list, link) { if (ivisurf->layout_surface != NULL) @@ -357,6 +356,7 @@ ivi_layout_fini(); + weston_desktop_destroy(shell->desktop); free(shell); } @@ -507,6 +507,8 @@ ivisurf->layout_surface = layout_surface; ivisurf->surface = weston_surf; + wl_list_insert(&shell->ivi_surface_list, &ivisurf->link); + weston_desktop_surface_set_user_data(surface, ivisurf); } @@ -519,8 +521,14 @@ assert(ivisurf != NULL); + weston_desktop_surface_set_user_data(surface, NULL); + if (ivisurf->layout_surface) layout_surface_cleanup(ivisurf); + + wl_list_remove(&ivisurf->link); + + free(ivisurf); } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/kiosk-shell/kiosk-shell.c new/weston-11.0.1/kiosk-shell/kiosk-shell.c --- old/weston-11.0.0/kiosk-shell/kiosk-shell.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/kiosk-shell/kiosk-shell.c 2022-12-14 08:09:30.000000000 +0100 @@ -413,6 +413,7 @@ weston_layer_entry_insert(&shsurf->shell->normal_layer.view_list, &shsurf->view->layer_link); weston_view_geometry_dirty(shsurf->view); + weston_view_update_transform(shsurf->view); weston_surface_damage(shsurf->view->surface); } @@ -1068,13 +1069,13 @@ mod = weston_shell_get_binding_modifier(shell->config, MODIFIER_SUPER); - weston_compositor_add_button_binding(shell->compositor, BTN_LEFT, mod, + weston_compositor_add_button_binding(shell->compositor, BTN_LEFT, 0, kiosk_shell_click_to_activate_binding, shell); - weston_compositor_add_button_binding(shell->compositor, BTN_RIGHT, mod, + weston_compositor_add_button_binding(shell->compositor, BTN_RIGHT, 0, kiosk_shell_click_to_activate_binding, shell); - weston_compositor_add_touch_binding(shell->compositor, mod, + weston_compositor_add_touch_binding(shell->compositor, 0, kiosk_shell_touch_to_activate_binding, shell); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/libweston/backend-drm/drm-internal.h new/weston-11.0.1/libweston/backend-drm/drm-internal.h --- old/weston-11.0.0/libweston/backend-drm/drm-internal.h 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/libweston/backend-drm/drm-internal.h 2022-12-14 08:09:30.000000000 +0100 @@ -517,6 +517,7 @@ struct backlight *backlight; drmModeModeInfo inherited_mode; /**< Original mode on the connector */ + uint32_t inherited_max_bpc; /**< Original max_bpc on the connector */ uint32_t inherited_crtc_id; /**< Original CRTC assignment */ }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/libweston/backend-drm/drm.c new/weston-11.0.1/libweston/backend-drm/drm.c --- old/weston-11.0.0/libweston/backend-drm/drm.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/libweston/backend-drm/drm.c 2022-12-14 08:09:30.000000000 +0100 @@ -1388,6 +1388,12 @@ drmModeFreeCrtc(crtc); } + /* Get the current max_bpc that's currently configured to + * this connector. */ + head->inherited_max_bpc = drm_property_get_value( + &head->connector.props[WDRM_CONNECTOR_MAX_BPC], + head->connector.props_drm, 0); + return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/libweston/backend-drm/kms.c new/weston-11.0.1/libweston/backend-drm/kms.c --- old/weston-11.0.0/libweston/backend-drm/kms.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/libweston/backend-drm/kms.c 2022-12-14 08:09:30.000000000 +0100 @@ -912,20 +912,29 @@ drmModeAtomicReq *req) { const struct drm_property_info *info; + struct drm_head *head; + struct drm_backend *backend = output->device->backend; uint64_t max_bpc; uint64_t a, b; if (!drm_connector_has_prop(connector, WDRM_CONNECTOR_MAX_BPC)) return 0; - info = &connector->props[WDRM_CONNECTOR_MAX_BPC]; - assert(info->flags & DRM_MODE_PROP_RANGE); - assert(info->num_range_values == 2); - a = info->range_values[0]; - b = info->range_values[1]; - assert(a <= b); + if (output->max_bpc == 0) { + /* A value of 0 means that the current max_bpc must be programmed. */ + head = drm_head_find_by_connector(backend, connector->connector_id); + max_bpc = head->inherited_max_bpc; + } else { + info = &connector->props[WDRM_CONNECTOR_MAX_BPC]; + assert(info->flags & DRM_MODE_PROP_RANGE); + assert(info->num_range_values == 2); + a = info->range_values[0]; + b = info->range_values[1]; + assert(a <= b); + + max_bpc = MAX(a, MIN(output->max_bpc, b)); + } - max_bpc = MAX(a, MIN(output->max_bpc, b)); return connector_add_prop(req, connector, WDRM_CONNECTOR_MAX_BPC, max_bpc); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/libweston/backend-rdp/rdpclip.c new/weston-11.0.1/libweston/backend-rdp/rdpclip.c --- old/weston-11.0.0/libweston/backend-rdp/rdpclip.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/libweston/backend-rdp/rdpclip.c 2022-12-14 08:09:30.000000000 +0100 @@ -1111,9 +1111,9 @@ } } else { source->state = RDP_CLIPBOARD_SOURCE_FAILED; - weston_log("RDP %s (%p:%s) specified format \"%s\" index:%d formatId:%d is not supported by client\n", + weston_log("RDP %s (%p:%s) specified format \"%s\" index:%d is not supported by client\n", __func__, source, clipboard_data_source_state_to_string(source), - mime_type, index, source->client_format_id_table[index]); + mime_type, index); goto error_return_close_fd; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/libweston/backend-wayland/wayland.c new/weston-11.0.1/libweston/backend-wayland/wayland.c --- old/weston-11.0.0/libweston/backend-wayland/wayland.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/libweston/backend-wayland/wayland.c 2022-12-14 08:09:30.000000000 +0100 @@ -2162,10 +2162,6 @@ timespec_from_msec(&ts, time); input->touch_points--; - if (input->touch_points == 0) { - input->touch_focus = NULL; - input->touch_active = false; - } if (!output) return; @@ -2228,6 +2224,11 @@ return; notify_touch_frame(input->touch_device); + + if (input->touch_points == 0) { + input->touch_focus = NULL; + input->touch_active = false; + } } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/libweston/input.c new/weston-11.0.1/libweston/input.c --- old/weston-11.0.0/libweston/input.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/libweston/input.c 2022-12-14 08:09:30.000000000 +0100 @@ -75,6 +75,15 @@ enum motion_direction blocking_dir; }; +struct pending_touch { + struct weston_touch_device *touch_device; + bool pending_focus_touch_reset; + + struct wl_list touch_link; +}; + +static struct wl_list pending_touch_list; + static void maybe_warp_confined_pointer(struct weston_pointer_constraint *constraint); @@ -143,6 +152,7 @@ const struct weston_touch_device_ops *ops) { struct weston_touch_device *device; + struct pending_touch *pt; assert(syspath); if (ops) { @@ -164,20 +174,55 @@ return NULL; } + pt = zalloc(sizeof(*pt)); + if (!pt) { + free(device); + return NULL; + } + + device->backend_data = backend_data; device->ops = ops; + pt->touch_device = device; + pt->pending_focus_touch_reset = false; + device->aggregate = touch; wl_list_insert(touch->device_list.prev, &device->link); + wl_list_insert(&pending_touch_list, &pt->touch_link); return device; } +static struct pending_touch * +weston_touch_get_pending(struct weston_touch_device *dev) +{ + struct pending_touch *pt_iter = NULL; + struct pending_touch *pt = NULL; + + wl_list_for_each(pt_iter, &pending_touch_list, touch_link) { + if (pt_iter->touch_device == dev) { + pt = pt_iter; + break; + } + } + + return pt; +} + /** Destroy the touch device. */ WL_EXPORT void weston_touch_device_destroy(struct weston_touch_device *device) { + struct pending_touch *pt = NULL; + wl_list_remove(&device->link); + pt = weston_touch_get_pending(device); + + assert(pt); + wl_list_remove(&pt->touch_link); + free(pt); + wl_signal_emit(&device->destroy_signal, device); free(device->syspath); free(device); @@ -2388,6 +2433,7 @@ struct weston_touch_grab *grab = device->aggregate->grab; struct weston_compositor *ec = device->aggregate->seat->compositor; struct weston_view *ev; + struct pending_touch *pt = NULL; wl_fixed_t sx, sy; wl_fixed_t x = wl_fixed_from_double(double_x); wl_fixed_t y = wl_fixed_from_double(double_y); @@ -2438,8 +2484,9 @@ break; case WL_TOUCH_UP: grab->interface->up(grab, time, touch_id); - if (touch->num_tp == 0) - weston_touch_set_focus(touch, NULL); + pt = weston_touch_get_pending(device); + assert(pt); + pt->pending_focus_touch_reset = true; break; } } @@ -2628,12 +2675,22 @@ notify_touch_frame(struct weston_touch_device *device) { struct weston_touch_grab *grab; + struct pending_touch *pt; switch (weston_touch_device_get_mode(device)) { case WESTON_TOUCH_MODE_NORMAL: case WESTON_TOUCH_MODE_PREP_CALIB: grab = device->aggregate->grab; grab->interface->frame(grab); + + pt = weston_touch_get_pending(device); + assert(pt); + + if (pt->pending_focus_touch_reset) { + if (grab->touch->num_tp == 0) + weston_touch_set_focus(grab->touch, NULL); + pt->pending_focus_touch_reset = false; + } break; case WESTON_TOUCH_MODE_CALIB: case WESTON_TOUCH_MODE_PREP_NORMAL: @@ -5059,6 +5116,8 @@ int weston_input_init(struct weston_compositor *compositor) { + wl_list_init(&pending_touch_list); + if (!wl_global_create(compositor->wl_display, &zwp_relative_pointer_manager_v1_interface, 1, compositor, bind_relative_pointer_manager)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/libweston/screenshooter.c new/weston-11.0.1/libweston/screenshooter.c --- old/weston-11.0.0/libweston/screenshooter.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/libweston/screenshooter.c 2022-12-14 08:09:30.000000000 +0100 @@ -45,7 +45,8 @@ #include "wcap/wcap-decode.h" struct screenshooter_frame_listener { - struct wl_listener listener; + struct wl_listener frame_listener; + struct wl_listener buffer_destroy_listener; struct weston_buffer *buffer; struct weston_output *output; weston_screenshooter_done_func_t done; @@ -120,7 +121,8 @@ { struct screenshooter_frame_listener *l = container_of(listener, - struct screenshooter_frame_listener, listener); + struct screenshooter_frame_listener, + frame_listener); struct weston_output *output = l->output; struct weston_compositor *compositor = output->compositor; const pixman_format_code_t pixman_format = @@ -130,6 +132,8 @@ weston_output_disable_planes_decr(output); wl_list_remove(&listener->link); + wl_list_remove(&l->buffer_destroy_listener.link); + stride = l->buffer->width * (PIXMAN_FORMAT_BPP(pixman_format) / 8); pixels = malloc(stride * l->buffer->height); @@ -177,6 +181,22 @@ free(l); } +static void +buffer_destroy_handle(struct wl_listener *listener, void *data) +{ + struct screenshooter_frame_listener *l = + container_of(listener, + struct screenshooter_frame_listener, + buffer_destroy_listener); + + weston_output_disable_planes_decr(l->output); + wl_list_remove(&listener->link); + wl_list_remove(&l->frame_listener.link); + l->done(l->data, WESTON_SCREENSHOOTER_BAD_BUFFER); + + free(l); +} + WL_EXPORT int weston_screenshooter_shoot(struct weston_output *output, struct weston_buffer *buffer, @@ -205,8 +225,13 @@ l->output = output; l->done = done; l->data = data; - l->listener.notify = screenshooter_frame_notify; - wl_signal_add(&output->frame_signal, &l->listener); + + l->frame_listener.notify = screenshooter_frame_notify; + wl_signal_add(&output->frame_signal, &l->frame_listener); + + l->buffer_destroy_listener.notify = buffer_destroy_handle; + wl_signal_add(&buffer->destroy_signal, &l->buffer_destroy_listener); + weston_output_disable_planes_incr(output); weston_output_schedule_repaint(output); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/man/weston-drm.man new/weston-11.0.1/man/weston-drm.man --- old/weston-11.0.0/man/weston-drm.man 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/man/weston-drm.man 2022-12-14 08:09:30.000000000 +0100 @@ -172,7 +172,7 @@ limits the driver chosen link bits-per-channel which may be useful for working around sink hardware (e.g. monitor) limitations. The default is 16 which is practically unlimited. If you need to work around hardware issues, try a lower -value like 8. +value like 8. A value of 0 means that the current max bpc will be reprogrammed. .SS Section remote-output .TP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/meson.build new/weston-11.0.1/meson.build --- old/weston-11.0.0/meson.build 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/meson.build 2022-12-14 08:09:30.000000000 +0100 @@ -1,6 +1,6 @@ project('weston', 'c', - version: '11.0.0', + version: '11.0.1', default_options: [ 'warning_level=3', 'c_std=gnu99', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/shared/xalloc.h new/weston-11.0.1/shared/xalloc.h --- old/weston-11.0.0/shared/xalloc.h 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/shared/xalloc.h 2022-12-14 08:09:30.000000000 +0100 @@ -40,13 +40,14 @@ abort_oom_if_null(void *p) { static const char oommsg[] = ": out of memory\n"; + size_t written __attribute__((unused)); if (p) return p; - write(STDERR_FILENO, program_invocation_short_name, - strlen(program_invocation_short_name)); - write(STDERR_FILENO, oommsg, strlen(oommsg)); + written = write(STDERR_FILENO, program_invocation_short_name, + strlen(program_invocation_short_name)); + written = write(STDERR_FILENO, oommsg, strlen(oommsg)); abort(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/xwayland/selection.c new/weston-11.0.1/xwayland/selection.c --- old/weston-11.0.0/xwayland/selection.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/xwayland/selection.c 2022-12-14 08:09:30.000000000 +0100 @@ -199,6 +199,9 @@ char *logstr; size_t logsize; + if (!seat) + return; + cookie = xcb_get_property(wm->conn, 1, /* delete */ wm->selection_window, @@ -631,6 +634,9 @@ xfixes_selection_notify->owner); if (xfixes_selection_notify->owner == XCB_WINDOW_NONE) { + if (!seat) + return 1; + if (wm->selection_owner != wm->selection_window) { /* A real X client selection went away, not our * proxy selection. Clear the wayland selection. */ @@ -714,6 +720,8 @@ wm->selection_window, wm->atom.clipboard, XCB_TIME_CURRENT_TIME); + + xcb_flush(wm->conn); } void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/weston-11.0.0/xwayland/window-manager.c new/weston-11.0.1/xwayland/window-manager.c --- old/weston-11.0.0/xwayland/window-manager.c 2022-09-22 18:16:14.000000000 +0200 +++ new/weston-11.0.1/xwayland/window-manager.c 2022-12-14 08:09:30.000000000 +0100 @@ -2937,6 +2937,9 @@ weston_log("XWM warning: win %d did not see map request\n", window->id); + if (window->size_hints.flags & (USPosition | PPosition)) + return true; + return window->map_request_x != 0 || window->map_request_y != 0; }
