Upgrade Smithay to pinned upstream Git

Pin 8a270232f1bfc416c781273c98a3f52a812a0bba and adapt protocol dispatch, input timestamps, configure state and rendering APIs. Preserve custom lock and toplevel validation, compositor-owned key repeats, and valid layer remapping sequences.

Add native icon-buffer lifecycle regressions for the GoLand and Spotify launch failure.
This commit is contained in:
Samuel Onoja committed 2026-10-20 15:40:34 +01:00
1 parent 17df20089b
commit 90879145b2
44 files changed
+1069 -634

No files matched your search

+5 -4
View File
@@ -474,18 +474,18 @@ fn configure_libinput_device(state: &Ferese, device: &mut LibinputDevice) {
if device.config_tap_finger_count() > 0
&& let Err(error) = device.config_tap_set_enabled(settings.tap)
{
tracing::warn!(device = device.name(), ?error, "failed to configure tap-to-click");
tracing::warn!(device = %device.name(), ?error, "failed to configure tap-to-click");
}
if device.config_scroll_has_natural_scroll()
&& let Err(error) = device.config_scroll_set_natural_scroll_enabled(settings.natural_scroll)
{
tracing::warn!(device = device.name(), ?error, "failed to configure natural scrolling");
tracing::warn!(device = %device.name(), ?error, "failed to configure natural scrolling");
}
if device.config_dwt_is_available()
&& let Err(error) = device.config_dwt_set_enabled(settings.disable_while_typing)
{
tracing::warn!(
device = device.name(),
device = %device.name(),
?error,
"failed to configure disable-while-typing"
);
@@ -2264,7 +2264,7 @@ fn create_direct_output(
drm_surface,
None,
allocator,
GbmFramebufferExporter::new(gbm.clone(), Some(render_node)),
GbmFramebufferExporter::new(gbm.clone(), Some(render_node).into()),
[Fourcc::Argb8888, Fourcc::Abgr8888],
renderer.dmabuf_formats(),
drm.cursor_size(),
@@ -2341,6 +2341,7 @@ fn create_output(
let output = Output::new(
name,
PhysicalProperties {
serial_number: String::new(),
size: (physical_size.0 as i32, physical_size.1 as i32).into(),
subpixel: Subpixel::from(connector.subpixel()),
make: edid_identity
@@ -175,6 +175,7 @@ mod tests {
let output = Output::new(
"capture".into(),
PhysicalProperties {
serial_number: String::new(),
size: (0, 0).into(),
subpixel: Subpixel::Unknown,
make: "test".into(),
@@ -273,6 +274,7 @@ mod failure_tests {
let output = Output::new(
"capture-failure".into(),
smithay::output::PhysicalProperties {
serial_number: String::new(),
size: (0, 0).into(),
subpixel: smithay::output::Subpixel::Unknown,
make: "test".into(),
@@ -292,6 +294,7 @@ mod failure_tests {
let other_output = Output::new(
"other-capture".into(),
smithay::output::PhysicalProperties {
serial_number: String::new(),
size: (0, 0).into(),
subpixel: smithay::output::Subpixel::Unknown,
make: "test".into(),
+7 -2
View File
@@ -73,7 +73,7 @@ impl OutputFeedback {
// without ALLOW_PRIMARY_PLANE_SCANOUT_ANY Smithay compares the full
// format with the swapchain. Renderer-only formats remain in fallback.
match DmabufFeedbackBuilder::new(self.render_device, self.render_formats.iter().copied())
.add_preference_tranche(self.scanout_device, Some(TrancheFlags::Scanout), [format])
.add_preference_tranche(self.scanout_device, TrancheFlags::Scanout, [format], 4..=6)
.build()
{
Ok(feedback) => self.preferred = Some(feedback),
@@ -260,6 +260,7 @@ mod tests {
states.states.insert(
id.clone(),
RenderElementState {
needs_capture: false,
visible_area: 100,
presentation_state: RenderElementPresentationState::Rendering { reason: None },
},
@@ -287,7 +288,7 @@ mod tests {
assert!(o.preferred.is_none());
o.observe_format(Some(linear));
let expected = DmabufFeedbackBuilder::new(10, [linear, other])
.add_preference_tranche(20, Some(TrancheFlags::Scanout), [linear])
.add_preference_tranche(20, TrancheFlags::Scanout, [linear], 4..=6)
.build()
.unwrap();
assert_eq!(o.preferred.as_ref(), Some(&expected));
@@ -413,6 +414,7 @@ mod tests {
for (state, expected) in [
(
RenderElementState {
needs_capture: false,
visible_area: 100,
presentation_state: RenderElementPresentationState::Rendering {
reason: Some(RenderingReason::FormatUnsupported),
@@ -422,6 +424,7 @@ mod tests {
),
(
RenderElementState {
needs_capture: false,
visible_area: 100,
presentation_state: RenderElementPresentationState::Rendering {
reason: Some(RenderingReason::ScanoutFailed),
@@ -431,6 +434,7 @@ mod tests {
),
(
RenderElementState {
needs_capture: false,
visible_area: 0,
presentation_state: RenderElementPresentationState::Skipped,
},
@@ -438,6 +442,7 @@ mod tests {
),
(
RenderElementState {
needs_capture: false,
visible_area: 100,
presentation_state: RenderElementPresentationState::ZeroCopy,
},
+2
View File
@@ -28,6 +28,7 @@ pub(super) fn elements(
Output::new(
"mirror-canvas".into(),
PhysicalProperties {
serial_number: String::new(),
size: (0, 0).into(),
subpixel: Subpixel::Unknown,
make: "Ferese".into(),
@@ -121,6 +122,7 @@ mod tests {
Output::new(
name.into(),
PhysicalProperties {
serial_number: String::new(),
size: (0, 0).into(),
subpixel: Subpixel::Unknown,
make: "test".into(),
+4 -3
View File
@@ -279,6 +279,7 @@ mod tests {
let output = Output::new(
format!("cursor-test-{index}"),
PhysicalProperties {
serial_number: String::new(),
size: (0, 0).into(),
subpixel: Subpixel::Unknown,
make: "test".into(),
@@ -313,7 +314,7 @@ mod tests {
&MotionEvent {
location: (x, 500.0).into(),
serial: SERIAL_COUNTER.next_serial(),
time: 0,
time: smithay::backend::input::InputTime::from_millis(0),
},
);
let current = [
@@ -337,7 +338,7 @@ mod tests {
&MotionEvent {
location: (1919.0, 500.0).into(),
serial: SERIAL_COUNTER.next_serial(),
time: 0,
time: smithay::backend::input::InputTime::from_millis(0),
},
);
assert!(cursor_on_output(&state, &outputs[0]));
@@ -351,7 +352,7 @@ mod tests {
&MotionEvent {
location: (x, 500.0).into(),
serial: SERIAL_COUNTER.next_serial(),
time: 0,
time: smithay::backend::input::InputTime::from_millis(0),
},
);
assert!(
@@ -83,7 +83,7 @@ pub(super) fn validate_device(device: &DirectDevice, scan: &OutputScan) -> Resul
let mut buffers = Vec::new();
let mut framebuffers = Vec::new();
let mut allocator = GbmAllocator::new(device.gbm.clone(), GbmBufferFlags::RENDERING | GbmBufferFlags::SCANOUT);
let exporter = GbmFramebufferExporter::new(device.gbm.clone(), Some(device.render_node));
let exporter = GbmFramebufferExporter::new(device.gbm.clone(), Some(device.render_node).into());
let mut used_planes = HashSet::new();
let desired_crtcs = scan
.selections