linux: Fix panic missing screen mode for crtc specified mode ID (#9106)

Fix panic caused by missing screen mode for specified crtc mode id #9105
by searching over all crtcs instead of using the first one which may be
invalid.
This commit is contained in:
Vitor Ramos 2024-03-11 17:04:05 +01:00 committed by GitHub
parent 95b311cb90
commit 3bd9d14420
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -314,19 +314,19 @@ impl Client for X11Client {
.xcb_connection .xcb_connection
.send_request(&xcb::randr::GetScreenResourcesCurrent { window: x_window }); .send_request(&xcb::randr::GetScreenResourcesCurrent { window: x_window });
let screen_resources = self.xcb_connection.wait_for_reply(cookie).expect("TODO"); let screen_resources = self.xcb_connection.wait_for_reply(cookie).expect("TODO");
let crtc = screen_resources.crtcs().first().expect("TODO");
let cookie = self.xcb_connection.send_request(&xcb::randr::GetCrtcInfo {
crtc: crtc.to_owned(),
config_timestamp: xcb::x::Time::CurrentTime as u32,
});
let crtc_info = self.xcb_connection.wait_for_reply(cookie).expect("TODO");
let mode_id = crtc_info.mode().resource_id();
let mode = screen_resources let mode = screen_resources
.modes() .crtcs()
.iter() .iter()
.find(|m| m.id == mode_id) .find_map(|crtc| {
let cookie = self.xcb_connection.send_request(&xcb::randr::GetCrtcInfo {
crtc: crtc.to_owned(),
config_timestamp: xcb::x::Time::CurrentTime as u32,
});
let crtc_info = self.xcb_connection.wait_for_reply(cookie).expect("TODO");
let mode_id = crtc_info.mode().resource_id();
screen_resources.modes().iter().find(|m| m.id == mode_id)
})
.expect("Missing screen mode for crtc specified mode id"); .expect("Missing screen mode for crtc specified mode id");
let refresh_event_token = self let refresh_event_token = self